ソフト S/PDIF トランスミッタ (1)
ハードウェア S/PDIF 送信チップを使わずに、マイコン内蔵の SPI/I2S, DMA モジュールとソフトウェアのみで S/PDIF トランスミッタ (fs = 48 kHz) の機能を実現するプログラムを作りました。
現在のところ、対象のマイコンは Nucleo F401RE/F411RE で、プログラムは STM32CubeMX を利用して作成しています。
DMA に起因する速度低下は 1 % 以下で、簡易的な方法で測ったトランスミッタ・プログラム部分の CPU 負荷率としては約 7 % です。
(2014 年 9 月 4 日追記: プログラムの改良により負荷率が約 9 % から約 7 % になりました)
S/PDIF の受信側で正しく受信されるためには正確なクロックが必要なので、HSE (High Speed External) クロック源として、8 MHz の水晶振動子を実装するか、あるいは ST-LINK 側の MCO 8 MHz 出力を有効にするハードウェア設定が必要です。(基板のリビジョンが C-02 の場合は無改造で使えます)
具体的には、ST-LINK 側の MCO 8 MHz 出力を利用する場合には (基板のリビジョンが C-01 の場合)
- SB16、SB50 のソルダー・ブリッジを「ON」にする
基板のリビジョンが C-02 の場合には、すでに上の設定になっています。
また、8 MHz 水晶振動子を実装する場合には
する必要があります。
Nucleo F401RE/F411RE 上のプログラムでは、DDA (Digital Differential Analyzer) アルゴリズムで左右チャネル間で 90 ° 位相の異なる約 440 Hz の正弦波を発生し続けるので、ハードウェア回路としては、光送信モジュールとの間の配線だけです。
「morpho」コネクタの CN10 29 番ピン (Arduino コネクタでは「D4」) と光送信モジュールのデータ入力を接続します。
光送信モジュールがなくても、実験的なレベルでは、チップ LED のような「レンズ」がなくて光が放射される面が「平面」になっている赤色 LED を「D4」ピンに接続して光らせ、光ファイバーを LED に押し当てて、「試してみる」程度のことはできます。
必要なのは SPI/I2S のデータ出力だけですが、一応 I2S モジュールで LRCK、BCLK を出力するような設定にしてあるので、Arduino コネクタの「A2」ピンからは LRCK の 192 kHz、「D3」ピンからは BCLK の 6.144 MHz が出力されています。
(2014 年 9 月 4 日追記: プログラム変更により LRCK 周波数が 96 kHz から 192 kHz になりました)
最後に、ソースリストの掲載は後に回して、今回は HEX ファイルを掲載します。 (プログラム・サイズは約 9 K バイト)
(2014 年 9 月 7 日追記: F401RE/F411RE 両用のプログラムに差し替えました)
下の内容を「ST-LINK Utility」などで Nucleo F401RE/F411RE に書き込めば動作します。 (基板のリビジョンが C-01 の場合には前述の外部 8 MHz クロック対応が必要です)
:020000040800F2 :10000000E8120020A9010008B1010008B3010008AE :10001000B5010008B7010008B901000800000000A0 :10002000000000000000000000000000BB0100080C :10003000BD01000800000000BF0100083D200008CD :10004000C3010008C3010008C3010008C301000880 :10005000C3010008C3010008C3010008C301000870 :10006000C3010008C3010008C3010008C301000860 :10007000C3010008C3010008C3010008C301000850 :10008000F1010008C3010008C301000800000000DE :10009000000000000000000000000000C301000894 :1000A000C3010008C3010008C3010008C301000820 :1000B000C3010008C3010008C3010008C301000810 :1000C000C3010008C3010008C3010008C301000800 :1000D000C3010008C3010008C301000800000000BC :1000E000C3010008C3010008C301000800000000AC :1000F000000000000000000000000000C301000834 :1001000000000000C3010008C3010008C30100088B :1001100000000000000000000000000000000000DF :10012000C3010008C3010008C3010008C30100089F :10013000C3010008000000000000000000000000F3 :10014000000000000000000000000000C3010008E3 :10015000C3010008C3010008C3010008C30100086F :10016000C3010008C30100080000000000000000F7 :10017000000000000000000000000000000000007F :1001800000000000C30100080000000000000000A3 :10019000C3010008DFF80CD000F018F80048004751 :1001A00099220008E81200200648804706480047C8 :1001B000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE717 :1001C000FEE7FEE7BD20000895010008064C074D3C :1001D00006E0E06840F0010394E807009847103417 :1001E000AC42F6D3FFF7DAFF90250008B0250008EF :1001F00010B5102001F086FABDE81040014800F06B :1002000013B80000980E002010B50468636083687E :10021000402B036803D099600068C26010BD9A60EB :100220000068C16010BD00002DE9F05F0446FE4E7D :10023000FE4F0068FC4ADFF8F093DFF8F0A3DFF828 :10024000E8B3FA4D483E60374FF4007C4FF400218C :100250004FF0007809F118090AF1180AABF1300BD8 :10026000904226D9F04A543A29E0484536D108222E :1002700008E0ED4A3032904239D1624602E00A4647 :1002800000E04246134273D00268520770D50268FC :1002900022F004020260E44A206890425AD9A8423F :1002A00005D0B04203D0B84201D0484530D1082132 :1002B0004DE0DE4AA832904203D9DB4A583A13682F :1002C00005E0DA4A48329042D94AF8D95368A84240 :1002D000CDD0B042CBD0B842C9D0C6E75045CCD083 :1002E0005845CAD0D14A78329042C6D0C1E7CF4AE9 :1002F00030329042C3D0CC4A183A9042BFD0CB4A59 :1003000090329042BBD0C84A48329042B9D1B6E749 :10031000504509D0584507D0C44A7832904203D09E :10032000C14A3032904201D1614610E0BF4A3032BA :1003300090420CD0BC4A183A904208D0BB4A903246 :10034000904204D0B84A4832904200D04146B64864 :100350004C382FE0B54AA83290422DD9A84205D09A :10036000B04203D0B84201D0484502D108211FE075 :100370008BE0504509D0584507D0AC4A78329042BE :1003800003D0A94A3032904201D1614610E0A74A19 :10039000303290420CD0A44A183A904208D0A34A76 :1003A0009032904204D0A04A4832904200D0414658 :1003B0009D48503801605AE09C4A483290422BD9FF :1003C000A84205D0B04203D0B84201D0484501D17F :1003D00008211EE0504509D0584507D0934A78328D :1003E000904203D0904A3032904201D1614610E0F1 :1003F0008E4A303290420CD08B4A183A904208D044 :100400008A4A9032904204D0874A4832904200D0C3 :1004100041468748C1602AE0A84205D0B04203D0D7 :10042000B84201D0484501D108211EE0504509D00D :10043000584507D07D4A7832904203D07A4A30320C :10044000904201D1614610E0784A303290420CD09F :10045000754A183A904208D0744A9032904204D0BB :10046000714A4832904200D0414671488160E06C48 :1004700040F00100E064042084F83500002084F896 :100480003400A16C09B120468847674A2068694951 :100490004FF4803C4FF48008904232D9624A543A7B :1004A00035E0484542D10A4608E05F4A3032904282 :1004B00045D1402202E0624600E0424613427DD030 :1004C000426912067AD5426922F080024261564A98 :1004D000206890425AD9A84255D0B04253D0B84271 :1004E00051D048454FD0504509D0584507D04F49C5 :1004F0007831884203D04C493031884230D1402194 :1005000041E04A4AA832904203D9474A583A136810 :1005100005E0464A48329042454AF8D95368A84215 :10052000C1D0B042BFD0B842BDD0BAE75045C0D06C :100530005845BED03D4A78329042BAD0B5E73B4AE2 :1005400030329042B7D0384A183A9042B3D0374A46 :1005500090329042AFD0344A48329042ADD1AAE7AF :100560003249303188420BD02F491839884207D0A0 :100570002E499031884203D02B494831884201D11D :10058000614600E0414628484C3830E0274AA8320E :1005900090422ED9A84228D0B04226D0B84224D0CA :1005A000484522D050450BD0584509D01F497831D5 :1005B000884205D01C493031884200E089E001D1F1 :1005C000402112E01949303188420BD016491839C0 :1005D000884207D015499031884203D012494831EA :1005E000884201D1614600E041460F485038016021 :1005F00061E00E4A4832904233D9A8422DD0B04231 :100600002BD0B84229D0484527D0504509D058456D :1006100007D006497831884203D0034930318842F7 :100620000AD1402119E000005864024010600240E5 :100630000060024001008000F74988420AD0F74973 :10064000884207D0F4496031884203D0F3496031D1 :10065000884201D1614600E04146EF484038C16020 :1006600029E0A84224D0B04222D0B84220D0484548 :100670001ED0504509D0584507D0E7494831884237 :1006800003D0E6494831884201D1402110E0E249D7 :1006900088420AD0E149884207D0DF496031884268 :1006A00003D0DE496031884201D1614600E0414615 :1006B000D94840388160E06C40F00200E0640420DA :1006C00084F83500002084F83400A16C09B120467C :1006D0008847D24A20681832D1494FF4807C4FF4C1 :1006E00080284FF0807E904233D9CC4A3C3A36E0A5 :1006F000484543D10A4608E0C84A4832904246D1AC :10070000624602E0424600E0724613427CD0026834 :10071000920779D5026822F002020260BF4A20687F :100720001832904256D9A84251D0B0424FD0B84268 :100730004DD048454BD0504509D0584507D0B64913 :100740004831884203D0B549483188422ED16146AC :100750003DE0B14A7832904203D9B04A403A13683A :1007600005E0AD4A18329042AE4AF8D95368A84223 :10077000C0D0B042BED0B842BCD0B9E75045BFD01F :100780005845BDD0A44A48329042B9D0B4E7A24AF5 :100790009042B7D0A14A9042B4D09F4A6032904272 :1007A000B0D09E4A60329042AED1ABE79A498842BF :1007B0000AD09A49884207D097496031884203D0CD :1007C00096496031884201D1414600E07146934824 :1007D00034382DE0904A783290422BD9A84225D067 :1007E000B04223D0B84221D048451FD0504509D04F :1007F000584507D088494831884203D08749483155 :10080000884202D1614611E079E0834988420AD0EA :100810008249884207D080496031884203D07F49AD :100820006031884201D1414600E071467B4838384A :10083000016056E0784A1832904229D9A84224D063 :10084000B04222D0B84220D048451ED0504509D0F1 :10085000584507D070494831884203D06F49483124 :10086000884201D1614610E06B4988420AD06B4949 :10087000884207D068496031884203D067496031B7 :10088000884201D1414600E071466648C16028E0D7 :10089000A84224D0B04222D0B84220D048451ED031 :1008A000504509D0584507D05B494831884203D0AC :1008B0005A494831884201D1614610E05649884280 :1008C0000AD05649884207D053496031884203D044 :1008D00052496031884201D1414600E07146514899 :1008E0008160E06C40F00400E064042084F835008E :1008F000002084F83400A16C09B120468847474A9B :100900002068183211154FF4801C4FF08068904217 :1009100027D9424A3C3A2AE0484537D1102208E01C :100920003E4A483290423AD10A4602E0624600E02E :100930004246134278D00268120775D502684FF01C :100940003103520371D5354A1832904256D9A84224 :1009500005D0B04203D0B84201D048452ED1102175 :1009600049E02D4A7832904203D92C4A403A136824 :1009700005E0294A183290422A4AF8D95368A84219 :10098000CCD0B042CAD0B842C8D0C5E75045CBD0D1 :100990005845C9D0204A48329042C5D0C0E71E4AC7 :1009A0009042C3D01D4A9042C0D01B4A6032904250 :1009B000BCD01A4A60329042BAD1B7E750451AD03B :1009C000584518D0144A4832904214D0134A48323D :1009D000904210D0104988420AD01049884207D06E :1009E0000D496031884203D00C496031884201D101 :1009F000614600E041460948343836E0064A78321C :100A0000904234D9A84205D0B04203D0B84201D0B8 :100A100048450BD1102126E040600240406402406E :100A200004008000006002408BE09AE050451AD03C :100A3000584518D0F84A904215D0F84A904212D042 :100A4000F549483988420BD0F4494839884207D0E3 :100A5000F1491831884203D0F0491831884201D158 :100A6000614600E04146ED488038016058E0EA4ABE :100A7000303A90422AD9A84205D0B04203D0B842B9 :100A800001D0484501D110211CE050451AD05845ED :100A900018D0E14A904215D0E04A904212D0DE4987 :100AA000483988420BD0DD494839884207D0DA49B5 :100AB0001831884203D0D9491831884201D16146A2 :100AC00000E04146D4488838C16029E0A84205D0FA :100AD000B04203D0B84201D0484501D110211CE0FA :100AE00050451AD0584518D0CB4A904215D0CB4A21 :100AF000904212D0C849483988420BD0C74948397A :100B0000884207D0C4491831884203D0C3491831FC :100B1000884201D1614600E04146BF488838816083 :100B200020680168090302D484F8353005E00068C4 :100B3000000302D5412084F83500216C09B120461C :100B40008847DFF8D8822068A8F130084FF40061A8 :100B50004FF4001C4FF0006E404575D9AF4A843AFF :100B6000E5E00268D20503D4026822F008020260C0 :100B7000AA4A2068303A904229D9A84205D0B0420A :100B800003D0B84201D0484501D110211CE05045A6 :100B90001AD0584518D0A04A904215D09F4A90428A :100BA00012D09D49483988420BD09C494839884227 :100BB00007D099491831884203D0984918318842A2 :100BC00001D1614600E0414694487C382CE0924ACD :100BD000303290422AD9A84205D0B04203D0B84260 :100BE00001D0484501D110211CE050451AD058458C :100BF00018D0894A904215D0884A904212D086492E :100C0000483988420BD085494839884207D0824903 :100C10001831884203D081491831884201D1614698 :100C200000E041467D48803801607DE77A4A303AED :100C300090422BD9A84205D0B04203D0B84201D08F :100C4000484502D110211DE06BE050451AD05845AF :100C500018D0714A904215D0704A904212D06E4915 :100C6000483988420BD06D494839884207D06A49D3 :100C70001831884203D069491831884201D1614650 :100C800000E0414664488838C1604DE7A84205D07D :100C9000B04203D0B84201D0484501D110211CE038 :100CA00050451AD0584518D05B4A904215D05B4A3F :100CB000904212D05849483988420BD05749483998 :100CC000884207D054491831884203D0534918311B :100CD000884201D1614600E041464F488838816032 :100CE00022E7484532D1202207E04C4A904235D1D4 :100CF0000A4602E0624600E0724613427ED0026875 :100D0000D2067BD50268520379D5404557D9A8420F :100D100005D0B04203D0B84201D048452FD12021A0 :100D20004AE03D4A3032904203D93C4A883A13683F :100D300005E0394A303A9042394AF8D95368A84216 :100D4000D1D0B042CFD0B842CDD0CAE75045CFD0F5 :100D50005845CDD0304A9042CAD0C6E7304A4032DA :100D60009042C7D02D4A483A9042C3D02A4A1832FE :100D70009042BFD0294A18329042BDD1BAE75045BF :100D80001AD0584518D0244A904215D0234A904290 :100D900012D02349403188420BD02049483988423B :100DA00007D01D491831884203D01C4918318842A8 :100DB00001D1614600E0714618487C3834E0164A9B :100DC0003032904232D9A84205D0B04203D0B84266 :100DD00001D0484501D1202125E0504523D0584578 :100DE00021D00D4A90421ED00C4A90421BD00C4993 :100DF000403188420ED00949483901E0F5E081E0F0 :100E0000884207D004491831884203D00349183179 :100E1000884207D1614606E088600240886402404B :100E20000060024071469E4801605BE09D4A90422E :100E30002CD9A84205D0B04203D0B84201D04845D1 :100E400001D120211EE050451CD058451AD0954AAA :100E50003032904216D0924A8032904212D091495C :100E6000183988420BD08E493831884207D08D49D5 :100E70004831884203D08A499831884201D161467D :100E800000E0714687485838C1602BE0A84205D081 :100E9000B04203D0B84201D0484501D120211EE024 :100EA00050451CD058451AD07E4A3032904216D058 :100EB0007B4A8032904212D07A49183988420BD04E :100EC00077493831884207D076494831884203D083 :100ED00073499831884201D1614600E071467148FA :100EE0005838816020680168090301D4616C03E00F :100EF0000068000379D5E16B002976D02046BDE873 :100F0000F05F08470268D20503D4026822F010029D :100F10000260206840452BD9A84205D0B04203D0DA :100F2000B84201D0484501D120211EE050451CD0D7 :100F300058451AD05B4A3032904216D0584A803217 :100F4000904212D05749183988420BD05449383151 :100F5000884207D053494831884203D050499831DC :100F6000884201D1614600E071464D48001D2DE0E8 :100F70004C4A603290422BD9A84205D0B04203D0EF :100F8000B84201D0484501D120211EE050451CD077 :100F900058451AD0434A3032904216D0404A8032E7 :100FA000904212D03F49183988420BD03C49383121 :100FB000884207D03B494831884203D038499831AC :100FC000884201D1614600E07146354801605CE02D :100FD000344A90422DD9A84205D0B04203D0B8423D :100FE00001D0484502D120211FE057E050451CD0D8 :100FF00058451AD02B4A3032904216D0284A8032B7 :10100000904212D02749183988420BD024493831F0 :10101000884207D023494831884203D0204998317B :10102000884201D1614600E071461E485838C160CF :101030002BE0A84205D0B04203D0B84201D04845C9 :1010400001D120211EE050451CD058451AD0154A28 :101050003032904216D0124A8032904212D011495A :10106000183988420BD00E493831884207D00D49D3 :101070004831884203D00A499831884201D16146FB :1010800000E07146074858388160E06CE064112048 :1010900084F83500002084F834002CE7BDE8F09F88 :1010A000086402405860024070B5D0B10221446A21 :1010B00080F835100268136816490B40D0E9011515 :1010C0002943D0E9035635432943456929438569B6 :1010D0002943C5692943056A29431943042C02D0D1 :1010E00005E0012070BDD0E90B34234319431160A2 :1010F00003685969426A21F007011143042A01D1AA :10110000826A114359610021C164012180F83510C0 :10111000002070BD3F8014F070B5044690F8340094 :1011200001282DD0012084F83400022084F83500F5 :101130002068056825F0010505602046FFF764F882 :101140002068016841F0100101602068016841F0E9 :10115000080101602068016841F004010160206815 :10116000416941F0800141612068016841F002015C :1011700001602068016841F001010160002070BD3C :10118000022070BD2DE9F04FDFF888A100220AF19E :10119000040B4FF003084FF00F090BF1040E4FF052 :1011A000010C0B680CFA02FC03EA0C03634572D1D4 :1011B0004C68022C01D0122C0CD1D40800EB84070F :1011C0003D6A5407E40E09FA04F6B5430E69A640D9 :1011D0002E433E62066855004F6808FA05F407F092 :1011E0000307A643AF40374307604E68012E05D082 :1011F000022E03D0112E01D0122E10D18668CF6896 :10120000A64307FA05F73743876046684F6826EA22 :101210000C06C7F3001707FA02F737434760C668A2 :10122000A6438C6804FA05F43443C4604C68E400B7 :101230006AD5394C256845F480452560374C22F045 :1012400003052E1935689407270F09FA07F4A543FB :10125000334CA04201D100242EE0324CA04201D1F7 :10126000012429E0304CA04201D1022424E02F4C7B :10127000A04201D103241FE02D4CA04201D104243F :101280001AE02C4CA04201D1052415E02A4CA042C2 :1012900002D1062410E037E0284CA04201D10724F7 :1012A0000AE0274CA04201D1082405E0254CA042C9 :1012B00001D1092400E00A2404FA07F42C43346025 :1012C000DAF8004055464E689C43F60300D51C43AF :1012D0002C60DBF800405D464E689C43B60300D5A9 :1012E0001C432C60DEF8004075464E689C43F602B5 :1012F00000D51C432C60074D0C352C684E689C4370 :10130000B60200D51C432C60521C102AFFF447AFD4 :10131000BDE8F08F003C01404438024008380140ED :10132000000002400004024000080240000C02409D :10133000001002400014024000180240001C02404D :1013400000200240002402400AB10183704741831B :101350007047000001480068704700001800002036 :10136000704700002DE9F0474FF0000704004FF0F0 :1013700002064FF001093D4603D094F83D0018B134 :1013800005E00120BDE8F087204600F0CBF80222FE :1013900084F83D202068C16940F6BF739943C1615C :1013A000206802622068C06961694FF001084FF44B :1013B000007A02294ED0E16801B19146E5695349AE :1013C000012D07D0514D083D2D686D010BD484F8D7 :1013D0003D80D6E70D682D0203D40D6845F4000565 :1013E0000D604B491EE00D682D0203D50D6825F4F4 :1013F00000050D604549091F0D6809686D0201F07F :101400003F0101D5434D00E0434D404EB5FBF1F1A6 :101410007C363568C5F388154D433168C1F30271D8 :10142000B5FBF1F12569554501D1090A03E04FEA01 :101430004915B1FBF5F101EB810165694900B1FB8B :10144000F5F1491D0A25B1FBF5F505F001016E1A0C :1014500076080F02B11EFE2901D30226002721695A :101460003E43314326683162D4E901163143A7690E :10147000E6683E433143014341F400602168C8619E :10148000206A012839D1DFF894C0266824484FF03B :101490004021664501D1074600E00F46FE6926EA75 :1014A000030601D1034600E00B46DE612368634575 :1014B00001D1034600E00B461A622268624501D161 :1014C000034600E00B46DB6966684FF480775645BB :1014D00019D0C6B1B6F5407F01D0BE4200D100257B :1014E000D4E902673E43A7692F433E431E4346F4B7 :1014F0000063624500D00846C361002084F83E00C6 :1015000084F83D803EE73D46EAE7000008380240A7 :101510000080BB0000127A000024F4000038004074 :1015200000340040F0B5064601681C4885B0814291 :1015300032D11B48016841F4004101601020009045 :1015400002270025CDE901750624CDE9035469463B :101550001448FFF717FE2820CDE900070295012067 :10156000CDE9030469461048FFF70CFE104C0F4804 :10157000C4E900054020C4E90205000120614000E3 :1015800060618000A0614011C4E9070520466562E2 :10159000FFF78AFD7463A66305B0F0BD003C004010 :1015A00040380240000002400004024088600240CF :1015B000980E002037B50446019929B122B194F85C :1015C0003D00012802D043E001203EBD6162206859 :1015D000C369C06903F0070300F00700032B33D091 :1015E000052831D02285628594F83C0001282FD04F :1015F000012084F83C00122084F83D00002584F886 :101600003E50626B13481064626B1348D063626B88 :1016100012489064238D2268606B0C32FFF77CFDCA :101620002068C169490503D4C16941F48061C16181 :1016300020684168890703D4416841F00201416094 :1016400084F83C5000203EBD500020856085CBE7EB :1016500002203EBD11200008AD1F0008891F0008B0 :1016600000680449884204D103484FF44071018066 :1016700041807047003C00400000002000680549A0 :10168000884205D104484FF4407101800021418017 :1016900070470000003C0040000000200248016844 :1016A000491C016070470000180000200B4810B56D :1016B000016841F400710160016841F480610160DA :1016C000016841F480710160032000F053F80020AC :1016D00000F006F800F015F8002010BD003C0240B4 :1016E00010B5044600F0D4F94FF47A71B0FBF1F074 :1016F00000F0E3FB00222146501E00F01BF8002002 :1017000010BD704700F01F020121914040094FF0C9 :10171000E02202EB8000C0F88012704700F01F0248 :101720000121914040094FF0E02202EB8000C0F817 :1017300000117047F0B40E4B1B68C3F30223C3F1D2 :101740000704042C00D904241D1D072D01D20023F9 :1017500000E0DB1E012606FA04F56D1E0D409D40DB :101760009E40761E164045EA0601F0BC00F056BCCD :101770000CED00E0064A00F0070110684FF6FF0389 :10178000184040EA012003490843106070470000F8 :101790000CED00E00000FA052DE9F0470446006872 :1017A0004FF00008C0074FF0010931D0474FC7F88C :1017B0006880FFF7CFFD0546454E04E0FFF7CAFD00 :1017C000401B642860D830680001F7D447F6C07128 :1017D00091FAA1F16068B1FA81F188404FF0E042DE :1017E00092FAA2F2A168B2FA82F291400843384913 :1017F00084310860C7F86890FFF7ACFD054604E047 :10180000FFF7A8FD401B64283ED830680001F7D5DB :10181000206880074FD52E484030016841F0805144 :1018200001602C4E306840F480703060FFF792FD0C :10183000054604E0FFF78EFD401B642824D830687D :10184000C005F7D5224E70363068E16800F440706C :1018500001F44071884208D030681F4920F440707C :10186000C1F80090C1F800803060E068B0F5807F7A :1018700010D1FFF76FFD054641F2883707E0FFF70B :1018800069FD401BB84202D90320BDE8F0873068EB :101890008007F4D5E0680E49C0F301220831032A1D :1018A0000BD0086820F4F81008603068E168C1F3D4 :1018B0000B01084330600020E7E70A68074B22F479 :1018C000F812184002430A60EFE7000000004742A8 :1018D0000038024000700040400E4742FFFCFF0FFE :1018E0002DE9F047DFF8A0A104460F46DAF8000022 :1018F000664E00F00F016548083607F0FF0941F217 :101900008838B94252D28AF80090DAF8001001F013 :101910000F01B94270D12168890705D53168A268E5 :1019200021F0F001114331602168C90728D06168B6 :10193000012914D00068022914D0800700285BDA3E :10194000306820F0030008433060FFF703FD0546D0 :10195000606801280ED00228474617D021E00068B1 :101960008003EBE78001E9E7FFF7F4FC401BB84296 :1019700001D95FE047463068C0F381000128F3D108 :1019800069E0FFF7E7FC401BB84253D83068C0F36A :1019900081000228F5D15EE0FFF7DCFC401BB84275 :1019A00048D8306810F00C0FF6D154E02168890750 :1019B00005D53168A26821F0F0011143316021683A :1019C000C9073ED06168012913D00068022914D0EC :1019D000800700283DDA306820F0030008433060BB :1019E000FFF7B8FC0546606801280DD0022816D024 :1019F00023E000688003ECE72BE08001E9E7FFF7D4 :101A0000A9FC411B414515D83068C0F3810001286D :101A1000F5D116E0FFF79EFC411B41450AD830681E :101A2000C0F381000228F5D10BE0FFF793FC411BC6 :101A3000414502D90320BDE8F087306810F00C0F53 :101A4000F3D18AF80090DAF8000000F00F00B842F5 :101A500001D00120EFE72068400705D53068E16834 :101A600020F4E050084330602068000706D5306855 :101A7000216920F4604040EAC10030600020FFF797 :101A80002FFE0020D7E70000003C02400038024053 :101A900000B500F043F808490968F02292FAA2F272 :101AA00001F0F001B2FA82F2D140044A515CC84020 :101AB0000349086000BD0000083802408025000886 :101AC0000400002000B5FFF7E3FF074909684FF461 :101AD000E05292FAA2F201F4E051B2FA82F2D1405D :101AE000024A515CC84000BD083802408025000809 :101AF00000B5FFF7CDFF074909684FF4604292FA3D :101B0000A2F201F46041B2FA82F2D140024A515C81 :101B1000C84000BD083802408025000830B51D4887 :101B2000006810F00C011C481AD04410042916D08B :101B3000082915D1174A121F1168136801F03F01D7 :101B400003F480054FF4800393FAA3F3B3FA83F30D :101B5000DD4047F6C07304D0B4FBF1F003E020464B :101B600030BDB0FBF1F01168194093FAA3F3B3FA5A :101B700083F3D940484311684FF4403292FAA2F2FD :101B800001F44031B2FA82F2D140491C4900B0FB65 :101B9000F1F030BD083802400024F4002DE9F05F78 :101BA00004460068DFF8FCB2BF4DC0074FF00006E6 :101BB00049D0DBF800105846C1F38101012908D053 :101BC0000068C0F3810002280AD1281D0068400285 :101BD00006D52868800336D56068012874D132E0C4 :101BE000DFF8C49209F1020989F80060FFF7B2FB3F :101BF000074641F2883804E0FFF7ACFBC11B4145C2 :101C00007BD828688003F7D4606889F80000606892 :101C1000012803D0FFF79EFB074611E0FFF79AFB70 :101C2000074604E0FFF796FBC11B4145E8D828684A :101C30008003F7D507E0FFF78DFBC11B4145DFD8D7 :101C400028688003F7D42068DFF86092800744D5C5 :101C5000DBF80010584611F00C0F4FF0F80809D0CF :101C60000068C0F3810002280BD18E48001F006875 :101C7000400206D42868800714D5E0680128ADD159 :101C800010E0E068D0B10120C9F80000FFF762FB66 :101C9000074604E0FFF75EFBC01B6428B0D8286845 :101CA0008007F7D5286898FAA8F22169B2FA82F27B :101CB00020F0F8009140084328600EE0C9F8006069 :101CC000FFF748FB074605E0E9E0FFF743FBC01BD1 :101CD000642895D828688007F7D42068000725D5A0 :101CE000DFF8C0817248616908F16C0881B1012197 :101CF0000160FFF72FFB074605E07BE0FFF72AFBBB :101D0000C01B642876D8D8F800008007F6D50DE00F :101D10000660FFF71FFB074604E0FFF71BFBC01B35 :101D2000642867D8D8F800008007F6D420684007F8 :101D300050D55C483830016841F080510160DFF8CF :101D40007481D8F8001041F48071C8F80010FFF7D2 :101D500001FB074604E0FFF7FDFAC01B642849D8E1 :101D6000D8F80000C005F6D5DFF838A10AF1680AF6 :101D70008AF80060FFF7EEFA074641F2883804E07F :101D8000FFF7E8FAC11B414534D8DAF800008007B4 :101D9000F6D4A0688AF80000A068012803D0FFF7F5 :101DA000D9FA074612E0FFF7D5FA074604E0FFF735 :101DB000D1FAC11B41456AD8DAF800008007F6D590 :101DC00008E0FFF7C7FAC11B414560D8DAF8000008 :101DD0008007F6D4A069E8B3DBF80010C1F38101F5 :101DE00002295CD0022806D0C9F86060FFF7B2FA79 :101DF00004464FE04BE04F46C9F86060FFF7AAFA8F :101E0000064604E0FFF7A6FA801B64283FD828683E :101E10008001F7D4D4E90710084347F6C07292FA5C :101E2000A2F2616AB2FA82F29140A26A4FF0FF33E5 :101E300003EB52024FF4403393FAA3F3B3FA83F364 :101E40009A4011434FF0706292FAA2F20843B2FA3C :101E500082F200E021E0E16A9140084340F0005145 :101E60001048001F016001203866FFF773FA04462E :101E700004E0FFF76FFA001B642808D82868800187 :101E8000F7D50AE0FFF766FA001B642802D90320A1 :101E9000BDE8F09F28688001F4D40020F8E7012015 :101EA000F6E70000083802400038024000004742D0 :101EB000800E474200700040704710B5401EB0F1E0 :101EC000807F01D3012010BD4FF0E02460610F211D :101ED000601700F0A3F80020A06107202061002017 :101EE00010BD10B5FFF7E8FF10BD10B5040003D01A :101EF00094F8390010B104E0012010BD204600F034 :101F000023F8022084F839002068C16821F40051C8 :101F1000C160204600F0F6F82068016921F4904184 :101F200001612068416921F02A0141612068C1688E :101F300041F40051C160002084F83A00012084F887 :101F40003900002010BD000000B500680B4985B0C5 :101F5000884211D10A48016841F4003101600C2027 :101F6000009002200190002002900390072004902E :101F700069460448FFF706F905B000BD004400407B :101F8000403802400000024010B5806B002120F86C :101F90002A1F01810121C174017D41F020010175D9 :101FA000A0F12A00FFF7DCF910BD000070B5014672 :101FB000806B09680968C90523D40021418501683F :101FC0004A6822F002024A60016A01290FD10E4CD0 :101FD00002680E494FF04025A24201D10B4600E0B5 :101FE0002B465A6822F0010200D029464A6090F838 :101FF0003D204FF00101322A01D1428E0AB980F80A :102000003D10FFF72DFB70BD00380040003400404C :1020100010B5806BFFF732FB10BD00000907090EF9 :10202000002803DA00F00F00024A00E0024A81545F :102030007047000014ED00E000E400E010B5FFF789 :102040002DFBBDE81040FFF74CBF000070B51948EC :1020500096B0016841F0805101601748016821F491 :10206000404141F40041016001240226069600949B :10207000A00505250194CDE90705D220099004208B :102080000A9007200B906846FFF788FD0020210387 :10209000CDE90E01CDE90C56109002210CA8FFF7F6 :1020A0001FFCC0201395CDE9114011A8FFF774FB68 :1020B00016B070BD40380240007000400D48016805 :1020C00041F0010101600B4A0021083211600268F1 :1020D000094B1A400260031D084A1A60026822F484 :1020E0008022026003480C300160054958060860F0 :1020F0007047000000380240FFFFF6FE1030002459 :1021000008ED00E02DE9F041044600680169E2684D :1021100021F440510A4302612068C16849F20C620F :1021200091432369A268E5691A4363692B431A4303 :102130000A43C26020684169A26921F440710A43E0 :102140004261E06964263225B0F5004F4849494AAA :1021500020681DD0904201D0884269D1FFF7C8FCA9 :1021600000EBC00101EB00106168B0468900B0FBD4 :10217000F1F1B1FBF8F6FFF7BBFC00EBC00101EB9E :10218000001061688900B0FBF1F7FFF7B1FC68E06F :10219000904201D0884219D1FFF7AAFC00EBC001A0 :1021A00001EB00106168B0464900B0FBF1F1B1FBF2 :1021B000F8F6FFF79DFC00EBC00101EB0010616831 :1021C0004900B0FBF1F7FFF793FC18E0FFF77AFC4A :1021D00000EBC00101EB00106168B0464900B0FBA4 :1021E000F1F1B1FBF8F6FFF76DFC00EBC00101EB7C :1021F000001061684900B0FBF1F7FFF763FC00EBEA :10220000C00101EB001061684900B0FBF1F1B1FBC6 :10221000F8F06FF01801484307EB800005EB001160 :10222000B1FBF8F0216866F31F108860BDE8F0810B :10223000FFF748FC00EBC00101EB00106168B046FD :102240008900B0FBF1F1B1FBF8F6FFF73BFC00EBC6 :10225000C00101EB001061688900B0FBF1F7FFF7E6 :1022600031FC00EBC00101EB001061688900CCE794 :10227000001401400010014002E008C8121F08C10C :10228000002AFAD170477047002001E001C1121FF7 :10229000002AFBD17047000086B000244FF4FC45B3 :1022A000FFF704FAFFF7D2FE0720FFF763FA0022D8 :1022B0001146501EFFF73EFA444F386840F00400C4 :1022C0003860386840F080003860386840F00100BD :1022D0003860386840F0020038604FF400500090D9 :1022E0003B480026CDE9010669463A48FEF74AFF19 :1022F0004FF020080120CDF80080CDE90106DFF87D :10230000D890694648460396FEF73CFF386840F48B :10231000001038600720FFF72DFA00221146102028 :10232000FFF708FA1020FFF7F9F92D482B49016053 :1023300049154160C0E902862A49C0E90461866105 :10234000C6610662FFF70EF8254827494030016054 :102350004FF4E131C0E901160C21C660C0E9046107 :102360008661C661FFF7C1FD00F046F800221F49F3 :10237000012000F07DF81E4F3E8019494FF4C062E5 :102380007C311748FFF716F9DFF868803888D8F8ED :102390000860A8B1002220214846FEF7D5FF02219F :1023A00005A800F0B3F8B0B200FB04F1A5EB21459D :1023B000684304EB2044ADF81450ADF81640E5E74F :1023C000012220214846FEF7BFFFDFE730380240F8 :1023D000000012100008024000000240003C0040D3 :1023E0001C00002000EE02000044004040000020DD :1023F00000000020742500080A4800680A4B00F01D :102400003F02002098660748001F01680901FCD4BC :1024100004488030016821F03F0111430160012030 :1024200098667047043802400000474230B50021EA :10243000002003460A460446450083F0010002F0EE :1024400001030543434043EA45055210641CA8B20A :10245000082CF1DBC20702D04FF6FF725040034A4E :1024600022F81100491CFF29E2DD30BD980C002044 :102470002DE9F04F0023864693469946214C4CF6B1 :10248000CC4638E0DFF880A000252A46AAF10408EF :1024900000203AF815C0C2B1002708EB47073F5C9F :1024A0004CEA070C24F813C05B1C24F813605B1C77 :1024B00024F813605B1CBBF1000F0FD002EB001778 :1024C000BF0604D54BF2343703E00127E5E74CF6AD :1024D000CA4724F813705B1C18B104E024F8136099 :1024E000F9E7CD0F4900401C0228D2DB521CC02A5C :1024F000CEDB09F10109F145C4DBBDE8F04FFFF780 :1025000095BF00009800002078250008F0B5002253 :10251000154F25E03B8813B330F81240134DE3B25A :10252000C4F3072435F8133035F814504FF6FF7410 :1025300004EBD5345C4023B2C3F3CE3C4BF23333CF :102540008CEA030C7B880A4E06EB43061B1DA6F89B :1025500002C0B480F5807B803B881B1F3B80521CEF :102560008A42D7DB3888F0BD00000020980C00209C :1025700098000020E2E4E8E400CC00CABF0E0C1092 :102580000000000001020304010203040607080919 :10259000B0250008000000201C0000007822000880 :1025A000CC2500081C000020CC1200008822000866 :1025B000000000000024F400000000000000000003 :0C25C000010203040607080900000000E7 :040000050800019559 :00000001FF