package list_modules; # $Id: list_modules.pm 268192 2010-05-04 09:37:32Z pterjan $ use MDK::Common; our @ISA = qw(Exporter); our @EXPORT = qw(load_dependencies dependencies_closure category2modules module2category sub_categories); # the categories have 2 purposes # - choosing modules to include on stage1's (cf update_kernel and mdk-stage1/pci-resource/update-pci-ids.pl) # - performing a load_category or probe_category (detect_devices.pm and many files in perl-install) our %l = ( ################################################################################ network => { atm => [ qw(ambassador eni firestream fore_200e he horizon idt77252 iphase lanai nicstar solos-pci zatm) ], main => [ if_(arch() =~ /ppc/, qw(bmac fec_mpc52xx ibm_emac mace oaknet sungem)), if_(arch() =~ /^sparc/, qw(sunbmac sunhme sunqe)), if_(arch() !~ /alpha|sparc/, qw(3c501 3c503 3c505 3c507 3c509 3c515 3c990 3c990fx), qw(82596 ac3200 acenic aironet4500_card amd8111e at1700 atl2 atp), qw(bcm4400 cassini cs89x0 cx82310_eth de600 de620), qw(depca dmfe e2100 eepro eexpress enic eth16i), qw(ewrk3 hp hp-plus hp100 i40e), qw(iph5526), #- fibre channel qw(jme lance ne ni5010 ni52 ni65 nvnet), qw(prism2_plx qlge r6040 rcpci rhineget), qw(sb1000 sc92031 sh_eth smc-ultra smsc911x smc9194 smsc9420 smsc95xx), qw(tc35815 tlan uli526x vmxnet3), ), if_(arch() !~ /alpha/, qw(b44 com20020-pci de2104x), qw(defxx), # most unused qw(dgrs e100 eepro100 epic100 fealnx hamachi natsemi), qw(ne2k-pci pcnet32 plip sis900 skfp starfire tulip), qw(typhoon via-rhine winbond-840 forcedeth), qw(sungem sunhme), # drivers for ultrasparc, but compiled in ix86 kernels... ), qw(3c59x 8139too 8139cp cpmac niu sundance), #rtl8139 # add all phys qw(amd at803x bcm87xx broadcom cicada davicom et1011c icplus lxt marvell mdio-bitbang mdio-gpiomicrel), qw(national qsemi r8152 r815x realtek smsc ste10Xp vitesse), ], firewire => [ qw(eth1394 pcilynx) ], gigabit => [ qw(alx atl1 atl1c atl1e at91_ether ax88179_178a be2net bna bnx2 bnx2x cxgb cxgb3 cxgb4 dl2k e1000 e1000e et131x igb ipg ixgb ixgbe), qw(macb mvmdio myri_sbus myri10ge netxen_nic ns83820 pch_gbe qla3xxx r8169 s2io sfc sxg_nic), qw(sis190 sk98lin skge sky2 slicoss spidernet stmmac tehuti tg3 via-velocity vxge yellowfin), qw(bcm5820 bcm5700), #- encrypted ], raw => [ qw(ppp_generic ppp_async ppp_deflate bsd_comp), ], pcmcia => [ qw(3c574_cs 3c589_cs axnet_cs fmvj18x_cs), qw(ibmtr_cs libertas_cs nmclan_cs pcnet_cs smc91c92_cs), qw(xirc2ps_cs xircom_cb xircom_tulip_cb), ], #- generic NIC detection for USB seems broken (class, subclass, #- protocol reported are not accurate) so we match network adapters against #- known drivers :-( usb => [ qw(asix catc cdc_ether cdc_mbim dm9601 kaweth mcs7830 pegasus rtl8150 smsc75xx smsc95xx usbnet), ], wireless => [ qw(acx-pci acx-usb adm8211 agnx airo airo_cs aironet4500_cs), qw(aironet_cs ar5523 ar9170usb arlan arusb_lnx at76c50x_usb ath10k_pci ath5k ath6kl ath6kl_usb ath9k ath9k_htc), qw(ath_pci atmel_cs atmel_pci b43 b43legacy bcm43xx bcm_wimax bcma brcm80211 brcmsmac brcmfmac carl9170 com20020_cs), qw(dyc_ar5 hostap_cs hostap_pci hostap_plx i2400m_usb ipw2100), qw(ipw2200 ipw3945 iwl3945 iwl4965 iwlagn iwldvm iwlmvm iwlwifi madwifi_pci), qw(mwifiex_usb mwl8k ndiswrapper netwave_cs orinoco orinoco_cs), qw(orinoco_nortel orinoco_pci orinoco_plx orinoco_tmd orinoco_usb p54pci), qw(p54usb prism2_cs prism2_pci prism2_usb prism54 qmi_wwan r8180), qw(r8187se rtl8188ee r8192_pci r8192s_usb r8192u_usb r8712u rtl8723ae ray_cs rndis_wlan rt2400 rt2400pci rt2500), qw(rt2500pci rt2500usb rt2570 rt2800pci rt2800usb rt2860 rt2860sta rt2870), qw(rt3070sta rt61 rt61pci rt73 rt73usb rtl8180 rtl8187 rtl8187se r8188eu rtl_pci rtl_usb rtusb), qw(rtl8192se rtl8192cu rtl8192de spectrum_cs sr9700 ssb usb8xxx usbvnet_rfmd vt6655_stage vt6656_stage vt_ar5k w35und), qw(wavelan_cs wl wl3501_cs wvlan_cs zd1201 zd1211rw), if_(arch() =~ /ppc/, qw(airport)), ], isdn => [ qw(avmfritz c4 cdc-acm b1pci divas hfc4s8s_l1 hfc_usb hfc4s8s_l1 hisax hisax_st5481 hisax_fcpcipnp hysdn sedlfax t1pci tpam w6692pci), qw(avmfritz hfcpci hfcmulti hfcsusb mISDNinfineon netjet), # mISDN qw(fcpci fcdsl fcdsl fcdsl2 fcdslsl fcdslslusb fcdslusb fcdslusba fcusb fcusb2 fxusb fxusb_CZ) ], cellular => [ qw(hso nozomi option sierra), ], modem => [ qw(ltmodem mwave sm56 ft1000), ], slmodem => [ qw(slamr slusb snd-ali5451 snd-atiixp-modem snd-intel8x0m snd-via82xx-modem), ], wan => [ qw(c101 cosa cyclomx cycx_drv dlci dscc4 farsync hdlc hostess_sv11 lapbether lmc n2 pc300 pci200syn sbni sdla sdladrv sealevel syncppp wanxl z85230) ], usb_dsl => [ qw(cxacru speedtch ueagle-atm usbatm xusbatm) ], virtual => [ qw(virtio_net xen-netfront) ], }, ################################################################################ disk => { # ide drivers compiled as modules: ide => [ qw(aec62xx ali14xx alim15x3 amd74xx atiixp cmd64x cy82c693 cs5520 cs5530 cs5535 cs5536), qw(delkin_cb dtc2278 hpt34x hpt366 ns87415 ht6560b it8172 it8213 it821x jmicron), qw(opti621 pdc202xx_new pdc202xx_old piix qd65xx rz1000 sc1200 serverworks siimage sis5513 slc90e66), qw(tc86c001 triflex trm290 tx4938ide tx4939ide umc8672 via82cxxx ide-pci-generic ide-generic), ], scsi => [ if_(arch() =~ /ppc/, qw(mesh mac53c94)), if_(arch() =~ /^sparc/, qw(qlogicpti)), if_(arch() !~ /alpha|sparc/, '53c7,8xx', qw(a100u2w advansys aha152x aha1542 aha1740 AM53C974 atp870u), qw(be2iscsi bfa BusLogic dc395x dc395x_trm dmx3191d dtc eata eata_dma), qw(eata_pio fdomain g_NCR5380 in2000 initio mpt2sas mpt3sas mvsas NCR53c406a), qw(nsp32 pas16 pci2220i pm80xx pm8001 psi240i qla1280 qla2x00 qla2xxx), qw(qlogicfas qlogicfc rsxx seagate shasta sim710 stex sym53c416), qw(t128 tmscsim u14-34f ultrastor vmw_pvscsi wd7000), ), qw(aic7xxx aic7xxx_old aic79xx pci2000 qlogicfas408 sym53c8xx lpfc lpfcdd), # ncr53c8xx ], sata => [ # note that ata_piix manage RAID devices on ICH6R qw(ahci aic94xx ata_adma ata_piix pata_pdc2027x pdc_adma), qw(sata_fsl sata_inic162x sata_mv sata_nv sata_promise), qw(sata_qstor sata_rcar sata_sil sata_sil24 sata_sis sata_svw sata_sx4 sata_uli sata_via sata_vsc sx8), # new drivers: old ide drivers ported over libata: qw(ata_generic mv-ahci pata_ali pata_amd pata_artop pata_atiixp pata_atp867x), qw(pata_bf54x pata_cmd640 pata_cmd64x pata_cs5520 pata_cs5530), qw(pata_cs5535 pata_cs5536 pata_cypress pata_efar pata_hpt366), qw(pata_hpt37x pata_hpt3x2n pata_hpt3x3 pata_isapnp pata_it8172), qw(pata_it8213 pata_it821x pata_jmicron pata_legacy pata_marvell), qw(pata_mpiix pata_netcell pata_ninja32 pata_ns87410), qw(pata_ns87415 pata_oldpiix pata_opti pata_optidma), qw(pata_pdc2027x pata_pdc202xx_old pata_piccolo pata_platform pata_qdi), qw(pata_radisys pata_rdc pata_rz1000 pata_sc1200 pata_sch), qw(pata_serverworks pata_sil680 pata_sis pata_sl82c105), qw(pata_triflex pata_via pata_winbond), if_(arch() =~ /ppc/, 'sata_fsl'), qw(pata_acpi), ], hardware_raid => [ if_(arch() =~ /^sparc/, qw(pluto)), if_(arch() !~ /alpha|sparc/, # 3w-xxxx drives ATA-RAID, 3w-9xxx and arcmsr drive SATA-RAID qw(3w-9xxx 3w-sas 3w-xxxx a320raid aacraid arcmsr cciss cpqarray), qw(cpqfc csiostor DAC960 dpt_i2o esas2r gdth hpsa hptiop i2o_block imm ipr ips isci), qw(it8212 it821x iteraid megaide megaraid megaraid_mbox), qw(megaraid_sas mptfc mptsas mptscsih mptspi pdc-ultra pmcraid ppa), qw(qla2100 qla2200 qla2300 qla2322 qla4xxx qla6312 qla6322), ), ], virtual => [ qw(hv_storvsc virtio_blk virtio_scsi xenblk xen-blkfront) ], pcmcia => [ qw(aha152x_cs fdomain_cs nsp_cs qlogic_cs ide-cs pata_pcmcia sym53c500_cs) ], raw => [ qw(ide-gd_mod sd_mod) ], usb => [ qw(keucr uas ums-alauda ums-cypress ums-datafab ums-eneub6250 ums-freecom ums-isd200), qw(ums-jumpshot ums-karma ums-onetouch ums-realtek ums-sddr09 ums-sddr55 ums-usbat usb-storage) ], firewire => [ qw(sbp2) ], cdrom => [ qw(ide-cd_mod sr_mod) ], card_reader => [ qw(sdhci sdhci-pci tifm_sd tifm_7xx1) ], }, ################################################################################ bus => { usb => [ qw(bcma-hcd c67x00 dwc3 dwc3-pci ehci-hcd ehci-pci ehci-platform ehci-tegra fhci fusbh200-hcd hwa-hc imx21-hcd isp116x-hcd isp1362-hcd isp1760 ohci-hcd ohci-pci ohci-platform oxu210hp-hcd r8a66597-hcd renesas-usbhs sl811_cs sl811-hcd ssb-hcd u132-hcd uhci-hcd usb-ohci usb-uhci whci-hcd xhci-hcd) ], bluetooth => [ qw(ath3k bcm203x bfusb bluecard_cs bpa10x bt3c_cs btusb dtl1_cs) ], firewire => [ qw(ohci1394) ], i2c => [ qw(i2c-ali1535 i2c-ali1563 i2c-ali15x3 i2c-amd756 i2c-amd8111 i2c-i801 i2c-i810 i2c-nforce2), qw(i2c-piix4 i2c-prosavage i2c-savage4 i2c-sis5595 i2c-sis630 i2c-sis96x i2c-via i2c-viapro i2c-voodoo3), if_(arch() !~ /^ppc/, qw(i2c-hydra i2c-ibm_iic i2c-mpc)), ], pcmcia => [ if_(arch() !~ /^sparc/, qw(au1x00_ss i82365 i82092 pd6729 tcic vrc4171_card vrc4173_cardu yenta_socket)), # cb_enabler ], hid => [ qw(ff-memless hid hid-a4tech hid-apple hid-appleir hid-aureal hid-axff hid-belkin hid-cherry hid-chicony hid-cypress hid-dr hid-drff hid-elecom hid-elo hid-emsff hid-ezkey hid-gaff hid-generic hid-gyration hid-holtek-kbd hid-holtekff hid-holtek-mouse hid-huion hid-hyperv hid-icade hid-kensington hid-keytouch hid-kye hid-lcpower hid-lenovo-tpkbd hid-logitech hid-logitech-dj hid-magicmouse hid-microsoft hid-monterey hid-multilaser hid-multitouch hid-ntrig hid-ortek hid-petalynx hid-picolcd hid-pl hid-primax hid-prodikeys hid-roccat hid-roccat-arvo hid-roccat-common hid-roccat-isku hid-roccat-kone hid-roccat-koneplus hid-roccat-konepure hid-roccat-kovaplus hid-roccat-lua hid-roccat-pyra hid-roccat-savu hid-saitek hid-samsung hid-sensor-hub hid-sjoy hid-sony hid-speedlink hid-steelseries hid-sunplus hid-tivo hid-thingm hid-tmff hid-topseed hid-twinhan hid-uclogic hid-wacom hid-waltop hid-wiimote hid-xinmo hid-zpff hid-zydacron) ], #serial_cs #ftl_cs 3c575_cb apa1480_cb epic_cb serial_cb tulip_cb iflash2+_mtd iflash2_mtd #cb_enabler }, fs => { network => [ qw(af_packet nfs nfsv2 nfsv3 nfsv4 smbfs) ], cdrom => [ qw(isofs) ], loopback => [ qw(isofs loop squashfs) ], local => [ if_(arch() =~ /^ppc/, qw(hfs)), qw(btrfs ext3 ext4 jfs nilfs2 ntfs reiserfs vfat xfs), ], various => [ qw(efivarfs overlayfs romfs ufs fuse) ], }, ################################################################################ multimedia => { sound => [ if_(arch() =~ /ppc/, qw(dmasound_pmac snd-aoa snd-powermac)), if_(arch() =~ /sparc/, qw(snd-sun-amd7930 snd-sun-cs4231 snd-sun-dbri)), if_(arch() !~ /^sparc/, qw(ad1816 ad1848 ad1889 ali5455 audigy audio awe_wave cmpci cs4232 cs4281 cs46xx cx88-alsa), qw(emu10k1 es1370 es1371 esssolo1 forte gus i810_audio ice1712 kahlua mad16 maestro), qw(maestro3 mpu401 msnd_pinnacle nm256_audio nvaudio opl3 opl3sa opl3sa2 pas2 pss), qw(rme96xx sam9407 sb sgalaxy snd-ad1816a snd-ad1848 snd-ad1889 snd-ali5451 snd-als100 snd-als300), qw(snd-als4000 snd-atiixp snd-au8810 snd-au8820 snd-au8830 snd-audigyls snd-aw2 snd-azt2316 snd-azt2320 snd-azt3328 snd-azx), qw(snd-asihpi snd-at73c213 snd-bt87x snd-ca0106 snd-cmi8330 snd-cmi8788 snd-cmipci), qw(snd-cs4231 snd-cs4232 snd-cs4236 snd-cs4281 snd-cs46xx snd-cs5530 snd-cs5535audio), qw(snd_ctxfi), qw(snd-darla20 snd-darla24 snd-dt019x snd-echo3g snd-emu10k1 snd-emu10k1x), qw(snd-ens1370 snd-ens1371 snd-es1688 snd-es18xx snd-es1938 snd-es1968 snd-es968), qw(snd-fm801 snd-gina20 snd-gina24 snd-gina3g), qw(snd-gusclassic snd-gusextreme snd-gusmax), qw(snd-hda-intel snd-hdsp snd-hdspm snd-ice1712 snd-ice1724), qw(snd-indi snd-indigo snd-indigodj snd-indigodjx snd-indigoio snd-indigoiox snd-intel8x0 snd-interwave), qw(snd-interwave-stb snd-korg1212 snd-layla20 snd-layla24 snd-layla3g snd-lola snd-lx6464es), qw(snd-maestro3 snd-mia snd-mixart snd-mona snd-mpu401 snd-nm256), qw(snd-opl3sa2 snd-opti92x-ad1848 snd-opti92x-cs4231 snd-opti93x snd-oxygen snd-pcsp snd-pcxhr snd-riptide snd-rme32), qw(snd-rme96 snd-rme9652 snd-sb16 snd-sb8 snd-sbawe snd-sc6000 snd-sgalaxy snd-sis7019 snd-sonicvibes), qw(snd-sscape snd-trident snd-via82xx snd-virtuoso snd-vx222 snd-vxp440 snd-vxpocket snd-wavefront), qw(snd-ymfpci sonicvibes sscape trident via82cxxx_audio wavefront ymfpci), ), ], tv => [ qw(bt878 bttv cx23885 cx25821 cx8800 cx8802 cx88-blackbird dpc7146), qw(ivtv mxb pvrusb2 saa7134 saa7164 zr36067) ], dvb => [ qw(b2c2-flexcop-pci b2c2-flexcop-usb budget budget-av), qw(budget-ci cinergyT2 dm1105 dvb-dibusb dvb-ttpci), qw(dvb-ttusb-budget dvb-usb-a800 dvb-usb-af9015 dvb-usb-ce6230), qw(dvb-usb-cinergyT2 dvb-usb-cxusb dvb-usb-dib0700), qw(dvb-usb-dibusb-mb dvb-usb-dibusb-mc dvb-usb-digitv), qw(dvb-usb-dtt200u dvb-usb-dtv5100 dvb-usb-ec168 dvb-usb-friio dvb-usb-gp8ps), qw(dvb-usb-nova-t-usb2 dvb-usb-ttusb2 dvb-usb-umt-010), qw(dvb-usb-vp702x dvb-usb-vp7045 earth-pt1 firedtv hexium_gemini), qw(hexium_orion pluto2 skystar2 smsusb ttusb_dec), ], photo => [ qw(dc2xx mdc800) ], radio => [ qw(radio-gemtek-pci radio-keene radio-maestro radio-ma901 radio-maxiradio radio-miropcm20 radio-mr800 radio-shark radio-usb-si470x shark2) ], scanner => [ qw(scanner microtek) ], firewire => [ qw(snd-firewire-speakers snd-isight snd-scs1x) ], gameport => [ qw(cs461x ns558 emu10k1-gp fm801-gp lightning ns558 vortex) ], usb_sound => [ qw(audio dabusb dsbr100 snd-usb-audio snd-usb-6fire snd-usb-caiaq snd-usb-hiface snd-usb-usx2y usb-midi) ], webcam => [ qw(cafe_ccic cpia2 cpia_usb cyber2000fb em28xx et61x251 gspca), qw(gspca_benq gspca_conex gspca_cpia1 gspca_etoms gspca_finepix gspca_gl860 gspca_jeilinj gspca_jl2005bcd gspca_kinect gspca_konica gspca_m5602 gspca_mars gspca_mr97310a gspca_nw80x gspca_ov519 gspca_ov534 gspca_ov534_9 gspca_pac207 gspca_pac7302 gspca_pac7311 gspca_se401 gspca_sn9c2028 gspca_sn9c20x gspca_sonixb gspca_sonixj gspca_spca1528 gspca_spca500 gspca_spca501 gspca_spca505 gspca_spca506 gspca_spca508 gspca_spca561 gspca_sq905 gspca_sq905c gspca_sq930x gspca_stk014 gspca_stk1135 gspca_stv0680 gspca_stv06xx gspca_sunplus gspca_t613 gspca_topro gspca_tv8532 gspca_vc032x gspca_vicam gspca_xirlink_cit gspca_zc3xx), qw(ibmcam konicawc mod_quickcam ov511 ov511-alt ov518_decomp), qw(ov51x-jpeg ovfx2 pwc qc-usb-messenger quickcam quickcam_messenger), # both STV06xx & stv06xx b/c drivers/media/video/gspca/stv06xx/stv06xx.h # wrongly use upcase letters: qw(se401 sn9c102 STV06xx stv06xx stv680 tcm825x ultracam), qw(usbvideo usbvision vicam w9968cf zc0301 zc3xx), ], }, # USB input stuff get automagically loaded by hotplug and thus # magically work through /dev/input/mice multiplexing: input => { joystick => [ qw(iforce xpad), # there're more drivers in drivers/input/joystick but they support non USB or PCI devices # and thus cannot be detected but by slow (and maybe dangerous?) load_category: qw(a3d adi analog cobra db9 gamecon gf2k grip grip_mp guillemot interact), qw(joydump magellan sidewinder spaceball spaceorb stinger tmdc turbografx warrior) ], remote => [ qw(ati_remote) ], # USB tablets and touchscreens: tablet => [ qw(acecad aiptek wacom kbtab) ], touchscreen => [ qw(ads7846_ts gunze hp680_ts_input itmtouch mk712 mtouch usbtouchscreen) ], }, various => # just here for classification, unused categories (nor auto-detect, nor load_thiskind) { raid => [ qw(dm-crypt dm-log dm-log-userspace dm-mirror dm-mod dm-multipath dm-queue-length dm-raid dm-region-hash dm-round-robin), qw(dm-service-time dm-snapshot dm-zero faulty linear lvm-mod md-mod multipath md-mod raid0 raid10 raid1 raid456), # needed by raid456 and dm-raid 456 target qw(async_memcpy async_pq async_raid6_recov async_tx async_xor raid6_pq xor), ], mouse => [ qw(atixlmouse busmouse generic_serial inport ioc3_serial logibm logibusmouse msbusmouse pcips2 qpmouse synclinkmp), if_(arch() =~ /ppc/, 'macserial'), qw(mousedev usbhid usbmouse synaptics_usb), ], char => [ if_(arch() =~ /ia64/, qw(efivars)), qw(applicom n_r3964 nvram pc110pad ppdev), qw(wdt_pci i810-tco sx), #- what are these??? ], crypto => [ qw(aes-i586 aes-x86_64 aes_generic aesni_intel amd768_rng amd7xx_tco cbc cryptd hw_random i810_rng leedslite padlock sha256_generic xts), ], laptop => [ qw(i8k sonypi toshiba), ], serial => [ qw(8250_pci 8250 epca esp isicom istallion jsm moxa mxser mxser_new stallion sx synclink synclinkmp), ], other => [ qw(defxx ide-floppy ide-tape loop lp nbd sg st), qw(parport_pc parport_serial), qw(btaudio), qw(mmc_block sdhci-acpi), # eMMC 'cryptoloop', if_(arch() =~ /sparc/, 'openprom'), qw(crc32c crc32c-intel), qw(evdev), qw(usblp printer), 'floppy', 'microcode', 'usb_common', #- these need checking qw(rrunner meye), qw(virtio virtio_balloon virtio_pci virtio_ring vhost_scsi), qw(mei pch_phub), ], agpgart => [ if_(arch() =~ /alpha/, qw(alpha-agp)), if_(arch() =~ /ia64/, qw(hp-agp i460-agp)), if_(arch() =~ /ppc/, qw(uninorth-agp)), qw(ali-agp amd64-agp amd-k7-agp ati-agp efficeon-agp intel-agp), qw(k7-agp mch-agp nvidia-agp sis-agp sworks-agp via-agp), ], }, ); my %moddeps; sub load_dependencies { my ($file, $o_root) = @_; %moddeps = (); foreach (cat_($o_root . $file)) { my ($m, $d) = split ':'; my $path = $m; my ($filename, @fdeps) = map { s![^ ]*/!!g; s!\.ko!!g; s!\.[gx]z!!g; $_; } $m, split(' ', $d); my ($modname, @deps) = map { filename2modname($_) } $filename, @fdeps; $moddeps{$modname}{deps} = \@deps; $moddeps{$modname}{filename} = $filename; if (!begins_with($path, "/")) { #- with newer module-init-tools, modules.dep can contain #- relative paths $path = dirname($file) . '/' . $path; } $moddeps{$modname}{path} = $path; } } sub dependencies_closure { my @l = map { dependencies_closure($_) } @{exists $moddeps{$_[0]} && $moddeps{$_[0]}{deps} || []}; (@l, $_[0]); } sub filename2modname { my ($modname) = @_; $modname =~ s/-/_/g; $modname; } sub load_default_moddeps() { require c; load_dependencies('/lib/modules/' . c::kernel_version() . '/modules.dep'); } sub modname2filename { load_default_moddeps() if !%moddeps; $moddeps{$_[0]}{filename}; } sub modname2path { load_default_moddeps() if !%moddeps; $moddeps{$_[0]}{path}; } sub category2modules { map { my ($t1, $t2s) = m|(.*)/(.*)|; my @sub = $t2s eq '*' ? keys %{$l{$t1}} : split('\|', $t2s); map { my $l = $l{$t1}{$_} or die "bad category $t1/$_\n" . backtrace(); map { filename2modname($_) } @$l; } @sub; } split(' ', $_[0]); } sub all_modules() { map { @$_ } map { values %$_ } values %l; } sub module2category { my ($module) = @_; $module = filename2modname($module); foreach my $t1 (keys %l) { my $h = $l{$t1}; foreach my $t2 (keys %$h) { $module eq filename2modname($_) and return "$t1/$t2" foreach @{$h->{$t2}}; } } return; } sub ethernet_categories() { 'network/main|gigabit|pcmcia|usb|wireless|firewire'; } sub sub_categories { my ($t1) = @_; keys %{$l{$t1}}; } 1; h&0|0^˸ߧd403ؑl6w], OE8^f, Kk}-#KER멺ጫ!Vf:ysN6DjYi9HV\)i zoٜq#2Ìy>.GAG-kS&] F8}Db ?&'k(}ڮA;iϙc,Cת6Nk)~{5AV-ޞΖ"mo;.{-(kT4sw"*ro:\b~"Kh\ 9ʚW٭ۭR}Aá_.ͩd-˫|ve7ΕdRjLۢX ٷAj:z٪gSz%2tЏ-o2py̔ _*gO(".aI@:Hhޗ_Ȑ؅S2p4KM͔ f0ꃚ3@HY;N6 zX*CAd0 W,I`V}M@ԒDɺ5DzƋO»<2dNQ:*̑ e69d%@\mn0lIn$-7>p{@ d6NaxQ˞ qg9IS ?=x)N'ˀ3ob͔UJyRnlY0,Va)!I]_)t{@7fPeli0ex>Q 4֜nʺ.'SV茸LA"~ۇ秔@45HN9i&<Ѕ z&wx{ʺRЌ=[*n#eB5 FyWB!C*a܍5_FH6ך w7 WwWVue9~ e]P“HfV6x- bbQ8oR-0:Q[Éb\z#Q?|1D^ w3$3-qƂh*L"Q`HIWCɭEx>ь sW̟r#Θͧ & Zx-vi?p/9 Yɡݯڧ,r5ά1 ),I!3XIhv IE>ɍv[[ߌrU[+S[ԽQTX}OvdY8l[cS1.$x#$:$01ꢎ95MIEpR\b}DpaC3GƨH1NkclscOädtp"B$ކ0ΥJ'fVn4"Lݦ72SѯojM+6`IЩ}feVK^bvW!v!g*}N]s `0:aaTB W;&qHTk2`aynAT,*Kx1fh48I"?/|g]noP;ؾY 6ɶ.=l< Ll%>DM{!5=ٮ!6ӖR-|Zv"ۂ`QAwp:.{ebt4fي#ΛBHN%ӀowN jTq'kиߚd?oQ( zQ>Sݣ{W  q¼Qw"+"χ׬ np +~&64U8)™Xp8~܏ :cUq(Ok[^2+B{7oa :TBi݈JI,`-x|l8t;Fn=W1aJjɇ\|\6<(ڏV>)倠& uhϊ@ 乡020?b[+RpXpMoΰ$W–?VtܘQtb/YDWbdζgE; CƲ)%aj|ӆ~ I nD,S'N.kwŴ?#wrK׬ abtX\XE<7bFUBϝ6:uQ?3HSc5X}/!:BHo@ީڲioEi;G?WQ[O@긜K&G*7_:Vh27Y:y3У; xWCR>h@Ĉ5PdTPy;c_ u `ExBZ/>vG,7r*eNpEOq![>;=]Qa`I%VL }Ŭax75&D-5 ӎ39ӈGsN{M2ٝ/  %Te9QrX,3h@ʩ?'̋Hm򸧟!uC/./ 7_!]drSH{<޶`ȏ!&b;X|07u'dm4,PBC2S~eGSh?j&זxG :wavЀ[ Fh?|v`QDI+Cws?)Vaz|lg#yoܠЂWӰ-n-b@$mX#zX#| 45ǿNv|}v̊f炣Z=㩮c!!iV;W0%nvl.wz9Wҁ@{ZkؙwILqkd"x,#q>2oX֢qf;KMΖsddΒdzg Ξ@8NGBi]t/4]ݐ5[‚,d)#s _͚h%^e &$x>TSYnŐX0AФ5[5DǻObCPVy2NQ`+hwoݸ~N|[ыO"p{5:M,$2jIHiTFDUj6ڪ m{ݼ "(c "0I;ݶzf8:ssZH,)^%Ji:.J9#d3uKb B:N[2 FSmRvPfL<$37VFk =x~N(~hPw'r=cH܈< MA]V3Ut5yёoTk)ͱ]Tr&n>RPDg_tj)BoiFly_̄a oz gAEϾnڑPt=f(&TY#>Ƭ{Rh>%a' W̘mbI9.ꋎ=޻R6VޕuK2͝k KM_i_zu'n6?,oRnw2++E/VgZLZVq?O}ؓ;9LJ 6Y|pGϷ<;9hiM:tEBPӞůRΥX;$kΫp8[!33.3CuӌҖ *4n&YTgL@T;'czp'JՂ-Ua3/.N^6)}䀹66n=,DcҮopsX8ЍtD73Іn%=jJ>HpR޵HQX+n Sx:jyoP7 u"ౕb{/Yhr+١-^[t_ 8Nu&|h86,cgiRO_Ya t7կy#ght\kik3I1Ak3+W6bibz@|Dַ:_gx3j3>chܑd,&-/`a ż0gDDi dhAuZ5\񆆧y.c1-K9r?D_RT"nv 6Sfx25v㣉`е<(a8 F&IŹNcq)JJʨJ2(8`%R F&zy,"FfDim KHPvA06Լ崌gvDd`ҋ=wרPD7?[{X' o5xru"@Ղ yG5Ve7 Qi:1jqĪ(W^mrD6:Smչν qF~m 5<%׻$dfCj ՙ<Xdq3,رx;xk(5Nс~3r0j&WV͓"/S2@+n=&w>S97&e'xN2$T'P~FLZ>Wyg9+R8qH\άm+AtVI3LGq_Ȓ`y}oœj a~v[ld9i&Idoȉxgl1hP0?$w/ZY: Twe8ܨ<=/aeó\G8)rh<:_OKu7R#f=+R7Bp8! U Ɓo"6 I=YC;]r͵,afzl]8q4vK7dF4MlG"ݨ6YV.%,ޡs[XϨDoneɰrUy!o+\a63v$YDY[A^ BO^,ύ!&翫|,T&`vPzkZ.XL6C]J5#33X_E^/l8+15(R[#T]X};J9^;Y۲HZQ -[UlV@0y#W_(JeH"kWV*WTw )= |奙P6} ҨcXJb%u^Z|\\DfQV8(Nm$mJ?\=nƩ^FÙjSVe VóTx%X:nb7<NVs:>Kfٝ{:J $Z( V} !ZO(/[)ظce̪`cGK 6:崞/ܳtt9Q1QoWIFWSG³^ȩMr *<05L,y)1V.$jͤϟmz3iz엡AK/kKzAr`JvZVY{ib#\+B~%3MmwNukU!FJ,E P٥s:2e\(C嶡5)LVU7+&?M/@Vw}< 0Zg#kUY(g/jNu9PX374mڅ /Α54N]U ?&M{Abl7ǏT}z2'dɲ=Xedtn=ޖX١$<χ [H>t=9@v'> z E/kDMgthَ@5D1k1OjBv[Z?7CH:NlDB<^@1$v}ڱS=8rzu]x-aaǍ򝶚eNa(s^ O UtLS/ssJev{Q΀m|=!@|AHt7.ڵ7$ <}ݒ[܄)je-h}i+Hcj-t[XS}RUEuam(d"뾱lݨ{^v DI_-|(̣ٔ4_k>K%yO?z .wSD0-7jiW<̨wPF'B"d!Xʚ-'<ܱ'¥H͖ LxH3-{v!(E4MQkf H"9'HYaZok3鯷ԢYx.{AΤGqSBYA$tB<{-ed[saܛ3·E#4Zl2ں/%7 Rufg7NdH(pdn`kdR@_wo vAI8枙Jt,/ p*z6Яk8R  `¡wp:jf^m#޳xqbWbѫu5aV1Y6n ǺB1yŬL恕A?G5ZɠQտ(P gaS PwQI?<}#*Z3B#*c4o»yvMVO4`r`kcrA Sv̤buZ0wVcuFzcQh{/)ܖ|rԿ=Dcm ( BO}:TnFQeviD47G'$ D,HF&E5>5n|eTdv]{ls6*0ON>TB{P#R`8x3,5A0qܼ KGF:Pm5 :+m7Ba6F4lYٻ TL<2!r2eh>gh}򲂯61(cX7+S4f]K 0?U<;<)5m*[Rq?Qbr͡tj7@y ώ]}ͪ;gPnpM\S!L$pG3K#%g0_FbNJB VF^2'+YH}Wh"e-g388BC*ډGPhЄjF+($7]Qaiu%l 1׶[G]1?Bamޡ>Y%ժӛ3JԌFj!]}^E &N3`k;6]5>e0un(/c OOhYU%ɰ5@( *Fc+v}ji.hB.d&۔^ Y:L'XRGG/*^t}c8jN+ak NZ~.j*20MN璵:)W_ĸV2iL7KTjBR샙3xo+;/Y([Tp"%6k 0.C:'N>@1v*{&m!-C36cK̺w (/9jACїZpjZe\&;o^OkRI|A?Mǎ̞)Y o1U6b6t+aD.Da\m`&ޱY[ ڥ x mBR 2=͙p)TŦsLX iavF x>\0vԇrTԝҀ7P﯇{~;S$A4][&-xn-EF؅+ZH9iA6f[4.{VIL4x 5d҂qi_r_b{-t;4Lm.BgC,0PT %G!ZHO>0Yxc(&mW;{1ܹ@e G(Ϯm# %dȂ>6Xc8ˡ \5~26wgKu x70 )u e8"fܠz!ߎ=Ylߟx'N ykD~<8-:YE "ewϮ32C!EO1yhz4)6 _!In\u{8I&yơmW &)8mXǗ7n#1:r@B3>63{xU{k ptvDUD@u20Ӡ-Sce;T2$7I*$86Qu'z{V7aNT3Gِ=qS:gSDGiytJꀰz.TYB=Ă]bmRJѹn7QIfƭh٦֓䘊 9w2_a+Q+hE3_6eAN>gX NJs1 9V h:1;HS -Tܪ)l$?0;յ WT ~W$s,"By|br|7`k)-YV^܋^&EV% G5!/̓l~Pq9,LYTb͑iE?\ycG_h'FBlWӰe7-7ᔯ*,oI{dJKx>2w1%+ydw\/'"gq34w|yӹeѬ#s=Ϻ#r~EkC 'Bn)\g$aᔾ%5 oZS2lsKۂQ-XPçb_7+FIm9q{T݇h洃FUȡz^FF~_qUsiaM\JWE4L$25AOm(](UEbH|ߚݡ1ױԸhz>Kns&12p&z>WڲaJ/ T| `K Uk6-T,d)pby}~5<]ԍ2mapgCx3/?T)kOkq/#]b\F 20ߢt&u-@L6r1&_tտ ödSC蹖CŞMy)Vt0}m ;Jbpav" i4EmNf(ՀR;AB0!:hw} Q󂓲ᝮ?ҫ-n[ /X։XSlCt8jWfʑųXaY(bjo+إK Xf[g`n^q>b /֒\ˉ*?b2R'󳪽/@H넛]#FPBONawS9N;6sU8r'V ,}MN8 UYIWm u<`*K|Y#9^2, I V?oηhFJL6'+oY2̧i3dnL*@z }?4}4(kX$ybyyk=F;I]1l(t-s*y[b COŊ$<2#z N/'BȑXo8B׏q<)d|[75(u.Ws3zDGhjBPѵ˔b1Aғ_o")2USڑJy<3nr9g(NLMfYQŪJ:{jSץVnt.1T<2==KAWulc/g.!"SV=YzeEWV9XC:G[ٸaЦ+M+ʑSZQX.Jc(}sDC`ixO (,˾du^ht}\%%XGl&GI0S=uMQqQ(C$6ޘpfї5V3h^;5L"%BӜ*\m$l\Z(Ix|Lם uV(lN9g>j@$T7M:n >O*4 50 %5RIQKGj||um(.~q;p~c+ piKt5bS9zf`Wd27> hVH\݂iMo&<%SL O ɞ puT37hSQ梤qݑ@,𫭩i}nF2< R}jҧp, th;;Wj֬.L:.uR2L 塜": 92}7=h~ 3(^R>~#qpŠXcOCQ:O0sc(G@؁F֛"?6gCtL8dW1/ ᩵L׍h!*8J?N@㑰 ܚVMMtd ]@e^UPgQL1G UY S?:2#caIXtGsDO!: qUd9g`XiI6؜R'280nq{z˒}7Bnl7,2Vľ{jclj\Bj=P$Q峚9TD>iwҚ\D̓jP޳z9'gWw%m/:η7m35F,>iXN}X}*d&R;BǺB X[~ qM"]&D$/X7`/]]NV) W$dB%ydo TR2dl Fr$LYt`i} aiL |ﰫB`]T:(4^]'D O]*8s%(۔<\)J[RUcYsM|VouŖj]jtcRpJ[D`K'0+tj= 3|/X WnğW)ti MZ0,H w4anCV^:+z@eX1uO|8@݌pij0/`oDvұ1xml[õ.j~b.toۙ`|00Ɗ^7<Oh;!$OoWsOA[}YFqF\ ɼoza~0ewk SXKeg,J>""M/.+~+M!{͇I{=%4^*yA,w(JsAvTxddNԻg[-2Z:.,GZ1z%C'={pzy}`+ZJoNK. O(;{ȊS+XS+ByJπȓ8ƪBdpʃ&L%a'ԧ|ru&&J{~# ID`sNyD pЫ65W:>sɥ>]S䦧ZBry0c lwykY=[}(LUmeFF,G Yu9C4$՞2Oeػ@SF +I:K娯ZBc!DdȒRJGn5fy5g9[=&"SGZ#n nE?8s;BB梕c%-M3ҮD-58ƧfZW{]HFF,ȆI~d'Z euLMU1;.lXP?qjxX/;|ǧܵwzzN y.k)6k&}sYǚZU8MQ!~U4 gQz=D;Ԩ"5|H f^q%8X׫ B(U.혛Iռ]$A?m8R:AR|42PvlšRl/ XsluRl01]y6;x;Ud|nߣc5‘N !`, zh]UOWOyBЉNltAxMuVO=/Z"<[ 7h8ߊ "WR Hj0ػ<}N (мRzF7꩷^7)_`?󵞂v&[7PG|&Vz*Q3,\-^U_&IjGsi4n!Rd>ޙ֘Uv?F~{yG`sY\8 0>F4\r\PJϙ^bVI'(Ȋ1AA7+\.bŌ%fJ#@hd6T|/2QɟaV6p6y, |:{}QB$WaT]lF,9X[KxKk[P"8bYRuCjp.+3Y|84ĻBNJL g\u\M膘Us>n|Kc3іKJj~O~ȆI7$m0g%vKuՑ(iZ#EcL>sYr# ݴT\qtU=a0~%z(0F0݌D3 <WZ2ġq)fd5惏&G;*xC'΢U6( {jRWym1!㺱L2DEffJQa;1}eBVЀ&iN6v >w "ty\Nt-VKh@9dG+2B%GzN1S,dl"i<[Ubkb sZ|RF#&TEKϷ2X2Rc-P A?*b|c;ĩ'C\Ɍ FTr.4(ۡG7ef[ܚRjKXvpY6s} QLOI -cDD< 6͒Iԫ߭NN! Tvw_$G!N$pUcȒQtxFmFg(|]@5E;f'p6$}i/42uoЬIeG)嵘ܓMhr'uR {O]ȵzm+k/}]U\}:V.'?2lS;f-VR_wqB. Tǔ `ΧuXR.;^ ? ۆ1!=DPlN˧jh zrZMUŬ%Ce.N6龱O<7pH'zsk;Z7X ͇ C)tgͪy0Xp"1-#HFf: АI~>eig7oHox^f $^1M:SKd%?blG%y å~6^IQO&I:m#^rWGP'mp]Ihj {z>‹wP7\Ƃ#p%p$D0vAf^1 0=ם2d/]F_JC TAoJK0L%N29E)C:r;r _-g5[{KL'W蚒Ñ uC|?a,T9T7Q~z50@xb{h;ͫo?$_$4+J^“:g@qqEsDbڝQ#dm{KCș§"#l ):% O53| s~V?~9IȜ"f,xC*xHhp!G=Mh-k(d4SLR-#Pca},mAd ['2迏sM \C8:;B[ D;bzqr$k9.Fnk'eK+Xsz ߽ppFc>Wp0CD"i #P\Y "Y@uU8:V[ѻgg w.íOmίj )7-}"?Uu,ܐ~؄ǘ*b1˧(ZvxvRȖ JiXVb8h`R qJP >l&^U`Q` LsCXpDW}z3H@c8>0) dB ,i>O_D@\e40H8h^͕G7,\%(bMRoCIuX5֝sbk;]m" !Nk٨9]yot;q`m)'ѝږ辷\6 NwAƘ5QјK}w*|Z*o, =#-sl9Gj)Zȫ:VhFceZG8ki=Pě!2$6IMcH!LQR{U>W7~PoIb<IC^ I\ /G.a9&֌t+j_lhqb{ ^<yJt /;&~ƜaV{Jy™ugKbwG\'j쀵tyooinsɔ(us]밢jT$qѴL臃Ho\||KҠ -b ʩM%'N<,~ݠAYz6-1tZȎLİCg7yKCClR˫oN5Axnr5_Fpl|s#//Nt4iXMrPz a(o~g"EyV"f3q=uεqUrڼݍI>LZ ܣzVZv*&Փǰ`$JEHk=$%$MQ FƓk($wmuèvwY@o,X:FurF'C 71ٜl8S$:3DѤ| ]VDmA^1FC΃>N\0,0cLjg2+f&wP)\9|]&5A^vgNp2%\cbђnbz ư!9$6u$B>DְEcs3}y 6$Jc@J~Ag?qw/FEO=Ls;>o5:]֝Np' <.r'ԫ߾ o=7$M^?R!P+г1_j fүJŇ擠-%g9> 7ѠOw\M&tM M&Jy^a؆'J\eVhW:=@Zߨ[e(Zm UF{ ,~lL>_:5aΏ}{F?C St"\҃pՕ~w~Op&%Œ0W?wF|b 8[zxOU?58њ ^SaU=-Y\ kxE8uyWpSs t&9qfµ^kΝwz!#$&IX-#UDp8{WgN mLA`Y4I!AP}EܲK;GYI W ȸ; d+/藻n/klx٘t~)?t)E1 U.YwB.[ܟoY#L֡F41B[e_QO?&1_/ƜNrAn읷{j:S^kQԱ݊'N5!e QP-A2 {*RvIB,ع -@ +X|,BF{pD f ́աϟ9bwBVŠ]. MdWHQy|xjޅȟQkro7ifs )33^\@)Ʊ7</$lNF$v-0 =x7hv[m-@HD~&#Sn)V4&!wXmߖ4zmlb6W~ Uˑ;p%ȗȇu4%[f]c.r'Dlȱ27QE$@z^[^.؅N|̒Xbړ7 ]. ^S;]T&hбF5DhbWTpN' iT3SB/܊փDaimVTkNpuh߷`$aC#̳ FIF3=M'\?y[B@S(^)y+p22VKܵɹ38=0Wn7Q?{qοM `VQ՟=Y~v qxu(og0iY􍱶Y9ʹI F-A+5B`\,qDz!7D_nc'N]0>weҾļ[Nh@Wc1)EWOaG_Dc]0u,C-EfeH}Ķ䚝X5#NL^r~8_14nB:#w]ϧZWK&QzGT"8m.YgL7O S"5۠0HmR{%^MiE;3H膡vF5B:ݹt&:Zc*Fa## rp9JJK|N\?״iTYw*ŻQChz}|.kP'~*fV`i;(GHr",N Vz]@Ҏ(XJ86wU4E4`I)I^Y^%n|\ *>SX65?ˌWh% Cy_x]~rܱy7Fr94TF21c>uhQJ &7bOd4>xu*U.[anA}\tM #'qnd{f rp/lu' |- /|o&񗇆߾n ;΄niUDR4ɬ-cum ϳ ͖ ҉UBZXk/U.*q/WP8RT詐d ax[82 iCnBPk&}Cu횖X_<@\*CdӯeQ~(Y#=VWĜ=Ӡv]>򐄈eT.s6tRID#^{}icP"Z_9_N-fw ٘L܄nAXP-`y\q#bu^=ѾxhoG+\HԎ!Щ.٧ {>01+Ca˓ȿ|= epϕTS+㇡*[Sԭs^ԭșBO%dDJiK~e# iwoxqI+!&*cDfZѨ*ݎ5w0_B<1Ӡ?R&nsQ8Ni*6"\Xa'՛9p)^v^N-?PӈK }*Ay Jgp c)hQUzbf&+T؟ރo*7[7 ŝ_҈[Ss63)j{9Q[wy<^o* v 4~sL~[EW~tEp7T03)?&\؀IeKZ\qM<9{~/H HxT8+HsY|Ҡi)l*Z/3})(PKQϙ,U:a#c&gNG3ƒCs:?Đ~6Ѵ!5㏓01W*~Vݺ\-<gYHjF& CY@{fvKѝ ϏLǟAY6ޘ;z@z U|Ie%LyMCrX}*J(<C4 O K㎱ rUsʐrVs 1(bjqjNs [U!ed~R_XJA܊_)[JqS=TfvddfCf>,~wjA@5 )w=XVm!˰݂`/x^_ ;ҬɀڢuOCpc`i>454tel ۵z oֹfLW) պ~ə$8>m;ڭwFkG 6w$_8! -_1#1ODM+UKO2u[ xh!Mno37ko{|MbÎ;%̛E:tl2nBϝ8"h!_l5IA^ jd(@z4^kd`c5VuW< KF x x:Gk"ɨ-AZ @< ƭvJeFε}@[÷؍6$akJ.l\,P.׊b,ŷ/E*iZkiaMy?rnmU^Au|,dώWK*HST:`u|뛿XɫtEG?P=/+YrT}a %yORTӋI\@9;guYUT -5eiZ(eJ${hwcjH)DM oN "NI@PO%C[ё%v )v-99qmB 8Hx.R]<[PB}ާ ,rN^{{0p1ݛ=^UIϴT]rS(7@dz7EfL3~q)Z4f$-7ܳ~@E^|AJOKYw_N4,7oθȡ+ŧeߐ|퉸y_2X.:3QqQqjCHoZx28EGOJ'I)Gr U w|Nx=f?}+tI2%t9vM߇Y@a2^}ĻJa"֩ 0؆=-Ħaw *(7"?@lg%i"~hvo85啛 h.kU?5u*XI0NlubKD0c/Z9p{QS=ޜ,[֕CKY?0owVVr49 x2#Eqgd#5344M \}DE܀Æ =Ԃ2 %PQG:ss uEn<5#i`wioaw&STy $8S3~ۜOTs G#=?faY(@*)] 'OŬId)X@,k-թ+ǶG-]̮&ظ+9uG.kMctV?v? 7gtYJ;os$>i:sBvpu%_BC^m6Q$lR/3$q-KFe6ӭm?πYݻJZr Zy~:d;R-GԖo rw\E񛁉MSqg` ;9$U=NV6Ϛ9]al0Rzn-:_j)W&?e[ bd",~o*܊Q ;5Sq +죙~o^uG~H r{ oI `+Lg iL~@r+t6;{>d/AwuT 'rH$TܞOJńXږ] YFOqXϡv0jN-`&@=-HH+C\, E1&Ow~p9C-<ӂtN9Yė*tNeđ4G)96^4[J79@ եq#f>紅F319}JXpӄޗx6,l5].G/%zlbte疰;_;j Rh\K8T  qH{KE%v}Ǣ=)iF "Cf)ym$*;whk8QMYjvv%!$7FL2T}ߧUHJk.߼mi wu*#FOk_'#Q!9\{ DFt8E3\qa.oilUFqyCO=#9M2d-d-ȞhyCw ~`[_W\`W)ndTM'>lH[+TO 3 Z)KV{oF箻l׹J'ʙ]Lor}'*L X&w-x )r ܄rO^%KoFR88S33L/$ۆDjry+9Ja%{^F=v͗HсڋV8q>x#1}PNk<,7cʧ{){kYxqBǗ#6\e<0snфZ+;w# yHcCQ576O9/NL!]VWWp²Ɍ 1.i8_J)2m|X:n@Sr_v>x\`h$p~)f-U ±]LK3p}K oPw'Z2S ':sБrG`FB6"% Iя3|sK20)E]VX<7i XD BJ6.cgպ(G1K >d;)Q0)7ajb*+0PCSjfÂp lZ oqrWUf7QJQ<ޛCP?"]3A ʱ=+݃Cx<͙ ȑ@=\wy@Ax"9@i{Q s"ڎ㳅zJ=ԶM?;/{?wͥ܋hq ׁ MSETq; 7H_-1p86[Ủnol-GviLTx*n,Ġs ,NQeݪ&5UB]iz(Y}]rh]8cdY0P̶±斀h"bp"컏`WWC7!Ij1 jˡaLRz2[@G8ұ]9 ͛4rn9t! -/0n6ahz%\79j$,>WZƴ"*o@W-c0lg]W?jEsn66o/9):%plEͥ~S(ެD˷Q̷*_5jV]1(Q3I*jH$8c8{d(7ЅT'[r*-kuAi^FSkQ{&F .!RCpA0̹5j}ޗ{S!/Dny%&-6$<嶬6@Ng{Z=m̚vv0AE]\4uߒ#Am2 Wj`,R/X3( dIu=S- 8*>?uS\BlAc'w ֓}vK2om)>y qh*^\K&v:Rc'zτOW3{p<5eE?~7k)w$:%pbUYf>??h+M y cVd%kИ܎;uֿ{:c4wro|BŲQbtIJy]qs6MBB&\or<G"Qۣpl7S~+)1}$4@ [r[#g?I]qG~c2yDݜg N|zÿiac:tHd-Ԏ}r"e/%Q %-1 }y<T肕6 ]`9GfEU_YM򏠫ݨ~*(FVB80)$J8ckł\zgr6z2^o@|=[2cě9ۿpLx"IlhPOu[{\l-)8hҪӬ-ݥ@ZpF |P6fFML7i_zc X-f,иיn06Yԫ/?}fWqN*  #&, 1 Bnd~i`m)䡌P1u1h/:q`dήSEK< lJ|:`KSu4v2dƒJ?>s7X4]Zq}9 U`A[ ?U|/;2wڌC"a9yPx-Xn\ռ > RBh VSc O;r!!qI_{TuHl W+8JTŞQ+4~nSE(b itt79Di/,GʟhލCb %NBrZʬeY(;춓%zO6o )jIR!JWX&ATlO&f'[+D$2|J)A!KAWT"JE FcEB0鎰sxw,}}t0SiE,"jMF[g0Fsn!/Խ+à۔P:.{vpThῧgyW:{5en(]kF󀺒T4/:Cu:Tv;)̰ _!'()7 ! }G9S ݇0XNVZHD884efOPy> D6jx־VS>Rb N?聋Q=K6Qh~bz\6ِ5  ޴`4 D1vq͊!J~0x`VT:0o K vo4s(!-CqVc#ZO1 }z lUM@9mMKc4xNzsBC6GaF{g6s:G?v}s!Wm_*^J э{\陘hz̜c.1LٝBİ/@k9nEw 2[ɢy(%@ }8lMilzIʩRS\-4+cD%2I}xT1.v7Ij:lNBzhVc"Ki _woQ=O |pܠ홁ZYSdBoП(C(2K6ID>T r5p'ɢg5*K He/!׮I?'F#I!-q' DXqN~ y$ox| nǎc֢XU"gݍ+[z?Wt?#}"w߇fey? BK,=([,_.eyɆ `IN W)W+RN%aN{z6"PaG)q^깔O Io;-qJLQ)9ǵhB11%cz,+o$TuaÅ]Jx-u" :0|)#^Z("[༎(f_-954 |I_ =R6;eJ /g[}]*(QxELW׽j-FKlzH\s䉷 *jJ:_47UhFs~pW=H\I +8왁əj{<^X*#Z$}k٫Jdܲ~Sirr4I& ED]&DjhL/Sk~kzNcAz2߿+&gh j`=Ww\P=ƈmp: KBf [G=29*H6I17$+5Gj#38S9SJvYMQ7Jz@.% enw^}IWmB{oXQF$7ٍouwŇjhVJ\E$4ƝJԷcлM;޵E !P˳kZH$2^y$P u8Gpes="Preioc)!˥k{vxyykxfj!Ltea `2U5-Qo9D=#Vrxd2T0t MVgDG1WR Q' 3_c8M]ZCbT ̽eD+Eݧ"miGXTFOʱB(ͳ1ϩ2O?XQW3/Ƥ]*n%:4m4{Y*l?򦳈R>wIQ}aʻDD}O$̆<\rrps T&d2*ʊ [IMW~=` 5mt}~o 2A!\\kmz-C S 0Wk +`T8g%f@ݒJ*DMNGo-!Mm"Z$Suۯ3'Nc_wH*W3BϵOYfa 04_ȷ xzwV׶3%-!\ͽ u~G/MZa}f-5ެr#(VhĖBB boڌ߇SŖ8tn篳"P0+O;:1`G҅v87(_16 e\M`IřUQfދZö^@XK%c"Y}'/N$6eFwl|H8$;/8= qX`gbaOhL=cʐ- SQ0ʦ#:i4f\mV h(..Of@ z0sI}3/邠<Ћ,lag% 9ҭV/$P|S+`GW2/ـ8 PP'rooH_ro+;πĂ%:,Hp_vX׹RkԚN)jXlL' {{wBo0(>OӅ NUOQ.Nn~tPN2'0}C=լp&"A-I; @<̪LjO~[ux y+d&$'g$s#CK[Z" {SmLup!TmG Fc&5Q?)q}+d$&(o?ŗ}JNSD_k`zwRq\?(;^f-|jB % $a?䅱9e_74Ih|cq e=6LF{0 IXU2XF:NQj>4.V6*pHNC8I&No^Fmn`mB=[\s"0 Sy3*亄 $_g :|./7HpC."ֱ8/G|+ 'wOdboX=YW6:"Ld7(R(V~Y77.o61m") ràaAOyD[t(qTAK/><.R39gJAe&Sg$Ƭki9,jңiQ*0ˈ#.^V" gSF@m m~4ҹ#C>kჇ&tLչt*X|K{c7.mb:= *f@f-4eœ3x7P?Ǭf/{-{ҊQS"g$QΎ?F@9[B0STȥ`*!@!̊V?#!R5kGVm3R6F2֕;cՆ64zT6}۲r瞅c ~֫ W,q|Fd9k#\0݇ 9#&(ۙndNYa_XZ[j-7N׈wtJ 5"4 S}J5dfepo|Uڗ t_zG}^ (^n.X]Z0*HDlqAVOKdM4j) w@yAIj:Y>`L`GF2n')tDحVQi*dwYH ph9oz nx=Pe@Z&wjk=7H2 Q[kApxd3L(Ӵhl1wø[q`O)AJbBwO-zb c{ tmv YB_o4PX*PB MХ㔎)O(hGQy`:IF$m*ڰ*V9 YJޙ60 oFWrhH,f1D KZ_.؟-1:NQU_/|75m<[dOy 2xf | pZ m~~PCR5S:qE>LGQE^`ՏTCVw<*FupL<)_=WeseMFѨ 4T7h+[NЂgx+gmw\$BuGtM!' N6+0w؂1qZNyӒg qMM4J/6__!ϯUMIo 840uf(]tQkvWXּjܚ1Hu oɚVA^7L,izc5rT=p3p X1e ~#e7 xweAEY:A0 V2~ylhGW ft9%џ^Dr9kFiS f j˕-?ex Jm~#:B߹8ȿh'a:4RY Mԉ2h:d}) F芛*!wz:e]wIb<\R8DJ|e Lk/U{${uӹÒdAu&,aF>5!ț0lHBXW|W ڑR.<(ؒ *!xj/Y_NA4b=:=դw}"Z7(Lt;z,QE]>mTIm=~Mf\q?ȚOۋ!!qgM/_TBk嵀 bo5Kֿ @H_[VxCSOA N:V)~7`ms`lh>5^>3 wk b@hH 0lq&}?9d