switch to 2.6.27
[openwrt/staging/florian.git] / target / linux / s3c24xx / patches-2.6.28 / 0001-merge-openmoko.patch
1 Merge OpenMoko kernel patches
2 git://git.openmoko.org/git/kernel.git#andy-tracking
3
4 mb@homer Thu Jan 1 22:58:51 UTC 2009
5
6 ---
7
8 Index: linux-2.6.28/arch/arm/common/vic.c
9 ===================================================================
10 --- linux-2.6.28.orig/arch/arm/common/vic.c 2008-12-25 00:26:37.000000000 +0100
11 +++ linux-2.6.28/arch/arm/common/vic.c 2009-01-02 00:01:56.000000000 +0100
12 @@ -69,12 +69,12 @@ void __init vic_init(void __iomem *base,
13 /*
14 * Make sure we clear all existing interrupts
15 */
16 - writel(0, base + VIC_VECT_ADDR);
17 + writel(0, base + VIC_PL190_VECT_ADDR);
18 for (i = 0; i < 19; i++) {
19 unsigned int value;
20
21 - value = readl(base + VIC_VECT_ADDR);
22 - writel(value, base + VIC_VECT_ADDR);
23 + value = readl(base + VIC_PL190_VECT_ADDR);
24 + writel(value, base + VIC_PL190_VECT_ADDR);
25 }
26
27 for (i = 0; i < 16; i++) {
28 @@ -82,7 +82,7 @@ void __init vic_init(void __iomem *base,
29 writel(VIC_VECT_CNTL_ENABLE | i, reg);
30 }
31
32 - writel(32, base + VIC_DEF_VECT_ADDR);
33 + writel(32, base + VIC_PL190_DEF_VECT_ADDR);
34
35 for (i = 0; i < 32; i++) {
36 unsigned int irq = irq_start + i;
37 Index: linux-2.6.28/arch/arm/configs/gta02-moredrivers-defconfig
38 ===================================================================
39 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
40 +++ linux-2.6.28/arch/arm/configs/gta02-moredrivers-defconfig 2009-01-02 00:01:56.000000000 +0100
41 @@ -0,0 +1,2107 @@
42 +#
43 +# Automatically generated make config: don't edit
44 +# Linux kernel version: 2.6.28-rc4
45 +# Mon Dec 29 12:13:48 2008
46 +#
47 +CONFIG_ARM=y
48 +CONFIG_HAVE_PWM=y
49 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
50 +CONFIG_GENERIC_GPIO=y
51 +# CONFIG_GENERIC_TIME is not set
52 +# CONFIG_GENERIC_CLOCKEVENTS is not set
53 +CONFIG_MMU=y
54 +CONFIG_NO_IOPORT=y
55 +CONFIG_GENERIC_HARDIRQS=y
56 +CONFIG_STACKTRACE_SUPPORT=y
57 +CONFIG_HAVE_LATENCYTOP_SUPPORT=y
58 +CONFIG_LOCKDEP_SUPPORT=y
59 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
60 +CONFIG_HARDIRQS_SW_RESEND=y
61 +CONFIG_GENERIC_IRQ_PROBE=y
62 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
63 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
64 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
65 +CONFIG_GENERIC_HWEIGHT=y
66 +CONFIG_GENERIC_CALIBRATE_DELAY=y
67 +CONFIG_FIQ=y
68 +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
69 +CONFIG_VECTORS_BASE=0xffff0000
70 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
71 +
72 +#
73 +# General setup
74 +#
75 +CONFIG_EXPERIMENTAL=y
76 +CONFIG_BROKEN_ON_SMP=y
77 +CONFIG_LOCK_KERNEL=y
78 +CONFIG_INIT_ENV_ARG_LIMIT=32
79 +CONFIG_LOCALVERSION="-mokodev"
80 +# CONFIG_LOCALVERSION_AUTO is not set
81 +CONFIG_SWAP=y
82 +CONFIG_SYSVIPC=y
83 +CONFIG_SYSVIPC_SYSCTL=y
84 +# CONFIG_POSIX_MQUEUE is not set
85 +# CONFIG_BSD_PROCESS_ACCT is not set
86 +# CONFIG_TASKSTATS is not set
87 +# CONFIG_AUDIT is not set
88 +CONFIG_IKCONFIG=y
89 +CONFIG_IKCONFIG_PROC=y
90 +CONFIG_LOG_BUF_SHIFT=18
91 +# CONFIG_CGROUPS is not set
92 +# CONFIG_GROUP_SCHED is not set
93 +CONFIG_SYSFS_DEPRECATED=y
94 +CONFIG_SYSFS_DEPRECATED_V2=y
95 +# CONFIG_RELAY is not set
96 +CONFIG_NAMESPACES=y
97 +# CONFIG_UTS_NS is not set
98 +# CONFIG_IPC_NS is not set
99 +# CONFIG_USER_NS is not set
100 +# CONFIG_PID_NS is not set
101 +CONFIG_BLK_DEV_INITRD=y
102 +CONFIG_INITRAMFS_SOURCE=""
103 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
104 +CONFIG_SYSCTL=y
105 +# CONFIG_EMBEDDED is not set
106 +CONFIG_UID16=y
107 +CONFIG_SYSCTL_SYSCALL=y
108 +CONFIG_KALLSYMS=y
109 +CONFIG_KALLSYMS_ALL=y
110 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
111 +CONFIG_HOTPLUG=y
112 +CONFIG_PRINTK=y
113 +CONFIG_BUG=y
114 +CONFIG_ELF_CORE=y
115 +CONFIG_COMPAT_BRK=y
116 +CONFIG_BASE_FULL=y
117 +CONFIG_FUTEX=y
118 +CONFIG_ANON_INODES=y
119 +CONFIG_EPOLL=y
120 +CONFIG_SIGNALFD=y
121 +CONFIG_TIMERFD=y
122 +CONFIG_EVENTFD=y
123 +CONFIG_SHMEM=y
124 +CONFIG_AIO=y
125 +CONFIG_ASHMEM=y
126 +CONFIG_VM_EVENT_COUNTERS=y
127 +CONFIG_SLAB=y
128 +# CONFIG_SLUB is not set
129 +# CONFIG_SLOB is not set
130 +# CONFIG_PROFILING is not set
131 +CONFIG_MARKERS=y
132 +CONFIG_HAVE_OPROFILE=y
133 +# CONFIG_KPROBES is not set
134 +CONFIG_HAVE_KPROBES=y
135 +CONFIG_HAVE_KRETPROBES=y
136 +CONFIG_HAVE_CLK=y
137 +CONFIG_HAVE_GENERIC_DMA_COHERENT=y
138 +CONFIG_SLABINFO=y
139 +CONFIG_RT_MUTEXES=y
140 +# CONFIG_TINY_SHMEM is not set
141 +CONFIG_BASE_SMALL=0
142 +CONFIG_MODULES=y
143 +# CONFIG_MODULE_FORCE_LOAD is not set
144 +CONFIG_MODULE_UNLOAD=y
145 +CONFIG_MODULE_FORCE_UNLOAD=y
146 +# CONFIG_MODVERSIONS is not set
147 +# CONFIG_MODULE_SRCVERSION_ALL is not set
148 +CONFIG_KMOD=y
149 +CONFIG_BLOCK=y
150 +# CONFIG_LBD is not set
151 +# CONFIG_BLK_DEV_IO_TRACE is not set
152 +# CONFIG_LSF is not set
153 +# CONFIG_BLK_DEV_BSG is not set
154 +# CONFIG_BLK_DEV_INTEGRITY is not set
155 +
156 +#
157 +# IO Schedulers
158 +#
159 +CONFIG_IOSCHED_NOOP=y
160 +CONFIG_IOSCHED_AS=m
161 +CONFIG_IOSCHED_DEADLINE=y
162 +CONFIG_IOSCHED_CFQ=m
163 +# CONFIG_DEFAULT_AS is not set
164 +CONFIG_DEFAULT_DEADLINE=y
165 +# CONFIG_DEFAULT_CFQ is not set
166 +# CONFIG_DEFAULT_NOOP is not set
167 +CONFIG_DEFAULT_IOSCHED="deadline"
168 +CONFIG_CLASSIC_RCU=y
169 +CONFIG_FREEZER=y
170 +
171 +#
172 +# System Type
173 +#
174 +# CONFIG_ARCH_AAEC2000 is not set
175 +# CONFIG_ARCH_INTEGRATOR is not set
176 +# CONFIG_ARCH_REALVIEW is not set
177 +# CONFIG_ARCH_VERSATILE is not set
178 +# CONFIG_ARCH_AT91 is not set
179 +# CONFIG_ARCH_CLPS7500 is not set
180 +# CONFIG_ARCH_CLPS711X is not set
181 +# CONFIG_ARCH_EBSA110 is not set
182 +# CONFIG_ARCH_EP93XX is not set
183 +# CONFIG_ARCH_FOOTBRIDGE is not set
184 +# CONFIG_ARCH_NETX is not set
185 +# CONFIG_ARCH_H720X is not set
186 +# CONFIG_ARCH_IMX is not set
187 +# CONFIG_ARCH_IOP13XX is not set
188 +# CONFIG_ARCH_IOP32X is not set
189 +# CONFIG_ARCH_IOP33X is not set
190 +# CONFIG_ARCH_IXP23XX is not set
191 +# CONFIG_ARCH_IXP2000 is not set
192 +# CONFIG_ARCH_IXP4XX is not set
193 +# CONFIG_ARCH_L7200 is not set
194 +# CONFIG_ARCH_KIRKWOOD is not set
195 +# CONFIG_ARCH_KS8695 is not set
196 +# CONFIG_ARCH_NS9XXX is not set
197 +# CONFIG_ARCH_LOKI is not set
198 +# CONFIG_ARCH_MV78XX0 is not set
199 +# CONFIG_ARCH_MXC is not set
200 +# CONFIG_ARCH_ORION5X is not set
201 +# CONFIG_ARCH_PNX4008 is not set
202 +# CONFIG_ARCH_PXA is not set
203 +# CONFIG_ARCH_RPC is not set
204 +# CONFIG_ARCH_SA1100 is not set
205 +CONFIG_ARCH_S3C2410=y
206 +# CONFIG_ARCH_S3C64XX is not set
207 +# CONFIG_ARCH_SHARK is not set
208 +# CONFIG_ARCH_LH7A40X is not set
209 +# CONFIG_ARCH_DAVINCI is not set
210 +# CONFIG_ARCH_OMAP is not set
211 +# CONFIG_ARCH_MSM is not set
212 +CONFIG_PLAT_S3C24XX=y
213 +CONFIG_S3C2410_CLOCK=y
214 +CONFIG_CPU_S3C244X=y
215 +CONFIG_S3C24XX_PWM=y
216 +CONFIG_S3C2410_DMA=y
217 +# CONFIG_S3C2410_DMA_DEBUG is not set
218 +CONFIG_MACH_SMDK=y
219 +CONFIG_MACH_NEO1973=y
220 +CONFIG_PLAT_S3C=y
221 +CONFIG_CPU_LLSERIAL_S3C2410=y
222 +CONFIG_CPU_LLSERIAL_S3C2440=y
223 +
224 +#
225 +# Boot options
226 +#
227 +# CONFIG_S3C_BOOT_WATCHDOG is not set
228 +# CONFIG_S3C_BOOT_ERROR_RESET is not set
229 +CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
230 +
231 +#
232 +# Power management
233 +#
234 +# CONFIG_S3C2410_PM_DEBUG is not set
235 +# CONFIG_S3C2410_PM_CHECK is not set
236 +CONFIG_S3C_LOWLEVEL_UART_PORT=2
237 +CONFIG_S3C_GPIO_SPACE=0
238 +CONFIG_S3C_GPIO_TRACK=y
239 +
240 +#
241 +# S3C2400 Machines
242 +#
243 +CONFIG_CPU_S3C2410=y
244 +CONFIG_CPU_S3C2410_DMA=y
245 +CONFIG_S3C2410_PM=y
246 +CONFIG_S3C2410_GPIO=y
247 +CONFIG_S3C2410_PWM=y
248 +
249 +#
250 +# S3C2410 Machines
251 +#
252 +# CONFIG_ARCH_SMDK2410 is not set
253 +# CONFIG_ARCH_H1940 is not set
254 +# CONFIG_MACH_N30 is not set
255 +# CONFIG_ARCH_BAST is not set
256 +# CONFIG_MACH_OTOM is not set
257 +# CONFIG_MACH_AML_M5900 is not set
258 +# CONFIG_MACH_TCT_HAMMER is not set
259 +# CONFIG_MACH_VR1000 is not set
260 +CONFIG_MACH_QT2410=y
261 +# CONFIG_MACH_NEO1973_GTA01 is not set
262 +
263 +#
264 +# S3C2412 Machines
265 +#
266 +# CONFIG_MACH_JIVE is not set
267 +# CONFIG_MACH_SMDK2413 is not set
268 +# CONFIG_MACH_SMDK2412 is not set
269 +# CONFIG_MACH_VSTMS is not set
270 +CONFIG_CPU_S3C2440=y
271 +CONFIG_S3C2440_DMA=y
272 +CONFIG_S3C2440_C_FIQ=y
273 +
274 +#
275 +# S3C2440 Machines
276 +#
277 +# CONFIG_MACH_ANUBIS is not set
278 +# CONFIG_MACH_OSIRIS is not set
279 +# CONFIG_MACH_RX3715 is not set
280 +CONFIG_ARCH_S3C2440=y
281 +# CONFIG_MACH_NEXCODER_2440 is not set
282 +CONFIG_SMDK2440_CPU2440=y
283 +# CONFIG_MACH_AT2440EVB is not set
284 +CONFIG_MACH_NEO1973_GTA02=y
285 +# CONFIG_NEO1973_GTA02_2440 is not set
286 +CONFIG_CPU_S3C2442=y
287 +
288 +#
289 +# S3C2442 Machines
290 +#
291 +CONFIG_SMDK2440_CPU2442=y
292 +
293 +#
294 +# S3C2443 Machines
295 +#
296 +# CONFIG_MACH_SMDK2443 is not set
297 +
298 +#
299 +# Processor Type
300 +#
301 +CONFIG_CPU_32=y
302 +CONFIG_CPU_ARM920T=y
303 +CONFIG_CPU_32v4T=y
304 +CONFIG_CPU_ABRT_EV4T=y
305 +CONFIG_CPU_PABRT_NOIFAR=y
306 +CONFIG_CPU_CACHE_V4WT=y
307 +CONFIG_CPU_CACHE_VIVT=y
308 +CONFIG_CPU_COPY_V4WB=y
309 +CONFIG_CPU_TLB_V4WBI=y
310 +CONFIG_CPU_CP15=y
311 +CONFIG_CPU_CP15_MMU=y
312 +
313 +#
314 +# Processor Features
315 +#
316 +CONFIG_ARM_THUMB=y
317 +# CONFIG_CPU_ICACHE_DISABLE is not set
318 +# CONFIG_CPU_DCACHE_DISABLE is not set
319 +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
320 +# CONFIG_OUTER_CACHE is not set
321 +
322 +#
323 +# Bus support
324 +#
325 +# CONFIG_PCI_SYSCALL is not set
326 +# CONFIG_ARCH_SUPPORTS_MSI is not set
327 +# CONFIG_PCCARD is not set
328 +
329 +#
330 +# Kernel Features
331 +#
332 +CONFIG_VMSPLIT_3G=y
333 +# CONFIG_VMSPLIT_2G is not set
334 +# CONFIG_VMSPLIT_1G is not set
335 +CONFIG_PAGE_OFFSET=0xC0000000
336 +CONFIG_PREEMPT=y
337 +CONFIG_HZ=200
338 +CONFIG_AEABI=y
339 +CONFIG_OABI_COMPAT=y
340 +CONFIG_ARCH_FLATMEM_HAS_HOLES=y
341 +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
342 +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
343 +CONFIG_SELECT_MEMORY_MODEL=y
344 +CONFIG_FLATMEM_MANUAL=y
345 +# CONFIG_DISCONTIGMEM_MANUAL is not set
346 +# CONFIG_SPARSEMEM_MANUAL is not set
347 +CONFIG_FLATMEM=y
348 +CONFIG_FLAT_NODE_MEM_MAP=y
349 +CONFIG_PAGEFLAGS_EXTENDED=y
350 +CONFIG_SPLIT_PTLOCK_CPUS=4096
351 +# CONFIG_RESOURCES_64BIT is not set
352 +# CONFIG_PHYS_ADDR_T_64BIT is not set
353 +CONFIG_ZONE_DMA_FLAG=0
354 +CONFIG_VIRT_TO_BUS=y
355 +CONFIG_UNEVICTABLE_LRU=y
356 +CONFIG_ALIGNMENT_TRAP=y
357 +
358 +#
359 +# Boot options
360 +#
361 +CONFIG_ZBOOT_ROM_TEXT=0x0
362 +CONFIG_ZBOOT_ROM_BSS=0x0
363 +CONFIG_CMDLINE="unused -- bootloader passes ATAG list"
364 +# CONFIG_XIP_KERNEL is not set
365 +CONFIG_KEXEC=y
366 +CONFIG_ATAGS_PROC=y
367 +
368 +#
369 +# CPU Power Management
370 +#
371 +CONFIG_CPU_IDLE=y
372 +CONFIG_CPU_IDLE_GOV_LADDER=y
373 +
374 +#
375 +# Floating point emulation
376 +#
377 +
378 +#
379 +# At least one emulation must be selected
380 +#
381 +CONFIG_FPE_NWFPE=y
382 +# CONFIG_FPE_NWFPE_XP is not set
383 +# CONFIG_FPE_FASTFPE is not set
384 +
385 +#
386 +# Userspace binary formats
387 +#
388 +CONFIG_BINFMT_ELF=y
389 +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
390 +CONFIG_HAVE_AOUT=y
391 +# CONFIG_BINFMT_AOUT is not set
392 +# CONFIG_BINFMT_MISC is not set
393 +
394 +#
395 +# Power management options
396 +#
397 +CONFIG_PM=y
398 +# CONFIG_PM_DEBUG is not set
399 +CONFIG_PM_SLEEP=y
400 +CONFIG_SUSPEND=y
401 +CONFIG_SUSPEND_FREEZER=y
402 +CONFIG_APM_EMULATION=y
403 +CONFIG_ARCH_SUSPEND_POSSIBLE=y
404 +CONFIG_NET=y
405 +
406 +#
407 +# Networking options
408 +#
409 +CONFIG_PACKET=y
410 +CONFIG_PACKET_MMAP=y
411 +CONFIG_UNIX=y
412 +CONFIG_XFRM=y
413 +# CONFIG_XFRM_USER is not set
414 +# CONFIG_XFRM_SUB_POLICY is not set
415 +CONFIG_XFRM_MIGRATE=y
416 +# CONFIG_XFRM_STATISTICS is not set
417 +CONFIG_XFRM_IPCOMP=m
418 +CONFIG_NET_KEY=m
419 +CONFIG_NET_KEY_MIGRATE=y
420 +CONFIG_INET=y
421 +CONFIG_IP_MULTICAST=y
422 +CONFIG_IP_ADVANCED_ROUTER=y
423 +CONFIG_ASK_IP_FIB_HASH=y
424 +# CONFIG_IP_FIB_TRIE is not set
425 +CONFIG_IP_FIB_HASH=y
426 +CONFIG_IP_MULTIPLE_TABLES=y
427 +# CONFIG_IP_ROUTE_MULTIPATH is not set
428 +# CONFIG_IP_ROUTE_VERBOSE is not set
429 +CONFIG_IP_PNP=y
430 +# CONFIG_IP_PNP_DHCP is not set
431 +# CONFIG_IP_PNP_BOOTP is not set
432 +# CONFIG_IP_PNP_RARP is not set
433 +CONFIG_NET_IPIP=m
434 +CONFIG_NET_IPGRE=m
435 +# CONFIG_NET_IPGRE_BROADCAST is not set
436 +# CONFIG_IP_MROUTE is not set
437 +# CONFIG_ARPD is not set
438 +CONFIG_SYN_COOKIES=y
439 +CONFIG_INET_AH=m
440 +CONFIG_INET_ESP=m
441 +CONFIG_INET_IPCOMP=m
442 +CONFIG_INET_XFRM_TUNNEL=m
443 +CONFIG_INET_TUNNEL=m
444 +CONFIG_INET_XFRM_MODE_TRANSPORT=m
445 +CONFIG_INET_XFRM_MODE_TUNNEL=m
446 +CONFIG_INET_XFRM_MODE_BEET=m
447 +# CONFIG_INET_LRO is not set
448 +CONFIG_INET_DIAG=y
449 +CONFIG_INET_TCP_DIAG=y
450 +# CONFIG_TCP_CONG_ADVANCED is not set
451 +CONFIG_TCP_CONG_CUBIC=y
452 +CONFIG_DEFAULT_TCP_CONG="cubic"
453 +CONFIG_TCP_MD5SIG=y
454 +CONFIG_IPV6=m
455 +# CONFIG_IPV6_PRIVACY is not set
456 +# CONFIG_IPV6_ROUTER_PREF is not set
457 +# CONFIG_IPV6_OPTIMISTIC_DAD is not set
458 +CONFIG_INET6_AH=m
459 +CONFIG_INET6_ESP=m
460 +CONFIG_INET6_IPCOMP=m
461 +# CONFIG_IPV6_MIP6 is not set
462 +CONFIG_INET6_XFRM_TUNNEL=m
463 +CONFIG_INET6_TUNNEL=m
464 +CONFIG_INET6_XFRM_MODE_TRANSPORT=m
465 +CONFIG_INET6_XFRM_MODE_TUNNEL=m
466 +CONFIG_INET6_XFRM_MODE_BEET=m
467 +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
468 +CONFIG_IPV6_SIT=m
469 +CONFIG_IPV6_NDISC_NODETYPE=y
470 +CONFIG_IPV6_TUNNEL=m
471 +# CONFIG_IPV6_MULTIPLE_TABLES is not set
472 +# CONFIG_IPV6_MROUTE is not set
473 +# CONFIG_NETWORK_SECMARK is not set
474 +CONFIG_NETFILTER=y
475 +# CONFIG_NETFILTER_DEBUG is not set
476 +CONFIG_NETFILTER_ADVANCED=y
477 +CONFIG_BRIDGE_NETFILTER=y
478 +
479 +#
480 +# Core Netfilter Configuration
481 +#
482 +CONFIG_NETFILTER_NETLINK=m
483 +CONFIG_NETFILTER_NETLINK_QUEUE=m
484 +CONFIG_NETFILTER_NETLINK_LOG=m
485 +CONFIG_NF_CONNTRACK=y
486 +# CONFIG_NF_CT_ACCT is not set
487 +# CONFIG_NF_CONNTRACK_MARK is not set
488 +# CONFIG_NF_CONNTRACK_EVENTS is not set
489 +# CONFIG_NF_CT_PROTO_DCCP is not set
490 +# CONFIG_NF_CT_PROTO_SCTP is not set
491 +# CONFIG_NF_CT_PROTO_UDPLITE is not set
492 +# CONFIG_NF_CONNTRACK_AMANDA is not set
493 +# CONFIG_NF_CONNTRACK_FTP is not set
494 +# CONFIG_NF_CONNTRACK_H323 is not set
495 +# CONFIG_NF_CONNTRACK_IRC is not set
496 +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
497 +# CONFIG_NF_CONNTRACK_PPTP is not set
498 +# CONFIG_NF_CONNTRACK_SANE is not set
499 +# CONFIG_NF_CONNTRACK_SIP is not set
500 +# CONFIG_NF_CONNTRACK_TFTP is not set
501 +# CONFIG_NF_CT_NETLINK is not set
502 +# CONFIG_NETFILTER_TPROXY is not set
503 +CONFIG_NETFILTER_XTABLES=m
504 +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
505 +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
506 +CONFIG_NETFILTER_XT_TARGET_DSCP=m
507 +CONFIG_NETFILTER_XT_TARGET_MARK=m
508 +CONFIG_NETFILTER_XT_TARGET_NFLOG=m
509 +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
510 +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
511 +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
512 +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
513 +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
514 +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
515 +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
516 +# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
517 +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
518 +CONFIG_NETFILTER_XT_MATCH_DCCP=m
519 +CONFIG_NETFILTER_XT_MATCH_DSCP=m
520 +CONFIG_NETFILTER_XT_MATCH_ESP=m
521 +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
522 +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
523 +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
524 +CONFIG_NETFILTER_XT_MATCH_LENGTH=m
525 +CONFIG_NETFILTER_XT_MATCH_LIMIT=m
526 +CONFIG_NETFILTER_XT_MATCH_MAC=m
527 +CONFIG_NETFILTER_XT_MATCH_MARK=m
528 +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
529 +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
530 +CONFIG_NETFILTER_XT_MATCH_POLICY=m
531 +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
532 +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
533 +CONFIG_NETFILTER_XT_MATCH_QUOTA=m
534 +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
535 +CONFIG_NETFILTER_XT_MATCH_REALM=m
536 +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
537 +CONFIG_NETFILTER_XT_MATCH_SCTP=m
538 +# CONFIG_NETFILTER_XT_MATCH_STATE is not set
539 +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
540 +CONFIG_NETFILTER_XT_MATCH_STRING=m
541 +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
542 +# CONFIG_NETFILTER_XT_MATCH_TIME is not set
543 +# CONFIG_NETFILTER_XT_MATCH_U32 is not set
544 +# CONFIG_IP_VS is not set
545 +
546 +#
547 +# IP: Netfilter Configuration
548 +#
549 +CONFIG_NF_DEFRAG_IPV4=y
550 +CONFIG_NF_CONNTRACK_IPV4=y
551 +# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
552 +# CONFIG_IP_NF_QUEUE is not set
553 +CONFIG_IP_NF_IPTABLES=m
554 +CONFIG_IP_NF_MATCH_ADDRTYPE=m
555 +CONFIG_IP_NF_MATCH_AH=m
556 +CONFIG_IP_NF_MATCH_ECN=m
557 +CONFIG_IP_NF_MATCH_TTL=m
558 +CONFIG_IP_NF_FILTER=m
559 +CONFIG_IP_NF_TARGET_REJECT=m
560 +CONFIG_IP_NF_TARGET_LOG=m
561 +CONFIG_IP_NF_TARGET_ULOG=m
562 +CONFIG_NF_NAT=m
563 +CONFIG_NF_NAT_NEEDED=y
564 +CONFIG_IP_NF_TARGET_MASQUERADE=m
565 +# CONFIG_IP_NF_TARGET_NETMAP is not set
566 +# CONFIG_IP_NF_TARGET_REDIRECT is not set
567 +# CONFIG_NF_NAT_SNMP_BASIC is not set
568 +# CONFIG_NF_NAT_FTP is not set
569 +# CONFIG_NF_NAT_IRC is not set
570 +# CONFIG_NF_NAT_TFTP is not set
571 +# CONFIG_NF_NAT_AMANDA is not set
572 +# CONFIG_NF_NAT_PPTP is not set
573 +# CONFIG_NF_NAT_H323 is not set
574 +# CONFIG_NF_NAT_SIP is not set
575 +CONFIG_IP_NF_MANGLE=m
576 +# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
577 +CONFIG_IP_NF_TARGET_ECN=m
578 +CONFIG_IP_NF_TARGET_TTL=m
579 +# CONFIG_IP_NF_RAW is not set
580 +# CONFIG_IP_NF_ARPTABLES is not set
581 +
582 +#
583 +# IPv6: Netfilter Configuration
584 +#
585 +CONFIG_NF_CONNTRACK_IPV6=m
586 +# CONFIG_IP6_NF_QUEUE is not set
587 +CONFIG_IP6_NF_IPTABLES=m
588 +CONFIG_IP6_NF_MATCH_AH=m
589 +CONFIG_IP6_NF_MATCH_EUI64=m
590 +CONFIG_IP6_NF_MATCH_FRAG=m
591 +CONFIG_IP6_NF_MATCH_OPTS=m
592 +CONFIG_IP6_NF_MATCH_HL=m
593 +CONFIG_IP6_NF_MATCH_IPV6HEADER=m
594 +CONFIG_IP6_NF_MATCH_MH=m
595 +CONFIG_IP6_NF_MATCH_RT=m
596 +CONFIG_IP6_NF_TARGET_LOG=m
597 +CONFIG_IP6_NF_FILTER=m
598 +CONFIG_IP6_NF_TARGET_REJECT=m
599 +CONFIG_IP6_NF_MANGLE=m
600 +CONFIG_IP6_NF_TARGET_HL=m
601 +# CONFIG_IP6_NF_RAW is not set
602 +CONFIG_BRIDGE_NF_EBTABLES=m
603 +CONFIG_BRIDGE_EBT_BROUTE=m
604 +CONFIG_BRIDGE_EBT_T_FILTER=m
605 +CONFIG_BRIDGE_EBT_T_NAT=m
606 +CONFIG_BRIDGE_EBT_802_3=m
607 +CONFIG_BRIDGE_EBT_AMONG=m
608 +CONFIG_BRIDGE_EBT_ARP=m
609 +CONFIG_BRIDGE_EBT_IP=m
610 +# CONFIG_BRIDGE_EBT_IP6 is not set
611 +CONFIG_BRIDGE_EBT_LIMIT=m
612 +CONFIG_BRIDGE_EBT_MARK=m
613 +CONFIG_BRIDGE_EBT_PKTTYPE=m
614 +CONFIG_BRIDGE_EBT_STP=m
615 +CONFIG_BRIDGE_EBT_VLAN=m
616 +CONFIG_BRIDGE_EBT_ARPREPLY=m
617 +CONFIG_BRIDGE_EBT_DNAT=m
618 +CONFIG_BRIDGE_EBT_MARK_T=m
619 +CONFIG_BRIDGE_EBT_REDIRECT=m
620 +CONFIG_BRIDGE_EBT_SNAT=m
621 +CONFIG_BRIDGE_EBT_LOG=m
622 +CONFIG_BRIDGE_EBT_ULOG=m
623 +# CONFIG_BRIDGE_EBT_NFLOG is not set
624 +# CONFIG_IP_DCCP is not set
625 +# CONFIG_IP_SCTP is not set
626 +# CONFIG_TIPC is not set
627 +# CONFIG_ATM is not set
628 +CONFIG_STP=y
629 +CONFIG_BRIDGE=y
630 +# CONFIG_NET_DSA is not set
631 +# CONFIG_VLAN_8021Q is not set
632 +# CONFIG_DECNET is not set
633 +CONFIG_LLC=y
634 +# CONFIG_LLC2 is not set
635 +# CONFIG_IPX is not set
636 +# CONFIG_ATALK is not set
637 +# CONFIG_X25 is not set
638 +# CONFIG_LAPB is not set
639 +# CONFIG_ECONET is not set
640 +# CONFIG_WAN_ROUTER is not set
641 +CONFIG_NET_SCHED=y
642 +
643 +#
644 +# Queueing/Scheduling
645 +#
646 +CONFIG_NET_SCH_CBQ=m
647 +CONFIG_NET_SCH_HTB=m
648 +CONFIG_NET_SCH_HFSC=m
649 +CONFIG_NET_SCH_PRIO=m
650 +# CONFIG_NET_SCH_MULTIQ is not set
651 +CONFIG_NET_SCH_RED=m
652 +CONFIG_NET_SCH_SFQ=m
653 +CONFIG_NET_SCH_TEQL=m
654 +CONFIG_NET_SCH_TBF=m
655 +CONFIG_NET_SCH_GRED=m
656 +CONFIG_NET_SCH_DSMARK=m
657 +CONFIG_NET_SCH_NETEM=m
658 +
659 +#
660 +# Classification
661 +#
662 +CONFIG_NET_CLS=y
663 +CONFIG_NET_CLS_BASIC=m
664 +CONFIG_NET_CLS_TCINDEX=m
665 +CONFIG_NET_CLS_ROUTE4=m
666 +CONFIG_NET_CLS_ROUTE=y
667 +CONFIG_NET_CLS_FW=m
668 +CONFIG_NET_CLS_U32=m
669 +CONFIG_CLS_U32_PERF=y
670 +CONFIG_CLS_U32_MARK=y
671 +CONFIG_NET_CLS_RSVP=m
672 +CONFIG_NET_CLS_RSVP6=m
673 +# CONFIG_NET_CLS_FLOW is not set
674 +# CONFIG_NET_EMATCH is not set
675 +# CONFIG_NET_CLS_ACT is not set
676 +# CONFIG_NET_CLS_IND is not set
677 +CONFIG_NET_SCH_FIFO=y
678 +
679 +#
680 +# Network testing
681 +#
682 +# CONFIG_NET_PKTGEN is not set
683 +# CONFIG_HAMRADIO is not set
684 +# CONFIG_CAN is not set
685 +# CONFIG_IRDA is not set
686 +CONFIG_BT=y
687 +CONFIG_BT_L2CAP=y
688 +CONFIG_BT_SCO=y
689 +CONFIG_BT_RFCOMM=y
690 +CONFIG_BT_RFCOMM_TTY=y
691 +CONFIG_BT_BNEP=y
692 +CONFIG_BT_BNEP_MC_FILTER=y
693 +CONFIG_BT_BNEP_PROTO_FILTER=y
694 +CONFIG_BT_HIDP=y
695 +
696 +#
697 +# Bluetooth device drivers
698 +#
699 +CONFIG_BT_HCIBTUSB=y
700 +# CONFIG_BT_HCIBTSDIO is not set
701 +# CONFIG_BT_HCIUART is not set
702 +# CONFIG_BT_HCIBCM203X is not set
703 +# CONFIG_BT_HCIBPA10X is not set
704 +# CONFIG_BT_HCIBFUSB is not set
705 +# CONFIG_BT_HCIVHCI is not set
706 +# CONFIG_AF_RXRPC is not set
707 +# CONFIG_PHONET is not set
708 +CONFIG_FIB_RULES=y
709 +CONFIG_WIRELESS=y
710 +# CONFIG_CFG80211 is not set
711 +# CONFIG_WIRELESS_OLD_REGULATORY is not set
712 +CONFIG_WIRELESS_EXT=y
713 +CONFIG_WIRELESS_EXT_SYSFS=y
714 +# CONFIG_MAC80211 is not set
715 +# CONFIG_IEEE80211 is not set
716 +CONFIG_RFKILL=y
717 +CONFIG_RFKILL_INPUT=y
718 +CONFIG_RFKILL_LEDS=y
719 +# CONFIG_NET_9P is not set
720 +
721 +#
722 +# Device Drivers
723 +#
724 +
725 +#
726 +# Generic Driver Options
727 +#
728 +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
729 +CONFIG_STANDALONE=y
730 +CONFIG_PREVENT_FIRMWARE_BUILD=y
731 +CONFIG_FW_LOADER=y
732 +# CONFIG_FIRMWARE_IN_KERNEL is not set
733 +CONFIG_EXTRA_FIRMWARE=""
734 +# CONFIG_DEBUG_DRIVER is not set
735 +# CONFIG_DEBUG_DEVRES is not set
736 +# CONFIG_SYS_HYPERVISOR is not set
737 +CONFIG_CONNECTOR=m
738 +CONFIG_MTD=y
739 +# CONFIG_MTD_DEBUG is not set
740 +CONFIG_MTD_CONCAT=y
741 +CONFIG_MTD_PARTITIONS=y
742 +# CONFIG_MTD_REDBOOT_PARTS is not set
743 +CONFIG_MTD_CMDLINE_PARTS=y
744 +# CONFIG_MTD_AFS_PARTS is not set
745 +# CONFIG_MTD_AR7_PARTS is not set
746 +
747 +#
748 +# User Modules And Translation Layers
749 +#
750 +CONFIG_MTD_CHAR=y
751 +CONFIG_MTD_BLKDEVS=y
752 +CONFIG_MTD_BLOCK=y
753 +# CONFIG_FTL is not set
754 +# CONFIG_NFTL is not set
755 +# CONFIG_INFTL is not set
756 +# CONFIG_RFD_FTL is not set
757 +# CONFIG_SSFDC is not set
758 +# CONFIG_MTD_OOPS is not set
759 +
760 +#
761 +# RAM/ROM/Flash chip drivers
762 +#
763 +CONFIG_MTD_CFI=y
764 +# CONFIG_MTD_JEDECPROBE is not set
765 +CONFIG_MTD_GEN_PROBE=y
766 +# CONFIG_MTD_CFI_ADV_OPTIONS is not set
767 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
768 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
769 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
770 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
771 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
772 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
773 +CONFIG_MTD_CFI_I1=y
774 +CONFIG_MTD_CFI_I2=y
775 +# CONFIG_MTD_CFI_I4 is not set
776 +# CONFIG_MTD_CFI_I8 is not set
777 +CONFIG_MTD_CFI_INTELEXT=y
778 +# CONFIG_MTD_CFI_AMDSTD is not set
779 +# CONFIG_MTD_CFI_STAA is not set
780 +CONFIG_MTD_CFI_UTIL=y
781 +# CONFIG_MTD_RAM is not set
782 +CONFIG_MTD_ROM=y
783 +CONFIG_MTD_ABSENT=y
784 +
785 +#
786 +# Mapping drivers for chip access
787 +#
788 +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
789 +CONFIG_MTD_PHYSMAP=y
790 +CONFIG_MTD_PHYSMAP_START=0x0
791 +CONFIG_MTD_PHYSMAP_LEN=0
792 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2
793 +# CONFIG_MTD_ARM_INTEGRATOR is not set
794 +# CONFIG_MTD_PLATRAM is not set
795 +
796 +#
797 +# Self-contained MTD device drivers
798 +#
799 +# CONFIG_MTD_DATAFLASH is not set
800 +# CONFIG_MTD_M25P80 is not set
801 +# CONFIG_MTD_SLRAM is not set
802 +# CONFIG_MTD_PHRAM is not set
803 +# CONFIG_MTD_MTDRAM is not set
804 +# CONFIG_MTD_BLOCK2MTD is not set
805 +
806 +#
807 +# Disk-On-Chip Device Drivers
808 +#
809 +# CONFIG_MTD_DOC2000 is not set
810 +# CONFIG_MTD_DOC2001 is not set
811 +# CONFIG_MTD_DOC2001PLUS is not set
812 +CONFIG_MTD_NAND=y
813 +CONFIG_MTD_NAND_VERIFY_WRITE=y
814 +# CONFIG_MTD_NAND_ECC_SMC is not set
815 +# CONFIG_MTD_NAND_MUSEUM_IDS is not set
816 +# CONFIG_MTD_NAND_GPIO is not set
817 +CONFIG_MTD_NAND_IDS=y
818 +CONFIG_MTD_NAND_S3C2410=y
819 +CONFIG_MTD_NAND_S3C2410_DEBUG=y
820 +CONFIG_MTD_NAND_S3C2410_HWECC=y
821 +# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
822 +# CONFIG_MTD_NAND_DISKONCHIP is not set
823 +# CONFIG_MTD_NAND_NANDSIM is not set
824 +# CONFIG_MTD_NAND_PLATFORM is not set
825 +# CONFIG_MTD_ALAUDA is not set
826 +# CONFIG_MTD_ONENAND is not set
827 +
828 +#
829 +# UBI - Unsorted block images
830 +#
831 +# CONFIG_MTD_UBI is not set
832 +# CONFIG_PARPORT is not set
833 +CONFIG_BLK_DEV=y
834 +# CONFIG_BLK_DEV_COW_COMMON is not set
835 +CONFIG_BLK_DEV_LOOP=m
836 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
837 +# CONFIG_BLK_DEV_NBD is not set
838 +CONFIG_BLK_DEV_UB=m
839 +CONFIG_BLK_DEV_RAM=y
840 +CONFIG_BLK_DEV_RAM_COUNT=16
841 +CONFIG_BLK_DEV_RAM_SIZE=4096
842 +# CONFIG_BLK_DEV_XIP is not set
843 +# CONFIG_CDROM_PKTCDVD is not set
844 +# CONFIG_ATA_OVER_ETH is not set
845 +CONFIG_MISC_DEVICES=y
846 +# CONFIG_EEPROM_93CX6 is not set
847 +CONFIG_LOW_MEMORY_KILLER=y
848 +# CONFIG_ENCLOSURE_SERVICES is not set
849 +CONFIG_HAVE_IDE=y
850 +# CONFIG_IDE is not set
851 +
852 +#
853 +# SCSI device support
854 +#
855 +# CONFIG_RAID_ATTRS is not set
856 +CONFIG_SCSI=y
857 +CONFIG_SCSI_DMA=y
858 +# CONFIG_SCSI_TGT is not set
859 +# CONFIG_SCSI_NETLINK is not set
860 +CONFIG_SCSI_PROC_FS=y
861 +
862 +#
863 +# SCSI support type (disk, tape, CD-ROM)
864 +#
865 +CONFIG_BLK_DEV_SD=y
866 +# CONFIG_CHR_DEV_ST is not set
867 +# CONFIG_CHR_DEV_OSST is not set
868 +CONFIG_BLK_DEV_SR=y
869 +# CONFIG_BLK_DEV_SR_VENDOR is not set
870 +CONFIG_CHR_DEV_SG=y
871 +# CONFIG_CHR_DEV_SCH is not set
872 +
873 +#
874 +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
875 +#
876 +CONFIG_SCSI_MULTI_LUN=y
877 +# CONFIG_SCSI_CONSTANTS is not set
878 +# CONFIG_SCSI_LOGGING is not set
879 +CONFIG_SCSI_SCAN_ASYNC=y
880 +CONFIG_SCSI_WAIT_SCAN=m
881 +
882 +#
883 +# SCSI Transports
884 +#
885 +# CONFIG_SCSI_SPI_ATTRS is not set
886 +# CONFIG_SCSI_FC_ATTRS is not set
887 +# CONFIG_SCSI_ISCSI_ATTRS is not set
888 +# CONFIG_SCSI_SAS_LIBSAS is not set
889 +# CONFIG_SCSI_SRP_ATTRS is not set
890 +CONFIG_SCSI_LOWLEVEL=y
891 +# CONFIG_ISCSI_TCP is not set
892 +# CONFIG_SCSI_DEBUG is not set
893 +# CONFIG_SCSI_DH is not set
894 +# CONFIG_ATA is not set
895 +CONFIG_MD=y
896 +# CONFIG_BLK_DEV_MD is not set
897 +CONFIG_BLK_DEV_DM=m
898 +# CONFIG_DM_DEBUG is not set
899 +CONFIG_DM_CRYPT=m
900 +CONFIG_DM_SNAPSHOT=m
901 +# CONFIG_DM_MIRROR is not set
902 +# CONFIG_DM_ZERO is not set
903 +# CONFIG_DM_MULTIPATH is not set
904 +# CONFIG_DM_DELAY is not set
905 +# CONFIG_DM_UEVENT is not set
906 +CONFIG_NETDEVICES=y
907 +# CONFIG_DUMMY is not set
908 +# CONFIG_BONDING is not set
909 +# CONFIG_MACVLAN is not set
910 +# CONFIG_EQUALIZER is not set
911 +CONFIG_TUN=y
912 +# CONFIG_VETH is not set
913 +# CONFIG_PHYLIB is not set
914 +CONFIG_NET_ETHERNET=y
915 +CONFIG_MII=y
916 +# CONFIG_AX88796 is not set
917 +# CONFIG_SMC91X is not set
918 +# CONFIG_DM9000 is not set
919 +# CONFIG_ENC28J60 is not set
920 +# CONFIG_SMC911X is not set
921 +# CONFIG_IBM_NEW_EMAC_ZMII is not set
922 +# CONFIG_IBM_NEW_EMAC_RGMII is not set
923 +# CONFIG_IBM_NEW_EMAC_TAH is not set
924 +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
925 +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
926 +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
927 +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
928 +# CONFIG_B44 is not set
929 +# CONFIG_NETDEV_1000 is not set
930 +# CONFIG_NETDEV_10000 is not set
931 +
932 +#
933 +# Wireless LAN
934 +#
935 +# CONFIG_WLAN_PRE80211 is not set
936 +# CONFIG_WLAN_80211 is not set
937 +# CONFIG_IWLWIFI_LEDS is not set
938 +
939 +#
940 +# USB Network Adapters
941 +#
942 +CONFIG_USB_CATC=m
943 +CONFIG_USB_KAWETH=m
944 +CONFIG_USB_PEGASUS=m
945 +CONFIG_USB_RTL8150=m
946 +CONFIG_USB_USBNET=y
947 +CONFIG_USB_NET_AX8817X=m
948 +CONFIG_USB_NET_CDCETHER=y
949 +CONFIG_USB_NET_DM9601=m
950 +# CONFIG_USB_NET_SMSC95XX is not set
951 +CONFIG_USB_NET_GL620A=m
952 +CONFIG_USB_NET_NET1080=m
953 +CONFIG_USB_NET_PLUSB=m
954 +CONFIG_USB_NET_MCS7830=m
955 +CONFIG_USB_NET_RNDIS_HOST=y
956 +CONFIG_USB_NET_CDC_SUBSET=m
957 +CONFIG_USB_ALI_M5632=y
958 +CONFIG_USB_AN2720=y
959 +CONFIG_USB_BELKIN=y
960 +CONFIG_USB_ARMLINUX=y
961 +CONFIG_USB_EPSON2888=y
962 +CONFIG_USB_KC2190=y
963 +CONFIG_USB_NET_ZAURUS=m
964 +# CONFIG_USB_HSO is not set
965 +# CONFIG_WAN is not set
966 +CONFIG_PPP=y
967 +CONFIG_PPP_MULTILINK=y
968 +CONFIG_PPP_FILTER=y
969 +CONFIG_PPP_ASYNC=y
970 +CONFIG_PPP_SYNC_TTY=y
971 +CONFIG_PPP_DEFLATE=y
972 +CONFIG_PPP_BSDCOMP=y
973 +CONFIG_PPP_MPPE=y
974 +# CONFIG_PPPOE is not set
975 +# CONFIG_PPPOL2TP is not set
976 +# CONFIG_SLIP is not set
977 +CONFIG_SLHC=y
978 +# CONFIG_NETCONSOLE is not set
979 +# CONFIG_NETPOLL is not set
980 +# CONFIG_NET_POLL_CONTROLLER is not set
981 +# CONFIG_ISDN is not set
982 +
983 +#
984 +# Input device support
985 +#
986 +CONFIG_INPUT=y
987 +# CONFIG_INPUT_FF_MEMLESS is not set
988 +# CONFIG_INPUT_POLLDEV is not set
989 +
990 +#
991 +# Userland interfaces
992 +#
993 +CONFIG_INPUT_MOUSEDEV=y
994 +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
995 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
996 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
997 +# CONFIG_INPUT_JOYDEV is not set
998 +CONFIG_INPUT_EVDEV=y
999 +# CONFIG_INPUT_EVBUG is not set
1000 +
1001 +#
1002 +# Input Device Drivers
1003 +#
1004 +CONFIG_INPUT_KEYBOARD=y
1005 +# CONFIG_KEYBOARD_ATKBD is not set
1006 +# CONFIG_KEYBOARD_SUNKBD is not set
1007 +# CONFIG_KEYBOARD_LKKBD is not set
1008 +# CONFIG_KEYBOARD_XTKBD is not set
1009 +# CONFIG_KEYBOARD_NEWTON is not set
1010 +CONFIG_KEYBOARD_STOWAWAY=m
1011 +CONFIG_KEYBOARD_GPIO=m
1012 +CONFIG_KEYBOARD_NEO1973=y
1013 +CONFIG_KEYBOARD_QT2410=y
1014 +CONFIG_INPUT_MOUSE=y
1015 +# CONFIG_MOUSE_PS2 is not set
1016 +# CONFIG_MOUSE_SERIAL is not set
1017 +# CONFIG_MOUSE_APPLETOUCH is not set
1018 +# CONFIG_MOUSE_BCM5974 is not set
1019 +# CONFIG_MOUSE_VSXXXAA is not set
1020 +# CONFIG_MOUSE_GPIO is not set
1021 +# CONFIG_INPUT_JOYSTICK is not set
1022 +# CONFIG_INPUT_TABLET is not set
1023 +CONFIG_INPUT_TOUCHSCREEN=y
1024 +CONFIG_TOUCHSCREEN_FILTER=y
1025 +CONFIG_TOUCHSCREEN_FILTER_GROUP=y
1026 +CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y
1027 +CONFIG_TOUCHSCREEN_FILTER_MEAN=y
1028 +CONFIG_TOUCHSCREEN_FILTER_LINEAR=y
1029 +# CONFIG_TOUCHSCREEN_ADS7846 is not set
1030 +# CONFIG_TOUCHSCREEN_FUJITSU is not set
1031 +CONFIG_TOUCHSCREEN_S3C2410=y
1032 +# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
1033 +# CONFIG_TOUCHSCREEN_GUNZE is not set
1034 +# CONFIG_TOUCHSCREEN_ELO is not set
1035 +# CONFIG_TOUCHSCREEN_MTOUCH is not set
1036 +# CONFIG_TOUCHSCREEN_INEXIO is not set
1037 +# CONFIG_TOUCHSCREEN_MK712 is not set
1038 +# CONFIG_TOUCHSCREEN_PENMOUNT is not set
1039 +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
1040 +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
1041 +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
1042 +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
1043 +# CONFIG_TOUCHSCREEN_PCAP7200 is not set
1044 +CONFIG_INPUT_MISC=y
1045 +# CONFIG_INPUT_ATI_REMOTE is not set
1046 +# CONFIG_INPUT_ATI_REMOTE2 is not set
1047 +# CONFIG_INPUT_KEYSPAN_REMOTE is not set
1048 +# CONFIG_INPUT_POWERMATE is not set
1049 +# CONFIG_INPUT_YEALINK is not set
1050 +# CONFIG_INPUT_CM109 is not set
1051 +CONFIG_INPUT_UINPUT=m
1052 +CONFIG_INPUT_LIS302DL=y
1053 +CONFIG_INPUT_PCF50633_PMU=y
1054 +
1055 +#
1056 +# Hardware I/O ports
1057 +#
1058 +CONFIG_SERIO=y
1059 +# CONFIG_SERIO_SERPORT is not set
1060 +# CONFIG_SERIO_RAW is not set
1061 +# CONFIG_GAMEPORT is not set
1062 +
1063 +#
1064 +# Character devices
1065 +#
1066 +CONFIG_VT=y
1067 +CONFIG_CONSOLE_TRANSLATIONS=y
1068 +CONFIG_VT_CONSOLE=y
1069 +CONFIG_NR_TTY_DEVICES=6
1070 +CONFIG_HW_CONSOLE=y
1071 +CONFIG_VT_HW_CONSOLE_BINDING=y
1072 +# CONFIG_DEVKMEM is not set
1073 +# CONFIG_SERIAL_NONSTANDARD is not set
1074 +
1075 +#
1076 +# Serial drivers
1077 +#
1078 +# CONFIG_SERIAL_8250 is not set
1079 +
1080 +#
1081 +# Non-8250 serial port support
1082 +#
1083 +CONFIG_SERIAL_SAMSUNG=y
1084 +CONFIG_SERIAL_SAMSUNG_UARTS=3
1085 +CONFIG_SERIAL_SAMSUNG_CONSOLE=y
1086 +CONFIG_SERIAL_S3C2410=y
1087 +CONFIG_SERIAL_S3C2440=y
1088 +CONFIG_SERIAL_CORE=y
1089 +CONFIG_SERIAL_CORE_CONSOLE=y
1090 +CONFIG_UNIX98_PTYS=y
1091 +# CONFIG_LEGACY_PTYS is not set
1092 +# CONFIG_IPMI_HANDLER is not set
1093 +# CONFIG_HW_RANDOM is not set
1094 +# CONFIG_NVRAM is not set
1095 +# CONFIG_R3964 is not set
1096 +# CONFIG_RAW_DRIVER is not set
1097 +# CONFIG_TCG_TPM is not set
1098 +CONFIG_I2C=y
1099 +CONFIG_I2C_BOARDINFO=y
1100 +CONFIG_I2C_CHARDEV=y
1101 +CONFIG_I2C_HELPER_AUTO=y
1102 +
1103 +#
1104 +# I2C Hardware Bus support
1105 +#
1106 +
1107 +#
1108 +# I2C system bus drivers (mostly embedded / system-on-chip)
1109 +#
1110 +# CONFIG_I2C_GPIO is not set
1111 +# CONFIG_I2C_OCORES is not set
1112 +CONFIG_I2C_S3C2410=y
1113 +# CONFIG_I2C_SIMTEC is not set
1114 +
1115 +#
1116 +# External I2C/SMBus adapter drivers
1117 +#
1118 +# CONFIG_I2C_PARPORT_LIGHT is not set
1119 +# CONFIG_I2C_TAOS_EVM is not set
1120 +# CONFIG_I2C_TINY_USB is not set
1121 +
1122 +#
1123 +# Other I2C/SMBus bus drivers
1124 +#
1125 +# CONFIG_I2C_PCA_PLATFORM is not set
1126 +# CONFIG_I2C_STUB is not set
1127 +
1128 +#
1129 +# Miscellaneous I2C Chip support
1130 +#
1131 +# CONFIG_DS1682 is not set
1132 +# CONFIG_AT24 is not set
1133 +# CONFIG_SENSORS_EEPROM is not set
1134 +# CONFIG_SENSORS_PCF50606 is not set
1135 +# CONFIG_SENSORS_PCF50633 is not set
1136 +# CONFIG_SENSORS_PCF8574 is not set
1137 +# CONFIG_PCF8575 is not set
1138 +# CONFIG_SENSORS_PCA9539 is not set
1139 +# CONFIG_SENSORS_PCF8591 is not set
1140 +# CONFIG_TPS65010 is not set
1141 +# CONFIG_SENSORS_MAX6875 is not set
1142 +# CONFIG_SENSORS_TSL2550 is not set
1143 +# CONFIG_SENSORS_TSL256X is not set
1144 +CONFIG_PCA9632=y
1145 +# CONFIG_I2C_DEBUG_CORE is not set
1146 +# CONFIG_I2C_DEBUG_ALGO is not set
1147 +# CONFIG_I2C_DEBUG_BUS is not set
1148 +# CONFIG_I2C_DEBUG_CHIP is not set
1149 +CONFIG_SPI=y
1150 +# CONFIG_SPI_DEBUG is not set
1151 +CONFIG_SPI_MASTER=y
1152 +
1153 +#
1154 +# SPI Master Controller Drivers
1155 +#
1156 +CONFIG_SPI_BITBANG=y
1157 +# CONFIG_SPI_S3C24XX is not set
1158 +CONFIG_SPI_S3C24XX_GPIO=y
1159 +
1160 +#
1161 +# SPI Protocol Masters
1162 +#
1163 +# CONFIG_SPI_AT25 is not set
1164 +# CONFIG_SPI_SPIDEV is not set
1165 +# CONFIG_SPI_TLE62X0 is not set
1166 +CONFIG_ARCH_REQUIRE_GPIOLIB=y
1167 +CONFIG_GPIOLIB=y
1168 +CONFIG_DEBUG_GPIO=y
1169 +CONFIG_GPIO_SYSFS=y
1170 +
1171 +#
1172 +# I2C GPIO expanders:
1173 +#
1174 +# CONFIG_GPIO_MAX732X is not set
1175 +# CONFIG_GPIO_PCA953X is not set
1176 +# CONFIG_GPIO_PCF857X is not set
1177 +
1178 +#
1179 +# PCI GPIO expanders:
1180 +#
1181 +
1182 +#
1183 +# SPI GPIO expanders:
1184 +#
1185 +# CONFIG_GPIO_MAX7301 is not set
1186 +# CONFIG_GPIO_MCP23S08 is not set
1187 +# CONFIG_W1 is not set
1188 +CONFIG_POWER_SUPPLY=y
1189 +CONFIG_POWER_SUPPLY_DEBUG=y
1190 +CONFIG_PDA_POWER=y
1191 +CONFIG_APM_POWER=y
1192 +# CONFIG_BATTERY_DS2760 is not set
1193 +# CONFIG_BATTERY_BQ27x00 is not set
1194 +CONFIG_BATTERY_BQ27000_HDQ=y
1195 +CONFIG_GTA02_HDQ=y
1196 +CONFIG_CHARGER_PCF50633=y
1197 +CONFIG_HWMON=y
1198 +# CONFIG_HWMON_VID is not set
1199 +# CONFIG_SENSORS_AD7414 is not set
1200 +# CONFIG_SENSORS_AD7418 is not set
1201 +# CONFIG_SENSORS_ADCXX is not set
1202 +# CONFIG_SENSORS_ADM1021 is not set
1203 +# CONFIG_SENSORS_ADM1025 is not set
1204 +# CONFIG_SENSORS_ADM1026 is not set
1205 +# CONFIG_SENSORS_ADM1029 is not set
1206 +# CONFIG_SENSORS_ADM1031 is not set
1207 +# CONFIG_SENSORS_ADM9240 is not set
1208 +# CONFIG_SENSORS_ADT7470 is not set
1209 +# CONFIG_SENSORS_ADT7473 is not set
1210 +# CONFIG_SENSORS_ATXP1 is not set
1211 +# CONFIG_SENSORS_DS1621 is not set
1212 +# CONFIG_SENSORS_F71805F is not set
1213 +# CONFIG_SENSORS_F71882FG is not set
1214 +# CONFIG_SENSORS_F75375S is not set
1215 +# CONFIG_SENSORS_GL518SM is not set
1216 +# CONFIG_SENSORS_GL520SM is not set
1217 +# CONFIG_SENSORS_IT87 is not set
1218 +# CONFIG_SENSORS_LM63 is not set
1219 +# CONFIG_SENSORS_LM70 is not set
1220 +# CONFIG_SENSORS_LM75 is not set
1221 +# CONFIG_SENSORS_LM77 is not set
1222 +# CONFIG_SENSORS_LM78 is not set
1223 +# CONFIG_SENSORS_LM80 is not set
1224 +# CONFIG_SENSORS_LM83 is not set
1225 +# CONFIG_SENSORS_LM85 is not set
1226 +# CONFIG_SENSORS_LM87 is not set
1227 +# CONFIG_SENSORS_LM90 is not set
1228 +# CONFIG_SENSORS_LM92 is not set
1229 +# CONFIG_SENSORS_LM93 is not set
1230 +# CONFIG_SENSORS_MAX1111 is not set
1231 +# CONFIG_SENSORS_MAX1619 is not set
1232 +# CONFIG_SENSORS_MAX6650 is not set
1233 +# CONFIG_SENSORS_PC87360 is not set
1234 +# CONFIG_SENSORS_PC87427 is not set
1235 +# CONFIG_SENSORS_DME1737 is not set
1236 +# CONFIG_SENSORS_SMSC47M1 is not set
1237 +# CONFIG_SENSORS_SMSC47M192 is not set
1238 +# CONFIG_SENSORS_SMSC47B397 is not set
1239 +# CONFIG_SENSORS_ADS7828 is not set
1240 +# CONFIG_SENSORS_THMC50 is not set
1241 +# CONFIG_SENSORS_VT1211 is not set
1242 +# CONFIG_SENSORS_W83781D is not set
1243 +# CONFIG_SENSORS_W83791D is not set
1244 +# CONFIG_SENSORS_W83792D is not set
1245 +# CONFIG_SENSORS_W83793 is not set
1246 +# CONFIG_SENSORS_W83L785TS is not set
1247 +# CONFIG_SENSORS_W83L786NG is not set
1248 +# CONFIG_SENSORS_W83627HF is not set
1249 +# CONFIG_SENSORS_W83627EHF is not set
1250 +# CONFIG_HWMON_DEBUG_CHIP is not set
1251 +# CONFIG_THERMAL is not set
1252 +# CONFIG_THERMAL_HWMON is not set
1253 +CONFIG_WATCHDOG=y
1254 +# CONFIG_WATCHDOG_NOWAYOUT is not set
1255 +
1256 +#
1257 +# Watchdog Device Drivers
1258 +#
1259 +# CONFIG_SOFT_WATCHDOG is not set
1260 +CONFIG_S3C2410_WATCHDOG=m
1261 +
1262 +#
1263 +# USB-based Watchdog Cards
1264 +#
1265 +# CONFIG_USBPCWATCHDOG is not set
1266 +
1267 +#
1268 +# Sonics Silicon Backplane
1269 +#
1270 +CONFIG_SSB_POSSIBLE=y
1271 +# CONFIG_SSB is not set
1272 +
1273 +#
1274 +# Multifunction device drivers
1275 +#
1276 +# CONFIG_MFD_CORE is not set
1277 +# CONFIG_MFD_SM501 is not set
1278 +# CONFIG_MFD_ASIC3 is not set
1279 +# CONFIG_HTC_EGPIO is not set
1280 +# CONFIG_HTC_PASIC3 is not set
1281 +# CONFIG_MFD_TMIO is not set
1282 +# CONFIG_MFD_T7L66XB is not set
1283 +# CONFIG_MFD_TC6387XB is not set
1284 +# CONFIG_MFD_TC6393XB is not set
1285 +# CONFIG_PMIC_DA903X is not set
1286 +# CONFIG_MFD_WM8400 is not set
1287 +# CONFIG_MFD_WM8350_I2C is not set
1288 +CONFIG_MFD_PCF50633=y
1289 +CONFIG_PCF50633_ADC=y
1290 +CONFIG_PCF50633_GPIO=y
1291 +# CONFIG_MFD_PCF50606 is not set
1292 +CONFIG_MFD_GLAMO=y
1293 +CONFIG_MFD_GLAMO_FB=y
1294 +CONFIG_MFD_GLAMO_SPI_GPIO=y
1295 +CONFIG_MFD_GLAMO_SPI_FB=y
1296 +CONFIG_MFD_GLAMO_MCI=y
1297 +
1298 +#
1299 +# Multimedia devices
1300 +#
1301 +
1302 +#
1303 +# Multimedia core support
1304 +#
1305 +# CONFIG_VIDEO_DEV is not set
1306 +# CONFIG_DVB_CORE is not set
1307 +# CONFIG_VIDEO_MEDIA is not set
1308 +
1309 +#
1310 +# Multimedia drivers
1311 +#
1312 +CONFIG_DAB=y
1313 +# CONFIG_USB_DABUSB is not set
1314 +
1315 +#
1316 +# Graphics support
1317 +#
1318 +# CONFIG_VGASTATE is not set
1319 +CONFIG_VIDEO_OUTPUT_CONTROL=y
1320 +CONFIG_FB=y
1321 +# CONFIG_FIRMWARE_EDID is not set
1322 +# CONFIG_FB_DDC is not set
1323 +# CONFIG_FB_BOOT_VESA_SUPPORT is not set
1324 +CONFIG_FB_CFB_FILLRECT=y
1325 +CONFIG_FB_CFB_COPYAREA=y
1326 +CONFIG_FB_CFB_IMAGEBLIT=y
1327 +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
1328 +# CONFIG_FB_SYS_FILLRECT is not set
1329 +# CONFIG_FB_SYS_COPYAREA is not set
1330 +# CONFIG_FB_SYS_IMAGEBLIT is not set
1331 +# CONFIG_FB_FOREIGN_ENDIAN is not set
1332 +# CONFIG_FB_SYS_FOPS is not set
1333 +# CONFIG_FB_SVGALIB is not set
1334 +# CONFIG_FB_MACMODES is not set
1335 +# CONFIG_FB_BACKLIGHT is not set
1336 +# CONFIG_FB_MODE_HELPERS is not set
1337 +# CONFIG_FB_TILEBLITTING is not set
1338 +
1339 +#
1340 +# Frame buffer hardware drivers
1341 +#
1342 +# CONFIG_FB_UVESA is not set
1343 +# CONFIG_FB_S1D13XXX is not set
1344 +CONFIG_FB_S3C2410=y
1345 +# CONFIG_FB_S3C2410_DEBUG is not set
1346 +# CONFIG_FB_VIRTUAL is not set
1347 +# CONFIG_FB_METRONOME is not set
1348 +# CONFIG_FB_MB862XX is not set
1349 +CONFIG_BACKLIGHT_LCD_SUPPORT=y
1350 +CONFIG_LCD_CLASS_DEVICE=y
1351 +CONFIG_LCD_LTV350QV=y
1352 +# CONFIG_LCD_ILI9320 is not set
1353 +# CONFIG_LCD_TDO24M is not set
1354 +# CONFIG_LCD_VGG2432A4 is not set
1355 +# CONFIG_LCD_PLATFORM is not set
1356 +CONFIG_BACKLIGHT_CLASS_DEVICE=y
1357 +CONFIG_BACKLIGHT_CORGI=y
1358 +# CONFIG_BACKLIGHT_PWM is not set
1359 +
1360 +#
1361 +# Display device support
1362 +#
1363 +CONFIG_DISPLAY_SUPPORT=y
1364 +
1365 +#
1366 +# Display hardware drivers
1367 +#
1368 +CONFIG_DISPLAY_JBT6K74=y
1369 +
1370 +#
1371 +# Console display driver support
1372 +#
1373 +# CONFIG_VGA_CONSOLE is not set
1374 +CONFIG_DUMMY_CONSOLE=y
1375 +CONFIG_FRAMEBUFFER_CONSOLE=y
1376 +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
1377 +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
1378 +CONFIG_FONTS=y
1379 +# CONFIG_FONT_8x8 is not set
1380 +# CONFIG_FONT_8x16 is not set
1381 +CONFIG_FONT_6x11=y
1382 +# CONFIG_FONT_7x14 is not set
1383 +# CONFIG_FONT_PEARL_8x8 is not set
1384 +# CONFIG_FONT_ACORN_8x8 is not set
1385 +# CONFIG_FONT_MINI_4x6 is not set
1386 +# CONFIG_FONT_SUN8x16 is not set
1387 +# CONFIG_FONT_SUN12x22 is not set
1388 +# CONFIG_FONT_10x18 is not set
1389 +# CONFIG_LOGO is not set
1390 +CONFIG_SOUND=y
1391 +CONFIG_SOUND_OSS_CORE=y
1392 +CONFIG_SND=y
1393 +CONFIG_SND_TIMER=y
1394 +CONFIG_SND_PCM=y
1395 +CONFIG_SND_HWDEP=m
1396 +CONFIG_SND_RAWMIDI=m
1397 +# CONFIG_SND_SEQUENCER is not set
1398 +CONFIG_SND_OSSEMUL=y
1399 +CONFIG_SND_MIXER_OSS=y
1400 +CONFIG_SND_PCM_OSS=y
1401 +CONFIG_SND_PCM_OSS_PLUGINS=y
1402 +# CONFIG_SND_DYNAMIC_MINORS is not set
1403 +CONFIG_SND_SUPPORT_OLD_API=y
1404 +CONFIG_SND_VERBOSE_PROCFS=y
1405 +# CONFIG_SND_VERBOSE_PRINTK is not set
1406 +CONFIG_SND_DEBUG=y
1407 +# CONFIG_SND_DEBUG_VERBOSE is not set
1408 +CONFIG_SND_PCM_XRUN_DEBUG=y
1409 +CONFIG_SND_DRIVERS=y
1410 +# CONFIG_SND_DUMMY is not set
1411 +# CONFIG_SND_MTPAV is not set
1412 +# CONFIG_SND_SERIAL_U16550 is not set
1413 +# CONFIG_SND_MPU401 is not set
1414 +CONFIG_SND_ARM=y
1415 +# CONFIG_SND_SPI is not set
1416 +CONFIG_SND_USB=y
1417 +CONFIG_SND_USB_AUDIO=m
1418 +# CONFIG_SND_USB_CAIAQ is not set
1419 +CONFIG_SND_SOC=y
1420 +CONFIG_SND_S3C24XX_SOC=y
1421 +CONFIG_SND_S3C24XX_SOC_I2S=y
1422 +CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753=y
1423 +# CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set
1424 +# CONFIG_SND_SOC_ALL_CODECS is not set
1425 +CONFIG_SND_SOC_WM8753=y
1426 +# CONFIG_SOUND_PRIME is not set
1427 +CONFIG_HID_SUPPORT=y
1428 +CONFIG_HID=y
1429 +# CONFIG_HID_DEBUG is not set
1430 +# CONFIG_HIDRAW is not set
1431 +
1432 +#
1433 +# USB Input Devices
1434 +#
1435 +CONFIG_USB_HID=y
1436 +CONFIG_HID_PID=y
1437 +# CONFIG_USB_HIDDEV is not set
1438 +
1439 +#
1440 +# Special HID drivers
1441 +#
1442 +CONFIG_HID_COMPAT=y
1443 +CONFIG_HID_A4TECH=y
1444 +CONFIG_HID_APPLE=y
1445 +CONFIG_HID_BELKIN=y
1446 +CONFIG_HID_BRIGHT=y
1447 +CONFIG_HID_CHERRY=y
1448 +CONFIG_HID_CHICONY=y
1449 +CONFIG_HID_CYPRESS=y
1450 +CONFIG_HID_DELL=y
1451 +CONFIG_HID_EZKEY=y
1452 +CONFIG_HID_GYRATION=y
1453 +CONFIG_HID_LOGITECH=y
1454 +# CONFIG_LOGITECH_FF is not set
1455 +# CONFIG_LOGIRUMBLEPAD2_FF is not set
1456 +CONFIG_HID_MICROSOFT=y
1457 +CONFIG_HID_MONTEREY=y
1458 +CONFIG_HID_PANTHERLORD=y
1459 +# CONFIG_PANTHERLORD_FF is not set
1460 +CONFIG_HID_PETALYNX=y
1461 +CONFIG_HID_SAMSUNG=y
1462 +CONFIG_HID_SONY=y
1463 +CONFIG_HID_SUNPLUS=y
1464 +# CONFIG_THRUSTMASTER_FF is not set
1465 +# CONFIG_ZEROPLUS_FF is not set
1466 +CONFIG_USB_SUPPORT=y
1467 +CONFIG_USB_ARCH_HAS_HCD=y
1468 +CONFIG_USB_ARCH_HAS_OHCI=y
1469 +# CONFIG_USB_ARCH_HAS_EHCI is not set
1470 +CONFIG_USB=y
1471 +# CONFIG_USB_DEBUG is not set
1472 +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
1473 +
1474 +#
1475 +# Miscellaneous USB options
1476 +#
1477 +CONFIG_USB_DEVICEFS=y
1478 +CONFIG_USB_DEVICE_CLASS=y
1479 +# CONFIG_USB_DYNAMIC_MINORS is not set
1480 +CONFIG_USB_SUSPEND=y
1481 +# CONFIG_USB_OTG is not set
1482 +CONFIG_USB_MON=y
1483 +# CONFIG_USB_WUSB is not set
1484 +# CONFIG_USB_WUSB_CBAF is not set
1485 +
1486 +#
1487 +# USB Host Controller Drivers
1488 +#
1489 +# CONFIG_USB_C67X00_HCD is not set
1490 +# CONFIG_USB_ISP116X_HCD is not set
1491 +# CONFIG_USB_ISP1760_HCD is not set
1492 +CONFIG_USB_OHCI_HCD=y
1493 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
1494 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
1495 +CONFIG_USB_OHCI_LITTLE_ENDIAN=y
1496 +# CONFIG_USB_SL811_HCD is not set
1497 +# CONFIG_USB_R8A66597_HCD is not set
1498 +# CONFIG_USB_HWA_HCD is not set
1499 +# CONFIG_USB_MUSB_HDRC is not set
1500 +# CONFIG_USB_GADGET_MUSB_HDRC is not set
1501 +
1502 +#
1503 +# USB Device Class drivers
1504 +#
1505 +CONFIG_USB_ACM=y
1506 +CONFIG_USB_PRINTER=m
1507 +# CONFIG_USB_WDM is not set
1508 +CONFIG_USB_TMC=m
1509 +
1510 +#
1511 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
1512 +#
1513 +
1514 +#
1515 +# may also be needed; see USB_STORAGE Help for more information
1516 +#
1517 +CONFIG_USB_STORAGE=y
1518 +# CONFIG_USB_STORAGE_DEBUG is not set
1519 +CONFIG_USB_STORAGE_DATAFAB=y
1520 +CONFIG_USB_STORAGE_FREECOM=y
1521 +# CONFIG_USB_STORAGE_ISD200 is not set
1522 +CONFIG_USB_STORAGE_DPCM=y
1523 +CONFIG_USB_STORAGE_USBAT=y
1524 +CONFIG_USB_STORAGE_SDDR09=y
1525 +CONFIG_USB_STORAGE_SDDR55=y
1526 +CONFIG_USB_STORAGE_JUMPSHOT=y
1527 +CONFIG_USB_STORAGE_ALAUDA=y
1528 +# CONFIG_USB_STORAGE_ONETOUCH is not set
1529 +CONFIG_USB_STORAGE_KARMA=y
1530 +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
1531 +CONFIG_USB_LIBUSUAL=y
1532 +
1533 +#
1534 +# USB Imaging devices
1535 +#
1536 +# CONFIG_USB_MDC800 is not set
1537 +# CONFIG_USB_MICROTEK is not set
1538 +
1539 +#
1540 +# USB port drivers
1541 +#
1542 +CONFIG_USB_SERIAL=y
1543 +CONFIG_USB_SERIAL_CONSOLE=y
1544 +CONFIG_USB_EZUSB=y
1545 +CONFIG_USB_SERIAL_GENERIC=y
1546 +CONFIG_USB_SERIAL_AIRCABLE=m
1547 +CONFIG_USB_SERIAL_ARK3116=m
1548 +CONFIG_USB_SERIAL_BELKIN=m
1549 +# CONFIG_USB_SERIAL_CH341 is not set
1550 +CONFIG_USB_SERIAL_WHITEHEAT=m
1551 +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
1552 +CONFIG_USB_SERIAL_CP2101=m
1553 +CONFIG_USB_SERIAL_CYPRESS_M8=m
1554 +CONFIG_USB_SERIAL_EMPEG=m
1555 +CONFIG_USB_SERIAL_FTDI_SIO=m
1556 +CONFIG_USB_SERIAL_FUNSOFT=m
1557 +CONFIG_USB_SERIAL_VISOR=m
1558 +CONFIG_USB_SERIAL_IPAQ=m
1559 +CONFIG_USB_SERIAL_IR=m
1560 +CONFIG_USB_SERIAL_EDGEPORT=m
1561 +CONFIG_USB_SERIAL_EDGEPORT_TI=m
1562 +CONFIG_USB_SERIAL_GARMIN=m
1563 +CONFIG_USB_SERIAL_IPW=m
1564 +# CONFIG_USB_SERIAL_IUU is not set
1565 +CONFIG_USB_SERIAL_KEYSPAN_PDA=m
1566 +CONFIG_USB_SERIAL_KEYSPAN=m
1567 +CONFIG_USB_SERIAL_KLSI=m
1568 +CONFIG_USB_SERIAL_KOBIL_SCT=m
1569 +CONFIG_USB_SERIAL_MCT_U232=m
1570 +CONFIG_USB_SERIAL_MOS7720=m
1571 +CONFIG_USB_SERIAL_MOS7840=m
1572 +# CONFIG_USB_SERIAL_MOTOROLA is not set
1573 +CONFIG_USB_SERIAL_NAVMAN=m
1574 +CONFIG_USB_SERIAL_PL2303=m
1575 +# CONFIG_USB_SERIAL_OTI6858 is not set
1576 +# CONFIG_USB_SERIAL_SPCP8X5 is not set
1577 +CONFIG_USB_SERIAL_HP4X=m
1578 +CONFIG_USB_SERIAL_SAFE=m
1579 +CONFIG_USB_SERIAL_SAFE_PADDED=y
1580 +CONFIG_USB_SERIAL_SIERRAWIRELESS=m
1581 +CONFIG_USB_SERIAL_TI=m
1582 +CONFIG_USB_SERIAL_CYBERJACK=m
1583 +CONFIG_USB_SERIAL_XIRCOM=m
1584 +CONFIG_USB_SERIAL_OPTION=y
1585 +CONFIG_USB_SERIAL_OMNINET=m
1586 +# CONFIG_USB_SERIAL_DEBUG is not set
1587 +
1588 +#
1589 +# USB Miscellaneous drivers
1590 +#
1591 +# CONFIG_USB_EMI62 is not set
1592 +# CONFIG_USB_EMI26 is not set
1593 +# CONFIG_USB_ADUTUX is not set
1594 +# CONFIG_USB_SEVSEG is not set
1595 +# CONFIG_USB_RIO500 is not set
1596 +# CONFIG_USB_LEGOTOWER is not set
1597 +# CONFIG_USB_LCD is not set
1598 +CONFIG_USB_BERRY_CHARGE=m
1599 +# CONFIG_USB_LED is not set
1600 +# CONFIG_USB_CYPRESS_CY7C63 is not set
1601 +# CONFIG_USB_CYTHERM is not set
1602 +# CONFIG_USB_PHIDGET is not set
1603 +# CONFIG_USB_IDMOUSE is not set
1604 +# CONFIG_USB_FTDI_ELAN is not set
1605 +# CONFIG_USB_APPLEDISPLAY is not set
1606 +# CONFIG_USB_LD is not set
1607 +CONFIG_USB_TRANCEVIBRATOR=m
1608 +CONFIG_USB_IOWARRIOR=m
1609 +# CONFIG_USB_TEST is not set
1610 +# CONFIG_USB_ISIGHTFW is not set
1611 +# CONFIG_USB_VST is not set
1612 +CONFIG_USB_GADGET=y
1613 +# CONFIG_USB_GADGET_DEBUG is not set
1614 +# CONFIG_USB_GADGET_DEBUG_FILES is not set
1615 +# CONFIG_USB_GADGET_DEBUG_FS is not set
1616 +CONFIG_USB_GADGET_VBUS_DRAW=500
1617 +CONFIG_USB_GADGET_SELECTED=y
1618 +# CONFIG_USB_GADGET_AT91 is not set
1619 +# CONFIG_USB_GADGET_ATMEL_USBA is not set
1620 +# CONFIG_USB_GADGET_FSL_USB2 is not set
1621 +# CONFIG_USB_GADGET_LH7A40X is not set
1622 +# CONFIG_USB_GADGET_OMAP is not set
1623 +# CONFIG_USB_GADGET_PXA25X is not set
1624 +# CONFIG_USB_GADGET_PXA27X is not set
1625 +CONFIG_USB_GADGET_S3C2410=y
1626 +CONFIG_USB_S3C2410=y
1627 +CONFIG_USB_S3C2410_DEBUG=y
1628 +# CONFIG_USB_GADGET_M66592 is not set
1629 +# CONFIG_USB_GADGET_AMD5536UDC is not set
1630 +# CONFIG_USB_GADGET_FSL_QE is not set
1631 +# CONFIG_USB_GADGET_NET2280 is not set
1632 +# CONFIG_USB_GADGET_GOKU is not set
1633 +# CONFIG_USB_GADGET_DUMMY_HCD is not set
1634 +# CONFIG_USB_GADGET_DUALSPEED is not set
1635 +# CONFIG_USB_ZERO is not set
1636 +CONFIG_USB_ETH=y
1637 +CONFIG_USB_ETH_RNDIS=y
1638 +# CONFIG_USB_GADGETFS is not set
1639 +# CONFIG_USB_FILE_STORAGE is not set
1640 +# CONFIG_USB_G_SERIAL is not set
1641 +# CONFIG_USB_MIDI_GADGET is not set
1642 +# CONFIG_USB_G_PRINTER is not set
1643 +# CONFIG_USB_CDC_COMPOSITE is not set
1644 +CONFIG_AR6000_WLAN=y
1645 +CONFIG_MMC=y
1646 +# CONFIG_MMC_DEBUG is not set
1647 +CONFIG_MMC_UNSAFE_RESUME=y
1648 +
1649 +#
1650 +# MMC/SD/SDIO Card Drivers
1651 +#
1652 +CONFIG_MMC_BLOCK=y
1653 +CONFIG_MMC_BLOCK_BOUNCE=y
1654 +# CONFIG_SDIO_UART is not set
1655 +# CONFIG_MMC_TEST is not set
1656 +
1657 +#
1658 +# MMC/SD/SDIO Host Controller Drivers
1659 +#
1660 +CONFIG_MMC_SDHCI=y
1661 +CONFIG_MMC_SDHCI_S3C=y
1662 +# CONFIG_MMC_SPI is not set
1663 +CONFIG_MMC_S3C=y
1664 +# CONFIG_MEMSTICK is not set
1665 +# CONFIG_ACCESSIBILITY is not set
1666 +CONFIG_NEW_LEDS=y
1667 +CONFIG_LEDS_CLASS=y
1668 +
1669 +#
1670 +# LED drivers
1671 +#
1672 +CONFIG_LEDS_S3C24XX=m
1673 +# CONFIG_LEDS_PCA9532 is not set
1674 +CONFIG_LEDS_GPIO=y
1675 +# CONFIG_LEDS_PCA955X is not set
1676 +CONFIG_LEDS_NEO1973_VIBRATOR=y
1677 +CONFIG_LEDS_NEO1973_GTA02=y
1678 +
1679 +#
1680 +# LED Triggers
1681 +#
1682 +CONFIG_LEDS_TRIGGERS=y
1683 +CONFIG_LEDS_TRIGGER_TIMER=y
1684 +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
1685 +CONFIG_LEDS_TRIGGER_BACKLIGHT=y
1686 +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
1687 +CONFIG_RTC_LIB=y
1688 +CONFIG_RTC_CLASS=y
1689 +CONFIG_RTC_HCTOSYS=y
1690 +CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
1691 +CONFIG_RTC_DEBUG=y
1692 +
1693 +#
1694 +# RTC interfaces
1695 +#
1696 +CONFIG_RTC_INTF_SYSFS=y
1697 +CONFIG_RTC_INTF_PROC=y
1698 +CONFIG_RTC_INTF_DEV=y
1699 +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
1700 +# CONFIG_RTC_DRV_TEST is not set
1701 +
1702 +#
1703 +# I2C RTC drivers
1704 +#
1705 +# CONFIG_RTC_DRV_DS1307 is not set
1706 +# CONFIG_RTC_DRV_DS1374 is not set
1707 +# CONFIG_RTC_DRV_DS1672 is not set
1708 +# CONFIG_RTC_DRV_MAX6900 is not set
1709 +# CONFIG_RTC_DRV_RS5C372 is not set
1710 +# CONFIG_RTC_DRV_ISL1208 is not set
1711 +# CONFIG_RTC_DRV_X1205 is not set
1712 +# CONFIG_RTC_DRV_PCF8563 is not set
1713 +# CONFIG_RTC_DRV_PCF8583 is not set
1714 +CONFIG_RTC_DRV_PCF50633=y
1715 +# CONFIG_RTC_DRV_PCF50606 is not set
1716 +# CONFIG_RTC_DRV_M41T80 is not set
1717 +# CONFIG_RTC_DRV_S35390A is not set
1718 +# CONFIG_RTC_DRV_FM3130 is not set
1719 +
1720 +#
1721 +# SPI RTC drivers
1722 +#
1723 +# CONFIG_RTC_DRV_M41T94 is not set
1724 +# CONFIG_RTC_DRV_DS1305 is not set
1725 +# CONFIG_RTC_DRV_MAX6902 is not set
1726 +# CONFIG_RTC_DRV_R9701 is not set
1727 +# CONFIG_RTC_DRV_RS5C348 is not set
1728 +# CONFIG_RTC_DRV_DS3234 is not set
1729 +
1730 +#
1731 +# Platform RTC drivers
1732 +#
1733 +# CONFIG_RTC_DRV_CMOS is not set
1734 +# CONFIG_RTC_DRV_DS1286 is not set
1735 +# CONFIG_RTC_DRV_DS1511 is not set
1736 +# CONFIG_RTC_DRV_DS1553 is not set
1737 +# CONFIG_RTC_DRV_DS1742 is not set
1738 +# CONFIG_RTC_DRV_STK17TA8 is not set
1739 +# CONFIG_RTC_DRV_M48T86 is not set
1740 +# CONFIG_RTC_DRV_M48T35 is not set
1741 +# CONFIG_RTC_DRV_M48T59 is not set
1742 +# CONFIG_RTC_DRV_BQ4802 is not set
1743 +# CONFIG_RTC_DRV_V3020 is not set
1744 +
1745 +#
1746 +# on-CPU RTC drivers
1747 +#
1748 +CONFIG_RTC_DRV_S3C=m
1749 +CONFIG_DMADEVICES=y
1750 +
1751 +#
1752 +# DMA Devices
1753 +#
1754 +
1755 +#
1756 +# Android
1757 +#
1758 +CONFIG_ANDROID_BINDER_IPC=y
1759 +CONFIG_ANDROID_POWER=y
1760 +CONFIG_ANDROID_POWER_STAT=y
1761 +CONFIG_ANDROID_POWER_ALARM=y
1762 +CONFIG_ANDROID_LOGGER=y
1763 +# CONFIG_ANDROID_RAM_CONSOLE is not set
1764 +# CONFIG_ANDROID_TIMED_GPIO is not set
1765 +# CONFIG_ANDROID_PARANOID_NETWORK is not set
1766 +CONFIG_REGULATOR=y
1767 +CONFIG_REGULATOR_DEBUG=y
1768 +# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
1769 +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
1770 +# CONFIG_REGULATOR_BQ24022 is not set
1771 +CONFIG_REGULATOR_PCF50633=y
1772 +CONFIG_UIO=y
1773 +CONFIG_UIO_PDRV=y
1774 +# CONFIG_UIO_PDRV_GENIRQ is not set
1775 +# CONFIG_UIO_SMX is not set
1776 +# CONFIG_UIO_SERCOS3 is not set
1777 +
1778 +#
1779 +# File systems
1780 +#
1781 +CONFIG_EXT2_FS=y
1782 +# CONFIG_EXT2_FS_XATTR is not set
1783 +# CONFIG_EXT2_FS_XIP is not set
1784 +CONFIG_EXT3_FS=y
1785 +# CONFIG_EXT3_FS_XATTR is not set
1786 +CONFIG_EXT4_FS=y
1787 +CONFIG_EXT4DEV_COMPAT=y
1788 +CONFIG_EXT4_FS_XATTR=y
1789 +# CONFIG_EXT4_FS_POSIX_ACL is not set
1790 +CONFIG_EXT4_FS_SECURITY=y
1791 +CONFIG_JBD=y
1792 +# CONFIG_JBD_DEBUG is not set
1793 +CONFIG_JBD2=y
1794 +# CONFIG_JBD2_DEBUG is not set
1795 +CONFIG_FS_MBCACHE=y
1796 +# CONFIG_REISERFS_FS is not set
1797 +# CONFIG_JFS_FS is not set
1798 +CONFIG_FS_POSIX_ACL=y
1799 +CONFIG_FILE_LOCKING=y
1800 +# CONFIG_XFS_FS is not set
1801 +# CONFIG_OCFS2_FS is not set
1802 +CONFIG_DNOTIFY=y
1803 +CONFIG_INOTIFY=y
1804 +CONFIG_INOTIFY_USER=y
1805 +# CONFIG_QUOTA is not set
1806 +# CONFIG_AUTOFS_FS is not set
1807 +# CONFIG_AUTOFS4_FS is not set
1808 +CONFIG_FUSE_FS=m
1809 +
1810 +#
1811 +# CD-ROM/DVD Filesystems
1812 +#
1813 +CONFIG_ISO9660_FS=m
1814 +CONFIG_JOLIET=y
1815 +# CONFIG_ZISOFS is not set
1816 +# CONFIG_UDF_FS is not set
1817 +
1818 +#
1819 +# DOS/FAT/NT Filesystems
1820 +#
1821 +CONFIG_FAT_FS=y
1822 +CONFIG_MSDOS_FS=y
1823 +CONFIG_VFAT_FS=y
1824 +CONFIG_FAT_DEFAULT_CODEPAGE=437
1825 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
1826 +# CONFIG_NTFS_FS is not set
1827 +
1828 +#
1829 +# Pseudo filesystems
1830 +#
1831 +CONFIG_PROC_FS=y
1832 +CONFIG_PROC_SYSCTL=y
1833 +CONFIG_PROC_PAGE_MONITOR=y
1834 +CONFIG_SYSFS=y
1835 +CONFIG_TMPFS=y
1836 +# CONFIG_TMPFS_POSIX_ACL is not set
1837 +# CONFIG_HUGETLB_PAGE is not set
1838 +CONFIG_CONFIGFS_FS=m
1839 +
1840 +#
1841 +# Miscellaneous filesystems
1842 +#
1843 +# CONFIG_ADFS_FS is not set
1844 +# CONFIG_AFFS_FS is not set
1845 +# CONFIG_HFS_FS is not set
1846 +# CONFIG_HFSPLUS_FS is not set
1847 +# CONFIG_BEFS_FS is not set
1848 +# CONFIG_BFS_FS is not set
1849 +# CONFIG_EFS_FS is not set
1850 +CONFIG_JFFS2_FS=y
1851 +CONFIG_JFFS2_FS_DEBUG=0
1852 +CONFIG_JFFS2_FS_WRITEBUFFER=y
1853 +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
1854 +CONFIG_JFFS2_SUMMARY=y
1855 +# CONFIG_JFFS2_FS_XATTR is not set
1856 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
1857 +CONFIG_JFFS2_ZLIB=y
1858 +# CONFIG_JFFS2_LZO is not set
1859 +CONFIG_JFFS2_RTIME=y
1860 +# CONFIG_JFFS2_RUBIN is not set
1861 +CONFIG_CRAMFS=y
1862 +# CONFIG_VXFS_FS is not set
1863 +# CONFIG_MINIX_FS is not set
1864 +# CONFIG_OMFS_FS is not set
1865 +# CONFIG_HPFS_FS is not set
1866 +# CONFIG_QNX4FS_FS is not set
1867 +CONFIG_ROMFS_FS=y
1868 +# CONFIG_SYSV_FS is not set
1869 +# CONFIG_UFS_FS is not set
1870 +CONFIG_NETWORK_FILESYSTEMS=y
1871 +# CONFIG_NFS_FS is not set
1872 +CONFIG_NFSD=y
1873 +CONFIG_NFSD_V2_ACL=y
1874 +CONFIG_NFSD_V3=y
1875 +CONFIG_NFSD_V3_ACL=y
1876 +# CONFIG_NFSD_V4 is not set
1877 +CONFIG_LOCKD=y
1878 +CONFIG_LOCKD_V4=y
1879 +CONFIG_EXPORTFS=y
1880 +CONFIG_NFS_ACL_SUPPORT=y
1881 +CONFIG_NFS_COMMON=y
1882 +CONFIG_SUNRPC=y
1883 +# CONFIG_SUNRPC_REGISTER_V4 is not set
1884 +# CONFIG_RPCSEC_GSS_KRB5 is not set
1885 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
1886 +# CONFIG_SMB_FS is not set
1887 +CONFIG_CIFS=m
1888 +# CONFIG_CIFS_STATS is not set
1889 +# CONFIG_CIFS_WEAK_PW_HASH is not set
1890 +# CONFIG_CIFS_XATTR is not set
1891 +# CONFIG_CIFS_DEBUG2 is not set
1892 +# CONFIG_CIFS_EXPERIMENTAL is not set
1893 +# CONFIG_NCP_FS is not set
1894 +# CONFIG_CODA_FS is not set
1895 +# CONFIG_AFS_FS is not set
1896 +
1897 +#
1898 +# Partition Types
1899 +#
1900 +CONFIG_PARTITION_ADVANCED=y
1901 +# CONFIG_ACORN_PARTITION is not set
1902 +# CONFIG_OSF_PARTITION is not set
1903 +# CONFIG_AMIGA_PARTITION is not set
1904 +# CONFIG_ATARI_PARTITION is not set
1905 +# CONFIG_MAC_PARTITION is not set
1906 +CONFIG_MSDOS_PARTITION=y
1907 +# CONFIG_BSD_DISKLABEL is not set
1908 +# CONFIG_MINIX_SUBPARTITION is not set
1909 +# CONFIG_SOLARIS_X86_PARTITION is not set
1910 +# CONFIG_UNIXWARE_DISKLABEL is not set
1911 +# CONFIG_LDM_PARTITION is not set
1912 +# CONFIG_SGI_PARTITION is not set
1913 +# CONFIG_ULTRIX_PARTITION is not set
1914 +# CONFIG_SUN_PARTITION is not set
1915 +# CONFIG_KARMA_PARTITION is not set
1916 +# CONFIG_EFI_PARTITION is not set
1917 +# CONFIG_SYSV68_PARTITION is not set
1918 +CONFIG_NLS=y
1919 +CONFIG_NLS_DEFAULT="iso8859-1"
1920 +CONFIG_NLS_CODEPAGE_437=y
1921 +# CONFIG_NLS_CODEPAGE_737 is not set
1922 +# CONFIG_NLS_CODEPAGE_775 is not set
1923 +CONFIG_NLS_CODEPAGE_850=m
1924 +# CONFIG_NLS_CODEPAGE_852 is not set
1925 +# CONFIG_NLS_CODEPAGE_855 is not set
1926 +# CONFIG_NLS_CODEPAGE_857 is not set
1927 +# CONFIG_NLS_CODEPAGE_860 is not set
1928 +# CONFIG_NLS_CODEPAGE_861 is not set
1929 +# CONFIG_NLS_CODEPAGE_862 is not set
1930 +# CONFIG_NLS_CODEPAGE_863 is not set
1931 +# CONFIG_NLS_CODEPAGE_864 is not set
1932 +# CONFIG_NLS_CODEPAGE_865 is not set
1933 +# CONFIG_NLS_CODEPAGE_866 is not set
1934 +# CONFIG_NLS_CODEPAGE_869 is not set
1935 +CONFIG_NLS_CODEPAGE_936=m
1936 +CONFIG_NLS_CODEPAGE_950=m
1937 +# CONFIG_NLS_CODEPAGE_932 is not set
1938 +# CONFIG_NLS_CODEPAGE_949 is not set
1939 +# CONFIG_NLS_CODEPAGE_874 is not set
1940 +# CONFIG_NLS_ISO8859_8 is not set
1941 +# CONFIG_NLS_CODEPAGE_1250 is not set
1942 +# CONFIG_NLS_CODEPAGE_1251 is not set
1943 +# CONFIG_NLS_ASCII is not set
1944 +CONFIG_NLS_ISO8859_1=y
1945 +# CONFIG_NLS_ISO8859_2 is not set
1946 +# CONFIG_NLS_ISO8859_3 is not set
1947 +# CONFIG_NLS_ISO8859_4 is not set
1948 +# CONFIG_NLS_ISO8859_5 is not set
1949 +# CONFIG_NLS_ISO8859_6 is not set
1950 +# CONFIG_NLS_ISO8859_7 is not set
1951 +# CONFIG_NLS_ISO8859_9 is not set
1952 +# CONFIG_NLS_ISO8859_13 is not set
1953 +# CONFIG_NLS_ISO8859_14 is not set
1954 +# CONFIG_NLS_ISO8859_15 is not set
1955 +# CONFIG_NLS_KOI8_R is not set
1956 +# CONFIG_NLS_KOI8_U is not set
1957 +CONFIG_NLS_UTF8=m
1958 +# CONFIG_DLM is not set
1959 +
1960 +#
1961 +# Kernel hacking
1962 +#
1963 +CONFIG_PRINTK_TIME=y
1964 +CONFIG_ENABLE_WARN_DEPRECATED=y
1965 +CONFIG_ENABLE_MUST_CHECK=y
1966 +CONFIG_FRAME_WARN=1024
1967 +CONFIG_MAGIC_SYSRQ=y
1968 +# CONFIG_UNUSED_SYMBOLS is not set
1969 +CONFIG_DEBUG_FS=y
1970 +# CONFIG_HEADERS_CHECK is not set
1971 +CONFIG_DEBUG_KERNEL=y
1972 +CONFIG_DEBUG_SHIRQ=y
1973 +CONFIG_DETECT_SOFTLOCKUP=y
1974 +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
1975 +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
1976 +CONFIG_SCHED_DEBUG=y
1977 +CONFIG_SCHEDSTATS=y
1978 +CONFIG_TIMER_STATS=y
1979 +# CONFIG_DEBUG_OBJECTS is not set
1980 +# CONFIG_DEBUG_SLAB is not set
1981 +CONFIG_DEBUG_PREEMPT=y
1982 +# CONFIG_DEBUG_RT_MUTEXES is not set
1983 +# CONFIG_RT_MUTEX_TESTER is not set
1984 +CONFIG_DEBUG_SPINLOCK=y
1985 +CONFIG_DEBUG_MUTEXES=y
1986 +CONFIG_DEBUG_LOCK_ALLOC=y
1987 +# CONFIG_PROVE_LOCKING is not set
1988 +CONFIG_LOCKDEP=y
1989 +CONFIG_LOCK_STAT=y
1990 +CONFIG_DEBUG_LOCKDEP=y
1991 +CONFIG_DEBUG_SPINLOCK_SLEEP=y
1992 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
1993 +CONFIG_STACKTRACE=y
1994 +# CONFIG_DEBUG_KOBJECT is not set
1995 +CONFIG_DEBUG_BUGVERBOSE=y
1996 +CONFIG_DEBUG_INFO=y
1997 +# CONFIG_DEBUG_VM is not set
1998 +# CONFIG_DEBUG_WRITECOUNT is not set
1999 +CONFIG_DEBUG_MEMORY_INIT=y
2000 +# CONFIG_DEBUG_LIST is not set
2001 +CONFIG_DEBUG_SG=y
2002 +CONFIG_FRAME_POINTER=y
2003 +# CONFIG_BOOT_PRINTK_DELAY is not set
2004 +# CONFIG_RCU_TORTURE_TEST is not set
2005 +CONFIG_RCU_CPU_STALL_DETECTOR=y
2006 +# CONFIG_BACKTRACE_SELF_TEST is not set
2007 +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
2008 +# CONFIG_FAULT_INJECTION is not set
2009 +CONFIG_LATENCYTOP=y
2010 +CONFIG_SYSCTL_SYSCALL_CHECK=y
2011 +CONFIG_HAVE_FUNCTION_TRACER=y
2012 +
2013 +#
2014 +# Tracers
2015 +#
2016 +# CONFIG_FUNCTION_TRACER is not set
2017 +# CONFIG_SCHED_TRACER is not set
2018 +# CONFIG_CONTEXT_SWITCH_TRACER is not set
2019 +# CONFIG_BOOT_TRACER is not set
2020 +# CONFIG_STACK_TRACER is not set
2021 +CONFIG_DYNAMIC_PRINTK_DEBUG=y
2022 +# CONFIG_SAMPLES is not set
2023 +CONFIG_HAVE_ARCH_KGDB=y
2024 +# CONFIG_KGDB is not set
2025 +# CONFIG_DEBUG_USER is not set
2026 +CONFIG_DEBUG_ERRORS=y
2027 +# CONFIG_DEBUG_STACK_USAGE is not set
2028 +# CONFIG_DEBUG_LL is not set
2029 +CONFIG_DEBUG_S3C_UART=2
2030 +
2031 +#
2032 +# Security options
2033 +#
2034 +# CONFIG_KEYS is not set
2035 +# CONFIG_SECURITY is not set
2036 +CONFIG_SECURITYFS=y
2037 +# CONFIG_SECURITY_FILE_CAPABILITIES is not set
2038 +CONFIG_CRYPTO=y
2039 +
2040 +#
2041 +# Crypto core or helper
2042 +#
2043 +CONFIG_CRYPTO_FIPS=y
2044 +CONFIG_CRYPTO_ALGAPI=y
2045 +CONFIG_CRYPTO_AEAD=y
2046 +CONFIG_CRYPTO_BLKCIPHER=y
2047 +CONFIG_CRYPTO_HASH=y
2048 +CONFIG_CRYPTO_RNG=y
2049 +CONFIG_CRYPTO_MANAGER=y
2050 +CONFIG_CRYPTO_GF128MUL=m
2051 +CONFIG_CRYPTO_NULL=m
2052 +# CONFIG_CRYPTO_CRYPTD is not set
2053 +CONFIG_CRYPTO_AUTHENC=m
2054 +CONFIG_CRYPTO_TEST=m
2055 +
2056 +#
2057 +# Authenticated Encryption with Associated Data
2058 +#
2059 +# CONFIG_CRYPTO_CCM is not set
2060 +# CONFIG_CRYPTO_GCM is not set
2061 +# CONFIG_CRYPTO_SEQIV is not set
2062 +
2063 +#
2064 +# Block modes
2065 +#
2066 +CONFIG_CRYPTO_CBC=y
2067 +# CONFIG_CRYPTO_CTR is not set
2068 +# CONFIG_CRYPTO_CTS is not set
2069 +CONFIG_CRYPTO_ECB=y
2070 +CONFIG_CRYPTO_LRW=m
2071 +CONFIG_CRYPTO_PCBC=m
2072 +# CONFIG_CRYPTO_XTS is not set
2073 +
2074 +#
2075 +# Hash modes
2076 +#
2077 +CONFIG_CRYPTO_HMAC=y
2078 +CONFIG_CRYPTO_XCBC=m
2079 +
2080 +#
2081 +# Digest
2082 +#
2083 +CONFIG_CRYPTO_CRC32C=m
2084 +CONFIG_CRYPTO_MD4=m
2085 +CONFIG_CRYPTO_MD5=y
2086 +CONFIG_CRYPTO_MICHAEL_MIC=m
2087 +# CONFIG_CRYPTO_RMD128 is not set
2088 +# CONFIG_CRYPTO_RMD160 is not set
2089 +# CONFIG_CRYPTO_RMD256 is not set
2090 +# CONFIG_CRYPTO_RMD320 is not set
2091 +CONFIG_CRYPTO_SHA1=y
2092 +CONFIG_CRYPTO_SHA256=m
2093 +CONFIG_CRYPTO_SHA512=m
2094 +CONFIG_CRYPTO_TGR192=m
2095 +CONFIG_CRYPTO_WP512=m
2096 +
2097 +#
2098 +# Ciphers
2099 +#
2100 +CONFIG_CRYPTO_AES=y
2101 +CONFIG_CRYPTO_ANUBIS=m
2102 +CONFIG_CRYPTO_ARC4=y
2103 +CONFIG_CRYPTO_BLOWFISH=m
2104 +CONFIG_CRYPTO_CAMELLIA=m
2105 +CONFIG_CRYPTO_CAST5=m
2106 +CONFIG_CRYPTO_CAST6=m
2107 +CONFIG_CRYPTO_DES=y
2108 +CONFIG_CRYPTO_FCRYPT=m
2109 +CONFIG_CRYPTO_KHAZAD=m
2110 +# CONFIG_CRYPTO_SALSA20 is not set
2111 +# CONFIG_CRYPTO_SEED is not set
2112 +CONFIG_CRYPTO_SERPENT=m
2113 +CONFIG_CRYPTO_TEA=m
2114 +CONFIG_CRYPTO_TWOFISH=m
2115 +CONFIG_CRYPTO_TWOFISH_COMMON=m
2116 +
2117 +#
2118 +# Compression
2119 +#
2120 +CONFIG_CRYPTO_DEFLATE=m
2121 +# CONFIG_CRYPTO_LZO is not set
2122 +
2123 +#
2124 +# Random Number Generation
2125 +#
2126 +CONFIG_CRYPTO_ANSI_CPRNG=y
2127 +CONFIG_CRYPTO_HW=y
2128 +
2129 +#
2130 +# Library routines
2131 +#
2132 +CONFIG_BITREVERSE=y
2133 +CONFIG_CRC_CCITT=y
2134 +CONFIG_CRC16=y
2135 +CONFIG_CRC_T10DIF=y
2136 +# CONFIG_CRC_ITU_T is not set
2137 +CONFIG_CRC32=y
2138 +# CONFIG_CRC7 is not set
2139 +CONFIG_LIBCRC32C=m
2140 +CONFIG_ZLIB_INFLATE=y
2141 +CONFIG_ZLIB_DEFLATE=y
2142 +CONFIG_TEXTSEARCH=y
2143 +CONFIG_TEXTSEARCH_KMP=m
2144 +CONFIG_TEXTSEARCH_BM=m
2145 +CONFIG_TEXTSEARCH_FSM=m
2146 +CONFIG_PLIST=y
2147 +CONFIG_HAS_IOMEM=y
2148 +CONFIG_HAS_DMA=y
2149 Index: linux-2.6.28/arch/arm/configs/gta02-packaging-defconfig
2150 ===================================================================
2151 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
2152 +++ linux-2.6.28/arch/arm/configs/gta02-packaging-defconfig 2009-01-02 00:01:56.000000000 +0100
2153 @@ -0,0 +1,2111 @@
2154 +#
2155 +# Automatically generated make config: don't edit
2156 +# Linux kernel version: 2.6.28-rc4
2157 +# Wed Dec 10 11:09:39 2008
2158 +#
2159 +CONFIG_ARM=y
2160 +CONFIG_HAVE_PWM=y
2161 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
2162 +CONFIG_GENERIC_GPIO=y
2163 +# CONFIG_GENERIC_TIME is not set
2164 +# CONFIG_GENERIC_CLOCKEVENTS is not set
2165 +CONFIG_MMU=y
2166 +CONFIG_NO_IOPORT=y
2167 +CONFIG_GENERIC_HARDIRQS=y
2168 +CONFIG_STACKTRACE_SUPPORT=y
2169 +CONFIG_HAVE_LATENCYTOP_SUPPORT=y
2170 +CONFIG_LOCKDEP_SUPPORT=y
2171 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
2172 +CONFIG_HARDIRQS_SW_RESEND=y
2173 +CONFIG_GENERIC_IRQ_PROBE=y
2174 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
2175 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
2176 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
2177 +CONFIG_GENERIC_HWEIGHT=y
2178 +CONFIG_GENERIC_CALIBRATE_DELAY=y
2179 +CONFIG_FIQ=y
2180 +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
2181 +CONFIG_VECTORS_BASE=0xffff0000
2182 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
2183 +
2184 +#
2185 +# General setup
2186 +#
2187 +CONFIG_EXPERIMENTAL=y
2188 +CONFIG_BROKEN_ON_SMP=y
2189 +CONFIG_LOCK_KERNEL=y
2190 +CONFIG_INIT_ENV_ARG_LIMIT=32
2191 +CONFIG_LOCALVERSION="-mokodev"
2192 +# CONFIG_LOCALVERSION_AUTO is not set
2193 +CONFIG_SWAP=y
2194 +CONFIG_SYSVIPC=y
2195 +CONFIG_SYSVIPC_SYSCTL=y
2196 +# CONFIG_POSIX_MQUEUE is not set
2197 +# CONFIG_BSD_PROCESS_ACCT is not set
2198 +# CONFIG_TASKSTATS is not set
2199 +# CONFIG_AUDIT is not set
2200 +CONFIG_IKCONFIG=y
2201 +CONFIG_IKCONFIG_PROC=y
2202 +CONFIG_LOG_BUF_SHIFT=18
2203 +# CONFIG_CGROUPS is not set
2204 +# CONFIG_GROUP_SCHED is not set
2205 +CONFIG_SYSFS_DEPRECATED=y
2206 +CONFIG_SYSFS_DEPRECATED_V2=y
2207 +# CONFIG_RELAY is not set
2208 +CONFIG_NAMESPACES=y
2209 +# CONFIG_UTS_NS is not set
2210 +# CONFIG_IPC_NS is not set
2211 +# CONFIG_USER_NS is not set
2212 +# CONFIG_PID_NS is not set
2213 +CONFIG_BLK_DEV_INITRD=y
2214 +CONFIG_INITRAMFS_SOURCE=""
2215 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
2216 +CONFIG_SYSCTL=y
2217 +# CONFIG_EMBEDDED is not set
2218 +CONFIG_UID16=y
2219 +CONFIG_SYSCTL_SYSCALL=y
2220 +CONFIG_KALLSYMS=y
2221 +CONFIG_KALLSYMS_ALL=y
2222 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
2223 +CONFIG_HOTPLUG=y
2224 +CONFIG_PRINTK=y
2225 +CONFIG_BUG=y
2226 +CONFIG_ELF_CORE=y
2227 +CONFIG_COMPAT_BRK=y
2228 +CONFIG_BASE_FULL=y
2229 +CONFIG_FUTEX=y
2230 +CONFIG_ANON_INODES=y
2231 +CONFIG_EPOLL=y
2232 +CONFIG_SIGNALFD=y
2233 +CONFIG_TIMERFD=y
2234 +CONFIG_EVENTFD=y
2235 +CONFIG_SHMEM=y
2236 +CONFIG_AIO=y
2237 +CONFIG_ASHMEM=y
2238 +CONFIG_VM_EVENT_COUNTERS=y
2239 +CONFIG_SLAB=y
2240 +# CONFIG_SLUB is not set
2241 +# CONFIG_SLOB is not set
2242 +# CONFIG_PROFILING is not set
2243 +CONFIG_MARKERS=y
2244 +CONFIG_HAVE_OPROFILE=y
2245 +# CONFIG_KPROBES is not set
2246 +CONFIG_HAVE_KPROBES=y
2247 +CONFIG_HAVE_KRETPROBES=y
2248 +CONFIG_HAVE_CLK=y
2249 +CONFIG_HAVE_GENERIC_DMA_COHERENT=y
2250 +CONFIG_SLABINFO=y
2251 +CONFIG_RT_MUTEXES=y
2252 +# CONFIG_TINY_SHMEM is not set
2253 +CONFIG_BASE_SMALL=0
2254 +CONFIG_MODULES=y
2255 +# CONFIG_MODULE_FORCE_LOAD is not set
2256 +CONFIG_MODULE_UNLOAD=y
2257 +CONFIG_MODULE_FORCE_UNLOAD=y
2258 +# CONFIG_MODVERSIONS is not set
2259 +# CONFIG_MODULE_SRCVERSION_ALL is not set
2260 +CONFIG_KMOD=y
2261 +CONFIG_BLOCK=y
2262 +# CONFIG_LBD is not set
2263 +# CONFIG_BLK_DEV_IO_TRACE is not set
2264 +# CONFIG_LSF is not set
2265 +# CONFIG_BLK_DEV_BSG is not set
2266 +# CONFIG_BLK_DEV_INTEGRITY is not set
2267 +
2268 +#
2269 +# IO Schedulers
2270 +#
2271 +CONFIG_IOSCHED_NOOP=y
2272 +CONFIG_IOSCHED_AS=m
2273 +CONFIG_IOSCHED_DEADLINE=y
2274 +CONFIG_IOSCHED_CFQ=m
2275 +# CONFIG_DEFAULT_AS is not set
2276 +CONFIG_DEFAULT_DEADLINE=y
2277 +# CONFIG_DEFAULT_CFQ is not set
2278 +# CONFIG_DEFAULT_NOOP is not set
2279 +CONFIG_DEFAULT_IOSCHED="deadline"
2280 +CONFIG_CLASSIC_RCU=y
2281 +CONFIG_FREEZER=y
2282 +
2283 +#
2284 +# System Type
2285 +#
2286 +# CONFIG_ARCH_AAEC2000 is not set
2287 +# CONFIG_ARCH_INTEGRATOR is not set
2288 +# CONFIG_ARCH_REALVIEW is not set
2289 +# CONFIG_ARCH_VERSATILE is not set
2290 +# CONFIG_ARCH_AT91 is not set
2291 +# CONFIG_ARCH_CLPS7500 is not set
2292 +# CONFIG_ARCH_CLPS711X is not set
2293 +# CONFIG_ARCH_EBSA110 is not set
2294 +# CONFIG_ARCH_EP93XX is not set
2295 +# CONFIG_ARCH_FOOTBRIDGE is not set
2296 +# CONFIG_ARCH_NETX is not set
2297 +# CONFIG_ARCH_H720X is not set
2298 +# CONFIG_ARCH_IMX is not set
2299 +# CONFIG_ARCH_IOP13XX is not set
2300 +# CONFIG_ARCH_IOP32X is not set
2301 +# CONFIG_ARCH_IOP33X is not set
2302 +# CONFIG_ARCH_IXP23XX is not set
2303 +# CONFIG_ARCH_IXP2000 is not set
2304 +# CONFIG_ARCH_IXP4XX is not set
2305 +# CONFIG_ARCH_L7200 is not set
2306 +# CONFIG_ARCH_KIRKWOOD is not set
2307 +# CONFIG_ARCH_KS8695 is not set
2308 +# CONFIG_ARCH_NS9XXX is not set
2309 +# CONFIG_ARCH_LOKI is not set
2310 +# CONFIG_ARCH_MV78XX0 is not set
2311 +# CONFIG_ARCH_MXC is not set
2312 +# CONFIG_ARCH_ORION5X is not set
2313 +# CONFIG_ARCH_PNX4008 is not set
2314 +# CONFIG_ARCH_PXA is not set
2315 +# CONFIG_ARCH_RPC is not set
2316 +# CONFIG_ARCH_SA1100 is not set
2317 +CONFIG_ARCH_S3C2410=y
2318 +# CONFIG_ARCH_S3C64XX is not set
2319 +# CONFIG_ARCH_SHARK is not set
2320 +# CONFIG_ARCH_LH7A40X is not set
2321 +# CONFIG_ARCH_DAVINCI is not set
2322 +# CONFIG_ARCH_OMAP is not set
2323 +# CONFIG_ARCH_MSM is not set
2324 +CONFIG_PLAT_S3C24XX=y
2325 +CONFIG_S3C2410_CLOCK=y
2326 +CONFIG_CPU_S3C244X=y
2327 +CONFIG_S3C24XX_PWM=y
2328 +CONFIG_S3C2410_DMA=y
2329 +# CONFIG_S3C2410_DMA_DEBUG is not set
2330 +CONFIG_MACH_SMDK=y
2331 +CONFIG_MACH_NEO1973=y
2332 +CONFIG_PLAT_S3C=y
2333 +CONFIG_CPU_LLSERIAL_S3C2410=y
2334 +CONFIG_CPU_LLSERIAL_S3C2440=y
2335 +
2336 +#
2337 +# Boot options
2338 +#
2339 +# CONFIG_S3C_BOOT_WATCHDOG is not set
2340 +# CONFIG_S3C_BOOT_ERROR_RESET is not set
2341 +CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
2342 +
2343 +#
2344 +# Power management
2345 +#
2346 +# CONFIG_S3C2410_PM_DEBUG is not set
2347 +# CONFIG_S3C2410_PM_CHECK is not set
2348 +CONFIG_S3C_LOWLEVEL_UART_PORT=2
2349 +CONFIG_S3C_GPIO_SPACE=0
2350 +CONFIG_S3C_GPIO_TRACK=y
2351 +
2352 +#
2353 +# S3C2400 Machines
2354 +#
2355 +CONFIG_CPU_S3C2410=y
2356 +CONFIG_CPU_S3C2410_DMA=y
2357 +CONFIG_S3C2410_PM=y
2358 +CONFIG_S3C2410_GPIO=y
2359 +CONFIG_S3C2410_PWM=y
2360 +
2361 +#
2362 +# S3C2410 Machines
2363 +#
2364 +# CONFIG_ARCH_SMDK2410 is not set
2365 +# CONFIG_ARCH_H1940 is not set
2366 +# CONFIG_MACH_N30 is not set
2367 +# CONFIG_ARCH_BAST is not set
2368 +# CONFIG_MACH_OTOM is not set
2369 +# CONFIG_MACH_AML_M5900 is not set
2370 +# CONFIG_MACH_TCT_HAMMER is not set
2371 +# CONFIG_MACH_VR1000 is not set
2372 +CONFIG_MACH_QT2410=y
2373 +# CONFIG_MACH_NEO1973_GTA01 is not set
2374 +
2375 +#
2376 +# S3C2412 Machines
2377 +#
2378 +# CONFIG_MACH_JIVE is not set
2379 +# CONFIG_MACH_SMDK2413 is not set
2380 +# CONFIG_MACH_SMDK2412 is not set
2381 +# CONFIG_MACH_VSTMS is not set
2382 +CONFIG_CPU_S3C2440=y
2383 +CONFIG_S3C2440_DMA=y
2384 +CONFIG_S3C2440_C_FIQ=y
2385 +
2386 +#
2387 +# S3C2440 Machines
2388 +#
2389 +# CONFIG_MACH_ANUBIS is not set
2390 +# CONFIG_MACH_OSIRIS is not set
2391 +# CONFIG_MACH_RX3715 is not set
2392 +CONFIG_ARCH_S3C2440=y
2393 +# CONFIG_MACH_NEXCODER_2440 is not set
2394 +CONFIG_SMDK2440_CPU2440=y
2395 +# CONFIG_MACH_AT2440EVB is not set
2396 +CONFIG_MACH_NEO1973_GTA02=y
2397 +# CONFIG_NEO1973_GTA02_2440 is not set
2398 +CONFIG_CPU_S3C2442=y
2399 +
2400 +#
2401 +# S3C2442 Machines
2402 +#
2403 +CONFIG_SMDK2440_CPU2442=y
2404 +
2405 +#
2406 +# S3C2443 Machines
2407 +#
2408 +# CONFIG_MACH_SMDK2443 is not set
2409 +
2410 +#
2411 +# Processor Type
2412 +#
2413 +CONFIG_CPU_32=y
2414 +CONFIG_CPU_ARM920T=y
2415 +CONFIG_CPU_32v4T=y
2416 +CONFIG_CPU_ABRT_EV4T=y
2417 +CONFIG_CPU_PABRT_NOIFAR=y
2418 +CONFIG_CPU_CACHE_V4WT=y
2419 +CONFIG_CPU_CACHE_VIVT=y
2420 +CONFIG_CPU_COPY_V4WB=y
2421 +CONFIG_CPU_TLB_V4WBI=y
2422 +CONFIG_CPU_CP15=y
2423 +CONFIG_CPU_CP15_MMU=y
2424 +
2425 +#
2426 +# Processor Features
2427 +#
2428 +CONFIG_ARM_THUMB=y
2429 +# CONFIG_CPU_ICACHE_DISABLE is not set
2430 +# CONFIG_CPU_DCACHE_DISABLE is not set
2431 +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
2432 +# CONFIG_OUTER_CACHE is not set
2433 +
2434 +#
2435 +# Bus support
2436 +#
2437 +# CONFIG_PCI_SYSCALL is not set
2438 +# CONFIG_ARCH_SUPPORTS_MSI is not set
2439 +# CONFIG_PCCARD is not set
2440 +
2441 +#
2442 +# Kernel Features
2443 +#
2444 +CONFIG_VMSPLIT_3G=y
2445 +# CONFIG_VMSPLIT_2G is not set
2446 +# CONFIG_VMSPLIT_1G is not set
2447 +CONFIG_PAGE_OFFSET=0xC0000000
2448 +CONFIG_PREEMPT=y
2449 +CONFIG_HZ=200
2450 +CONFIG_AEABI=y
2451 +CONFIG_OABI_COMPAT=y
2452 +CONFIG_ARCH_FLATMEM_HAS_HOLES=y
2453 +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
2454 +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
2455 +CONFIG_SELECT_MEMORY_MODEL=y
2456 +CONFIG_FLATMEM_MANUAL=y
2457 +# CONFIG_DISCONTIGMEM_MANUAL is not set
2458 +# CONFIG_SPARSEMEM_MANUAL is not set
2459 +CONFIG_FLATMEM=y
2460 +CONFIG_FLAT_NODE_MEM_MAP=y
2461 +CONFIG_PAGEFLAGS_EXTENDED=y
2462 +CONFIG_SPLIT_PTLOCK_CPUS=4096
2463 +# CONFIG_RESOURCES_64BIT is not set
2464 +# CONFIG_PHYS_ADDR_T_64BIT is not set
2465 +CONFIG_ZONE_DMA_FLAG=0
2466 +CONFIG_VIRT_TO_BUS=y
2467 +CONFIG_UNEVICTABLE_LRU=y
2468 +CONFIG_ALIGNMENT_TRAP=y
2469 +
2470 +#
2471 +# Boot options
2472 +#
2473 +CONFIG_ZBOOT_ROM_TEXT=0x0
2474 +CONFIG_ZBOOT_ROM_BSS=0x0
2475 +CONFIG_CMDLINE="unused -- bootloader passes ATAG list"
2476 +# CONFIG_XIP_KERNEL is not set
2477 +CONFIG_KEXEC=y
2478 +CONFIG_ATAGS_PROC=y
2479 +
2480 +#
2481 +# CPU Power Management
2482 +#
2483 +CONFIG_CPU_IDLE=y
2484 +CONFIG_CPU_IDLE_GOV_LADDER=y
2485 +
2486 +#
2487 +# Floating point emulation
2488 +#
2489 +
2490 +#
2491 +# At least one emulation must be selected
2492 +#
2493 +CONFIG_FPE_NWFPE=y
2494 +# CONFIG_FPE_NWFPE_XP is not set
2495 +# CONFIG_FPE_FASTFPE is not set
2496 +
2497 +#
2498 +# Userspace binary formats
2499 +#
2500 +CONFIG_BINFMT_ELF=y
2501 +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
2502 +CONFIG_HAVE_AOUT=y
2503 +# CONFIG_BINFMT_AOUT is not set
2504 +# CONFIG_BINFMT_MISC is not set
2505 +
2506 +#
2507 +# Power management options
2508 +#
2509 +CONFIG_PM=y
2510 +# CONFIG_PM_DEBUG is not set
2511 +CONFIG_PM_SLEEP=y
2512 +CONFIG_SUSPEND=y
2513 +CONFIG_SUSPEND_FREEZER=y
2514 +CONFIG_APM_EMULATION=y
2515 +CONFIG_ARCH_SUSPEND_POSSIBLE=y
2516 +CONFIG_NET=y
2517 +
2518 +#
2519 +# Networking options
2520 +#
2521 +CONFIG_PACKET=y
2522 +CONFIG_PACKET_MMAP=y
2523 +CONFIG_UNIX=y
2524 +CONFIG_XFRM=y
2525 +# CONFIG_XFRM_USER is not set
2526 +# CONFIG_XFRM_SUB_POLICY is not set
2527 +CONFIG_XFRM_MIGRATE=y
2528 +# CONFIG_XFRM_STATISTICS is not set
2529 +CONFIG_XFRM_IPCOMP=m
2530 +CONFIG_NET_KEY=m
2531 +CONFIG_NET_KEY_MIGRATE=y
2532 +CONFIG_INET=y
2533 +CONFIG_IP_MULTICAST=y
2534 +CONFIG_IP_ADVANCED_ROUTER=y
2535 +CONFIG_ASK_IP_FIB_HASH=y
2536 +# CONFIG_IP_FIB_TRIE is not set
2537 +CONFIG_IP_FIB_HASH=y
2538 +CONFIG_IP_MULTIPLE_TABLES=y
2539 +# CONFIG_IP_ROUTE_MULTIPATH is not set
2540 +# CONFIG_IP_ROUTE_VERBOSE is not set
2541 +CONFIG_IP_PNP=y
2542 +# CONFIG_IP_PNP_DHCP is not set
2543 +# CONFIG_IP_PNP_BOOTP is not set
2544 +# CONFIG_IP_PNP_RARP is not set
2545 +CONFIG_NET_IPIP=m
2546 +CONFIG_NET_IPGRE=m
2547 +# CONFIG_NET_IPGRE_BROADCAST is not set
2548 +# CONFIG_IP_MROUTE is not set
2549 +# CONFIG_ARPD is not set
2550 +CONFIG_SYN_COOKIES=y
2551 +CONFIG_INET_AH=m
2552 +CONFIG_INET_ESP=m
2553 +CONFIG_INET_IPCOMP=m
2554 +CONFIG_INET_XFRM_TUNNEL=m
2555 +CONFIG_INET_TUNNEL=m
2556 +CONFIG_INET_XFRM_MODE_TRANSPORT=m
2557 +CONFIG_INET_XFRM_MODE_TUNNEL=m
2558 +CONFIG_INET_XFRM_MODE_BEET=m
2559 +# CONFIG_INET_LRO is not set
2560 +CONFIG_INET_DIAG=y
2561 +CONFIG_INET_TCP_DIAG=y
2562 +# CONFIG_TCP_CONG_ADVANCED is not set
2563 +CONFIG_TCP_CONG_CUBIC=y
2564 +CONFIG_DEFAULT_TCP_CONG="cubic"
2565 +CONFIG_TCP_MD5SIG=y
2566 +CONFIG_IPV6=m
2567 +# CONFIG_IPV6_PRIVACY is not set
2568 +# CONFIG_IPV6_ROUTER_PREF is not set
2569 +# CONFIG_IPV6_OPTIMISTIC_DAD is not set
2570 +CONFIG_INET6_AH=m
2571 +CONFIG_INET6_ESP=m
2572 +CONFIG_INET6_IPCOMP=m
2573 +# CONFIG_IPV6_MIP6 is not set
2574 +CONFIG_INET6_XFRM_TUNNEL=m
2575 +CONFIG_INET6_TUNNEL=m
2576 +CONFIG_INET6_XFRM_MODE_TRANSPORT=m
2577 +CONFIG_INET6_XFRM_MODE_TUNNEL=m
2578 +CONFIG_INET6_XFRM_MODE_BEET=m
2579 +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
2580 +CONFIG_IPV6_SIT=m
2581 +CONFIG_IPV6_NDISC_NODETYPE=y
2582 +CONFIG_IPV6_TUNNEL=m
2583 +# CONFIG_IPV6_MULTIPLE_TABLES is not set
2584 +# CONFIG_IPV6_MROUTE is not set
2585 +# CONFIG_NETWORK_SECMARK is not set
2586 +CONFIG_NETFILTER=y
2587 +# CONFIG_NETFILTER_DEBUG is not set
2588 +CONFIG_NETFILTER_ADVANCED=y
2589 +CONFIG_BRIDGE_NETFILTER=y
2590 +
2591 +#
2592 +# Core Netfilter Configuration
2593 +#
2594 +CONFIG_NETFILTER_NETLINK=m
2595 +CONFIG_NETFILTER_NETLINK_QUEUE=m
2596 +CONFIG_NETFILTER_NETLINK_LOG=m
2597 +CONFIG_NF_CONNTRACK=m
2598 +CONFIG_NF_CT_ACCT=y
2599 +CONFIG_NF_CONNTRACK_MARK=y
2600 +# CONFIG_NF_CONNTRACK_EVENTS is not set
2601 +# CONFIG_NF_CT_PROTO_DCCP is not set
2602 +CONFIG_NF_CT_PROTO_GRE=m
2603 +CONFIG_NF_CT_PROTO_SCTP=m
2604 +# CONFIG_NF_CT_PROTO_UDPLITE is not set
2605 +# CONFIG_NF_CONNTRACK_AMANDA is not set
2606 +CONFIG_NF_CONNTRACK_FTP=m
2607 +CONFIG_NF_CONNTRACK_H323=m
2608 +CONFIG_NF_CONNTRACK_IRC=m
2609 +CONFIG_NF_CONNTRACK_NETBIOS_NS=m
2610 +CONFIG_NF_CONNTRACK_PPTP=m
2611 +CONFIG_NF_CONNTRACK_SANE=m
2612 +CONFIG_NF_CONNTRACK_SIP=m
2613 +CONFIG_NF_CONNTRACK_TFTP=m
2614 +CONFIG_NF_CT_NETLINK=m
2615 +# CONFIG_NETFILTER_TPROXY is not set
2616 +CONFIG_NETFILTER_XTABLES=m
2617 +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
2618 +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
2619 +CONFIG_NETFILTER_XT_TARGET_DSCP=m
2620 +CONFIG_NETFILTER_XT_TARGET_MARK=m
2621 +CONFIG_NETFILTER_XT_TARGET_NFLOG=m
2622 +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
2623 +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
2624 +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
2625 +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
2626 +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
2627 +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
2628 +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
2629 +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
2630 +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
2631 +CONFIG_NETFILTER_XT_MATCH_DCCP=m
2632 +CONFIG_NETFILTER_XT_MATCH_DSCP=m
2633 +CONFIG_NETFILTER_XT_MATCH_ESP=m
2634 +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
2635 +CONFIG_NETFILTER_XT_MATCH_HELPER=m
2636 +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
2637 +CONFIG_NETFILTER_XT_MATCH_LENGTH=m
2638 +CONFIG_NETFILTER_XT_MATCH_LIMIT=m
2639 +CONFIG_NETFILTER_XT_MATCH_MAC=m
2640 +CONFIG_NETFILTER_XT_MATCH_MARK=m
2641 +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
2642 +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
2643 +CONFIG_NETFILTER_XT_MATCH_POLICY=m
2644 +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
2645 +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
2646 +CONFIG_NETFILTER_XT_MATCH_QUOTA=m
2647 +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
2648 +CONFIG_NETFILTER_XT_MATCH_REALM=m
2649 +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
2650 +CONFIG_NETFILTER_XT_MATCH_SCTP=m
2651 +CONFIG_NETFILTER_XT_MATCH_STATE=m
2652 +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
2653 +CONFIG_NETFILTER_XT_MATCH_STRING=m
2654 +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
2655 +# CONFIG_NETFILTER_XT_MATCH_TIME is not set
2656 +# CONFIG_NETFILTER_XT_MATCH_U32 is not set
2657 +# CONFIG_IP_VS is not set
2658 +
2659 +#
2660 +# IP: Netfilter Configuration
2661 +#
2662 +CONFIG_NF_DEFRAG_IPV4=m
2663 +CONFIG_NF_CONNTRACK_IPV4=m
2664 +# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
2665 +# CONFIG_IP_NF_QUEUE is not set
2666 +CONFIG_IP_NF_IPTABLES=m
2667 +CONFIG_IP_NF_MATCH_ADDRTYPE=m
2668 +CONFIG_IP_NF_MATCH_AH=m
2669 +CONFIG_IP_NF_MATCH_ECN=m
2670 +CONFIG_IP_NF_MATCH_TTL=m
2671 +CONFIG_IP_NF_FILTER=m
2672 +CONFIG_IP_NF_TARGET_REJECT=m
2673 +CONFIG_IP_NF_TARGET_LOG=m
2674 +CONFIG_IP_NF_TARGET_ULOG=m
2675 +CONFIG_NF_NAT=m
2676 +CONFIG_NF_NAT_NEEDED=y
2677 +CONFIG_IP_NF_TARGET_MASQUERADE=m
2678 +CONFIG_IP_NF_TARGET_NETMAP=m
2679 +CONFIG_IP_NF_TARGET_REDIRECT=m
2680 +CONFIG_NF_NAT_SNMP_BASIC=m
2681 +CONFIG_NF_NAT_PROTO_GRE=m
2682 +CONFIG_NF_NAT_PROTO_SCTP=m
2683 +CONFIG_NF_NAT_FTP=m
2684 +CONFIG_NF_NAT_IRC=m
2685 +CONFIG_NF_NAT_TFTP=m
2686 +# CONFIG_NF_NAT_AMANDA is not set
2687 +CONFIG_NF_NAT_PPTP=m
2688 +CONFIG_NF_NAT_H323=m
2689 +CONFIG_NF_NAT_SIP=m
2690 +CONFIG_IP_NF_MANGLE=m
2691 +CONFIG_IP_NF_TARGET_CLUSTERIP=m
2692 +CONFIG_IP_NF_TARGET_ECN=m
2693 +CONFIG_IP_NF_TARGET_TTL=m
2694 +# CONFIG_IP_NF_RAW is not set
2695 +# CONFIG_IP_NF_ARPTABLES is not set
2696 +
2697 +#
2698 +# IPv6: Netfilter Configuration
2699 +#
2700 +CONFIG_NF_CONNTRACK_IPV6=m
2701 +# CONFIG_IP6_NF_QUEUE is not set
2702 +CONFIG_IP6_NF_IPTABLES=m
2703 +CONFIG_IP6_NF_MATCH_AH=m
2704 +CONFIG_IP6_NF_MATCH_EUI64=m
2705 +CONFIG_IP6_NF_MATCH_FRAG=m
2706 +CONFIG_IP6_NF_MATCH_OPTS=m
2707 +CONFIG_IP6_NF_MATCH_HL=m
2708 +CONFIG_IP6_NF_MATCH_IPV6HEADER=m
2709 +CONFIG_IP6_NF_MATCH_MH=m
2710 +CONFIG_IP6_NF_MATCH_RT=m
2711 +CONFIG_IP6_NF_TARGET_LOG=m
2712 +CONFIG_IP6_NF_FILTER=m
2713 +CONFIG_IP6_NF_TARGET_REJECT=m
2714 +CONFIG_IP6_NF_MANGLE=m
2715 +CONFIG_IP6_NF_TARGET_HL=m
2716 +# CONFIG_IP6_NF_RAW is not set
2717 +CONFIG_BRIDGE_NF_EBTABLES=m
2718 +CONFIG_BRIDGE_EBT_BROUTE=m
2719 +CONFIG_BRIDGE_EBT_T_FILTER=m
2720 +CONFIG_BRIDGE_EBT_T_NAT=m
2721 +CONFIG_BRIDGE_EBT_802_3=m
2722 +CONFIG_BRIDGE_EBT_AMONG=m
2723 +CONFIG_BRIDGE_EBT_ARP=m
2724 +CONFIG_BRIDGE_EBT_IP=m
2725 +# CONFIG_BRIDGE_EBT_IP6 is not set
2726 +CONFIG_BRIDGE_EBT_LIMIT=m
2727 +CONFIG_BRIDGE_EBT_MARK=m
2728 +CONFIG_BRIDGE_EBT_PKTTYPE=m
2729 +CONFIG_BRIDGE_EBT_STP=m
2730 +CONFIG_BRIDGE_EBT_VLAN=m
2731 +CONFIG_BRIDGE_EBT_ARPREPLY=m
2732 +CONFIG_BRIDGE_EBT_DNAT=m
2733 +CONFIG_BRIDGE_EBT_MARK_T=m
2734 +CONFIG_BRIDGE_EBT_REDIRECT=m
2735 +CONFIG_BRIDGE_EBT_SNAT=m
2736 +CONFIG_BRIDGE_EBT_LOG=m
2737 +CONFIG_BRIDGE_EBT_ULOG=m
2738 +# CONFIG_BRIDGE_EBT_NFLOG is not set
2739 +# CONFIG_IP_DCCP is not set
2740 +# CONFIG_IP_SCTP is not set
2741 +# CONFIG_TIPC is not set
2742 +# CONFIG_ATM is not set
2743 +CONFIG_STP=y
2744 +CONFIG_BRIDGE=y
2745 +# CONFIG_NET_DSA is not set
2746 +# CONFIG_VLAN_8021Q is not set
2747 +# CONFIG_DECNET is not set
2748 +CONFIG_LLC=y
2749 +# CONFIG_LLC2 is not set
2750 +# CONFIG_IPX is not set
2751 +# CONFIG_ATALK is not set
2752 +# CONFIG_X25 is not set
2753 +# CONFIG_LAPB is not set
2754 +# CONFIG_ECONET is not set
2755 +# CONFIG_WAN_ROUTER is not set
2756 +CONFIG_NET_SCHED=y
2757 +
2758 +#
2759 +# Queueing/Scheduling
2760 +#
2761 +CONFIG_NET_SCH_CBQ=m
2762 +CONFIG_NET_SCH_HTB=m
2763 +CONFIG_NET_SCH_HFSC=m
2764 +CONFIG_NET_SCH_PRIO=m
2765 +# CONFIG_NET_SCH_MULTIQ is not set
2766 +CONFIG_NET_SCH_RED=m
2767 +CONFIG_NET_SCH_SFQ=m
2768 +CONFIG_NET_SCH_TEQL=m
2769 +CONFIG_NET_SCH_TBF=m
2770 +CONFIG_NET_SCH_GRED=m
2771 +CONFIG_NET_SCH_DSMARK=m
2772 +CONFIG_NET_SCH_NETEM=m
2773 +
2774 +#
2775 +# Classification
2776 +#
2777 +CONFIG_NET_CLS=y
2778 +CONFIG_NET_CLS_BASIC=m
2779 +CONFIG_NET_CLS_TCINDEX=m
2780 +CONFIG_NET_CLS_ROUTE4=m
2781 +CONFIG_NET_CLS_ROUTE=y
2782 +CONFIG_NET_CLS_FW=m
2783 +CONFIG_NET_CLS_U32=m
2784 +CONFIG_CLS_U32_PERF=y
2785 +CONFIG_CLS_U32_MARK=y
2786 +CONFIG_NET_CLS_RSVP=m
2787 +CONFIG_NET_CLS_RSVP6=m
2788 +# CONFIG_NET_CLS_FLOW is not set
2789 +# CONFIG_NET_EMATCH is not set
2790 +# CONFIG_NET_CLS_ACT is not set
2791 +# CONFIG_NET_CLS_IND is not set
2792 +CONFIG_NET_SCH_FIFO=y
2793 +
2794 +#
2795 +# Network testing
2796 +#
2797 +# CONFIG_NET_PKTGEN is not set
2798 +# CONFIG_HAMRADIO is not set
2799 +# CONFIG_CAN is not set
2800 +# CONFIG_IRDA is not set
2801 +CONFIG_BT=m
2802 +CONFIG_BT_L2CAP=m
2803 +CONFIG_BT_SCO=m
2804 +CONFIG_BT_RFCOMM=m
2805 +CONFIG_BT_RFCOMM_TTY=y
2806 +CONFIG_BT_BNEP=m
2807 +CONFIG_BT_BNEP_MC_FILTER=y
2808 +CONFIG_BT_BNEP_PROTO_FILTER=y
2809 +CONFIG_BT_HIDP=m
2810 +
2811 +#
2812 +# Bluetooth device drivers
2813 +#
2814 +CONFIG_BT_HCIBTUSB=m
2815 +# CONFIG_BT_HCIBTSDIO is not set
2816 +# CONFIG_BT_HCIUART is not set
2817 +# CONFIG_BT_HCIBCM203X is not set
2818 +# CONFIG_BT_HCIBPA10X is not set
2819 +# CONFIG_BT_HCIBFUSB is not set
2820 +# CONFIG_BT_HCIVHCI is not set
2821 +# CONFIG_AF_RXRPC is not set
2822 +# CONFIG_PHONET is not set
2823 +CONFIG_FIB_RULES=y
2824 +CONFIG_WIRELESS=y
2825 +# CONFIG_CFG80211 is not set
2826 +# CONFIG_WIRELESS_OLD_REGULATORY is not set
2827 +CONFIG_WIRELESS_EXT=y
2828 +CONFIG_WIRELESS_EXT_SYSFS=y
2829 +# CONFIG_MAC80211 is not set
2830 +# CONFIG_IEEE80211 is not set
2831 +CONFIG_RFKILL=y
2832 +CONFIG_RFKILL_INPUT=y
2833 +CONFIG_RFKILL_LEDS=y
2834 +# CONFIG_NET_9P is not set
2835 +
2836 +#
2837 +# Device Drivers
2838 +#
2839 +
2840 +#
2841 +# Generic Driver Options
2842 +#
2843 +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
2844 +CONFIG_STANDALONE=y
2845 +CONFIG_PREVENT_FIRMWARE_BUILD=y
2846 +CONFIG_FW_LOADER=y
2847 +# CONFIG_FIRMWARE_IN_KERNEL is not set
2848 +CONFIG_EXTRA_FIRMWARE=""
2849 +# CONFIG_DEBUG_DRIVER is not set
2850 +# CONFIG_DEBUG_DEVRES is not set
2851 +# CONFIG_SYS_HYPERVISOR is not set
2852 +CONFIG_CONNECTOR=m
2853 +CONFIG_MTD=y
2854 +# CONFIG_MTD_DEBUG is not set
2855 +CONFIG_MTD_CONCAT=y
2856 +CONFIG_MTD_PARTITIONS=y
2857 +# CONFIG_MTD_REDBOOT_PARTS is not set
2858 +CONFIG_MTD_CMDLINE_PARTS=y
2859 +# CONFIG_MTD_AFS_PARTS is not set
2860 +# CONFIG_MTD_AR7_PARTS is not set
2861 +
2862 +#
2863 +# User Modules And Translation Layers
2864 +#
2865 +CONFIG_MTD_CHAR=y
2866 +CONFIG_MTD_BLKDEVS=y
2867 +CONFIG_MTD_BLOCK=y
2868 +# CONFIG_FTL is not set
2869 +# CONFIG_NFTL is not set
2870 +# CONFIG_INFTL is not set
2871 +# CONFIG_RFD_FTL is not set
2872 +# CONFIG_SSFDC is not set
2873 +# CONFIG_MTD_OOPS is not set
2874 +
2875 +#
2876 +# RAM/ROM/Flash chip drivers
2877 +#
2878 +CONFIG_MTD_CFI=y
2879 +# CONFIG_MTD_JEDECPROBE is not set
2880 +CONFIG_MTD_GEN_PROBE=y
2881 +# CONFIG_MTD_CFI_ADV_OPTIONS is not set
2882 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
2883 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
2884 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
2885 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
2886 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
2887 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
2888 +CONFIG_MTD_CFI_I1=y
2889 +CONFIG_MTD_CFI_I2=y
2890 +# CONFIG_MTD_CFI_I4 is not set
2891 +# CONFIG_MTD_CFI_I8 is not set
2892 +CONFIG_MTD_CFI_INTELEXT=y
2893 +# CONFIG_MTD_CFI_AMDSTD is not set
2894 +# CONFIG_MTD_CFI_STAA is not set
2895 +CONFIG_MTD_CFI_UTIL=y
2896 +# CONFIG_MTD_RAM is not set
2897 +CONFIG_MTD_ROM=y
2898 +CONFIG_MTD_ABSENT=y
2899 +
2900 +#
2901 +# Mapping drivers for chip access
2902 +#
2903 +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
2904 +CONFIG_MTD_PHYSMAP=y
2905 +CONFIG_MTD_PHYSMAP_START=0x0
2906 +CONFIG_MTD_PHYSMAP_LEN=0
2907 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2
2908 +# CONFIG_MTD_ARM_INTEGRATOR is not set
2909 +# CONFIG_MTD_PLATRAM is not set
2910 +
2911 +#
2912 +# Self-contained MTD device drivers
2913 +#
2914 +# CONFIG_MTD_DATAFLASH is not set
2915 +# CONFIG_MTD_M25P80 is not set
2916 +# CONFIG_MTD_SLRAM is not set
2917 +# CONFIG_MTD_PHRAM is not set
2918 +# CONFIG_MTD_MTDRAM is not set
2919 +# CONFIG_MTD_BLOCK2MTD is not set
2920 +
2921 +#
2922 +# Disk-On-Chip Device Drivers
2923 +#
2924 +# CONFIG_MTD_DOC2000 is not set
2925 +# CONFIG_MTD_DOC2001 is not set
2926 +# CONFIG_MTD_DOC2001PLUS is not set
2927 +CONFIG_MTD_NAND=y
2928 +CONFIG_MTD_NAND_VERIFY_WRITE=y
2929 +# CONFIG_MTD_NAND_ECC_SMC is not set
2930 +# CONFIG_MTD_NAND_MUSEUM_IDS is not set
2931 +# CONFIG_MTD_NAND_GPIO is not set
2932 +CONFIG_MTD_NAND_IDS=y
2933 +CONFIG_MTD_NAND_S3C2410=y
2934 +CONFIG_MTD_NAND_S3C2410_DEBUG=y
2935 +CONFIG_MTD_NAND_S3C2410_HWECC=y
2936 +# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
2937 +# CONFIG_MTD_NAND_DISKONCHIP is not set
2938 +# CONFIG_MTD_NAND_NANDSIM is not set
2939 +# CONFIG_MTD_NAND_PLATFORM is not set
2940 +# CONFIG_MTD_ALAUDA is not set
2941 +# CONFIG_MTD_ONENAND is not set
2942 +
2943 +#
2944 +# UBI - Unsorted block images
2945 +#
2946 +# CONFIG_MTD_UBI is not set
2947 +# CONFIG_PARPORT is not set
2948 +CONFIG_BLK_DEV=y
2949 +# CONFIG_BLK_DEV_COW_COMMON is not set
2950 +CONFIG_BLK_DEV_LOOP=m
2951 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
2952 +# CONFIG_BLK_DEV_NBD is not set
2953 +CONFIG_BLK_DEV_UB=m
2954 +CONFIG_BLK_DEV_RAM=y
2955 +CONFIG_BLK_DEV_RAM_COUNT=16
2956 +CONFIG_BLK_DEV_RAM_SIZE=4096
2957 +# CONFIG_BLK_DEV_XIP is not set
2958 +# CONFIG_CDROM_PKTCDVD is not set
2959 +# CONFIG_ATA_OVER_ETH is not set
2960 +CONFIG_MISC_DEVICES=y
2961 +# CONFIG_EEPROM_93CX6 is not set
2962 +CONFIG_LOW_MEMORY_KILLER=y
2963 +# CONFIG_ENCLOSURE_SERVICES is not set
2964 +CONFIG_HAVE_IDE=y
2965 +# CONFIG_IDE is not set
2966 +
2967 +#
2968 +# SCSI device support
2969 +#
2970 +# CONFIG_RAID_ATTRS is not set
2971 +CONFIG_SCSI=m
2972 +CONFIG_SCSI_DMA=y
2973 +# CONFIG_SCSI_TGT is not set
2974 +# CONFIG_SCSI_NETLINK is not set
2975 +CONFIG_SCSI_PROC_FS=y
2976 +
2977 +#
2978 +# SCSI support type (disk, tape, CD-ROM)
2979 +#
2980 +CONFIG_BLK_DEV_SD=m
2981 +# CONFIG_CHR_DEV_ST is not set
2982 +# CONFIG_CHR_DEV_OSST is not set
2983 +CONFIG_BLK_DEV_SR=m
2984 +# CONFIG_BLK_DEV_SR_VENDOR is not set
2985 +CONFIG_CHR_DEV_SG=m
2986 +# CONFIG_CHR_DEV_SCH is not set
2987 +
2988 +#
2989 +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
2990 +#
2991 +CONFIG_SCSI_MULTI_LUN=y
2992 +# CONFIG_SCSI_CONSTANTS is not set
2993 +# CONFIG_SCSI_LOGGING is not set
2994 +CONFIG_SCSI_SCAN_ASYNC=y
2995 +CONFIG_SCSI_WAIT_SCAN=m
2996 +
2997 +#
2998 +# SCSI Transports
2999 +#
3000 +# CONFIG_SCSI_SPI_ATTRS is not set
3001 +# CONFIG_SCSI_FC_ATTRS is not set
3002 +# CONFIG_SCSI_ISCSI_ATTRS is not set
3003 +# CONFIG_SCSI_SAS_LIBSAS is not set
3004 +# CONFIG_SCSI_SRP_ATTRS is not set
3005 +CONFIG_SCSI_LOWLEVEL=y
3006 +# CONFIG_ISCSI_TCP is not set
3007 +# CONFIG_SCSI_DEBUG is not set
3008 +# CONFIG_SCSI_DH is not set
3009 +# CONFIG_ATA is not set
3010 +CONFIG_MD=y
3011 +# CONFIG_BLK_DEV_MD is not set
3012 +CONFIG_BLK_DEV_DM=m
3013 +# CONFIG_DM_DEBUG is not set
3014 +CONFIG_DM_CRYPT=m
3015 +CONFIG_DM_SNAPSHOT=m
3016 +# CONFIG_DM_MIRROR is not set
3017 +# CONFIG_DM_ZERO is not set
3018 +# CONFIG_DM_MULTIPATH is not set
3019 +# CONFIG_DM_DELAY is not set
3020 +# CONFIG_DM_UEVENT is not set
3021 +CONFIG_NETDEVICES=y
3022 +# CONFIG_DUMMY is not set
3023 +# CONFIG_BONDING is not set
3024 +# CONFIG_MACVLAN is not set
3025 +# CONFIG_EQUALIZER is not set
3026 +CONFIG_TUN=m
3027 +# CONFIG_VETH is not set
3028 +# CONFIG_PHYLIB is not set
3029 +CONFIG_NET_ETHERNET=y
3030 +CONFIG_MII=y
3031 +# CONFIG_AX88796 is not set
3032 +# CONFIG_SMC91X is not set
3033 +# CONFIG_DM9000 is not set
3034 +# CONFIG_ENC28J60 is not set
3035 +# CONFIG_SMC911X is not set
3036 +# CONFIG_IBM_NEW_EMAC_ZMII is not set
3037 +# CONFIG_IBM_NEW_EMAC_RGMII is not set
3038 +# CONFIG_IBM_NEW_EMAC_TAH is not set
3039 +# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
3040 +# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
3041 +# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
3042 +# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
3043 +# CONFIG_B44 is not set
3044 +# CONFIG_NETDEV_1000 is not set
3045 +# CONFIG_NETDEV_10000 is not set
3046 +
3047 +#
3048 +# Wireless LAN
3049 +#
3050 +# CONFIG_WLAN_PRE80211 is not set
3051 +# CONFIG_WLAN_80211 is not set
3052 +# CONFIG_IWLWIFI_LEDS is not set
3053 +
3054 +#
3055 +# USB Network Adapters
3056 +#
3057 +CONFIG_USB_CATC=m
3058 +CONFIG_USB_KAWETH=m
3059 +CONFIG_USB_PEGASUS=m
3060 +CONFIG_USB_RTL8150=m
3061 +CONFIG_USB_USBNET=y
3062 +CONFIG_USB_NET_AX8817X=m
3063 +CONFIG_USB_NET_CDCETHER=m
3064 +CONFIG_USB_NET_DM9601=m
3065 +# CONFIG_USB_NET_SMSC95XX is not set
3066 +CONFIG_USB_NET_GL620A=m
3067 +CONFIG_USB_NET_NET1080=m
3068 +CONFIG_USB_NET_PLUSB=m
3069 +CONFIG_USB_NET_MCS7830=m
3070 +CONFIG_USB_NET_RNDIS_HOST=m
3071 +CONFIG_USB_NET_CDC_SUBSET=m
3072 +CONFIG_USB_ALI_M5632=y
3073 +CONFIG_USB_AN2720=y
3074 +CONFIG_USB_BELKIN=y
3075 +CONFIG_USB_ARMLINUX=y
3076 +CONFIG_USB_EPSON2888=y
3077 +CONFIG_USB_KC2190=y
3078 +CONFIG_USB_NET_ZAURUS=m
3079 +# CONFIG_USB_HSO is not set
3080 +# CONFIG_WAN is not set
3081 +CONFIG_PPP=m
3082 +CONFIG_PPP_MULTILINK=y
3083 +CONFIG_PPP_FILTER=y
3084 +CONFIG_PPP_ASYNC=m
3085 +CONFIG_PPP_SYNC_TTY=m
3086 +CONFIG_PPP_DEFLATE=m
3087 +CONFIG_PPP_BSDCOMP=m
3088 +CONFIG_PPP_MPPE=m
3089 +# CONFIG_PPPOE is not set
3090 +# CONFIG_PPPOL2TP is not set
3091 +# CONFIG_SLIP is not set
3092 +CONFIG_SLHC=m
3093 +# CONFIG_NETCONSOLE is not set
3094 +# CONFIG_NETPOLL is not set
3095 +# CONFIG_NET_POLL_CONTROLLER is not set
3096 +# CONFIG_ISDN is not set
3097 +
3098 +#
3099 +# Input device support
3100 +#
3101 +CONFIG_INPUT=y
3102 +# CONFIG_INPUT_FF_MEMLESS is not set
3103 +# CONFIG_INPUT_POLLDEV is not set
3104 +
3105 +#
3106 +# Userland interfaces
3107 +#
3108 +CONFIG_INPUT_MOUSEDEV=y
3109 +# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
3110 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
3111 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
3112 +# CONFIG_INPUT_JOYDEV is not set
3113 +CONFIG_INPUT_EVDEV=y
3114 +# CONFIG_INPUT_EVBUG is not set
3115 +
3116 +#
3117 +# Input Device Drivers
3118 +#
3119 +CONFIG_INPUT_KEYBOARD=y
3120 +# CONFIG_KEYBOARD_ATKBD is not set
3121 +# CONFIG_KEYBOARD_SUNKBD is not set
3122 +# CONFIG_KEYBOARD_LKKBD is not set
3123 +# CONFIG_KEYBOARD_XTKBD is not set
3124 +# CONFIG_KEYBOARD_NEWTON is not set
3125 +CONFIG_KEYBOARD_STOWAWAY=m
3126 +CONFIG_KEYBOARD_GPIO=m
3127 +CONFIG_KEYBOARD_NEO1973=y
3128 +CONFIG_KEYBOARD_QT2410=y
3129 +CONFIG_INPUT_MOUSE=y
3130 +# CONFIG_MOUSE_PS2 is not set
3131 +# CONFIG_MOUSE_SERIAL is not set
3132 +# CONFIG_MOUSE_APPLETOUCH is not set
3133 +# CONFIG_MOUSE_BCM5974 is not set
3134 +# CONFIG_MOUSE_VSXXXAA is not set
3135 +# CONFIG_MOUSE_GPIO is not set
3136 +# CONFIG_INPUT_JOYSTICK is not set
3137 +# CONFIG_INPUT_TABLET is not set
3138 +CONFIG_INPUT_TOUCHSCREEN=y
3139 +CONFIG_TOUCHSCREEN_FILTER=y
3140 +CONFIG_TOUCHSCREEN_FILTER_GROUP=y
3141 +CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y
3142 +CONFIG_TOUCHSCREEN_FILTER_MEAN=y
3143 +CONFIG_TOUCHSCREEN_FILTER_LINEAR=y
3144 +# CONFIG_TOUCHSCREEN_ADS7846 is not set
3145 +# CONFIG_TOUCHSCREEN_FUJITSU is not set
3146 +CONFIG_TOUCHSCREEN_S3C2410=y
3147 +# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
3148 +# CONFIG_TOUCHSCREEN_GUNZE is not set
3149 +# CONFIG_TOUCHSCREEN_ELO is not set
3150 +# CONFIG_TOUCHSCREEN_MTOUCH is not set
3151 +# CONFIG_TOUCHSCREEN_INEXIO is not set
3152 +# CONFIG_TOUCHSCREEN_MK712 is not set
3153 +# CONFIG_TOUCHSCREEN_PENMOUNT is not set
3154 +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
3155 +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
3156 +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
3157 +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
3158 +# CONFIG_TOUCHSCREEN_PCAP7200 is not set
3159 +CONFIG_INPUT_MISC=y
3160 +# CONFIG_INPUT_ATI_REMOTE is not set
3161 +# CONFIG_INPUT_ATI_REMOTE2 is not set
3162 +# CONFIG_INPUT_KEYSPAN_REMOTE is not set
3163 +# CONFIG_INPUT_POWERMATE is not set
3164 +# CONFIG_INPUT_YEALINK is not set
3165 +# CONFIG_INPUT_CM109 is not set
3166 +CONFIG_INPUT_UINPUT=m
3167 +CONFIG_INPUT_LIS302DL=y
3168 +CONFIG_INPUT_PCF50633_PMU=y
3169 +
3170 +#
3171 +# Hardware I/O ports
3172 +#
3173 +CONFIG_SERIO=y
3174 +# CONFIG_SERIO_SERPORT is not set
3175 +# CONFIG_SERIO_RAW is not set
3176 +# CONFIG_GAMEPORT is not set
3177 +
3178 +#
3179 +# Character devices
3180 +#
3181 +CONFIG_VT=y
3182 +CONFIG_CONSOLE_TRANSLATIONS=y
3183 +CONFIG_VT_CONSOLE=y
3184 +CONFIG_NR_TTY_DEVICES=6
3185 +CONFIG_HW_CONSOLE=y
3186 +CONFIG_VT_HW_CONSOLE_BINDING=y
3187 +# CONFIG_DEVKMEM is not set
3188 +# CONFIG_SERIAL_NONSTANDARD is not set
3189 +
3190 +#
3191 +# Serial drivers
3192 +#
3193 +# CONFIG_SERIAL_8250 is not set
3194 +
3195 +#
3196 +# Non-8250 serial port support
3197 +#
3198 +CONFIG_SERIAL_SAMSUNG=y
3199 +CONFIG_SERIAL_SAMSUNG_UARTS=3
3200 +CONFIG_SERIAL_SAMSUNG_CONSOLE=y
3201 +CONFIG_SERIAL_S3C2410=y
3202 +CONFIG_SERIAL_S3C2440=y
3203 +CONFIG_SERIAL_CORE=y
3204 +CONFIG_SERIAL_CORE_CONSOLE=y
3205 +CONFIG_UNIX98_PTYS=y
3206 +# CONFIG_LEGACY_PTYS is not set
3207 +# CONFIG_IPMI_HANDLER is not set
3208 +# CONFIG_HW_RANDOM is not set
3209 +# CONFIG_NVRAM is not set
3210 +# CONFIG_R3964 is not set
3211 +# CONFIG_RAW_DRIVER is not set
3212 +# CONFIG_TCG_TPM is not set
3213 +CONFIG_I2C=y
3214 +CONFIG_I2C_BOARDINFO=y
3215 +CONFIG_I2C_CHARDEV=y
3216 +CONFIG_I2C_HELPER_AUTO=y
3217 +
3218 +#
3219 +# I2C Hardware Bus support
3220 +#
3221 +
3222 +#
3223 +# I2C system bus drivers (mostly embedded / system-on-chip)
3224 +#
3225 +# CONFIG_I2C_GPIO is not set
3226 +# CONFIG_I2C_OCORES is not set
3227 +CONFIG_I2C_S3C2410=y
3228 +# CONFIG_I2C_SIMTEC is not set
3229 +
3230 +#
3231 +# External I2C/SMBus adapter drivers
3232 +#
3233 +# CONFIG_I2C_PARPORT_LIGHT is not set
3234 +# CONFIG_I2C_TAOS_EVM is not set
3235 +# CONFIG_I2C_TINY_USB is not set
3236 +
3237 +#
3238 +# Other I2C/SMBus bus drivers
3239 +#
3240 +# CONFIG_I2C_PCA_PLATFORM is not set
3241 +# CONFIG_I2C_STUB is not set
3242 +
3243 +#
3244 +# Miscellaneous I2C Chip support
3245 +#
3246 +# CONFIG_DS1682 is not set
3247 +# CONFIG_AT24 is not set
3248 +# CONFIG_SENSORS_EEPROM is not set
3249 +# CONFIG_SENSORS_PCF50606 is not set
3250 +# CONFIG_SENSORS_PCF50633 is not set
3251 +# CONFIG_SENSORS_PCF8574 is not set
3252 +# CONFIG_PCF8575 is not set
3253 +# CONFIG_SENSORS_PCA9539 is not set
3254 +# CONFIG_SENSORS_PCF8591 is not set
3255 +# CONFIG_TPS65010 is not set
3256 +# CONFIG_SENSORS_MAX6875 is not set
3257 +# CONFIG_SENSORS_TSL2550 is not set
3258 +# CONFIG_SENSORS_TSL256X is not set
3259 +CONFIG_PCA9632=y
3260 +# CONFIG_I2C_DEBUG_CORE is not set
3261 +# CONFIG_I2C_DEBUG_ALGO is not set
3262 +# CONFIG_I2C_DEBUG_BUS is not set
3263 +# CONFIG_I2C_DEBUG_CHIP is not set
3264 +CONFIG_SPI=y
3265 +# CONFIG_SPI_DEBUG is not set
3266 +CONFIG_SPI_MASTER=y
3267 +
3268 +#
3269 +# SPI Master Controller Drivers
3270 +#
3271 +CONFIG_SPI_BITBANG=y
3272 +# CONFIG_SPI_S3C24XX is not set
3273 +CONFIG_SPI_S3C24XX_GPIO=y
3274 +
3275 +#
3276 +# SPI Protocol Masters
3277 +#
3278 +# CONFIG_SPI_AT25 is not set
3279 +# CONFIG_SPI_SPIDEV is not set
3280 +# CONFIG_SPI_TLE62X0 is not set
3281 +CONFIG_ARCH_REQUIRE_GPIOLIB=y
3282 +CONFIG_GPIOLIB=y
3283 +CONFIG_DEBUG_GPIO=y
3284 +CONFIG_GPIO_SYSFS=y
3285 +
3286 +#
3287 +# I2C GPIO expanders:
3288 +#
3289 +# CONFIG_GPIO_MAX732X is not set
3290 +# CONFIG_GPIO_PCA953X is not set
3291 +# CONFIG_GPIO_PCF857X is not set
3292 +
3293 +#
3294 +# PCI GPIO expanders:
3295 +#
3296 +
3297 +#
3298 +# SPI GPIO expanders:
3299 +#
3300 +# CONFIG_GPIO_MAX7301 is not set
3301 +# CONFIG_GPIO_MCP23S08 is not set
3302 +# CONFIG_W1 is not set
3303 +CONFIG_POWER_SUPPLY=y
3304 +CONFIG_POWER_SUPPLY_DEBUG=y
3305 +CONFIG_PDA_POWER=y
3306 +CONFIG_APM_POWER=y
3307 +# CONFIG_BATTERY_DS2760 is not set
3308 +# CONFIG_BATTERY_BQ27x00 is not set
3309 +CONFIG_BATTERY_BQ27000_HDQ=y
3310 +CONFIG_GTA02_HDQ=y
3311 +CONFIG_CHARGER_PCF50633=y
3312 +CONFIG_HWMON=y
3313 +# CONFIG_HWMON_VID is not set
3314 +# CONFIG_SENSORS_AD7414 is not set
3315 +# CONFIG_SENSORS_AD7418 is not set
3316 +# CONFIG_SENSORS_ADCXX is not set
3317 +# CONFIG_SENSORS_ADM1021 is not set
3318 +# CONFIG_SENSORS_ADM1025 is not set
3319 +# CONFIG_SENSORS_ADM1026 is not set
3320 +# CONFIG_SENSORS_ADM1029 is not set
3321 +# CONFIG_SENSORS_ADM1031 is not set
3322 +# CONFIG_SENSORS_ADM9240 is not set
3323 +# CONFIG_SENSORS_ADT7470 is not set
3324 +# CONFIG_SENSORS_ADT7473 is not set
3325 +# CONFIG_SENSORS_ATXP1 is not set
3326 +# CONFIG_SENSORS_DS1621 is not set
3327 +# CONFIG_SENSORS_F71805F is not set
3328 +# CONFIG_SENSORS_F71882FG is not set
3329 +# CONFIG_SENSORS_F75375S is not set
3330 +# CONFIG_SENSORS_GL518SM is not set
3331 +# CONFIG_SENSORS_GL520SM is not set
3332 +# CONFIG_SENSORS_IT87 is not set
3333 +# CONFIG_SENSORS_LM63 is not set
3334 +# CONFIG_SENSORS_LM70 is not set
3335 +# CONFIG_SENSORS_LM75 is not set
3336 +# CONFIG_SENSORS_LM77 is not set
3337 +# CONFIG_SENSORS_LM78 is not set
3338 +# CONFIG_SENSORS_LM80 is not set
3339 +# CONFIG_SENSORS_LM83 is not set
3340 +# CONFIG_SENSORS_LM85 is not set
3341 +# CONFIG_SENSORS_LM87 is not set
3342 +# CONFIG_SENSORS_LM90 is not set
3343 +# CONFIG_SENSORS_LM92 is not set
3344 +# CONFIG_SENSORS_LM93 is not set
3345 +# CONFIG_SENSORS_MAX1111 is not set
3346 +# CONFIG_SENSORS_MAX1619 is not set
3347 +# CONFIG_SENSORS_MAX6650 is not set
3348 +# CONFIG_SENSORS_PC87360 is not set
3349 +# CONFIG_SENSORS_PC87427 is not set
3350 +# CONFIG_SENSORS_DME1737 is not set
3351 +# CONFIG_SENSORS_SMSC47M1 is not set
3352 +# CONFIG_SENSORS_SMSC47M192 is not set
3353 +# CONFIG_SENSORS_SMSC47B397 is not set
3354 +# CONFIG_SENSORS_ADS7828 is not set
3355 +# CONFIG_SENSORS_THMC50 is not set
3356 +# CONFIG_SENSORS_VT1211 is not set
3357 +# CONFIG_SENSORS_W83781D is not set
3358 +# CONFIG_SENSORS_W83791D is not set
3359 +# CONFIG_SENSORS_W83792D is not set
3360 +# CONFIG_SENSORS_W83793 is not set
3361 +# CONFIG_SENSORS_W83L785TS is not set
3362 +# CONFIG_SENSORS_W83L786NG is not set
3363 +# CONFIG_SENSORS_W83627HF is not set
3364 +# CONFIG_SENSORS_W83627EHF is not set
3365 +# CONFIG_HWMON_DEBUG_CHIP is not set
3366 +# CONFIG_THERMAL is not set
3367 +# CONFIG_THERMAL_HWMON is not set
3368 +CONFIG_WATCHDOG=y
3369 +# CONFIG_WATCHDOG_NOWAYOUT is not set
3370 +
3371 +#
3372 +# Watchdog Device Drivers
3373 +#
3374 +# CONFIG_SOFT_WATCHDOG is not set
3375 +CONFIG_S3C2410_WATCHDOG=m
3376 +
3377 +#
3378 +# USB-based Watchdog Cards
3379 +#
3380 +# CONFIG_USBPCWATCHDOG is not set
3381 +
3382 +#
3383 +# Sonics Silicon Backplane
3384 +#
3385 +CONFIG_SSB_POSSIBLE=y
3386 +# CONFIG_SSB is not set
3387 +
3388 +#
3389 +# Multifunction device drivers
3390 +#
3391 +# CONFIG_MFD_CORE is not set
3392 +# CONFIG_MFD_SM501 is not set
3393 +# CONFIG_MFD_ASIC3 is not set
3394 +# CONFIG_HTC_EGPIO is not set
3395 +# CONFIG_HTC_PASIC3 is not set
3396 +# CONFIG_MFD_TMIO is not set
3397 +# CONFIG_MFD_T7L66XB is not set
3398 +# CONFIG_MFD_TC6387XB is not set
3399 +# CONFIG_MFD_TC6393XB is not set
3400 +# CONFIG_PMIC_DA903X is not set
3401 +# CONFIG_MFD_WM8400 is not set
3402 +# CONFIG_MFD_WM8350_I2C is not set
3403 +CONFIG_MFD_PCF50633=y
3404 +CONFIG_PCF50633_ADC=y
3405 +CONFIG_PCF50633_GPIO=y
3406 +# CONFIG_MFD_PCF50606 is not set
3407 +CONFIG_MFD_GLAMO=y
3408 +CONFIG_MFD_GLAMO_FB=y
3409 +CONFIG_MFD_GLAMO_SPI_GPIO=y
3410 +CONFIG_MFD_GLAMO_SPI_FB=y
3411 +CONFIG_MFD_GLAMO_MCI=y
3412 +
3413 +#
3414 +# Multimedia devices
3415 +#
3416 +
3417 +#
3418 +# Multimedia core support
3419 +#
3420 +# CONFIG_VIDEO_DEV is not set
3421 +# CONFIG_DVB_CORE is not set
3422 +# CONFIG_VIDEO_MEDIA is not set
3423 +
3424 +#
3425 +# Multimedia drivers
3426 +#
3427 +CONFIG_DAB=y
3428 +# CONFIG_USB_DABUSB is not set
3429 +
3430 +#
3431 +# Graphics support
3432 +#
3433 +# CONFIG_VGASTATE is not set
3434 +CONFIG_VIDEO_OUTPUT_CONTROL=y
3435 +CONFIG_FB=y
3436 +# CONFIG_FIRMWARE_EDID is not set
3437 +# CONFIG_FB_DDC is not set
3438 +# CONFIG_FB_BOOT_VESA_SUPPORT is not set
3439 +CONFIG_FB_CFB_FILLRECT=y
3440 +CONFIG_FB_CFB_COPYAREA=y
3441 +CONFIG_FB_CFB_IMAGEBLIT=y
3442 +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
3443 +# CONFIG_FB_SYS_FILLRECT is not set
3444 +# CONFIG_FB_SYS_COPYAREA is not set
3445 +# CONFIG_FB_SYS_IMAGEBLIT is not set
3446 +# CONFIG_FB_FOREIGN_ENDIAN is not set
3447 +# CONFIG_FB_SYS_FOPS is not set
3448 +# CONFIG_FB_SVGALIB is not set
3449 +# CONFIG_FB_MACMODES is not set
3450 +# CONFIG_FB_BACKLIGHT is not set
3451 +# CONFIG_FB_MODE_HELPERS is not set
3452 +# CONFIG_FB_TILEBLITTING is not set
3453 +
3454 +#
3455 +# Frame buffer hardware drivers
3456 +#
3457 +# CONFIG_FB_UVESA is not set
3458 +# CONFIG_FB_S1D13XXX is not set
3459 +CONFIG_FB_S3C2410=y
3460 +# CONFIG_FB_S3C2410_DEBUG is not set
3461 +# CONFIG_FB_VIRTUAL is not set
3462 +# CONFIG_FB_METRONOME is not set
3463 +# CONFIG_FB_MB862XX is not set
3464 +CONFIG_BACKLIGHT_LCD_SUPPORT=y
3465 +CONFIG_LCD_CLASS_DEVICE=y
3466 +CONFIG_LCD_LTV350QV=y
3467 +# CONFIG_LCD_ILI9320 is not set
3468 +# CONFIG_LCD_TDO24M is not set
3469 +# CONFIG_LCD_VGG2432A4 is not set
3470 +# CONFIG_LCD_PLATFORM is not set
3471 +CONFIG_BACKLIGHT_CLASS_DEVICE=y
3472 +CONFIG_BACKLIGHT_CORGI=y
3473 +# CONFIG_BACKLIGHT_PWM is not set
3474 +
3475 +#
3476 +# Display device support
3477 +#
3478 +CONFIG_DISPLAY_SUPPORT=y
3479 +
3480 +#
3481 +# Display hardware drivers
3482 +#
3483 +CONFIG_DISPLAY_JBT6K74=y
3484 +
3485 +#
3486 +# Console display driver support
3487 +#
3488 +# CONFIG_VGA_CONSOLE is not set
3489 +CONFIG_DUMMY_CONSOLE=y
3490 +CONFIG_FRAMEBUFFER_CONSOLE=y
3491 +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
3492 +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
3493 +CONFIG_FONTS=y
3494 +# CONFIG_FONT_8x8 is not set
3495 +# CONFIG_FONT_8x16 is not set
3496 +CONFIG_FONT_6x11=y
3497 +# CONFIG_FONT_7x14 is not set
3498 +# CONFIG_FONT_PEARL_8x8 is not set
3499 +# CONFIG_FONT_ACORN_8x8 is not set
3500 +# CONFIG_FONT_MINI_4x6 is not set
3501 +# CONFIG_FONT_SUN8x16 is not set
3502 +# CONFIG_FONT_SUN12x22 is not set
3503 +# CONFIG_FONT_10x18 is not set
3504 +# CONFIG_LOGO is not set
3505 +CONFIG_SOUND=y
3506 +CONFIG_SOUND_OSS_CORE=y
3507 +CONFIG_SND=m
3508 +CONFIG_SND_TIMER=m
3509 +CONFIG_SND_PCM=m
3510 +CONFIG_SND_HWDEP=m
3511 +CONFIG_SND_RAWMIDI=m
3512 +# CONFIG_SND_SEQUENCER is not set
3513 +CONFIG_SND_OSSEMUL=y
3514 +CONFIG_SND_MIXER_OSS=m
3515 +CONFIG_SND_PCM_OSS=m
3516 +CONFIG_SND_PCM_OSS_PLUGINS=y
3517 +# CONFIG_SND_DYNAMIC_MINORS is not set
3518 +CONFIG_SND_SUPPORT_OLD_API=y
3519 +CONFIG_SND_VERBOSE_PROCFS=y
3520 +# CONFIG_SND_VERBOSE_PRINTK is not set
3521 +CONFIG_SND_DEBUG=y
3522 +# CONFIG_SND_DEBUG_VERBOSE is not set
3523 +CONFIG_SND_PCM_XRUN_DEBUG=y
3524 +CONFIG_SND_DRIVERS=y
3525 +# CONFIG_SND_DUMMY is not set
3526 +# CONFIG_SND_MTPAV is not set
3527 +# CONFIG_SND_SERIAL_U16550 is not set
3528 +# CONFIG_SND_MPU401 is not set
3529 +CONFIG_SND_ARM=y
3530 +# CONFIG_SND_SPI is not set
3531 +CONFIG_SND_USB=y
3532 +CONFIG_SND_USB_AUDIO=m
3533 +# CONFIG_SND_USB_CAIAQ is not set
3534 +CONFIG_SND_SOC=m
3535 +CONFIG_SND_S3C24XX_SOC=m
3536 +CONFIG_SND_S3C24XX_SOC_I2S=m
3537 +CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753=m
3538 +# CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650 is not set
3539 +# CONFIG_SND_SOC_ALL_CODECS is not set
3540 +CONFIG_SND_SOC_WM8753=m
3541 +# CONFIG_SOUND_PRIME is not set
3542 +CONFIG_HID_SUPPORT=y
3543 +CONFIG_HID=y
3544 +# CONFIG_HID_DEBUG is not set
3545 +# CONFIG_HIDRAW is not set
3546 +
3547 +#
3548 +# USB Input Devices
3549 +#
3550 +CONFIG_USB_HID=y
3551 +CONFIG_HID_PID=y
3552 +# CONFIG_USB_HIDDEV is not set
3553 +
3554 +#
3555 +# Special HID drivers
3556 +#
3557 +CONFIG_HID_COMPAT=y
3558 +CONFIG_HID_A4TECH=y
3559 +CONFIG_HID_APPLE=y
3560 +CONFIG_HID_BELKIN=y
3561 +CONFIG_HID_BRIGHT=y
3562 +CONFIG_HID_CHERRY=y
3563 +CONFIG_HID_CHICONY=y
3564 +CONFIG_HID_CYPRESS=y
3565 +CONFIG_HID_DELL=y
3566 +CONFIG_HID_EZKEY=y
3567 +CONFIG_HID_GYRATION=y
3568 +CONFIG_HID_LOGITECH=y
3569 +# CONFIG_LOGITECH_FF is not set
3570 +# CONFIG_LOGIRUMBLEPAD2_FF is not set
3571 +CONFIG_HID_MICROSOFT=y
3572 +CONFIG_HID_MONTEREY=y
3573 +CONFIG_HID_PANTHERLORD=y
3574 +# CONFIG_PANTHERLORD_FF is not set
3575 +CONFIG_HID_PETALYNX=y
3576 +CONFIG_HID_SAMSUNG=y
3577 +CONFIG_HID_SONY=y
3578 +CONFIG_HID_SUNPLUS=y
3579 +# CONFIG_THRUSTMASTER_FF is not set
3580 +# CONFIG_ZEROPLUS_FF is not set
3581 +CONFIG_USB_SUPPORT=y
3582 +CONFIG_USB_ARCH_HAS_HCD=y
3583 +CONFIG_USB_ARCH_HAS_OHCI=y
3584 +# CONFIG_USB_ARCH_HAS_EHCI is not set
3585 +CONFIG_USB=y
3586 +# CONFIG_USB_DEBUG is not set
3587 +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
3588 +
3589 +#
3590 +# Miscellaneous USB options
3591 +#
3592 +CONFIG_USB_DEVICEFS=y
3593 +CONFIG_USB_DEVICE_CLASS=y
3594 +# CONFIG_USB_DYNAMIC_MINORS is not set
3595 +CONFIG_USB_SUSPEND=y
3596 +# CONFIG_USB_OTG is not set
3597 +CONFIG_USB_MON=y
3598 +# CONFIG_USB_WUSB is not set
3599 +# CONFIG_USB_WUSB_CBAF is not set
3600 +
3601 +#
3602 +# USB Host Controller Drivers
3603 +#
3604 +# CONFIG_USB_C67X00_HCD is not set
3605 +# CONFIG_USB_ISP116X_HCD is not set
3606 +# CONFIG_USB_ISP1760_HCD is not set
3607 +CONFIG_USB_OHCI_HCD=m
3608 +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
3609 +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
3610 +CONFIG_USB_OHCI_LITTLE_ENDIAN=y
3611 +# CONFIG_USB_SL811_HCD is not set
3612 +# CONFIG_USB_R8A66597_HCD is not set
3613 +# CONFIG_USB_HWA_HCD is not set
3614 +# CONFIG_USB_MUSB_HDRC is not set
3615 +# CONFIG_USB_GADGET_MUSB_HDRC is not set
3616 +
3617 +#
3618 +# USB Device Class drivers
3619 +#
3620 +CONFIG_USB_ACM=m
3621 +CONFIG_USB_PRINTER=m
3622 +# CONFIG_USB_WDM is not set
3623 +CONFIG_USB_TMC=m
3624 +
3625 +#
3626 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
3627 +#
3628 +
3629 +#
3630 +# may also be needed; see USB_STORAGE Help for more information
3631 +#
3632 +CONFIG_USB_STORAGE=m
3633 +# CONFIG_USB_STORAGE_DEBUG is not set
3634 +CONFIG_USB_STORAGE_DATAFAB=y
3635 +CONFIG_USB_STORAGE_FREECOM=y
3636 +# CONFIG_USB_STORAGE_ISD200 is not set
3637 +CONFIG_USB_STORAGE_DPCM=y
3638 +CONFIG_USB_STORAGE_USBAT=y
3639 +CONFIG_USB_STORAGE_SDDR09=y
3640 +CONFIG_USB_STORAGE_SDDR55=y
3641 +CONFIG_USB_STORAGE_JUMPSHOT=y
3642 +CONFIG_USB_STORAGE_ALAUDA=y
3643 +# CONFIG_USB_STORAGE_ONETOUCH is not set
3644 +CONFIG_USB_STORAGE_KARMA=y
3645 +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
3646 +CONFIG_USB_LIBUSUAL=y
3647 +
3648 +#
3649 +# USB Imaging devices
3650 +#
3651 +# CONFIG_USB_MDC800 is not set
3652 +# CONFIG_USB_MICROTEK is not set
3653 +
3654 +#
3655 +# USB port drivers
3656 +#
3657 +CONFIG_USB_SERIAL=m
3658 +CONFIG_USB_EZUSB=y
3659 +CONFIG_USB_SERIAL_GENERIC=y
3660 +CONFIG_USB_SERIAL_AIRCABLE=m
3661 +CONFIG_USB_SERIAL_ARK3116=m
3662 +CONFIG_USB_SERIAL_BELKIN=m
3663 +# CONFIG_USB_SERIAL_CH341 is not set
3664 +CONFIG_USB_SERIAL_WHITEHEAT=m
3665 +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
3666 +CONFIG_USB_SERIAL_CP2101=m
3667 +CONFIG_USB_SERIAL_CYPRESS_M8=m
3668 +CONFIG_USB_SERIAL_EMPEG=m
3669 +CONFIG_USB_SERIAL_FTDI_SIO=m
3670 +CONFIG_USB_SERIAL_FUNSOFT=m
3671 +CONFIG_USB_SERIAL_VISOR=m
3672 +CONFIG_USB_SERIAL_IPAQ=m
3673 +CONFIG_USB_SERIAL_IR=m
3674 +CONFIG_USB_SERIAL_EDGEPORT=m
3675 +CONFIG_USB_SERIAL_EDGEPORT_TI=m
3676 +CONFIG_USB_SERIAL_GARMIN=m
3677 +CONFIG_USB_SERIAL_IPW=m
3678 +# CONFIG_USB_SERIAL_IUU is not set
3679 +CONFIG_USB_SERIAL_KEYSPAN_PDA=m
3680 +CONFIG_USB_SERIAL_KEYSPAN=m
3681 +CONFIG_USB_SERIAL_KLSI=m
3682 +CONFIG_USB_SERIAL_KOBIL_SCT=m
3683 +CONFIG_USB_SERIAL_MCT_U232=m
3684 +CONFIG_USB_SERIAL_MOS7720=m
3685 +CONFIG_USB_SERIAL_MOS7840=m
3686 +# CONFIG_USB_SERIAL_MOTOROLA is not set
3687 +CONFIG_USB_SERIAL_NAVMAN=m
3688 +CONFIG_USB_SERIAL_PL2303=m
3689 +# CONFIG_USB_SERIAL_OTI6858 is not set
3690 +# CONFIG_USB_SERIAL_SPCP8X5 is not set
3691 +CONFIG_USB_SERIAL_HP4X=m
3692 +CONFIG_USB_SERIAL_SAFE=m
3693 +CONFIG_USB_SERIAL_SAFE_PADDED=y
3694 +CONFIG_USB_SERIAL_SIERRAWIRELESS=m
3695 +CONFIG_USB_SERIAL_TI=m
3696 +CONFIG_USB_SERIAL_CYBERJACK=m
3697 +CONFIG_USB_SERIAL_XIRCOM=m
3698 +CONFIG_USB_SERIAL_OPTION=m
3699 +CONFIG_USB_SERIAL_OMNINET=m
3700 +# CONFIG_USB_SERIAL_DEBUG is not set
3701 +
3702 +#
3703 +# USB Miscellaneous drivers
3704 +#
3705 +# CONFIG_USB_EMI62 is not set
3706 +# CONFIG_USB_EMI26 is not set
3707 +# CONFIG_USB_ADUTUX is not set
3708 +# CONFIG_USB_SEVSEG is not set
3709 +# CONFIG_USB_RIO500 is not set
3710 +# CONFIG_USB_LEGOTOWER is not set
3711 +# CONFIG_USB_LCD is not set
3712 +CONFIG_USB_BERRY_CHARGE=m
3713 +# CONFIG_USB_LED is not set
3714 +# CONFIG_USB_CYPRESS_CY7C63 is not set
3715 +# CONFIG_USB_CYTHERM is not set
3716 +# CONFIG_USB_PHIDGET is not set
3717 +# CONFIG_USB_IDMOUSE is not set
3718 +# CONFIG_USB_FTDI_ELAN is not set
3719 +# CONFIG_USB_APPLEDISPLAY is not set
3720 +# CONFIG_USB_LD is not set
3721 +CONFIG_USB_TRANCEVIBRATOR=m
3722 +CONFIG_USB_IOWARRIOR=m
3723 +# CONFIG_USB_TEST is not set
3724 +# CONFIG_USB_ISIGHTFW is not set
3725 +# CONFIG_USB_VST is not set
3726 +CONFIG_USB_GADGET=y
3727 +# CONFIG_USB_GADGET_DEBUG is not set
3728 +# CONFIG_USB_GADGET_DEBUG_FILES is not set
3729 +# CONFIG_USB_GADGET_DEBUG_FS is not set
3730 +CONFIG_USB_GADGET_VBUS_DRAW=500
3731 +CONFIG_USB_GADGET_SELECTED=y
3732 +# CONFIG_USB_GADGET_AT91 is not set
3733 +# CONFIG_USB_GADGET_ATMEL_USBA is not set
3734 +# CONFIG_USB_GADGET_FSL_USB2 is not set
3735 +# CONFIG_USB_GADGET_LH7A40X is not set
3736 +# CONFIG_USB_GADGET_OMAP is not set
3737 +# CONFIG_USB_GADGET_PXA25X is not set
3738 +# CONFIG_USB_GADGET_PXA27X is not set
3739 +CONFIG_USB_GADGET_S3C2410=y
3740 +CONFIG_USB_S3C2410=y
3741 +CONFIG_USB_S3C2410_DEBUG=y
3742 +# CONFIG_USB_GADGET_M66592 is not set
3743 +# CONFIG_USB_GADGET_AMD5536UDC is not set
3744 +# CONFIG_USB_GADGET_FSL_QE is not set
3745 +# CONFIG_USB_GADGET_NET2280 is not set
3746 +# CONFIG_USB_GADGET_GOKU is not set
3747 +# CONFIG_USB_GADGET_DUMMY_HCD is not set
3748 +# CONFIG_USB_GADGET_DUALSPEED is not set
3749 +# CONFIG_USB_ZERO is not set
3750 +CONFIG_USB_ETH=m
3751 +CONFIG_USB_ETH_RNDIS=y
3752 +CONFIG_USB_GADGETFS=m
3753 +CONFIG_USB_FILE_STORAGE=m
3754 +# CONFIG_USB_FILE_STORAGE_TEST is not set
3755 +CONFIG_USB_G_SERIAL=m
3756 +CONFIG_USB_MIDI_GADGET=m
3757 +# CONFIG_USB_G_PRINTER is not set
3758 +# CONFIG_USB_CDC_COMPOSITE is not set
3759 +CONFIG_AR6000_WLAN=y
3760 +CONFIG_MMC=y
3761 +# CONFIG_MMC_DEBUG is not set
3762 +CONFIG_MMC_UNSAFE_RESUME=y
3763 +
3764 +#
3765 +# MMC/SD/SDIO Card Drivers
3766 +#
3767 +CONFIG_MMC_BLOCK=y
3768 +CONFIG_MMC_BLOCK_BOUNCE=y
3769 +# CONFIG_SDIO_UART is not set
3770 +# CONFIG_MMC_TEST is not set
3771 +
3772 +#
3773 +# MMC/SD/SDIO Host Controller Drivers
3774 +#
3775 +CONFIG_MMC_SDHCI=y
3776 +CONFIG_MMC_SDHCI_S3C=y
3777 +# CONFIG_MMC_SPI is not set
3778 +CONFIG_MMC_S3C=y
3779 +# CONFIG_MEMSTICK is not set
3780 +# CONFIG_ACCESSIBILITY is not set
3781 +CONFIG_NEW_LEDS=y
3782 +CONFIG_LEDS_CLASS=y
3783 +
3784 +#
3785 +# LED drivers
3786 +#
3787 +CONFIG_LEDS_S3C24XX=m
3788 +# CONFIG_LEDS_PCA9532 is not set
3789 +CONFIG_LEDS_GPIO=y
3790 +# CONFIG_LEDS_PCA955X is not set
3791 +CONFIG_LEDS_NEO1973_VIBRATOR=y
3792 +CONFIG_LEDS_NEO1973_GTA02=y
3793 +
3794 +#
3795 +# LED Triggers
3796 +#
3797 +CONFIG_LEDS_TRIGGERS=y
3798 +CONFIG_LEDS_TRIGGER_TIMER=y
3799 +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
3800 +CONFIG_LEDS_TRIGGER_BACKLIGHT=y
3801 +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
3802 +CONFIG_RTC_LIB=y
3803 +CONFIG_RTC_CLASS=y
3804 +CONFIG_RTC_HCTOSYS=y
3805 +CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
3806 +CONFIG_RTC_DEBUG=y
3807 +
3808 +#
3809 +# RTC interfaces
3810 +#
3811 +CONFIG_RTC_INTF_SYSFS=y
3812 +CONFIG_RTC_INTF_PROC=y
3813 +CONFIG_RTC_INTF_DEV=y
3814 +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
3815 +# CONFIG_RTC_DRV_TEST is not set
3816 +
3817 +#
3818 +# I2C RTC drivers
3819 +#
3820 +# CONFIG_RTC_DRV_DS1307 is not set
3821 +# CONFIG_RTC_DRV_DS1374 is not set
3822 +# CONFIG_RTC_DRV_DS1672 is not set
3823 +# CONFIG_RTC_DRV_MAX6900 is not set
3824 +# CONFIG_RTC_DRV_RS5C372 is not set
3825 +# CONFIG_RTC_DRV_ISL1208 is not set
3826 +# CONFIG_RTC_DRV_X1205 is not set
3827 +# CONFIG_RTC_DRV_PCF8563 is not set
3828 +# CONFIG_RTC_DRV_PCF8583 is not set
3829 +CONFIG_RTC_DRV_PCF50633=y
3830 +# CONFIG_RTC_DRV_PCF50606 is not set
3831 +# CONFIG_RTC_DRV_M41T80 is not set
3832 +# CONFIG_RTC_DRV_S35390A is not set
3833 +# CONFIG_RTC_DRV_FM3130 is not set
3834 +
3835 +#
3836 +# SPI RTC drivers
3837 +#
3838 +# CONFIG_RTC_DRV_M41T94 is not set
3839 +# CONFIG_RTC_DRV_DS1305 is not set
3840 +# CONFIG_RTC_DRV_MAX6902 is not set
3841 +# CONFIG_RTC_DRV_R9701 is not set
3842 +# CONFIG_RTC_DRV_RS5C348 is not set
3843 +# CONFIG_RTC_DRV_DS3234 is not set
3844 +
3845 +#
3846 +# Platform RTC drivers
3847 +#
3848 +# CONFIG_RTC_DRV_CMOS is not set
3849 +# CONFIG_RTC_DRV_DS1286 is not set
3850 +# CONFIG_RTC_DRV_DS1511 is not set
3851 +# CONFIG_RTC_DRV_DS1553 is not set
3852 +# CONFIG_RTC_DRV_DS1742 is not set
3853 +# CONFIG_RTC_DRV_STK17TA8 is not set
3854 +# CONFIG_RTC_DRV_M48T86 is not set
3855 +# CONFIG_RTC_DRV_M48T35 is not set
3856 +# CONFIG_RTC_DRV_M48T59 is not set
3857 +# CONFIG_RTC_DRV_BQ4802 is not set
3858 +# CONFIG_RTC_DRV_V3020 is not set
3859 +
3860 +#
3861 +# on-CPU RTC drivers
3862 +#
3863 +CONFIG_RTC_DRV_S3C=m
3864 +CONFIG_DMADEVICES=y
3865 +
3866 +#
3867 +# DMA Devices
3868 +#
3869 +
3870 +#
3871 +# Android
3872 +#
3873 +CONFIG_ANDROID_BINDER_IPC=y
3874 +CONFIG_ANDROID_POWER=y
3875 +CONFIG_ANDROID_POWER_STAT=y
3876 +CONFIG_ANDROID_POWER_ALARM=y
3877 +CONFIG_ANDROID_LOGGER=y
3878 +# CONFIG_ANDROID_RAM_CONSOLE is not set
3879 +# CONFIG_ANDROID_TIMED_GPIO is not set
3880 +# CONFIG_ANDROID_PARANOID_NETWORK is not set
3881 +CONFIG_REGULATOR=y
3882 +CONFIG_REGULATOR_DEBUG=y
3883 +# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
3884 +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
3885 +# CONFIG_REGULATOR_BQ24022 is not set
3886 +CONFIG_REGULATOR_PCF50633=y
3887 +CONFIG_UIO=y
3888 +CONFIG_UIO_PDRV=y
3889 +# CONFIG_UIO_PDRV_GENIRQ is not set
3890 +# CONFIG_UIO_SMX is not set
3891 +# CONFIG_UIO_SERCOS3 is not set
3892 +
3893 +#
3894 +# File systems
3895 +#
3896 +CONFIG_EXT2_FS=y
3897 +# CONFIG_EXT2_FS_XATTR is not set
3898 +# CONFIG_EXT2_FS_XIP is not set
3899 +CONFIG_EXT3_FS=y
3900 +# CONFIG_EXT3_FS_XATTR is not set
3901 +CONFIG_EXT4_FS=y
3902 +CONFIG_EXT4DEV_COMPAT=y
3903 +CONFIG_EXT4_FS_XATTR=y
3904 +# CONFIG_EXT4_FS_POSIX_ACL is not set
3905 +CONFIG_EXT4_FS_SECURITY=y
3906 +CONFIG_JBD=y
3907 +# CONFIG_JBD_DEBUG is not set
3908 +CONFIG_JBD2=y
3909 +# CONFIG_JBD2_DEBUG is not set
3910 +CONFIG_FS_MBCACHE=y
3911 +# CONFIG_REISERFS_FS is not set
3912 +# CONFIG_JFS_FS is not set
3913 +CONFIG_FS_POSIX_ACL=y
3914 +CONFIG_FILE_LOCKING=y
3915 +# CONFIG_XFS_FS is not set
3916 +# CONFIG_OCFS2_FS is not set
3917 +CONFIG_DNOTIFY=y
3918 +CONFIG_INOTIFY=y
3919 +CONFIG_INOTIFY_USER=y
3920 +# CONFIG_QUOTA is not set
3921 +# CONFIG_AUTOFS_FS is not set
3922 +CONFIG_AUTOFS4_FS=m
3923 +CONFIG_FUSE_FS=m
3924 +
3925 +#
3926 +# CD-ROM/DVD Filesystems
3927 +#
3928 +CONFIG_ISO9660_FS=m
3929 +CONFIG_JOLIET=y
3930 +# CONFIG_ZISOFS is not set
3931 +CONFIG_UDF_FS=m
3932 +CONFIG_UDF_NLS=y
3933 +
3934 +#
3935 +# DOS/FAT/NT Filesystems
3936 +#
3937 +CONFIG_FAT_FS=y
3938 +CONFIG_MSDOS_FS=y
3939 +CONFIG_VFAT_FS=y
3940 +CONFIG_FAT_DEFAULT_CODEPAGE=437
3941 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
3942 +# CONFIG_NTFS_FS is not set
3943 +
3944 +#
3945 +# Pseudo filesystems
3946 +#
3947 +CONFIG_PROC_FS=y
3948 +CONFIG_PROC_SYSCTL=y
3949 +CONFIG_PROC_PAGE_MONITOR=y
3950 +CONFIG_SYSFS=y
3951 +CONFIG_TMPFS=y
3952 +# CONFIG_TMPFS_POSIX_ACL is not set
3953 +# CONFIG_HUGETLB_PAGE is not set
3954 +CONFIG_CONFIGFS_FS=m
3955 +
3956 +#
3957 +# Miscellaneous filesystems
3958 +#
3959 +# CONFIG_ADFS_FS is not set
3960 +# CONFIG_AFFS_FS is not set
3961 +# CONFIG_HFS_FS is not set
3962 +# CONFIG_HFSPLUS_FS is not set
3963 +# CONFIG_BEFS_FS is not set
3964 +# CONFIG_BFS_FS is not set
3965 +# CONFIG_EFS_FS is not set
3966 +CONFIG_JFFS2_FS=y
3967 +CONFIG_JFFS2_FS_DEBUG=0
3968 +CONFIG_JFFS2_FS_WRITEBUFFER=y
3969 +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
3970 +CONFIG_JFFS2_SUMMARY=y
3971 +# CONFIG_JFFS2_FS_XATTR is not set
3972 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
3973 +CONFIG_JFFS2_ZLIB=y
3974 +# CONFIG_JFFS2_LZO is not set
3975 +CONFIG_JFFS2_RTIME=y
3976 +# CONFIG_JFFS2_RUBIN is not set
3977 +CONFIG_CRAMFS=y
3978 +# CONFIG_VXFS_FS is not set
3979 +# CONFIG_MINIX_FS is not set
3980 +# CONFIG_OMFS_FS is not set
3981 +# CONFIG_HPFS_FS is not set
3982 +# CONFIG_QNX4FS_FS is not set
3983 +CONFIG_ROMFS_FS=y
3984 +# CONFIG_SYSV_FS is not set
3985 +# CONFIG_UFS_FS is not set
3986 +CONFIG_NETWORK_FILESYSTEMS=y
3987 +# CONFIG_NFS_FS is not set
3988 +CONFIG_NFSD=m
3989 +CONFIG_NFSD_V2_ACL=y
3990 +CONFIG_NFSD_V3=y
3991 +CONFIG_NFSD_V3_ACL=y
3992 +# CONFIG_NFSD_V4 is not set
3993 +CONFIG_LOCKD=m
3994 +CONFIG_LOCKD_V4=y
3995 +CONFIG_EXPORTFS=m
3996 +CONFIG_NFS_ACL_SUPPORT=m
3997 +CONFIG_NFS_COMMON=y
3998 +CONFIG_SUNRPC=m
3999 +# CONFIG_SUNRPC_REGISTER_V4 is not set
4000 +# CONFIG_RPCSEC_GSS_KRB5 is not set
4001 +# CONFIG_RPCSEC_GSS_SPKM3 is not set
4002 +# CONFIG_SMB_FS is not set
4003 +CONFIG_CIFS=m
4004 +# CONFIG_CIFS_STATS is not set
4005 +# CONFIG_CIFS_WEAK_PW_HASH is not set
4006 +# CONFIG_CIFS_XATTR is not set
4007 +# CONFIG_CIFS_DEBUG2 is not set
4008 +# CONFIG_CIFS_EXPERIMENTAL is not set
4009 +# CONFIG_NCP_FS is not set
4010 +# CONFIG_CODA_FS is not set
4011 +# CONFIG_AFS_FS is not set
4012 +
4013 +#
4014 +# Partition Types
4015 +#
4016 +CONFIG_PARTITION_ADVANCED=y
4017 +# CONFIG_ACORN_PARTITION is not set
4018 +# CONFIG_OSF_PARTITION is not set
4019 +# CONFIG_AMIGA_PARTITION is not set
4020 +# CONFIG_ATARI_PARTITION is not set
4021 +# CONFIG_MAC_PARTITION is not set
4022 +CONFIG_MSDOS_PARTITION=y
4023 +# CONFIG_BSD_DISKLABEL is not set
4024 +# CONFIG_MINIX_SUBPARTITION is not set
4025 +# CONFIG_SOLARIS_X86_PARTITION is not set
4026 +# CONFIG_UNIXWARE_DISKLABEL is not set
4027 +# CONFIG_LDM_PARTITION is not set
4028 +# CONFIG_SGI_PARTITION is not set
4029 +# CONFIG_ULTRIX_PARTITION is not set
4030 +# CONFIG_SUN_PARTITION is not set
4031 +# CONFIG_KARMA_PARTITION is not set
4032 +# CONFIG_EFI_PARTITION is not set
4033 +# CONFIG_SYSV68_PARTITION is not set
4034 +CONFIG_NLS=y
4035 +CONFIG_NLS_DEFAULT="iso8859-1"
4036 +CONFIG_NLS_CODEPAGE_437=y
4037 +# CONFIG_NLS_CODEPAGE_737 is not set
4038 +# CONFIG_NLS_CODEPAGE_775 is not set
4039 +CONFIG_NLS_CODEPAGE_850=m
4040 +# CONFIG_NLS_CODEPAGE_852 is not set
4041 +# CONFIG_NLS_CODEPAGE_855 is not set
4042 +# CONFIG_NLS_CODEPAGE_857 is not set
4043 +# CONFIG_NLS_CODEPAGE_860 is not set
4044 +# CONFIG_NLS_CODEPAGE_861 is not set
4045 +# CONFIG_NLS_CODEPAGE_862 is not set
4046 +# CONFIG_NLS_CODEPAGE_863 is not set
4047 +# CONFIG_NLS_CODEPAGE_864 is not set
4048 +# CONFIG_NLS_CODEPAGE_865 is not set
4049 +# CONFIG_NLS_CODEPAGE_866 is not set
4050 +# CONFIG_NLS_CODEPAGE_869 is not set
4051 +CONFIG_NLS_CODEPAGE_936=m
4052 +CONFIG_NLS_CODEPAGE_950=m
4053 +# CONFIG_NLS_CODEPAGE_932 is not set
4054 +# CONFIG_NLS_CODEPAGE_949 is not set
4055 +# CONFIG_NLS_CODEPAGE_874 is not set
4056 +# CONFIG_NLS_ISO8859_8 is not set
4057 +# CONFIG_NLS_CODEPAGE_1250 is not set
4058 +# CONFIG_NLS_CODEPAGE_1251 is not set
4059 +# CONFIG_NLS_ASCII is not set
4060 +CONFIG_NLS_ISO8859_1=y
4061 +# CONFIG_NLS_ISO8859_2 is not set
4062 +# CONFIG_NLS_ISO8859_3 is not set
4063 +# CONFIG_NLS_ISO8859_4 is not set
4064 +# CONFIG_NLS_ISO8859_5 is not set
4065 +# CONFIG_NLS_ISO8859_6 is not set
4066 +# CONFIG_NLS_ISO8859_7 is not set
4067 +# CONFIG_NLS_ISO8859_9 is not set
4068 +# CONFIG_NLS_ISO8859_13 is not set
4069 +# CONFIG_NLS_ISO8859_14 is not set
4070 +# CONFIG_NLS_ISO8859_15 is not set
4071 +# CONFIG_NLS_KOI8_R is not set
4072 +# CONFIG_NLS_KOI8_U is not set
4073 +CONFIG_NLS_UTF8=m
4074 +# CONFIG_DLM is not set
4075 +
4076 +#
4077 +# Kernel hacking
4078 +#
4079 +CONFIG_PRINTK_TIME=y
4080 +CONFIG_ENABLE_WARN_DEPRECATED=y
4081 +CONFIG_ENABLE_MUST_CHECK=y
4082 +CONFIG_FRAME_WARN=1024
4083 +CONFIG_MAGIC_SYSRQ=y
4084 +# CONFIG_UNUSED_SYMBOLS is not set
4085 +CONFIG_DEBUG_FS=y
4086 +# CONFIG_HEADERS_CHECK is not set
4087 +CONFIG_DEBUG_KERNEL=y
4088 +CONFIG_DEBUG_SHIRQ=y
4089 +CONFIG_DETECT_SOFTLOCKUP=y
4090 +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
4091 +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=1
4092 +CONFIG_SCHED_DEBUG=y
4093 +CONFIG_SCHEDSTATS=y
4094 +CONFIG_TIMER_STATS=y
4095 +# CONFIG_DEBUG_OBJECTS is not set
4096 +# CONFIG_DEBUG_SLAB is not set
4097 +CONFIG_DEBUG_PREEMPT=y
4098 +# CONFIG_DEBUG_RT_MUTEXES is not set
4099 +# CONFIG_RT_MUTEX_TESTER is not set
4100 +CONFIG_DEBUG_SPINLOCK=y
4101 +CONFIG_DEBUG_MUTEXES=y
4102 +CONFIG_DEBUG_LOCK_ALLOC=y
4103 +# CONFIG_PROVE_LOCKING is not set
4104 +CONFIG_LOCKDEP=y
4105 +CONFIG_LOCK_STAT=y
4106 +CONFIG_DEBUG_LOCKDEP=y
4107 +CONFIG_DEBUG_SPINLOCK_SLEEP=y
4108 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
4109 +CONFIG_STACKTRACE=y
4110 +# CONFIG_DEBUG_KOBJECT is not set
4111 +CONFIG_DEBUG_BUGVERBOSE=y
4112 +CONFIG_DEBUG_INFO=y
4113 +# CONFIG_DEBUG_VM is not set
4114 +# CONFIG_DEBUG_WRITECOUNT is not set
4115 +CONFIG_DEBUG_MEMORY_INIT=y
4116 +# CONFIG_DEBUG_LIST is not set
4117 +CONFIG_DEBUG_SG=y
4118 +CONFIG_FRAME_POINTER=y
4119 +# CONFIG_BOOT_PRINTK_DELAY is not set
4120 +# CONFIG_RCU_TORTURE_TEST is not set
4121 +CONFIG_RCU_CPU_STALL_DETECTOR=y
4122 +# CONFIG_BACKTRACE_SELF_TEST is not set
4123 +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
4124 +# CONFIG_FAULT_INJECTION is not set
4125 +CONFIG_LATENCYTOP=y
4126 +CONFIG_SYSCTL_SYSCALL_CHECK=y
4127 +CONFIG_HAVE_FUNCTION_TRACER=y
4128 +
4129 +#
4130 +# Tracers
4131 +#
4132 +# CONFIG_FUNCTION_TRACER is not set
4133 +# CONFIG_SCHED_TRACER is not set
4134 +# CONFIG_CONTEXT_SWITCH_TRACER is not set
4135 +# CONFIG_BOOT_TRACER is not set
4136 +# CONFIG_STACK_TRACER is not set
4137 +CONFIG_DYNAMIC_PRINTK_DEBUG=y
4138 +# CONFIG_SAMPLES is not set
4139 +CONFIG_HAVE_ARCH_KGDB=y
4140 +# CONFIG_KGDB is not set
4141 +# CONFIG_DEBUG_USER is not set
4142 +CONFIG_DEBUG_ERRORS=y
4143 +# CONFIG_DEBUG_STACK_USAGE is not set
4144 +# CONFIG_DEBUG_LL is not set
4145 +CONFIG_DEBUG_S3C_UART=2
4146 +
4147 +#
4148 +# Security options
4149 +#
4150 +# CONFIG_KEYS is not set
4151 +# CONFIG_SECURITY is not set
4152 +CONFIG_SECURITYFS=y
4153 +# CONFIG_SECURITY_FILE_CAPABILITIES is not set
4154 +CONFIG_CRYPTO=y
4155 +
4156 +#
4157 +# Crypto core or helper
4158 +#
4159 +CONFIG_CRYPTO_FIPS=y
4160 +CONFIG_CRYPTO_ALGAPI=y
4161 +CONFIG_CRYPTO_AEAD=y
4162 +CONFIG_CRYPTO_BLKCIPHER=y
4163 +CONFIG_CRYPTO_HASH=y
4164 +CONFIG_CRYPTO_RNG=y
4165 +CONFIG_CRYPTO_MANAGER=y
4166 +CONFIG_CRYPTO_GF128MUL=m
4167 +CONFIG_CRYPTO_NULL=m
4168 +# CONFIG_CRYPTO_CRYPTD is not set
4169 +CONFIG_CRYPTO_AUTHENC=m
4170 +CONFIG_CRYPTO_TEST=m
4171 +
4172 +#
4173 +# Authenticated Encryption with Associated Data
4174 +#
4175 +# CONFIG_CRYPTO_CCM is not set
4176 +# CONFIG_CRYPTO_GCM is not set
4177 +# CONFIG_CRYPTO_SEQIV is not set
4178 +
4179 +#
4180 +# Block modes
4181 +#
4182 +CONFIG_CRYPTO_CBC=y
4183 +# CONFIG_CRYPTO_CTR is not set
4184 +# CONFIG_CRYPTO_CTS is not set
4185 +CONFIG_CRYPTO_ECB=m
4186 +CONFIG_CRYPTO_LRW=m
4187 +CONFIG_CRYPTO_PCBC=m
4188 +# CONFIG_CRYPTO_XTS is not set
4189 +
4190 +#
4191 +# Hash modes
4192 +#
4193 +CONFIG_CRYPTO_HMAC=y
4194 +CONFIG_CRYPTO_XCBC=m
4195 +
4196 +#
4197 +# Digest
4198 +#
4199 +CONFIG_CRYPTO_CRC32C=m
4200 +CONFIG_CRYPTO_MD4=m
4201 +CONFIG_CRYPTO_MD5=y
4202 +CONFIG_CRYPTO_MICHAEL_MIC=m
4203 +# CONFIG_CRYPTO_RMD128 is not set
4204 +# CONFIG_CRYPTO_RMD160 is not set
4205 +# CONFIG_CRYPTO_RMD256 is not set
4206 +# CONFIG_CRYPTO_RMD320 is not set
4207 +CONFIG_CRYPTO_SHA1=m
4208 +CONFIG_CRYPTO_SHA256=m
4209 +CONFIG_CRYPTO_SHA512=m
4210 +CONFIG_CRYPTO_TGR192=m
4211 +CONFIG_CRYPTO_WP512=m
4212 +
4213 +#
4214 +# Ciphers
4215 +#
4216 +CONFIG_CRYPTO_AES=y
4217 +CONFIG_CRYPTO_ANUBIS=m
4218 +CONFIG_CRYPTO_ARC4=m
4219 +CONFIG_CRYPTO_BLOWFISH=m
4220 +CONFIG_CRYPTO_CAMELLIA=m
4221 +CONFIG_CRYPTO_CAST5=m
4222 +CONFIG_CRYPTO_CAST6=m
4223 +CONFIG_CRYPTO_DES=y
4224 +CONFIG_CRYPTO_FCRYPT=m
4225 +CONFIG_CRYPTO_KHAZAD=m
4226 +# CONFIG_CRYPTO_SALSA20 is not set
4227 +# CONFIG_CRYPTO_SEED is not set
4228 +CONFIG_CRYPTO_SERPENT=m
4229 +CONFIG_CRYPTO_TEA=m
4230 +CONFIG_CRYPTO_TWOFISH=m
4231 +CONFIG_CRYPTO_TWOFISH_COMMON=m
4232 +
4233 +#
4234 +# Compression
4235 +#
4236 +CONFIG_CRYPTO_DEFLATE=m
4237 +# CONFIG_CRYPTO_LZO is not set
4238 +
4239 +#
4240 +# Random Number Generation
4241 +#
4242 +CONFIG_CRYPTO_ANSI_CPRNG=y
4243 +CONFIG_CRYPTO_HW=y
4244 +
4245 +#
4246 +# Library routines
4247 +#
4248 +CONFIG_BITREVERSE=y
4249 +CONFIG_CRC_CCITT=m
4250 +CONFIG_CRC16=y
4251 +CONFIG_CRC_T10DIF=y
4252 +CONFIG_CRC_ITU_T=m
4253 +CONFIG_CRC32=y
4254 +# CONFIG_CRC7 is not set
4255 +CONFIG_LIBCRC32C=m
4256 +CONFIG_ZLIB_INFLATE=y
4257 +CONFIG_ZLIB_DEFLATE=y
4258 +CONFIG_TEXTSEARCH=y
4259 +CONFIG_TEXTSEARCH_KMP=m
4260 +CONFIG_TEXTSEARCH_BM=m
4261 +CONFIG_TEXTSEARCH_FSM=m
4262 +CONFIG_PLIST=y
4263 +CONFIG_HAS_IOMEM=y
4264 +CONFIG_HAS_DMA=y
4265 Index: linux-2.6.28/arch/arm/configs/gta03_defconfig
4266 ===================================================================
4267 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
4268 +++ linux-2.6.28/arch/arm/configs/gta03_defconfig 2009-01-02 00:01:56.000000000 +0100
4269 @@ -0,0 +1,1548 @@
4270 +#
4271 +# Automatically generated make config: don't edit
4272 +# Linux kernel version: 2.6.28-rc4
4273 +# Fri Dec 12 12:07:49 2008
4274 +#
4275 +CONFIG_ARM=y
4276 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
4277 +CONFIG_GENERIC_GPIO=y
4278 +# CONFIG_GENERIC_TIME is not set
4279 +# CONFIG_GENERIC_CLOCKEVENTS is not set
4280 +CONFIG_MMU=y
4281 +CONFIG_NO_IOPORT=y
4282 +CONFIG_GENERIC_HARDIRQS=y
4283 +CONFIG_STACKTRACE_SUPPORT=y
4284 +CONFIG_HAVE_LATENCYTOP_SUPPORT=y
4285 +CONFIG_LOCKDEP_SUPPORT=y
4286 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
4287 +CONFIG_HARDIRQS_SW_RESEND=y
4288 +CONFIG_GENERIC_IRQ_PROBE=y
4289 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
4290 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
4291 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
4292 +CONFIG_GENERIC_HWEIGHT=y
4293 +CONFIG_GENERIC_CALIBRATE_DELAY=y
4294 +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
4295 +CONFIG_VECTORS_BASE=0xffff0000
4296 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
4297 +
4298 +#
4299 +# General setup
4300 +#
4301 +CONFIG_EXPERIMENTAL=y
4302 +CONFIG_BROKEN_ON_SMP=y
4303 +CONFIG_INIT_ENV_ARG_LIMIT=32
4304 +CONFIG_LOCALVERSION=""
4305 +CONFIG_LOCALVERSION_AUTO=y
4306 +CONFIG_SWAP=y
4307 +# CONFIG_SYSVIPC is not set
4308 +# CONFIG_POSIX_MQUEUE is not set
4309 +# CONFIG_BSD_PROCESS_ACCT is not set
4310 +# CONFIG_TASKSTATS is not set
4311 +# CONFIG_AUDIT is not set
4312 +CONFIG_IKCONFIG=y
4313 +CONFIG_IKCONFIG_PROC=y
4314 +CONFIG_LOG_BUF_SHIFT=18
4315 +# CONFIG_CGROUPS is not set
4316 +# CONFIG_GROUP_SCHED is not set
4317 +CONFIG_SYSFS_DEPRECATED=y
4318 +CONFIG_SYSFS_DEPRECATED_V2=y
4319 +# CONFIG_RELAY is not set
4320 +CONFIG_NAMESPACES=y
4321 +# CONFIG_UTS_NS is not set
4322 +# CONFIG_USER_NS is not set
4323 +# CONFIG_PID_NS is not set
4324 +CONFIG_BLK_DEV_INITRD=y
4325 +CONFIG_INITRAMFS_SOURCE=""
4326 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
4327 +CONFIG_SYSCTL=y
4328 +# CONFIG_EMBEDDED is not set
4329 +CONFIG_UID16=y
4330 +CONFIG_SYSCTL_SYSCALL=y
4331 +CONFIG_KALLSYMS=y
4332 +CONFIG_KALLSYMS_ALL=y
4333 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
4334 +CONFIG_HOTPLUG=y
4335 +CONFIG_PRINTK=y
4336 +CONFIG_BUG=y
4337 +CONFIG_ELF_CORE=y
4338 +CONFIG_COMPAT_BRK=y
4339 +CONFIG_BASE_FULL=y
4340 +CONFIG_FUTEX=y
4341 +CONFIG_ANON_INODES=y
4342 +CONFIG_EPOLL=y
4343 +CONFIG_SIGNALFD=y
4344 +CONFIG_TIMERFD=y
4345 +CONFIG_EVENTFD=y
4346 +CONFIG_SHMEM=y
4347 +CONFIG_AIO=y
4348 +CONFIG_ASHMEM=y
4349 +CONFIG_VM_EVENT_COUNTERS=y
4350 +CONFIG_SLUB_DEBUG=y
4351 +# CONFIG_SLAB is not set
4352 +CONFIG_SLUB=y
4353 +# CONFIG_SLOB is not set
4354 +# CONFIG_PROFILING is not set
4355 +# CONFIG_MARKERS is not set
4356 +CONFIG_HAVE_OPROFILE=y
4357 +# CONFIG_KPROBES is not set
4358 +CONFIG_HAVE_KPROBES=y
4359 +CONFIG_HAVE_KRETPROBES=y
4360 +CONFIG_HAVE_CLK=y
4361 +CONFIG_HAVE_GENERIC_DMA_COHERENT=y
4362 +CONFIG_SLABINFO=y
4363 +CONFIG_RT_MUTEXES=y
4364 +# CONFIG_TINY_SHMEM is not set
4365 +CONFIG_BASE_SMALL=0
4366 +CONFIG_MODULES=y
4367 +# CONFIG_MODULE_FORCE_LOAD is not set
4368 +CONFIG_MODULE_UNLOAD=y
4369 +# CONFIG_MODULE_FORCE_UNLOAD is not set
4370 +# CONFIG_MODVERSIONS is not set
4371 +# CONFIG_MODULE_SRCVERSION_ALL is not set
4372 +CONFIG_KMOD=y
4373 +CONFIG_BLOCK=y
4374 +CONFIG_LBD=y
4375 +# CONFIG_BLK_DEV_IO_TRACE is not set
4376 +CONFIG_LSF=y
4377 +# CONFIG_BLK_DEV_BSG is not set
4378 +# CONFIG_BLK_DEV_INTEGRITY is not set
4379 +
4380 +#
4381 +# IO Schedulers
4382 +#
4383 +CONFIG_IOSCHED_NOOP=y
4384 +CONFIG_IOSCHED_AS=y
4385 +CONFIG_IOSCHED_DEADLINE=y
4386 +CONFIG_IOSCHED_CFQ=y
4387 +# CONFIG_DEFAULT_AS is not set
4388 +# CONFIG_DEFAULT_DEADLINE is not set
4389 +CONFIG_DEFAULT_CFQ=y
4390 +# CONFIG_DEFAULT_NOOP is not set
4391 +CONFIG_DEFAULT_IOSCHED="cfq"
4392 +CONFIG_CLASSIC_RCU=y
4393 +CONFIG_FREEZER=y
4394 +
4395 +#
4396 +# System Type
4397 +#
4398 +# CONFIG_ARCH_AAEC2000 is not set
4399 +# CONFIG_ARCH_INTEGRATOR is not set
4400 +# CONFIG_ARCH_REALVIEW is not set
4401 +# CONFIG_ARCH_VERSATILE is not set
4402 +# CONFIG_ARCH_AT91 is not set
4403 +# CONFIG_ARCH_CLPS7500 is not set
4404 +# CONFIG_ARCH_CLPS711X is not set
4405 +# CONFIG_ARCH_EBSA110 is not set
4406 +# CONFIG_ARCH_EP93XX is not set
4407 +# CONFIG_ARCH_FOOTBRIDGE is not set
4408 +# CONFIG_ARCH_NETX is not set
4409 +# CONFIG_ARCH_H720X is not set
4410 +# CONFIG_ARCH_IMX is not set
4411 +# CONFIG_ARCH_IOP13XX is not set
4412 +# CONFIG_ARCH_IOP32X is not set
4413 +# CONFIG_ARCH_IOP33X is not set
4414 +# CONFIG_ARCH_IXP23XX is not set
4415 +# CONFIG_ARCH_IXP2000 is not set
4416 +# CONFIG_ARCH_IXP4XX is not set
4417 +# CONFIG_ARCH_L7200 is not set
4418 +# CONFIG_ARCH_KIRKWOOD is not set
4419 +# CONFIG_ARCH_KS8695 is not set
4420 +# CONFIG_ARCH_NS9XXX is not set
4421 +# CONFIG_ARCH_LOKI is not set
4422 +# CONFIG_ARCH_MV78XX0 is not set
4423 +# CONFIG_ARCH_MXC is not set
4424 +# CONFIG_ARCH_ORION5X is not set
4425 +# CONFIG_ARCH_PNX4008 is not set
4426 +# CONFIG_ARCH_PXA is not set
4427 +# CONFIG_ARCH_RPC is not set
4428 +# CONFIG_ARCH_SA1100 is not set
4429 +# CONFIG_ARCH_S3C2410 is not set
4430 +CONFIG_ARCH_S3C64XX=y
4431 +# CONFIG_ARCH_SHARK is not set
4432 +# CONFIG_ARCH_LH7A40X is not set
4433 +# CONFIG_ARCH_DAVINCI is not set
4434 +# CONFIG_ARCH_OMAP is not set
4435 +# CONFIG_ARCH_MSM is not set
4436 +CONFIG_MACH_NEO1973=y
4437 +CONFIG_PLAT_S3C64XX=y
4438 +CONFIG_CPU_S3C6400_INIT=y
4439 +CONFIG_CPU_S3C6400_CLOCK=y
4440 +CONFIG_S3C64XX_SETUP_I2C0=y
4441 +CONFIG_S3C64XX_SETUP_I2C1=y
4442 +CONFIG_S3C64XX_SETUP_FB_24BPP=y
4443 +CONFIG_PLAT_S3C=y
4444 +
4445 +#
4446 +# Boot options
4447 +#
4448 +CONFIG_S3C_BOOT_ERROR_RESET=y
4449 +CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
4450 +
4451 +#
4452 +# Power management
4453 +#
4454 +# CONFIG_S3C2410_PM_DEBUG is not set
4455 +# CONFIG_S3C2410_PM_CHECK is not set
4456 +CONFIG_S3C_LOWLEVEL_UART_PORT=3
4457 +CONFIG_S3C_GPIO_SPACE=0
4458 +CONFIG_S3C_GPIO_TRACK=y
4459 +CONFIG_S3C_GPIO_PULL_UPDOWN=y
4460 +CONFIG_S3C_GPIO_CFG_S3C24XX=y
4461 +CONFIG_S3C_GPIO_CFG_S3C64XX=y
4462 +CONFIG_S3C_DEV_HSMMC=y
4463 +CONFIG_S3C_DEV_HSMMC1=y
4464 +CONFIG_S3C_DEV_I2C1=y
4465 +CONFIG_S3C_DEV_FB=y
4466 +CONFIG_CPU_S3C6410=y
4467 +CONFIG_S3C6410_SETUP_SDHCI=y
4468 +# CONFIG_MACH_SMDK6410 is not set
4469 +CONFIG_MACH_OPENMOKO_GTA03=y
4470 +
4471 +#
4472 +# Processor Type
4473 +#
4474 +CONFIG_CPU_32=y
4475 +CONFIG_CPU_V6=y
4476 +CONFIG_CPU_32v6K=y
4477 +CONFIG_CPU_32v6=y
4478 +CONFIG_CPU_ABRT_EV6=y
4479 +CONFIG_CPU_PABRT_NOIFAR=y
4480 +CONFIG_CPU_CACHE_V6=y
4481 +CONFIG_CPU_CACHE_VIPT=y
4482 +CONFIG_CPU_COPY_V6=y
4483 +CONFIG_CPU_TLB_V6=y
4484 +CONFIG_CPU_HAS_ASID=y
4485 +CONFIG_CPU_CP15=y
4486 +CONFIG_CPU_CP15_MMU=y
4487 +
4488 +#
4489 +# Processor Features
4490 +#
4491 +CONFIG_ARM_THUMB=y
4492 +# CONFIG_CPU_ICACHE_DISABLE is not set
4493 +# CONFIG_CPU_DCACHE_DISABLE is not set
4494 +# CONFIG_CPU_BPREDICT_DISABLE is not set
4495 +# CONFIG_OUTER_CACHE is not set
4496 +CONFIG_ARM_VIC=y
4497 +
4498 +#
4499 +# Bus support
4500 +#
4501 +# CONFIG_PCI_SYSCALL is not set
4502 +# CONFIG_ARCH_SUPPORTS_MSI is not set
4503 +# CONFIG_PCCARD is not set
4504 +
4505 +#
4506 +# Kernel Features
4507 +#
4508 +CONFIG_VMSPLIT_3G=y
4509 +# CONFIG_VMSPLIT_2G is not set
4510 +# CONFIG_VMSPLIT_1G is not set
4511 +CONFIG_PAGE_OFFSET=0xC0000000
4512 +# CONFIG_PREEMPT is not set
4513 +CONFIG_HZ=100
4514 +CONFIG_AEABI=y
4515 +CONFIG_OABI_COMPAT=y
4516 +CONFIG_ARCH_FLATMEM_HAS_HOLES=y
4517 +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
4518 +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
4519 +CONFIG_SELECT_MEMORY_MODEL=y
4520 +CONFIG_FLATMEM_MANUAL=y
4521 +# CONFIG_DISCONTIGMEM_MANUAL is not set
4522 +# CONFIG_SPARSEMEM_MANUAL is not set
4523 +CONFIG_FLATMEM=y
4524 +CONFIG_FLAT_NODE_MEM_MAP=y
4525 +CONFIG_PAGEFLAGS_EXTENDED=y
4526 +CONFIG_SPLIT_PTLOCK_CPUS=4
4527 +# CONFIG_RESOURCES_64BIT is not set
4528 +# CONFIG_PHYS_ADDR_T_64BIT is not set
4529 +CONFIG_ZONE_DMA_FLAG=0
4530 +CONFIG_VIRT_TO_BUS=y
4531 +CONFIG_UNEVICTABLE_LRU=y
4532 +CONFIG_ALIGNMENT_TRAP=y
4533 +
4534 +#
4535 +# Boot options
4536 +#
4537 +CONFIG_ZBOOT_ROM_TEXT=0
4538 +CONFIG_ZBOOT_ROM_BSS=0
4539 +CONFIG_CMDLINE="console=ttySAC0,115200 root=/dev/ram init=/bin/bash initrd=0x51000000,4M"
4540 +# CONFIG_XIP_KERNEL is not set
4541 +# CONFIG_KEXEC is not set
4542 +
4543 +#
4544 +# CPU Power Management
4545 +#
4546 +CONFIG_CPU_IDLE=y
4547 +CONFIG_CPU_IDLE_GOV_LADDER=y
4548 +
4549 +#
4550 +# Floating point emulation
4551 +#
4552 +
4553 +#
4554 +# At least one emulation must be selected
4555 +#
4556 +# CONFIG_FPE_NWFPE is not set
4557 +# CONFIG_FPE_FASTFPE is not set
4558 +CONFIG_VFP=y
4559 +
4560 +#
4561 +# Userspace binary formats
4562 +#
4563 +CONFIG_BINFMT_ELF=y
4564 +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
4565 +CONFIG_HAVE_AOUT=y
4566 +# CONFIG_BINFMT_AOUT is not set
4567 +# CONFIG_BINFMT_MISC is not set
4568 +
4569 +#
4570 +# Power management options
4571 +#
4572 +CONFIG_PM=y
4573 +# CONFIG_PM_DEBUG is not set
4574 +CONFIG_PM_SLEEP=y
4575 +CONFIG_SUSPEND=y
4576 +CONFIG_SUSPEND_FREEZER=y
4577 +CONFIG_APM_EMULATION=y
4578 +CONFIG_ARCH_SUSPEND_POSSIBLE=y
4579 +CONFIG_NET=y
4580 +
4581 +#
4582 +# Networking options
4583 +#
4584 +CONFIG_PACKET=y
4585 +CONFIG_PACKET_MMAP=y
4586 +CONFIG_UNIX=y
4587 +CONFIG_XFRM=y
4588 +# CONFIG_XFRM_USER is not set
4589 +# CONFIG_XFRM_SUB_POLICY is not set
4590 +CONFIG_XFRM_MIGRATE=y
4591 +# CONFIG_XFRM_STATISTICS is not set
4592 +# CONFIG_NET_KEY is not set
4593 +CONFIG_INET=y
4594 +CONFIG_IP_MULTICAST=y
4595 +CONFIG_IP_ADVANCED_ROUTER=y
4596 +CONFIG_ASK_IP_FIB_HASH=y
4597 +# CONFIG_IP_FIB_TRIE is not set
4598 +CONFIG_IP_FIB_HASH=y
4599 +CONFIG_IP_MULTIPLE_TABLES=y
4600 +# CONFIG_IP_ROUTE_MULTIPATH is not set
4601 +# CONFIG_IP_ROUTE_VERBOSE is not set
4602 +CONFIG_IP_PNP=y
4603 +# CONFIG_IP_PNP_DHCP is not set
4604 +# CONFIG_IP_PNP_BOOTP is not set
4605 +# CONFIG_IP_PNP_RARP is not set
4606 +# CONFIG_NET_IPIP is not set
4607 +# CONFIG_NET_IPGRE is not set
4608 +# CONFIG_IP_MROUTE is not set
4609 +# CONFIG_ARPD is not set
4610 +CONFIG_SYN_COOKIES=y
4611 +# CONFIG_INET_AH is not set
4612 +# CONFIG_INET_ESP is not set
4613 +# CONFIG_INET_IPCOMP is not set
4614 +# CONFIG_INET_XFRM_TUNNEL is not set
4615 +CONFIG_INET_TUNNEL=m
4616 +CONFIG_INET_XFRM_MODE_TRANSPORT=y
4617 +CONFIG_INET_XFRM_MODE_TUNNEL=y
4618 +CONFIG_INET_XFRM_MODE_BEET=y
4619 +# CONFIG_INET_LRO is not set
4620 +CONFIG_INET_DIAG=y
4621 +CONFIG_INET_TCP_DIAG=y
4622 +# CONFIG_TCP_CONG_ADVANCED is not set
4623 +CONFIG_TCP_CONG_CUBIC=y
4624 +CONFIG_DEFAULT_TCP_CONG="cubic"
4625 +CONFIG_TCP_MD5SIG=y
4626 +CONFIG_IPV6=m
4627 +# CONFIG_IPV6_PRIVACY is not set
4628 +# CONFIG_IPV6_ROUTER_PREF is not set
4629 +# CONFIG_IPV6_OPTIMISTIC_DAD is not set
4630 +# CONFIG_INET6_AH is not set
4631 +# CONFIG_INET6_ESP is not set
4632 +# CONFIG_INET6_IPCOMP is not set
4633 +# CONFIG_IPV6_MIP6 is not set
4634 +# CONFIG_INET6_XFRM_TUNNEL is not set
4635 +# CONFIG_INET6_TUNNEL is not set
4636 +CONFIG_INET6_XFRM_MODE_TRANSPORT=m
4637 +CONFIG_INET6_XFRM_MODE_TUNNEL=m
4638 +CONFIG_INET6_XFRM_MODE_BEET=m
4639 +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
4640 +CONFIG_IPV6_SIT=m
4641 +CONFIG_IPV6_NDISC_NODETYPE=y
4642 +# CONFIG_IPV6_TUNNEL is not set
4643 +# CONFIG_IPV6_MULTIPLE_TABLES is not set
4644 +# CONFIG_IPV6_MROUTE is not set
4645 +# CONFIG_NETWORK_SECMARK is not set
4646 +CONFIG_NETFILTER=y
4647 +# CONFIG_NETFILTER_DEBUG is not set
4648 +CONFIG_NETFILTER_ADVANCED=y
4649 +
4650 +#
4651 +# Core Netfilter Configuration
4652 +#
4653 +# CONFIG_NETFILTER_NETLINK_QUEUE is not set
4654 +# CONFIG_NETFILTER_NETLINK_LOG is not set
4655 +# CONFIG_NF_CONNTRACK is not set
4656 +CONFIG_NETFILTER_XTABLES=m
4657 +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
4658 +# CONFIG_NETFILTER_XT_TARGET_MARK is not set
4659 +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
4660 +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
4661 +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
4662 +# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
4663 +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
4664 +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
4665 +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
4666 +# CONFIG_NETFILTER_XT_MATCH_ESP is not set
4667 +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
4668 +# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
4669 +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
4670 +# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
4671 +# CONFIG_NETFILTER_XT_MATCH_MAC is not set
4672 +# CONFIG_NETFILTER_XT_MATCH_MARK is not set
4673 +# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
4674 +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
4675 +# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
4676 +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
4677 +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
4678 +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
4679 +# CONFIG_NETFILTER_XT_MATCH_REALM is not set
4680 +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
4681 +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
4682 +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
4683 +# CONFIG_NETFILTER_XT_MATCH_STRING is not set
4684 +# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
4685 +# CONFIG_NETFILTER_XT_MATCH_TIME is not set
4686 +# CONFIG_NETFILTER_XT_MATCH_U32 is not set
4687 +# CONFIG_IP_VS is not set
4688 +
4689 +#
4690 +# IP: Netfilter Configuration
4691 +#
4692 +# CONFIG_NF_DEFRAG_IPV4 is not set
4693 +# CONFIG_IP_NF_QUEUE is not set
4694 +# CONFIG_IP_NF_IPTABLES is not set
4695 +# CONFIG_IP_NF_ARPTABLES is not set
4696 +
4697 +#
4698 +# IPv6: Netfilter Configuration
4699 +#
4700 +# CONFIG_IP6_NF_QUEUE is not set
4701 +CONFIG_IP6_NF_IPTABLES=m
4702 +# CONFIG_IP6_NF_MATCH_AH is not set
4703 +# CONFIG_IP6_NF_MATCH_EUI64 is not set
4704 +# CONFIG_IP6_NF_MATCH_FRAG is not set
4705 +# CONFIG_IP6_NF_MATCH_OPTS is not set
4706 +# CONFIG_IP6_NF_MATCH_HL is not set
4707 +# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
4708 +# CONFIG_IP6_NF_MATCH_MH is not set
4709 +# CONFIG_IP6_NF_MATCH_RT is not set
4710 +# CONFIG_IP6_NF_TARGET_LOG is not set
4711 +# CONFIG_IP6_NF_FILTER is not set
4712 +# CONFIG_IP6_NF_MANGLE is not set
4713 +# CONFIG_IP6_NF_RAW is not set
4714 +# CONFIG_IP_DCCP is not set
4715 +# CONFIG_IP_SCTP is not set
4716 +# CONFIG_TIPC is not set
4717 +# CONFIG_ATM is not set
4718 +# CONFIG_BRIDGE is not set
4719 +# CONFIG_NET_DSA is not set
4720 +# CONFIG_VLAN_8021Q is not set
4721 +# CONFIG_DECNET is not set
4722 +# CONFIG_LLC2 is not set
4723 +# CONFIG_IPX is not set
4724 +# CONFIG_ATALK is not set
4725 +# CONFIG_X25 is not set
4726 +# CONFIG_LAPB is not set
4727 +# CONFIG_ECONET is not set
4728 +# CONFIG_WAN_ROUTER is not set
4729 +# CONFIG_NET_SCHED is not set
4730 +
4731 +#
4732 +# Network testing
4733 +#
4734 +# CONFIG_NET_PKTGEN is not set
4735 +# CONFIG_HAMRADIO is not set
4736 +# CONFIG_CAN is not set
4737 +# CONFIG_IRDA is not set
4738 +# CONFIG_BT is not set
4739 +# CONFIG_AF_RXRPC is not set
4740 +# CONFIG_PHONET is not set
4741 +CONFIG_FIB_RULES=y
4742 +CONFIG_WIRELESS=y
4743 +CONFIG_CFG80211=y
4744 +CONFIG_NL80211=y
4745 +CONFIG_WIRELESS_OLD_REGULATORY=y
4746 +CONFIG_WIRELESS_EXT=y
4747 +CONFIG_WIRELESS_EXT_SYSFS=y
4748 +CONFIG_MAC80211=y
4749 +
4750 +#
4751 +# Rate control algorithm selection
4752 +#
4753 +CONFIG_MAC80211_RC_PID=y
4754 +# CONFIG_MAC80211_RC_MINSTREL is not set
4755 +CONFIG_MAC80211_RC_DEFAULT_PID=y
4756 +# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
4757 +CONFIG_MAC80211_RC_DEFAULT="pid"
4758 +# CONFIG_MAC80211_MESH is not set
4759 +CONFIG_MAC80211_LEDS=y
4760 +# CONFIG_MAC80211_DEBUG_MENU is not set
4761 +# CONFIG_IEEE80211 is not set
4762 +# CONFIG_RFKILL is not set
4763 +# CONFIG_NET_9P is not set
4764 +
4765 +#
4766 +# Device Drivers
4767 +#
4768 +
4769 +#
4770 +# Generic Driver Options
4771 +#
4772 +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
4773 +CONFIG_STANDALONE=y
4774 +CONFIG_PREVENT_FIRMWARE_BUILD=y
4775 +CONFIG_FW_LOADER=y
4776 +CONFIG_FIRMWARE_IN_KERNEL=y
4777 +CONFIG_EXTRA_FIRMWARE=""
4778 +# CONFIG_DEBUG_DRIVER is not set
4779 +# CONFIG_DEBUG_DEVRES is not set
4780 +# CONFIG_SYS_HYPERVISOR is not set
4781 +# CONFIG_CONNECTOR is not set
4782 +CONFIG_MTD=y
4783 +# CONFIG_MTD_DEBUG is not set
4784 +# CONFIG_MTD_CONCAT is not set
4785 +CONFIG_MTD_PARTITIONS=y
4786 +# CONFIG_MTD_REDBOOT_PARTS is not set
4787 +CONFIG_MTD_CMDLINE_PARTS=y
4788 +# CONFIG_MTD_AFS_PARTS is not set
4789 +# CONFIG_MTD_AR7_PARTS is not set
4790 +
4791 +#
4792 +# User Modules And Translation Layers
4793 +#
4794 +CONFIG_MTD_CHAR=y
4795 +CONFIG_MTD_BLKDEVS=y
4796 +CONFIG_MTD_BLOCK=y
4797 +# CONFIG_FTL is not set
4798 +# CONFIG_NFTL is not set
4799 +# CONFIG_INFTL is not set
4800 +# CONFIG_RFD_FTL is not set
4801 +# CONFIG_SSFDC is not set
4802 +# CONFIG_MTD_OOPS is not set
4803 +
4804 +#
4805 +# RAM/ROM/Flash chip drivers
4806 +#
4807 +# CONFIG_MTD_CFI is not set
4808 +# CONFIG_MTD_JEDECPROBE is not set
4809 +CONFIG_MTD_MAP_BANK_WIDTH_1=y
4810 +CONFIG_MTD_MAP_BANK_WIDTH_2=y
4811 +CONFIG_MTD_MAP_BANK_WIDTH_4=y
4812 +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
4813 +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
4814 +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
4815 +CONFIG_MTD_CFI_I1=y
4816 +CONFIG_MTD_CFI_I2=y
4817 +# CONFIG_MTD_CFI_I4 is not set
4818 +# CONFIG_MTD_CFI_I8 is not set
4819 +# CONFIG_MTD_RAM is not set
4820 +# CONFIG_MTD_ROM is not set
4821 +# CONFIG_MTD_ABSENT is not set
4822 +
4823 +#
4824 +# Mapping drivers for chip access
4825 +#
4826 +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
4827 +# CONFIG_MTD_PLATRAM is not set
4828 +
4829 +#
4830 +# Self-contained MTD device drivers
4831 +#
4832 +# CONFIG_MTD_DATAFLASH is not set
4833 +# CONFIG_MTD_M25P80 is not set
4834 +# CONFIG_MTD_SLRAM is not set
4835 +# CONFIG_MTD_PHRAM is not set
4836 +# CONFIG_MTD_MTDRAM is not set
4837 +# CONFIG_MTD_BLOCK2MTD is not set
4838 +
4839 +#
4840 +# Disk-On-Chip Device Drivers
4841 +#
4842 +# CONFIG_MTD_DOC2000 is not set
4843 +# CONFIG_MTD_DOC2001 is not set
4844 +# CONFIG_MTD_DOC2001PLUS is not set
4845 +# CONFIG_MTD_NAND is not set
4846 +CONFIG_MTD_ONENAND=y
4847 +# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
4848 +CONFIG_MTD_ONENAND_GENERIC=y
4849 +# CONFIG_MTD_ONENAND_OTP is not set
4850 +# CONFIG_MTD_ONENAND_2X_PROGRAM is not set
4851 +# CONFIG_MTD_ONENAND_SIM is not set
4852 +
4853 +#
4854 +# UBI - Unsorted block images
4855 +#
4856 +# CONFIG_MTD_UBI is not set
4857 +# CONFIG_PARPORT is not set
4858 +CONFIG_BLK_DEV=y
4859 +# CONFIG_BLK_DEV_COW_COMMON is not set
4860 +CONFIG_BLK_DEV_LOOP=y
4861 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
4862 +# CONFIG_BLK_DEV_NBD is not set
4863 +CONFIG_BLK_DEV_RAM=y
4864 +CONFIG_BLK_DEV_RAM_COUNT=16
4865 +CONFIG_BLK_DEV_RAM_SIZE=8192
4866 +# CONFIG_BLK_DEV_XIP is not set
4867 +# CONFIG_CDROM_PKTCDVD is not set
4868 +# CONFIG_ATA_OVER_ETH is not set
4869 +CONFIG_MISC_DEVICES=y
4870 +# CONFIG_EEPROM_93CX6 is not set
4871 +CONFIG_LOW_MEMORY_KILLER=y
4872 +# CONFIG_ENCLOSURE_SERVICES is not set
4873 +CONFIG_HAVE_IDE=y
4874 +# CONFIG_IDE is not set
4875 +
4876 +#
4877 +# SCSI device support
4878 +#
4879 +# CONFIG_RAID_ATTRS is not set
4880 +# CONFIG_SCSI is not set
4881 +# CONFIG_SCSI_DMA is not set
4882 +# CONFIG_SCSI_NETLINK is not set
4883 +# CONFIG_ATA is not set
4884 +# CONFIG_MD is not set
4885 +CONFIG_NETDEVICES=y
4886 +# CONFIG_DUMMY is not set
4887 +# CONFIG_BONDING is not set
4888 +# CONFIG_MACVLAN is not set
4889 +# CONFIG_EQUALIZER is not set
4890 +CONFIG_TUN=y
4891 +# CONFIG_VETH is not set
4892 +# CONFIG_NET_ETHERNET is not set
4893 +# CONFIG_NETDEV_1000 is not set
4894 +# CONFIG_NETDEV_10000 is not set
4895 +
4896 +#
4897 +# Wireless LAN
4898 +#
4899 +# CONFIG_WLAN_PRE80211 is not set
4900 +# CONFIG_WLAN_80211 is not set
4901 +# CONFIG_IWLWIFI_LEDS is not set
4902 +# CONFIG_WAN is not set
4903 +CONFIG_PPP=y
4904 +# CONFIG_PPP_MULTILINK is not set
4905 +# CONFIG_PPP_FILTER is not set
4906 +CONFIG_PPP_ASYNC=y
4907 +CONFIG_PPP_SYNC_TTY=y
4908 +CONFIG_PPP_DEFLATE=y
4909 +CONFIG_PPP_BSDCOMP=y
4910 +CONFIG_PPP_MPPE=y
4911 +# CONFIG_PPPOE is not set
4912 +# CONFIG_PPPOL2TP is not set
4913 +# CONFIG_SLIP is not set
4914 +CONFIG_SLHC=y
4915 +# CONFIG_NETCONSOLE is not set
4916 +# CONFIG_NETPOLL is not set
4917 +# CONFIG_NET_POLL_CONTROLLER is not set
4918 +# CONFIG_ISDN is not set
4919 +
4920 +#
4921 +# Input device support
4922 +#
4923 +CONFIG_INPUT=y
4924 +# CONFIG_INPUT_FF_MEMLESS is not set
4925 +# CONFIG_INPUT_POLLDEV is not set
4926 +
4927 +#
4928 +# Userland interfaces
4929 +#
4930 +CONFIG_INPUT_MOUSEDEV=y
4931 +CONFIG_INPUT_MOUSEDEV_PSAUX=y
4932 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
4933 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
4934 +# CONFIG_INPUT_JOYDEV is not set
4935 +CONFIG_INPUT_EVDEV=y
4936 +# CONFIG_INPUT_EVBUG is not set
4937 +
4938 +#
4939 +# Input Device Drivers
4940 +#
4941 +CONFIG_INPUT_KEYBOARD=y
4942 +CONFIG_KEYBOARD_ATKBD=y
4943 +# CONFIG_KEYBOARD_SUNKBD is not set
4944 +# CONFIG_KEYBOARD_LKKBD is not set
4945 +# CONFIG_KEYBOARD_XTKBD is not set
4946 +# CONFIG_KEYBOARD_NEWTON is not set
4947 +# CONFIG_KEYBOARD_STOWAWAY is not set
4948 +# CONFIG_KEYBOARD_GPIO is not set
4949 +CONFIG_KEYBOARD_NEO1973=y
4950 +CONFIG_INPUT_MOUSE=y
4951 +CONFIG_MOUSE_PS2=y
4952 +CONFIG_MOUSE_PS2_ALPS=y
4953 +CONFIG_MOUSE_PS2_LOGIPS2PP=y
4954 +CONFIG_MOUSE_PS2_SYNAPTICS=y
4955 +CONFIG_MOUSE_PS2_LIFEBOOK=y
4956 +CONFIG_MOUSE_PS2_TRACKPOINT=y
4957 +# CONFIG_MOUSE_PS2_ELANTECH is not set
4958 +# CONFIG_MOUSE_PS2_TOUCHKIT is not set
4959 +# CONFIG_MOUSE_SERIAL is not set
4960 +# CONFIG_MOUSE_APPLETOUCH is not set
4961 +# CONFIG_MOUSE_BCM5974 is not set
4962 +# CONFIG_MOUSE_VSXXXAA is not set
4963 +# CONFIG_MOUSE_GPIO is not set
4964 +# CONFIG_INPUT_JOYSTICK is not set
4965 +# CONFIG_INPUT_TABLET is not set
4966 +CONFIG_INPUT_TOUCHSCREEN=y
4967 +CONFIG_TOUCHSCREEN_FILTER=y
4968 +CONFIG_TOUCHSCREEN_FILTER_GROUP=y
4969 +CONFIG_TOUCHSCREEN_FILTER_MEDIAN=y
4970 +CONFIG_TOUCHSCREEN_FILTER_MEAN=y
4971 +# CONFIG_TOUCHSCREEN_ADS7846 is not set
4972 +# CONFIG_TOUCHSCREEN_FUJITSU is not set
4973 +# CONFIG_TOUCHSCREEN_GUNZE is not set
4974 +# CONFIG_TOUCHSCREEN_ELO is not set
4975 +# CONFIG_TOUCHSCREEN_MTOUCH is not set
4976 +# CONFIG_TOUCHSCREEN_INEXIO is not set
4977 +# CONFIG_TOUCHSCREEN_MK712 is not set
4978 +# CONFIG_TOUCHSCREEN_PENMOUNT is not set
4979 +# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
4980 +# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
4981 +# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
4982 +# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
4983 +CONFIG_INPUT_MISC=y
4984 +CONFIG_TOUCHSCREEN_PCAP7200=y
4985 +# CONFIG_INPUT_ATI_REMOTE is not set
4986 +# CONFIG_INPUT_ATI_REMOTE2 is not set
4987 +# CONFIG_INPUT_KEYSPAN_REMOTE is not set
4988 +# CONFIG_INPUT_POWERMATE is not set
4989 +# CONFIG_INPUT_YEALINK is not set
4990 +# CONFIG_INPUT_CM109 is not set
4991 +# CONFIG_INPUT_UINPUT is not set
4992 +CONFIG_INPUT_LIS302DL=y
4993 +CONFIG_INPUT_PCF50633_PMU=y
4994 +
4995 +#
4996 +# Hardware I/O ports
4997 +#
4998 +CONFIG_SERIO=y
4999 +CONFIG_SERIO_SERPORT=y
5000 +CONFIG_SERIO_LIBPS2=y
5001 +# CONFIG_SERIO_RAW is not set
5002 +# CONFIG_GAMEPORT is not set
5003 +
5004 +#
5005 +# Character devices
5006 +#
5007 +CONFIG_VT=y
5008 +CONFIG_CONSOLE_TRANSLATIONS=y
5009 +CONFIG_VT_CONSOLE=y
5010 +CONFIG_NR_TTY_DEVICES=6
5011 +CONFIG_HW_CONSOLE=y
5012 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
5013 +CONFIG_DEVKMEM=y
5014 +# CONFIG_SERIAL_NONSTANDARD is not set
5015 +
5016 +#
5017 +# Serial drivers
5018 +#
5019 +CONFIG_SERIAL_8250=y
5020 +# CONFIG_SERIAL_8250_CONSOLE is not set
5021 +CONFIG_SERIAL_8250_NR_UARTS=4
5022 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4
5023 +# CONFIG_SERIAL_8250_EXTENDED is not set
5024 +
5025 +#
5026 +# Non-8250 serial port support
5027 +#
5028 +CONFIG_SERIAL_SAMSUNG=y
5029 +CONFIG_SERIAL_SAMSUNG_UARTS=4
5030 +# CONFIG_SERIAL_SAMSUNG_DEBUG is not set
5031 +CONFIG_SERIAL_SAMSUNG_CONSOLE=y
5032 +CONFIG_SERIAL_S3C6400=y
5033 +CONFIG_SERIAL_CORE=y
5034 +CONFIG_SERIAL_CORE_CONSOLE=y
5035 +CONFIG_UNIX98_PTYS=y
5036 +CONFIG_LEGACY_PTYS=y
5037 +CONFIG_LEGACY_PTY_COUNT=256
5038 +# CONFIG_IPMI_HANDLER is not set
5039 +CONFIG_HW_RANDOM=y
5040 +# CONFIG_NVRAM is not set
5041 +# CONFIG_R3964 is not set
5042 +# CONFIG_RAW_DRIVER is not set
5043 +# CONFIG_TCG_TPM is not set
5044 +CONFIG_I2C=y
5045 +CONFIG_I2C_BOARDINFO=y
5046 +CONFIG_I2C_CHARDEV=y
5047 +CONFIG_I2C_HELPER_AUTO=y
5048 +
5049 +#
5050 +# I2C Hardware Bus support
5051 +#
5052 +
5053 +#
5054 +# I2C system bus drivers (mostly embedded / system-on-chip)
5055 +#
5056 +# CONFIG_I2C_GPIO is not set
5057 +# CONFIG_I2C_OCORES is not set
5058 +CONFIG_I2C_S3C2410=y
5059 +# CONFIG_I2C_SIMTEC is not set
5060 +
5061 +#
5062 +# External I2C/SMBus adapter drivers
5063 +#
5064 +# CONFIG_I2C_PARPORT_LIGHT is not set
5065 +# CONFIG_I2C_TAOS_EVM is not set
5066 +
5067 +#
5068 +# Other I2C/SMBus bus drivers
5069 +#
5070 +# CONFIG_I2C_PCA_PLATFORM is not set
5071 +# CONFIG_I2C_STUB is not set
5072 +
5073 +#
5074 +# Miscellaneous I2C Chip support
5075 +#
5076 +# CONFIG_DS1682 is not set
5077 +# CONFIG_AT24 is not set
5078 +# CONFIG_SENSORS_EEPROM is not set
5079 +# CONFIG_SENSORS_PCF50606 is not set
5080 +# CONFIG_SENSORS_PCF50633 is not set
5081 +# CONFIG_SENSORS_PCF8574 is not set
5082 +# CONFIG_PCF8575 is not set
5083 +# CONFIG_SENSORS_PCA9539 is not set
5084 +# CONFIG_SENSORS_PCF8591 is not set
5085 +# CONFIG_TPS65010 is not set
5086 +# CONFIG_SENSORS_MAX6875 is not set
5087 +# CONFIG_SENSORS_TSL2550 is not set
5088 +# CONFIG_SENSORS_TSL256X is not set
5089 +CONFIG_PCA9632=y
5090 +# CONFIG_I2C_DEBUG_CORE is not set
5091 +# CONFIG_I2C_DEBUG_ALGO is not set
5092 +# CONFIG_I2C_DEBUG_BUS is not set
5093 +# CONFIG_I2C_DEBUG_CHIP is not set
5094 +CONFIG_SPI=y
5095 +# CONFIG_SPI_DEBUG is not set
5096 +CONFIG_SPI_MASTER=y
5097 +
5098 +#
5099 +# SPI Master Controller Drivers
5100 +#
5101 +CONFIG_SPI_BITBANG=y
5102 +
5103 +#
5104 +# SPI Protocol Masters
5105 +#
5106 +# CONFIG_SPI_AT25 is not set
5107 +# CONFIG_SPI_SPIDEV is not set
5108 +# CONFIG_SPI_TLE62X0 is not set
5109 +CONFIG_ARCH_REQUIRE_GPIOLIB=y
5110 +CONFIG_GPIOLIB=y
5111 +# CONFIG_DEBUG_GPIO is not set
5112 +CONFIG_GPIO_SYSFS=y
5113 +
5114 +#
5115 +# I2C GPIO expanders:
5116 +#
5117 +# CONFIG_GPIO_MAX732X is not set
5118 +# CONFIG_GPIO_PCA953X is not set
5119 +# CONFIG_GPIO_PCF857X is not set
5120 +
5121 +#
5122 +# PCI GPIO expanders:
5123 +#
5124 +
5125 +#
5126 +# SPI GPIO expanders:
5127 +#
5128 +# CONFIG_GPIO_MAX7301 is not set
5129 +# CONFIG_GPIO_MCP23S08 is not set
5130 +# CONFIG_W1 is not set
5131 +CONFIG_POWER_SUPPLY=y
5132 +# CONFIG_POWER_SUPPLY_DEBUG is not set
5133 +# CONFIG_PDA_POWER is not set
5134 +# CONFIG_APM_POWER is not set
5135 +# CONFIG_BATTERY_DS2760 is not set
5136 +# CONFIG_BATTERY_BQ27x00 is not set
5137 +# CONFIG_BATTERY_BQ27000_HDQ is not set
5138 +CONFIG_CHARGER_PCF50633=y
5139 +CONFIG_HWMON=y
5140 +# CONFIG_HWMON_VID is not set
5141 +# CONFIG_SENSORS_AD7414 is not set
5142 +# CONFIG_SENSORS_AD7418 is not set
5143 +# CONFIG_SENSORS_ADCXX is not set
5144 +# CONFIG_SENSORS_ADM1021 is not set
5145 +# CONFIG_SENSORS_ADM1025 is not set
5146 +# CONFIG_SENSORS_ADM1026 is not set
5147 +# CONFIG_SENSORS_ADM1029 is not set
5148 +# CONFIG_SENSORS_ADM1031 is not set
5149 +# CONFIG_SENSORS_ADM9240 is not set
5150 +# CONFIG_SENSORS_ADT7470 is not set
5151 +# CONFIG_SENSORS_ADT7473 is not set
5152 +# CONFIG_SENSORS_ATXP1 is not set
5153 +# CONFIG_SENSORS_DS1621 is not set
5154 +# CONFIG_SENSORS_F71805F is not set
5155 +# CONFIG_SENSORS_F71882FG is not set
5156 +# CONFIG_SENSORS_F75375S is not set
5157 +# CONFIG_SENSORS_GL518SM is not set
5158 +# CONFIG_SENSORS_GL520SM is not set
5159 +# CONFIG_SENSORS_IT87 is not set
5160 +# CONFIG_SENSORS_LM63 is not set
5161 +# CONFIG_SENSORS_LM70 is not set
5162 +# CONFIG_SENSORS_LM75 is not set
5163 +# CONFIG_SENSORS_LM77 is not set
5164 +# CONFIG_SENSORS_LM78 is not set
5165 +# CONFIG_SENSORS_LM80 is not set
5166 +# CONFIG_SENSORS_LM83 is not set
5167 +# CONFIG_SENSORS_LM85 is not set
5168 +# CONFIG_SENSORS_LM87 is not set
5169 +# CONFIG_SENSORS_LM90 is not set
5170 +# CONFIG_SENSORS_LM92 is not set
5171 +# CONFIG_SENSORS_LM93 is not set
5172 +# CONFIG_SENSORS_MAX1111 is not set
5173 +# CONFIG_SENSORS_MAX1619 is not set
5174 +# CONFIG_SENSORS_MAX6650 is not set
5175 +# CONFIG_SENSORS_PC87360 is not set
5176 +# CONFIG_SENSORS_PC87427 is not set
5177 +# CONFIG_SENSORS_DME1737 is not set
5178 +# CONFIG_SENSORS_SMSC47M1 is not set
5179 +# CONFIG_SENSORS_SMSC47M192 is not set
5180 +# CONFIG_SENSORS_SMSC47B397 is not set
5181 +# CONFIG_SENSORS_ADS7828 is not set
5182 +# CONFIG_SENSORS_THMC50 is not set
5183 +# CONFIG_SENSORS_VT1211 is not set
5184 +# CONFIG_SENSORS_W83781D is not set
5185 +# CONFIG_SENSORS_W83791D is not set
5186 +# CONFIG_SENSORS_W83792D is not set
5187 +# CONFIG_SENSORS_W83793 is not set
5188 +# CONFIG_SENSORS_W83L785TS is not set
5189 +# CONFIG_SENSORS_W83L786NG is not set
5190 +# CONFIG_SENSORS_W83627HF is not set
5191 +# CONFIG_SENSORS_W83627EHF is not set
5192 +# CONFIG_HWMON_DEBUG_CHIP is not set
5193 +# CONFIG_THERMAL is not set
5194 +# CONFIG_THERMAL_HWMON is not set
5195 +# CONFIG_WATCHDOG is not set
5196 +
5197 +#
5198 +# Sonics Silicon Backplane
5199 +#
5200 +CONFIG_SSB_POSSIBLE=y
5201 +# CONFIG_SSB is not set
5202 +
5203 +#
5204 +# Multifunction device drivers
5205 +#
5206 +# CONFIG_MFD_CORE is not set
5207 +# CONFIG_MFD_SM501 is not set
5208 +# CONFIG_MFD_ASIC3 is not set
5209 +# CONFIG_HTC_EGPIO is not set
5210 +# CONFIG_HTC_PASIC3 is not set
5211 +# CONFIG_MFD_TMIO is not set
5212 +# CONFIG_MFD_T7L66XB is not set
5213 +# CONFIG_MFD_TC6387XB is not set
5214 +# CONFIG_MFD_TC6393XB is not set
5215 +# CONFIG_PMIC_DA903X is not set
5216 +# CONFIG_MFD_WM8400 is not set
5217 +# CONFIG_MFD_WM8350_I2C is not set
5218 +CONFIG_MFD_PCF50633=y
5219 +CONFIG_PCF50633_ADC=y
5220 +CONFIG_PCF50633_GPIO=y
5221 +# CONFIG_MFD_PCF50606 is not set
5222 +# CONFIG_MFD_GLAMO is not set
5223 +
5224 +#
5225 +# Multimedia devices
5226 +#
5227 +
5228 +#
5229 +# Multimedia core support
5230 +#
5231 +# CONFIG_VIDEO_DEV is not set
5232 +# CONFIG_DVB_CORE is not set
5233 +# CONFIG_VIDEO_MEDIA is not set
5234 +
5235 +#
5236 +# Multimedia drivers
5237 +#
5238 +# CONFIG_DAB is not set
5239 +
5240 +#
5241 +# Graphics support
5242 +#
5243 +# CONFIG_VGASTATE is not set
5244 +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
5245 +CONFIG_FB=y
5246 +# CONFIG_FIRMWARE_EDID is not set
5247 +# CONFIG_FB_DDC is not set
5248 +# CONFIG_FB_BOOT_VESA_SUPPORT is not set
5249 +CONFIG_FB_CFB_FILLRECT=y
5250 +CONFIG_FB_CFB_COPYAREA=y
5251 +CONFIG_FB_CFB_IMAGEBLIT=y
5252 +# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
5253 +# CONFIG_FB_SYS_FILLRECT is not set
5254 +# CONFIG_FB_SYS_COPYAREA is not set
5255 +# CONFIG_FB_SYS_IMAGEBLIT is not set
5256 +# CONFIG_FB_FOREIGN_ENDIAN is not set
5257 +# CONFIG_FB_SYS_FOPS is not set
5258 +# CONFIG_FB_SVGALIB is not set
5259 +# CONFIG_FB_MACMODES is not set
5260 +# CONFIG_FB_BACKLIGHT is not set
5261 +CONFIG_FB_MODE_HELPERS=y
5262 +CONFIG_FB_TILEBLITTING=y
5263 +
5264 +#
5265 +# Frame buffer hardware drivers
5266 +#
5267 +# CONFIG_FB_S1D13XXX is not set
5268 +CONFIG_FB_S3C=y
5269 +# CONFIG_FB_S3C_DEBUG_REGWRITE is not set
5270 +# CONFIG_FB_VIRTUAL is not set
5271 +# CONFIG_FB_METRONOME is not set
5272 +# CONFIG_FB_MB862XX is not set
5273 +CONFIG_BACKLIGHT_LCD_SUPPORT=y
5274 +CONFIG_LCD_CLASS_DEVICE=y
5275 +# CONFIG_LCD_LTV350QV is not set
5276 +# CONFIG_LCD_ILI9320 is not set
5277 +# CONFIG_LCD_TDO24M is not set
5278 +# CONFIG_LCD_VGG2432A4 is not set
5279 +CONFIG_LCD_PLATFORM=y
5280 +CONFIG_BACKLIGHT_CLASS_DEVICE=y
5281 +CONFIG_BACKLIGHT_CORGI=y
5282 +
5283 +#
5284 +# Display device support
5285 +#
5286 +# CONFIG_DISPLAY_SUPPORT is not set
5287 +# CONFIG_DISPLAY_JBT6K74 is not set
5288 +
5289 +#
5290 +# Console display driver support
5291 +#
5292 +# CONFIG_VGA_CONSOLE is not set
5293 +CONFIG_DUMMY_CONSOLE=y
5294 +CONFIG_FRAMEBUFFER_CONSOLE=y
5295 +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
5296 +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
5297 +CONFIG_FONTS=y
5298 +CONFIG_FONT_8x8=y
5299 +CONFIG_FONT_8x16=y
5300 +# CONFIG_FONT_6x11 is not set
5301 +# CONFIG_FONT_7x14 is not set
5302 +# CONFIG_FONT_PEARL_8x8 is not set
5303 +# CONFIG_FONT_ACORN_8x8 is not set
5304 +# CONFIG_FONT_MINI_4x6 is not set
5305 +# CONFIG_FONT_SUN8x16 is not set
5306 +# CONFIG_FONT_SUN12x22 is not set
5307 +# CONFIG_FONT_10x18 is not set
5308 +CONFIG_LOGO=y
5309 +CONFIG_LOGO_LINUX_MONO=y
5310 +CONFIG_LOGO_LINUX_VGA16=y
5311 +# CONFIG_LOGO_LINUX_CLUT224 is not set
5312 +CONFIG_SOUND=y
5313 +# CONFIG_SOUND_OSS_CORE is not set
5314 +CONFIG_SND=y
5315 +CONFIG_SND_TIMER=y
5316 +CONFIG_SND_PCM=y
5317 +# CONFIG_SND_SEQUENCER is not set
5318 +# CONFIG_SND_MIXER_OSS is not set
5319 +# CONFIG_SND_PCM_OSS is not set
5320 +# CONFIG_SND_DYNAMIC_MINORS is not set
5321 +CONFIG_SND_SUPPORT_OLD_API=y
5322 +CONFIG_SND_VERBOSE_PROCFS=y
5323 +# CONFIG_SND_VERBOSE_PRINTK is not set
5324 +# CONFIG_SND_DEBUG is not set
5325 +CONFIG_SND_DRIVERS=y
5326 +# CONFIG_SND_DUMMY is not set
5327 +# CONFIG_SND_MTPAV is not set
5328 +# CONFIG_SND_SERIAL_U16550 is not set
5329 +# CONFIG_SND_MPU401 is not set
5330 +CONFIG_SND_ARM=y
5331 +CONFIG_SND_SPI=y
5332 +CONFIG_SND_SOC=y
5333 +# CONFIG_SND_SOC_ALL_CODECS is not set
5334 +# CONFIG_SOUND_PRIME is not set
5335 +CONFIG_HID_SUPPORT=y
5336 +CONFIG_HID=y
5337 +CONFIG_HID_DEBUG=y
5338 +# CONFIG_HIDRAW is not set
5339 +# CONFIG_HID_PID is not set
5340 +
5341 +#
5342 +# Special HID drivers
5343 +#
5344 +# CONFIG_HID_COMPAT is not set
5345 +CONFIG_USB_SUPPORT=y
5346 +CONFIG_USB_ARCH_HAS_HCD=y
5347 +# CONFIG_USB_ARCH_HAS_OHCI is not set
5348 +# CONFIG_USB_ARCH_HAS_EHCI is not set
5349 +# CONFIG_USB is not set
5350 +
5351 +#
5352 +# Enable Host or Gadget support to see Inventra options
5353 +#
5354 +
5355 +#
5356 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
5357 +#
5358 +# CONFIG_USB_GADGET is not set
5359 +# CONFIG_AR6000_WLAN is not set
5360 +CONFIG_MMC=y
5361 +CONFIG_MMC_DEBUG=y
5362 +CONFIG_MMC_UNSAFE_RESUME=y
5363 +
5364 +#
5365 +# MMC/SD/SDIO Card Drivers
5366 +#
5367 +CONFIG_MMC_BLOCK=y
5368 +CONFIG_MMC_BLOCK_BOUNCE=y
5369 +CONFIG_SDIO_UART=y
5370 +# CONFIG_MMC_TEST is not set
5371 +
5372 +#
5373 +# MMC/SD/SDIO Host Controller Drivers
5374 +#
5375 +CONFIG_MMC_SDHCI=y
5376 +CONFIG_MMC_SDHCI_S3C=y
5377 +# CONFIG_MMC_SPI is not set
5378 +# CONFIG_MEMSTICK is not set
5379 +# CONFIG_ACCESSIBILITY is not set
5380 +CONFIG_NEW_LEDS=y
5381 +# CONFIG_LEDS_CLASS is not set
5382 +
5383 +#
5384 +# LED drivers
5385 +#
5386 +
5387 +#
5388 +# LED Triggers
5389 +#
5390 +CONFIG_LEDS_TRIGGERS=y
5391 +# CONFIG_LEDS_TRIGGER_TIMER is not set
5392 +# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
5393 +# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
5394 +# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
5395 +CONFIG_RTC_LIB=y
5396 +CONFIG_RTC_CLASS=y
5397 +CONFIG_RTC_HCTOSYS=y
5398 +CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
5399 +# CONFIG_RTC_DEBUG is not set
5400 +
5401 +#
5402 +# RTC interfaces
5403 +#
5404 +CONFIG_RTC_INTF_SYSFS=y
5405 +CONFIG_RTC_INTF_PROC=y
5406 +CONFIG_RTC_INTF_DEV=y
5407 +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
5408 +# CONFIG_RTC_DRV_TEST is not set
5409 +
5410 +#
5411 +# I2C RTC drivers
5412 +#
5413 +# CONFIG_RTC_DRV_DS1307 is not set
5414 +# CONFIG_RTC_DRV_DS1374 is not set
5415 +# CONFIG_RTC_DRV_DS1672 is not set
5416 +# CONFIG_RTC_DRV_MAX6900 is not set
5417 +# CONFIG_RTC_DRV_RS5C372 is not set
5418 +# CONFIG_RTC_DRV_ISL1208 is not set
5419 +# CONFIG_RTC_DRV_X1205 is not set
5420 +# CONFIG_RTC_DRV_PCF8563 is not set
5421 +# CONFIG_RTC_DRV_PCF8583 is not set
5422 +CONFIG_RTC_DRV_PCF50633=y
5423 +# CONFIG_RTC_DRV_PCF50606 is not set
5424 +# CONFIG_RTC_DRV_M41T80 is not set
5425 +# CONFIG_RTC_DRV_S35390A is not set
5426 +# CONFIG_RTC_DRV_FM3130 is not set
5427 +
5428 +#
5429 +# SPI RTC drivers
5430 +#
5431 +# CONFIG_RTC_DRV_M41T94 is not set
5432 +# CONFIG_RTC_DRV_DS1305 is not set
5433 +# CONFIG_RTC_DRV_MAX6902 is not set
5434 +# CONFIG_RTC_DRV_R9701 is not set
5435 +# CONFIG_RTC_DRV_RS5C348 is not set
5436 +# CONFIG_RTC_DRV_DS3234 is not set
5437 +
5438 +#
5439 +# Platform RTC drivers
5440 +#
5441 +# CONFIG_RTC_DRV_CMOS is not set
5442 +# CONFIG_RTC_DRV_DS1286 is not set
5443 +# CONFIG_RTC_DRV_DS1511 is not set
5444 +# CONFIG_RTC_DRV_DS1553 is not set
5445 +# CONFIG_RTC_DRV_DS1742 is not set
5446 +# CONFIG_RTC_DRV_STK17TA8 is not set
5447 +# CONFIG_RTC_DRV_M48T86 is not set
5448 +# CONFIG_RTC_DRV_M48T35 is not set
5449 +# CONFIG_RTC_DRV_M48T59 is not set
5450 +# CONFIG_RTC_DRV_BQ4802 is not set
5451 +# CONFIG_RTC_DRV_V3020 is not set
5452 +
5453 +#
5454 +# on-CPU RTC drivers
5455 +#
5456 +# CONFIG_DMADEVICES is not set
5457 +
5458 +#
5459 +# Android
5460 +#
5461 +CONFIG_ANDROID_BINDER_IPC=y
5462 +# CONFIG_ANDROID_POWER is not set
5463 +CONFIG_ANDROID_LOGGER=y
5464 +# CONFIG_ANDROID_RAM_CONSOLE is not set
5465 +# CONFIG_ANDROID_TIMED_GPIO is not set
5466 +# CONFIG_ANDROID_PARANOID_NETWORK is not set
5467 +CONFIG_REGULATOR=y
5468 +# CONFIG_REGULATOR_DEBUG is not set
5469 +# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
5470 +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
5471 +# CONFIG_REGULATOR_BQ24022 is not set
5472 +CONFIG_REGULATOR_PCF50633=y
5473 +# CONFIG_UIO is not set
5474 +
5475 +#
5476 +# File systems
5477 +#
5478 +CONFIG_EXT2_FS=y
5479 +# CONFIG_EXT2_FS_XATTR is not set
5480 +# CONFIG_EXT2_FS_XIP is not set
5481 +CONFIG_EXT3_FS=y
5482 +CONFIG_EXT3_FS_XATTR=y
5483 +CONFIG_EXT3_FS_POSIX_ACL=y
5484 +CONFIG_EXT3_FS_SECURITY=y
5485 +# CONFIG_EXT4_FS is not set
5486 +CONFIG_JBD=y
5487 +CONFIG_FS_MBCACHE=y
5488 +# CONFIG_REISERFS_FS is not set
5489 +# CONFIG_JFS_FS is not set
5490 +CONFIG_FS_POSIX_ACL=y
5491 +CONFIG_FILE_LOCKING=y
5492 +# CONFIG_XFS_FS is not set
5493 +# CONFIG_GFS2_FS is not set
5494 +# CONFIG_OCFS2_FS is not set
5495 +CONFIG_DNOTIFY=y
5496 +CONFIG_INOTIFY=y
5497 +CONFIG_INOTIFY_USER=y
5498 +# CONFIG_QUOTA is not set
5499 +# CONFIG_AUTOFS_FS is not set
5500 +# CONFIG_AUTOFS4_FS is not set
5501 +# CONFIG_FUSE_FS is not set
5502 +CONFIG_GENERIC_ACL=y
5503 +
5504 +#
5505 +# CD-ROM/DVD Filesystems
5506 +#
5507 +# CONFIG_ISO9660_FS is not set
5508 +# CONFIG_UDF_FS is not set
5509 +
5510 +#
5511 +# DOS/FAT/NT Filesystems
5512 +#
5513 +CONFIG_FAT_FS=y
5514 +# CONFIG_MSDOS_FS is not set
5515 +CONFIG_VFAT_FS=y
5516 +CONFIG_FAT_DEFAULT_CODEPAGE=437
5517 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
5518 +# CONFIG_NTFS_FS is not set
5519 +
5520 +#
5521 +# Pseudo filesystems
5522 +#
5523 +CONFIG_PROC_FS=y
5524 +CONFIG_PROC_SYSCTL=y
5525 +CONFIG_PROC_PAGE_MONITOR=y
5526 +CONFIG_SYSFS=y
5527 +CONFIG_TMPFS=y
5528 +CONFIG_TMPFS_POSIX_ACL=y
5529 +# CONFIG_HUGETLB_PAGE is not set
5530 +# CONFIG_CONFIGFS_FS is not set
5531 +
5532 +#
5533 +# Miscellaneous filesystems
5534 +#
5535 +# CONFIG_ADFS_FS is not set
5536 +# CONFIG_AFFS_FS is not set
5537 +# CONFIG_HFS_FS is not set
5538 +# CONFIG_HFSPLUS_FS is not set
5539 +# CONFIG_BEFS_FS is not set
5540 +# CONFIG_BFS_FS is not set
5541 +# CONFIG_EFS_FS is not set
5542 +CONFIG_JFFS2_FS=y
5543 +CONFIG_JFFS2_FS_DEBUG=0
5544 +CONFIG_JFFS2_FS_WRITEBUFFER=y
5545 +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
5546 +CONFIG_JFFS2_SUMMARY=y
5547 +# CONFIG_JFFS2_FS_XATTR is not set
5548 +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
5549 +CONFIG_JFFS2_ZLIB=y
5550 +# CONFIG_JFFS2_LZO is not set
5551 +CONFIG_JFFS2_RTIME=y
5552 +# CONFIG_JFFS2_RUBIN is not set
5553 +CONFIG_CRAMFS=y
5554 +# CONFIG_VXFS_FS is not set
5555 +# CONFIG_MINIX_FS is not set
5556 +# CONFIG_OMFS_FS is not set
5557 +# CONFIG_HPFS_FS is not set
5558 +# CONFIG_QNX4FS_FS is not set
5559 +CONFIG_ROMFS_FS=y
5560 +# CONFIG_SYSV_FS is not set
5561 +# CONFIG_UFS_FS is not set
5562 +CONFIG_NETWORK_FILESYSTEMS=y
5563 +# CONFIG_NFS_FS is not set
5564 +# CONFIG_NFSD is not set
5565 +# CONFIG_SMB_FS is not set
5566 +# CONFIG_CIFS is not set
5567 +# CONFIG_NCP_FS is not set
5568 +# CONFIG_CODA_FS is not set
5569 +# CONFIG_AFS_FS is not set
5570 +
5571 +#
5572 +# Partition Types
5573 +#
5574 +CONFIG_PARTITION_ADVANCED=y
5575 +# CONFIG_ACORN_PARTITION is not set
5576 +# CONFIG_OSF_PARTITION is not set
5577 +# CONFIG_AMIGA_PARTITION is not set
5578 +# CONFIG_ATARI_PARTITION is not set
5579 +# CONFIG_MAC_PARTITION is not set
5580 +CONFIG_MSDOS_PARTITION=y
5581 +# CONFIG_BSD_DISKLABEL is not set
5582 +# CONFIG_MINIX_SUBPARTITION is not set
5583 +# CONFIG_SOLARIS_X86_PARTITION is not set
5584 +# CONFIG_UNIXWARE_DISKLABEL is not set
5585 +# CONFIG_LDM_PARTITION is not set
5586 +# CONFIG_SGI_PARTITION is not set
5587 +# CONFIG_ULTRIX_PARTITION is not set
5588 +# CONFIG_SUN_PARTITION is not set
5589 +# CONFIG_KARMA_PARTITION is not set
5590 +# CONFIG_EFI_PARTITION is not set
5591 +# CONFIG_SYSV68_PARTITION is not set
5592 +CONFIG_NLS=y
5593 +CONFIG_NLS_DEFAULT="iso8859-1"
5594 +CONFIG_NLS_CODEPAGE_437=y
5595 +# CONFIG_NLS_CODEPAGE_737 is not set
5596 +# CONFIG_NLS_CODEPAGE_775 is not set
5597 +# CONFIG_NLS_CODEPAGE_850 is not set
5598 +# CONFIG_NLS_CODEPAGE_852 is not set
5599 +# CONFIG_NLS_CODEPAGE_855 is not set
5600 +# CONFIG_NLS_CODEPAGE_857 is not set
5601 +# CONFIG_NLS_CODEPAGE_860 is not set
5602 +# CONFIG_NLS_CODEPAGE_861 is not set
5603 +# CONFIG_NLS_CODEPAGE_862 is not set
5604 +# CONFIG_NLS_CODEPAGE_863 is not set
5605 +# CONFIG_NLS_CODEPAGE_864 is not set
5606 +# CONFIG_NLS_CODEPAGE_865 is not set
5607 +# CONFIG_NLS_CODEPAGE_866 is not set
5608 +# CONFIG_NLS_CODEPAGE_869 is not set
5609 +# CONFIG_NLS_CODEPAGE_936 is not set
5610 +# CONFIG_NLS_CODEPAGE_950 is not set
5611 +# CONFIG_NLS_CODEPAGE_932 is not set
5612 +# CONFIG_NLS_CODEPAGE_949 is not set
5613 +# CONFIG_NLS_CODEPAGE_874 is not set
5614 +# CONFIG_NLS_ISO8859_8 is not set
5615 +# CONFIG_NLS_CODEPAGE_1250 is not set
5616 +# CONFIG_NLS_CODEPAGE_1251 is not set
5617 +# CONFIG_NLS_ASCII is not set
5618 +CONFIG_NLS_ISO8859_1=y
5619 +# CONFIG_NLS_ISO8859_2 is not set
5620 +# CONFIG_NLS_ISO8859_3 is not set
5621 +# CONFIG_NLS_ISO8859_4 is not set
5622 +# CONFIG_NLS_ISO8859_5 is not set
5623 +# CONFIG_NLS_ISO8859_6 is not set
5624 +# CONFIG_NLS_ISO8859_7 is not set
5625 +# CONFIG_NLS_ISO8859_9 is not set
5626 +# CONFIG_NLS_ISO8859_13 is not set
5627 +# CONFIG_NLS_ISO8859_14 is not set
5628 +# CONFIG_NLS_ISO8859_15 is not set
5629 +# CONFIG_NLS_KOI8_R is not set
5630 +# CONFIG_NLS_KOI8_U is not set
5631 +CONFIG_NLS_UTF8=y
5632 +# CONFIG_DLM is not set
5633 +
5634 +#
5635 +# Kernel hacking
5636 +#
5637 +CONFIG_PRINTK_TIME=y
5638 +CONFIG_ENABLE_WARN_DEPRECATED=y
5639 +CONFIG_ENABLE_MUST_CHECK=y
5640 +CONFIG_FRAME_WARN=1024
5641 +CONFIG_MAGIC_SYSRQ=y
5642 +# CONFIG_UNUSED_SYMBOLS is not set
5643 +# CONFIG_DEBUG_FS is not set
5644 +# CONFIG_HEADERS_CHECK is not set
5645 +CONFIG_DEBUG_KERNEL=y
5646 +# CONFIG_DEBUG_SHIRQ is not set
5647 +CONFIG_DETECT_SOFTLOCKUP=y
5648 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
5649 +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
5650 +CONFIG_SCHED_DEBUG=y
5651 +# CONFIG_SCHEDSTATS is not set
5652 +# CONFIG_TIMER_STATS is not set
5653 +# CONFIG_DEBUG_OBJECTS is not set
5654 +# CONFIG_SLUB_DEBUG_ON is not set
5655 +# CONFIG_SLUB_STATS is not set
5656 +CONFIG_DEBUG_RT_MUTEXES=y
5657 +CONFIG_DEBUG_PI_LIST=y
5658 +# CONFIG_RT_MUTEX_TESTER is not set
5659 +CONFIG_DEBUG_SPINLOCK=y
5660 +CONFIG_DEBUG_MUTEXES=y
5661 +# CONFIG_DEBUG_LOCK_ALLOC is not set
5662 +# CONFIG_PROVE_LOCKING is not set
5663 +# CONFIG_LOCK_STAT is not set
5664 +CONFIG_DEBUG_SPINLOCK_SLEEP=y
5665 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
5666 +# CONFIG_DEBUG_KOBJECT is not set
5667 +CONFIG_DEBUG_BUGVERBOSE=y
5668 +CONFIG_DEBUG_INFO=y
5669 +# CONFIG_DEBUG_VM is not set
5670 +# CONFIG_DEBUG_WRITECOUNT is not set
5671 +CONFIG_DEBUG_MEMORY_INIT=y
5672 +# CONFIG_DEBUG_LIST is not set
5673 +# CONFIG_DEBUG_SG is not set
5674 +CONFIG_FRAME_POINTER=y
5675 +# CONFIG_BOOT_PRINTK_DELAY is not set
5676 +# CONFIG_RCU_TORTURE_TEST is not set
5677 +# CONFIG_RCU_CPU_STALL_DETECTOR is not set
5678 +# CONFIG_BACKTRACE_SELF_TEST is not set
5679 +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
5680 +# CONFIG_FAULT_INJECTION is not set
5681 +# CONFIG_LATENCYTOP is not set
5682 +CONFIG_SYSCTL_SYSCALL_CHECK=y
5683 +CONFIG_HAVE_FUNCTION_TRACER=y
5684 +
5685 +#
5686 +# Tracers
5687 +#
5688 +# CONFIG_FUNCTION_TRACER is not set
5689 +# CONFIG_SCHED_TRACER is not set
5690 +# CONFIG_CONTEXT_SWITCH_TRACER is not set
5691 +# CONFIG_BOOT_TRACER is not set
5692 +# CONFIG_STACK_TRACER is not set
5693 +CONFIG_DYNAMIC_PRINTK_DEBUG=y
5694 +# CONFIG_SAMPLES is not set
5695 +CONFIG_HAVE_ARCH_KGDB=y
5696 +# CONFIG_KGDB is not set
5697 +CONFIG_DEBUG_USER=y
5698 +CONFIG_DEBUG_ERRORS=y
5699 +# CONFIG_DEBUG_STACK_USAGE is not set
5700 +CONFIG_DEBUG_LL=y
5701 +# CONFIG_DEBUG_ICEDCC is not set
5702 +CONFIG_DEBUG_S3C_PORT=y
5703 +CONFIG_DEBUG_S3C_UART=3
5704 +
5705 +#
5706 +# Security options
5707 +#
5708 +# CONFIG_KEYS is not set
5709 +# CONFIG_SECURITY is not set
5710 +# CONFIG_SECURITYFS is not set
5711 +# CONFIG_SECURITY_FILE_CAPABILITIES is not set
5712 +CONFIG_CRYPTO=y
5713 +
5714 +#
5715 +# Crypto core or helper
5716 +#
5717 +# CONFIG_CRYPTO_FIPS is not set
5718 +CONFIG_CRYPTO_ALGAPI=y
5719 +CONFIG_CRYPTO_AEAD=y
5720 +CONFIG_CRYPTO_BLKCIPHER=y
5721 +CONFIG_CRYPTO_HASH=y
5722 +CONFIG_CRYPTO_RNG=y
5723 +CONFIG_CRYPTO_MANAGER=y
5724 +# CONFIG_CRYPTO_GF128MUL is not set
5725 +# CONFIG_CRYPTO_NULL is not set
5726 +# CONFIG_CRYPTO_CRYPTD is not set
5727 +# CONFIG_CRYPTO_AUTHENC is not set
5728 +# CONFIG_CRYPTO_TEST is not set
5729 +
5730 +#
5731 +# Authenticated Encryption with Associated Data
5732 +#
5733 +# CONFIG_CRYPTO_CCM is not set
5734 +# CONFIG_CRYPTO_GCM is not set
5735 +# CONFIG_CRYPTO_SEQIV is not set
5736 +
5737 +#
5738 +# Block modes
5739 +#
5740 +# CONFIG_CRYPTO_CBC is not set
5741 +# CONFIG_CRYPTO_CTR is not set
5742 +# CONFIG_CRYPTO_CTS is not set
5743 +CONFIG_CRYPTO_ECB=y
5744 +# CONFIG_CRYPTO_LRW is not set
5745 +# CONFIG_CRYPTO_PCBC is not set
5746 +# CONFIG_CRYPTO_XTS is not set
5747 +
5748 +#
5749 +# Hash modes
5750 +#
5751 +# CONFIG_CRYPTO_HMAC is not set
5752 +# CONFIG_CRYPTO_XCBC is not set
5753 +
5754 +#
5755 +# Digest
5756 +#
5757 +# CONFIG_CRYPTO_CRC32C is not set
5758 +# CONFIG_CRYPTO_MD4 is not set
5759 +CONFIG_CRYPTO_MD5=y
5760 +# CONFIG_CRYPTO_MICHAEL_MIC is not set
5761 +# CONFIG_CRYPTO_RMD128 is not set
5762 +# CONFIG_CRYPTO_RMD160 is not set
5763 +# CONFIG_CRYPTO_RMD256 is not set
5764 +# CONFIG_CRYPTO_RMD320 is not set
5765 +CONFIG_CRYPTO_SHA1=y
5766 +# CONFIG_CRYPTO_SHA256 is not set
5767 +# CONFIG_CRYPTO_SHA512 is not set
5768 +# CONFIG_CRYPTO_TGR192 is not set
5769 +# CONFIG_CRYPTO_WP512 is not set
5770 +
5771 +#
5772 +# Ciphers
5773 +#
5774 +CONFIG_CRYPTO_AES=y
5775 +# CONFIG_CRYPTO_ANUBIS is not set
5776 +CONFIG_CRYPTO_ARC4=y
5777 +# CONFIG_CRYPTO_BLOWFISH is not set
5778 +# CONFIG_CRYPTO_CAMELLIA is not set
5779 +# CONFIG_CRYPTO_CAST5 is not set
5780 +# CONFIG_CRYPTO_CAST6 is not set
5781 +# CONFIG_CRYPTO_DES is not set
5782 +# CONFIG_CRYPTO_FCRYPT is not set
5783 +# CONFIG_CRYPTO_KHAZAD is not set
5784 +# CONFIG_CRYPTO_SALSA20 is not set
5785 +# CONFIG_CRYPTO_SEED is not set
5786 +# CONFIG_CRYPTO_SERPENT is not set
5787 +# CONFIG_CRYPTO_TEA is not set
5788 +# CONFIG_CRYPTO_TWOFISH is not set
5789 +
5790 +#
5791 +# Compression
5792 +#
5793 +# CONFIG_CRYPTO_DEFLATE is not set
5794 +# CONFIG_CRYPTO_LZO is not set
5795 +
5796 +#
5797 +# Random Number Generation
5798 +#
5799 +# CONFIG_CRYPTO_ANSI_CPRNG is not set
5800 +CONFIG_CRYPTO_HW=y
5801 +
5802 +#
5803 +# Library routines
5804 +#
5805 +CONFIG_BITREVERSE=y
5806 +CONFIG_CRC_CCITT=y
5807 +# CONFIG_CRC16 is not set
5808 +# CONFIG_CRC_T10DIF is not set
5809 +# CONFIG_CRC_ITU_T is not set
5810 +CONFIG_CRC32=y
5811 +# CONFIG_CRC7 is not set
5812 +# CONFIG_LIBCRC32C is not set
5813 +CONFIG_ZLIB_INFLATE=y
5814 +CONFIG_ZLIB_DEFLATE=y
5815 +CONFIG_PLIST=y
5816 +CONFIG_HAS_IOMEM=y
5817 +CONFIG_HAS_DMA=y
5818 Index: linux-2.6.28/arch/arm/configs/s3c6400_defconfig
5819 ===================================================================
5820 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
5821 +++ linux-2.6.28/arch/arm/configs/s3c6400_defconfig 2009-01-02 00:01:56.000000000 +0100
5822 @@ -0,0 +1,845 @@
5823 +#
5824 +# Automatically generated make config: don't edit
5825 +# Linux kernel version: 2.6.28-rc3
5826 +# Mon Nov 3 10:10:30 2008
5827 +#
5828 +CONFIG_ARM=y
5829 +CONFIG_SYS_SUPPORTS_APM_EMULATION=y
5830 +CONFIG_GENERIC_GPIO=y
5831 +# CONFIG_GENERIC_TIME is not set
5832 +# CONFIG_GENERIC_CLOCKEVENTS is not set
5833 +CONFIG_MMU=y
5834 +CONFIG_NO_IOPORT=y
5835 +CONFIG_GENERIC_HARDIRQS=y
5836 +CONFIG_STACKTRACE_SUPPORT=y
5837 +CONFIG_HAVE_LATENCYTOP_SUPPORT=y
5838 +CONFIG_LOCKDEP_SUPPORT=y
5839 +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
5840 +CONFIG_HARDIRQS_SW_RESEND=y
5841 +CONFIG_GENERIC_IRQ_PROBE=y
5842 +CONFIG_RWSEM_GENERIC_SPINLOCK=y
5843 +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
5844 +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
5845 +CONFIG_GENERIC_HWEIGHT=y
5846 +CONFIG_GENERIC_CALIBRATE_DELAY=y
5847 +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
5848 +CONFIG_VECTORS_BASE=0xffff0000
5849 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
5850 +
5851 +#
5852 +# General setup
5853 +#
5854 +CONFIG_EXPERIMENTAL=y
5855 +CONFIG_BROKEN_ON_SMP=y
5856 +CONFIG_INIT_ENV_ARG_LIMIT=32
5857 +CONFIG_LOCALVERSION=""
5858 +CONFIG_LOCALVERSION_AUTO=y
5859 +CONFIG_SWAP=y
5860 +# CONFIG_SYSVIPC is not set
5861 +# CONFIG_BSD_PROCESS_ACCT is not set
5862 +# CONFIG_IKCONFIG is not set
5863 +CONFIG_LOG_BUF_SHIFT=17
5864 +# CONFIG_CGROUPS is not set
5865 +# CONFIG_GROUP_SCHED is not set
5866 +CONFIG_SYSFS_DEPRECATED=y
5867 +CONFIG_SYSFS_DEPRECATED_V2=y
5868 +# CONFIG_RELAY is not set
5869 +CONFIG_NAMESPACES=y
5870 +# CONFIG_UTS_NS is not set
5871 +# CONFIG_USER_NS is not set
5872 +# CONFIG_PID_NS is not set
5873 +CONFIG_BLK_DEV_INITRD=y
5874 +CONFIG_INITRAMFS_SOURCE=""
5875 +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
5876 +CONFIG_SYSCTL=y
5877 +# CONFIG_EMBEDDED is not set
5878 +CONFIG_UID16=y
5879 +CONFIG_SYSCTL_SYSCALL=y
5880 +CONFIG_KALLSYMS=y
5881 +CONFIG_KALLSYMS_ALL=y
5882 +# CONFIG_KALLSYMS_EXTRA_PASS is not set
5883 +CONFIG_HOTPLUG=y
5884 +CONFIG_PRINTK=y
5885 +CONFIG_BUG=y
5886 +CONFIG_ELF_CORE=y
5887 +CONFIG_COMPAT_BRK=y
5888 +CONFIG_BASE_FULL=y
5889 +CONFIG_FUTEX=y
5890 +CONFIG_ANON_INODES=y
5891 +CONFIG_EPOLL=y
5892 +CONFIG_SIGNALFD=y
5893 +CONFIG_TIMERFD=y
5894 +CONFIG_EVENTFD=y
5895 +CONFIG_SHMEM=y
5896 +CONFIG_AIO=y
5897 +CONFIG_VM_EVENT_COUNTERS=y
5898 +CONFIG_SLUB_DEBUG=y
5899 +# CONFIG_SLAB is not set
5900 +CONFIG_SLUB=y
5901 +# CONFIG_SLOB is not set
5902 +# CONFIG_PROFILING is not set
5903 +# CONFIG_MARKERS is not set
5904 +CONFIG_HAVE_OPROFILE=y
5905 +# CONFIG_KPROBES is not set
5906 +CONFIG_HAVE_KPROBES=y
5907 +CONFIG_HAVE_KRETPROBES=y
5908 +CONFIG_HAVE_CLK=y
5909 +CONFIG_HAVE_GENERIC_DMA_COHERENT=y
5910 +CONFIG_SLABINFO=y
5911 +CONFIG_RT_MUTEXES=y
5912 +# CONFIG_TINY_SHMEM is not set
5913 +CONFIG_BASE_SMALL=0
5914 +CONFIG_MODULES=y
5915 +# CONFIG_MODULE_FORCE_LOAD is not set
5916 +CONFIG_MODULE_UNLOAD=y
5917 +# CONFIG_MODULE_FORCE_UNLOAD is not set
5918 +# CONFIG_MODVERSIONS is not set
5919 +# CONFIG_MODULE_SRCVERSION_ALL is not set
5920 +CONFIG_KMOD=y
5921 +CONFIG_BLOCK=y
5922 +CONFIG_LBD=y
5923 +# CONFIG_BLK_DEV_IO_TRACE is not set
5924 +CONFIG_LSF=y
5925 +# CONFIG_BLK_DEV_BSG is not set
5926 +# CONFIG_BLK_DEV_INTEGRITY is not set
5927 +
5928 +#
5929 +# IO Schedulers
5930 +#
5931 +CONFIG_IOSCHED_NOOP=y
5932 +CONFIG_IOSCHED_AS=y
5933 +CONFIG_IOSCHED_DEADLINE=y
5934 +CONFIG_IOSCHED_CFQ=y
5935 +# CONFIG_DEFAULT_AS is not set
5936 +# CONFIG_DEFAULT_DEADLINE is not set
5937 +CONFIG_DEFAULT_CFQ=y
5938 +# CONFIG_DEFAULT_NOOP is not set
5939 +CONFIG_DEFAULT_IOSCHED="cfq"
5940 +CONFIG_CLASSIC_RCU=y
5941 +# CONFIG_FREEZER is not set
5942 +
5943 +#
5944 +# System Type
5945 +#
5946 +# CONFIG_ARCH_AAEC2000 is not set
5947 +# CONFIG_ARCH_INTEGRATOR is not set
5948 +# CONFIG_ARCH_REALVIEW is not set
5949 +# CONFIG_ARCH_VERSATILE is not set
5950 +# CONFIG_ARCH_AT91 is not set
5951 +# CONFIG_ARCH_CLPS7500 is not set
5952 +# CONFIG_ARCH_CLPS711X is not set
5953 +# CONFIG_ARCH_EBSA110 is not set
5954 +# CONFIG_ARCH_EP93XX is not set
5955 +# CONFIG_ARCH_FOOTBRIDGE is not set
5956 +# CONFIG_ARCH_NETX is not set
5957 +# CONFIG_ARCH_H720X is not set
5958 +# CONFIG_ARCH_IMX is not set
5959 +# CONFIG_ARCH_IOP13XX is not set
5960 +# CONFIG_ARCH_IOP32X is not set
5961 +# CONFIG_ARCH_IOP33X is not set
5962 +# CONFIG_ARCH_IXP23XX is not set
5963 +# CONFIG_ARCH_IXP2000 is not set
5964 +# CONFIG_ARCH_IXP4XX is not set
5965 +# CONFIG_ARCH_L7200 is not set
5966 +# CONFIG_ARCH_KIRKWOOD is not set
5967 +# CONFIG_ARCH_KS8695 is not set
5968 +# CONFIG_ARCH_NS9XXX is not set
5969 +# CONFIG_ARCH_LOKI is not set
5970 +# CONFIG_ARCH_MV78XX0 is not set
5971 +# CONFIG_ARCH_MXC is not set
5972 +# CONFIG_ARCH_ORION5X is not set
5973 +# CONFIG_ARCH_PNX4008 is not set
5974 +# CONFIG_ARCH_PXA is not set
5975 +# CONFIG_ARCH_RPC is not set
5976 +# CONFIG_ARCH_SA1100 is not set
5977 +# CONFIG_ARCH_S3C2410 is not set
5978 +CONFIG_ARCH_S3C64XX=y
5979 +# CONFIG_ARCH_SHARK is not set
5980 +# CONFIG_ARCH_LH7A40X is not set
5981 +# CONFIG_ARCH_DAVINCI is not set
5982 +# CONFIG_ARCH_OMAP is not set
5983 +# CONFIG_ARCH_MSM is not set
5984 +CONFIG_PLAT_S3C64XX=y
5985 +CONFIG_CPU_S3C6400_INIT=y
5986 +CONFIG_CPU_S3C6400_CLOCK=y
5987 +CONFIG_S3C64XX_SETUP_I2C0=y
5988 +CONFIG_S3C64XX_SETUP_I2C1=y
5989 +CONFIG_PLAT_S3C=y
5990 +
5991 +#
5992 +# Boot options
5993 +#
5994 +CONFIG_S3C_BOOT_ERROR_RESET=y
5995 +
5996 +#
5997 +# Power management
5998 +#
5999 +CONFIG_S3C_LOWLEVEL_UART_PORT=0
6000 +CONFIG_S3C_GPIO_SPACE=0
6001 +CONFIG_S3C_GPIO_TRACK=y
6002 +CONFIG_S3C_GPIO_PULL_UPDOWN=y
6003 +CONFIG_S3C_GPIO_CFG_S3C24XX=y
6004 +CONFIG_S3C_GPIO_CFG_S3C64XX=y
6005 +CONFIG_S3C_DEV_HSMMC=y
6006 +CONFIG_S3C_DEV_HSMMC1=y
6007 +CONFIG_S3C_DEV_I2C1=y
6008 +CONFIG_CPU_S3C6410=y
6009 +CONFIG_S3C6410_SETUP_SDHCI=y
6010 +CONFIG_MACH_SMDK6410=y
6011 +CONFIG_SMDK6410_SD_CH0=y
6012 +# CONFIG_SMDK6410_SD_CH1 is not set
6013 +
6014 +#
6015 +# Processor Type
6016 +#
6017 +CONFIG_CPU_32=y
6018 +CONFIG_CPU_V6=y
6019 +CONFIG_CPU_32v6K=y
6020 +CONFIG_CPU_32v6=y
6021 +CONFIG_CPU_ABRT_EV6=y
6022 +CONFIG_CPU_PABRT_NOIFAR=y
6023 +CONFIG_CPU_CACHE_V6=y
6024 +CONFIG_CPU_CACHE_VIPT=y
6025 +CONFIG_CPU_COPY_V6=y
6026 +CONFIG_CPU_TLB_V6=y
6027 +CONFIG_CPU_HAS_ASID=y
6028 +CONFIG_CPU_CP15=y
6029 +CONFIG_CPU_CP15_MMU=y
6030 +
6031 +#
6032 +# Processor Features
6033 +#
6034 +CONFIG_ARM_THUMB=y
6035 +# CONFIG_CPU_ICACHE_DISABLE is not set
6036 +# CONFIG_CPU_DCACHE_DISABLE is not set
6037 +# CONFIG_CPU_BPREDICT_DISABLE is not set
6038 +# CONFIG_OUTER_CACHE is not set
6039 +CONFIG_ARM_VIC=y
6040 +
6041 +#
6042 +# Bus support
6043 +#
6044 +# CONFIG_PCI_SYSCALL is not set
6045 +# CONFIG_ARCH_SUPPORTS_MSI is not set
6046 +# CONFIG_PCCARD is not set
6047 +
6048 +#
6049 +# Kernel Features
6050 +#
6051 +CONFIG_VMSPLIT_3G=y
6052 +# CONFIG_VMSPLIT_2G is not set
6053 +# CONFIG_VMSPLIT_1G is not set
6054 +CONFIG_PAGE_OFFSET=0xC0000000
6055 +# CONFIG_PREEMPT is not set
6056 +CONFIG_HZ=100
6057 +CONFIG_AEABI=y
6058 +CONFIG_OABI_COMPAT=y
6059 +CONFIG_ARCH_FLATMEM_HAS_HOLES=y
6060 +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
6061 +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
6062 +CONFIG_SELECT_MEMORY_MODEL=y
6063 +CONFIG_FLATMEM_MANUAL=y
6064 +# CONFIG_DISCONTIGMEM_MANUAL is not set
6065 +# CONFIG_SPARSEMEM_MANUAL is not set
6066 +CONFIG_FLATMEM=y
6067 +CONFIG_FLAT_NODE_MEM_MAP=y
6068 +CONFIG_PAGEFLAGS_EXTENDED=y
6069 +CONFIG_SPLIT_PTLOCK_CPUS=4
6070 +# CONFIG_RESOURCES_64BIT is not set
6071 +# CONFIG_PHYS_ADDR_T_64BIT is not set
6072 +CONFIG_ZONE_DMA_FLAG=0
6073 +CONFIG_VIRT_TO_BUS=y
6074 +CONFIG_UNEVICTABLE_LRU=y
6075 +CONFIG_ALIGNMENT_TRAP=y
6076 +
6077 +#
6078 +# Boot options
6079 +#
6080 +CONFIG_ZBOOT_ROM_TEXT=0
6081 +CONFIG_ZBOOT_ROM_BSS=0
6082 +CONFIG_CMDLINE="console=ttySAC0,115200 root=/dev/ram init=/bin/bash initrd=0x51000000,4M"
6083 +# CONFIG_XIP_KERNEL is not set
6084 +# CONFIG_KEXEC is not set
6085 +
6086 +#
6087 +# CPU Power Management
6088 +#
6089 +# CONFIG_CPU_IDLE is not set
6090 +
6091 +#
6092 +# Floating point emulation
6093 +#
6094 +
6095 +#
6096 +# At least one emulation must be selected
6097 +#
6098 +# CONFIG_FPE_NWFPE is not set
6099 +# CONFIG_FPE_FASTFPE is not set
6100 +CONFIG_VFP=y
6101 +
6102 +#
6103 +# Userspace binary formats
6104 +#
6105 +CONFIG_BINFMT_ELF=y
6106 +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
6107 +CONFIG_HAVE_AOUT=y
6108 +# CONFIG_BINFMT_AOUT is not set
6109 +# CONFIG_BINFMT_MISC is not set
6110 +
6111 +#
6112 +# Power management options
6113 +#
6114 +# CONFIG_PM is not set
6115 +CONFIG_ARCH_SUSPEND_POSSIBLE=y
6116 +# CONFIG_NET is not set
6117 +
6118 +#
6119 +# Device Drivers
6120 +#
6121 +
6122 +#
6123 +# Generic Driver Options
6124 +#
6125 +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
6126 +CONFIG_STANDALONE=y
6127 +CONFIG_PREVENT_FIRMWARE_BUILD=y
6128 +CONFIG_FW_LOADER=y
6129 +CONFIG_FIRMWARE_IN_KERNEL=y
6130 +CONFIG_EXTRA_FIRMWARE=""
6131 +# CONFIG_DEBUG_DRIVER is not set
6132 +# CONFIG_DEBUG_DEVRES is not set
6133 +# CONFIG_SYS_HYPERVISOR is not set
6134 +# CONFIG_MTD is not set
6135 +# CONFIG_PARPORT is not set
6136 +CONFIG_BLK_DEV=y
6137 +# CONFIG_BLK_DEV_COW_COMMON is not set
6138 +CONFIG_BLK_DEV_LOOP=y
6139 +# CONFIG_BLK_DEV_CRYPTOLOOP is not set
6140 +CONFIG_BLK_DEV_RAM=y
6141 +CONFIG_BLK_DEV_RAM_COUNT=16
6142 +CONFIG_BLK_DEV_RAM_SIZE=4096
6143 +# CONFIG_BLK_DEV_XIP is not set
6144 +# CONFIG_CDROM_PKTCDVD is not set
6145 +CONFIG_MISC_DEVICES=y
6146 +# CONFIG_EEPROM_93CX6 is not set
6147 +# CONFIG_ENCLOSURE_SERVICES is not set
6148 +CONFIG_HAVE_IDE=y
6149 +# CONFIG_IDE is not set
6150 +
6151 +#
6152 +# SCSI device support
6153 +#
6154 +# CONFIG_RAID_ATTRS is not set
6155 +# CONFIG_SCSI is not set
6156 +# CONFIG_SCSI_DMA is not set
6157 +# CONFIG_SCSI_NETLINK is not set
6158 +# CONFIG_ATA is not set
6159 +# CONFIG_MD is not set
6160 +
6161 +#
6162 +# Input device support
6163 +#
6164 +CONFIG_INPUT=y
6165 +# CONFIG_INPUT_FF_MEMLESS is not set
6166 +# CONFIG_INPUT_POLLDEV is not set
6167 +
6168 +#
6169 +# Userland interfaces
6170 +#
6171 +CONFIG_INPUT_MOUSEDEV=y
6172 +CONFIG_INPUT_MOUSEDEV_PSAUX=y
6173 +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
6174 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
6175 +# CONFIG_INPUT_JOYDEV is not set
6176 +# CONFIG_INPUT_EVDEV is not set
6177 +# CONFIG_INPUT_EVBUG is not set
6178 +
6179 +#
6180 +# Input Device Drivers
6181 +#
6182 +CONFIG_INPUT_KEYBOARD=y
6183 +CONFIG_KEYBOARD_ATKBD=y
6184 +# CONFIG_KEYBOARD_SUNKBD is not set
6185 +# CONFIG_KEYBOARD_LKKBD is not set
6186 +# CONFIG_KEYBOARD_XTKBD is not set
6187 +# CONFIG_KEYBOARD_NEWTON is not set
6188 +# CONFIG_KEYBOARD_STOWAWAY is not set
6189 +# CONFIG_KEYBOARD_GPIO is not set
6190 +CONFIG_INPUT_MOUSE=y
6191 +CONFIG_MOUSE_PS2=y
6192 +CONFIG_MOUSE_PS2_ALPS=y
6193 +CONFIG_MOUSE_PS2_LOGIPS2PP=y
6194 +CONFIG_MOUSE_PS2_SYNAPTICS=y
6195 +CONFIG_MOUSE_PS2_LIFEBOOK=y
6196 +CONFIG_MOUSE_PS2_TRACKPOINT=y
6197 +# CONFIG_MOUSE_PS2_ELANTECH is not set
6198 +# CONFIG_MOUSE_PS2_TOUCHKIT is not set
6199 +# CONFIG_MOUSE_SERIAL is not set
6200 +# CONFIG_MOUSE_APPLETOUCH is not set
6201 +# CONFIG_MOUSE_BCM5974 is not set
6202 +# CONFIG_MOUSE_VSXXXAA is not set
6203 +# CONFIG_MOUSE_GPIO is not set
6204 +# CONFIG_INPUT_JOYSTICK is not set
6205 +# CONFIG_INPUT_TABLET is not set
6206 +# CONFIG_INPUT_TOUCHSCREEN is not set
6207 +# CONFIG_INPUT_MISC is not set
6208 +
6209 +#
6210 +# Hardware I/O ports
6211 +#
6212 +CONFIG_SERIO=y
6213 +CONFIG_SERIO_SERPORT=y
6214 +CONFIG_SERIO_LIBPS2=y
6215 +# CONFIG_SERIO_RAW is not set
6216 +# CONFIG_GAMEPORT is not set
6217 +
6218 +#
6219 +# Character devices
6220 +#
6221 +CONFIG_VT=y
6222 +CONFIG_CONSOLE_TRANSLATIONS=y
6223 +CONFIG_VT_CONSOLE=y
6224 +CONFIG_HW_CONSOLE=y
6225 +# CONFIG_VT_HW_CONSOLE_BINDING is not set
6226 +CONFIG_DEVKMEM=y
6227 +# CONFIG_SERIAL_NONSTANDARD is not set
6228 +
6229 +#
6230 +# Serial drivers
6231 +#
6232 +CONFIG_SERIAL_8250=y
6233 +# CONFIG_SERIAL_8250_CONSOLE is not set
6234 +CONFIG_SERIAL_8250_NR_UARTS=4
6235 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4
6236 +# CONFIG_SERIAL_8250_EXTENDED is not set
6237 +
6238 +#
6239 +# Non-8250 serial port support
6240 +#
6241 +CONFIG_SERIAL_SAMSUNG=y
6242 +CONFIG_SERIAL_SAMSUNG_UARTS=4
6243 +# CONFIG_SERIAL_SAMSUNG_DEBUG is not set
6244 +CONFIG_SERIAL_SAMSUNG_CONSOLE=y
6245 +CONFIG_SERIAL_S3C6400=y
6246 +CONFIG_SERIAL_CORE=y
6247 +CONFIG_SERIAL_CORE_CONSOLE=y
6248 +CONFIG_UNIX98_PTYS=y
6249 +CONFIG_LEGACY_PTYS=y
6250 +CONFIG_LEGACY_PTY_COUNT=256
6251 +# CONFIG_IPMI_HANDLER is not set
6252 +CONFIG_HW_RANDOM=y
6253 +# CONFIG_NVRAM is not set
6254 +# CONFIG_R3964 is not set
6255 +# CONFIG_RAW_DRIVER is not set
6256 +# CONFIG_TCG_TPM is not set
6257 +CONFIG_I2C=y
6258 +CONFIG_I2C_BOARDINFO=y
6259 +CONFIG_I2C_CHARDEV=y
6260 +CONFIG_I2C_HELPER_AUTO=y
6261 +
6262 +#
6263 +# I2C Hardware Bus support
6264 +#
6265 +
6266 +#
6267 +# I2C system bus drivers (mostly embedded / system-on-chip)
6268 +#
6269 +# CONFIG_I2C_GPIO is not set
6270 +# CONFIG_I2C_OCORES is not set
6271 +CONFIG_I2C_S3C2410=y
6272 +# CONFIG_I2C_SIMTEC is not set
6273 +
6274 +#
6275 +# External I2C/SMBus adapter drivers
6276 +#
6277 +# CONFIG_I2C_PARPORT_LIGHT is not set
6278 +# CONFIG_I2C_TAOS_EVM is not set
6279 +
6280 +#
6281 +# Other I2C/SMBus bus drivers
6282 +#
6283 +# CONFIG_I2C_PCA_PLATFORM is not set
6284 +# CONFIG_I2C_STUB is not set
6285 +
6286 +#
6287 +# Miscellaneous I2C Chip support
6288 +#
6289 +# CONFIG_DS1682 is not set
6290 +CONFIG_AT24=y
6291 +# CONFIG_SENSORS_EEPROM is not set
6292 +# CONFIG_SENSORS_PCF8574 is not set
6293 +# CONFIG_PCF8575 is not set
6294 +# CONFIG_SENSORS_PCA9539 is not set
6295 +# CONFIG_SENSORS_PCF8591 is not set
6296 +# CONFIG_TPS65010 is not set
6297 +# CONFIG_SENSORS_MAX6875 is not set
6298 +# CONFIG_SENSORS_TSL2550 is not set
6299 +# CONFIG_I2C_DEBUG_CORE is not set
6300 +# CONFIG_I2C_DEBUG_ALGO is not set
6301 +# CONFIG_I2C_DEBUG_BUS is not set
6302 +# CONFIG_I2C_DEBUG_CHIP is not set
6303 +# CONFIG_SPI is not set
6304 +CONFIG_ARCH_REQUIRE_GPIOLIB=y
6305 +CONFIG_GPIOLIB=y
6306 +# CONFIG_DEBUG_GPIO is not set
6307 +# CONFIG_GPIO_SYSFS is not set
6308 +
6309 +#
6310 +# I2C GPIO expanders:
6311 +#
6312 +# CONFIG_GPIO_MAX732X is not set
6313 +# CONFIG_GPIO_PCA953X is not set
6314 +# CONFIG_GPIO_PCF857X is not set
6315 +
6316 +#
6317 +# PCI GPIO expanders:
6318 +#
6319 +
6320 +#
6321 +# SPI GPIO expanders:
6322 +#
6323 +# CONFIG_W1 is not set
6324 +# CONFIG_POWER_SUPPLY is not set
6325 +CONFIG_HWMON=y
6326 +# CONFIG_HWMON_VID is not set
6327 +# CONFIG_SENSORS_AD7414 is not set
6328 +# CONFIG_SENSORS_AD7418 is not set
6329 +# CONFIG_SENSORS_ADM1021 is not set
6330 +# CONFIG_SENSORS_ADM1025 is not set
6331 +# CONFIG_SENSORS_ADM1026 is not set
6332 +# CONFIG_SENSORS_ADM1029 is not set
6333 +# CONFIG_SENSORS_ADM1031 is not set
6334 +# CONFIG_SENSORS_ADM9240 is not set
6335 +# CONFIG_SENSORS_ADT7470 is not set
6336 +# CONFIG_SENSORS_ADT7473 is not set
6337 +# CONFIG_SENSORS_ATXP1 is not set
6338 +# CONFIG_SENSORS_DS1621 is not set
6339 +# CONFIG_SENSORS_F71805F is not set
6340 +# CONFIG_SENSORS_F71882FG is not set
6341 +# CONFIG_SENSORS_F75375S is not set
6342 +# CONFIG_SENSORS_GL518SM is not set
6343 +# CONFIG_SENSORS_GL520SM is not set
6344 +# CONFIG_SENSORS_IT87 is not set
6345 +# CONFIG_SENSORS_LM63 is not set
6346 +# CONFIG_SENSORS_LM75 is not set
6347 +# CONFIG_SENSORS_LM77 is not set
6348 +# CONFIG_SENSORS_LM78 is not set
6349 +# CONFIG_SENSORS_LM80 is not set
6350 +# CONFIG_SENSORS_LM83 is not set
6351 +# CONFIG_SENSORS_LM85 is not set
6352 +# CONFIG_SENSORS_LM87 is not set
6353 +# CONFIG_SENSORS_LM90 is not set
6354 +# CONFIG_SENSORS_LM92 is not set
6355 +# CONFIG_SENSORS_LM93 is not set
6356 +# CONFIG_SENSORS_MAX1619 is not set
6357 +# CONFIG_SENSORS_MAX6650 is not set
6358 +# CONFIG_SENSORS_PC87360 is not set
6359 +# CONFIG_SENSORS_PC87427 is not set
6360 +# CONFIG_SENSORS_DME1737 is not set
6361 +# CONFIG_SENSORS_SMSC47M1 is not set
6362 +# CONFIG_SENSORS_SMSC47M192 is not set
6363 +# CONFIG_SENSORS_SMSC47B397 is not set
6364 +# CONFIG_SENSORS_ADS7828 is not set
6365 +# CONFIG_SENSORS_THMC50 is not set
6366 +# CONFIG_SENSORS_VT1211 is not set
6367 +# CONFIG_SENSORS_W83781D is not set
6368 +# CONFIG_SENSORS_W83791D is not set
6369 +# CONFIG_SENSORS_W83792D is not set
6370 +# CONFIG_SENSORS_W83793 is not set
6371 +# CONFIG_SENSORS_W83L785TS is not set
6372 +# CONFIG_SENSORS_W83L786NG is not set
6373 +# CONFIG_SENSORS_W83627HF is not set
6374 +# CONFIG_SENSORS_W83627EHF is not set
6375 +# CONFIG_HWMON_DEBUG_CHIP is not set
6376 +# CONFIG_THERMAL is not set
6377 +# CONFIG_THERMAL_HWMON is not set
6378 +# CONFIG_WATCHDOG is not set
6379 +
6380 +#
6381 +# Sonics Silicon Backplane
6382 +#
6383 +CONFIG_SSB_POSSIBLE=y
6384 +# CONFIG_SSB is not set
6385 +
6386 +#
6387 +# Multifunction device drivers
6388 +#
6389 +# CONFIG_MFD_CORE is not set
6390 +# CONFIG_MFD_SM501 is not set
6391 +# CONFIG_MFD_ASIC3 is not set
6392 +# CONFIG_HTC_EGPIO is not set
6393 +# CONFIG_HTC_PASIC3 is not set
6394 +# CONFIG_MFD_TMIO is not set
6395 +# CONFIG_MFD_T7L66XB is not set
6396 +# CONFIG_MFD_TC6387XB is not set
6397 +# CONFIG_MFD_TC6393XB is not set
6398 +# CONFIG_PMIC_DA903X is not set
6399 +# CONFIG_MFD_WM8400 is not set
6400 +# CONFIG_MFD_WM8350_I2C is not set
6401 +
6402 +#
6403 +# Multimedia devices
6404 +#
6405 +
6406 +#
6407 +# Multimedia core support
6408 +#
6409 +# CONFIG_VIDEO_DEV is not set
6410 +# CONFIG_VIDEO_MEDIA is not set
6411 +
6412 +#
6413 +# Multimedia drivers
6414 +#
6415 +# CONFIG_DAB is not set
6416 +
6417 +#
6418 +# Graphics support
6419 +#
6420 +# CONFIG_VGASTATE is not set
6421 +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
6422 +# CONFIG_FB is not set
6423 +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
6424 +
6425 +#
6426 +# Display device support
6427 +#
6428 +# CONFIG_DISPLAY_SUPPORT is not set
6429 +
6430 +#
6431 +# Console display driver support
6432 +#
6433 +# CONFIG_VGA_CONSOLE is not set
6434 +CONFIG_DUMMY_CONSOLE=y
6435 +# CONFIG_SOUND is not set
6436 +CONFIG_HID_SUPPORT=y
6437 +CONFIG_HID=y
6438 +CONFIG_HID_DEBUG=y
6439 +# CONFIG_HIDRAW is not set
6440 +# CONFIG_HID_PID is not set
6441 +
6442 +#
6443 +# Special HID drivers
6444 +#
6445 +# CONFIG_HID_COMPAT is not set
6446 +CONFIG_USB_SUPPORT=y
6447 +CONFIG_USB_ARCH_HAS_HCD=y
6448 +# CONFIG_USB_ARCH_HAS_OHCI is not set
6449 +# CONFIG_USB_ARCH_HAS_EHCI is not set
6450 +# CONFIG_USB is not set
6451 +
6452 +#
6453 +# Enable Host or Gadget support to see Inventra options
6454 +#
6455 +
6456 +#
6457 +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
6458 +#
6459 +# CONFIG_USB_GADGET is not set
6460 +CONFIG_MMC=y
6461 +CONFIG_MMC_DEBUG=y
6462 +CONFIG_MMC_UNSAFE_RESUME=y
6463 +
6464 +#
6465 +# MMC/SD/SDIO Card Drivers
6466 +#
6467 +CONFIG_MMC_BLOCK=y
6468 +CONFIG_MMC_BLOCK_BOUNCE=y
6469 +CONFIG_SDIO_UART=y
6470 +# CONFIG_MMC_TEST is not set
6471 +
6472 +#
6473 +# MMC/SD/SDIO Host Controller Drivers
6474 +#
6475 +CONFIG_MMC_SDHCI=y
6476 +CONFIG_MMC_SDHCI_S3C=y
6477 +# CONFIG_MEMSTICK is not set
6478 +# CONFIG_ACCESSIBILITY is not set
6479 +# CONFIG_NEW_LEDS is not set
6480 +CONFIG_RTC_LIB=y
6481 +# CONFIG_RTC_CLASS is not set
6482 +# CONFIG_DMADEVICES is not set
6483 +
6484 +#
6485 +# Voltage and Current regulators
6486 +#
6487 +# CONFIG_REGULATOR is not set
6488 +# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
6489 +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
6490 +# CONFIG_REGULATOR_BQ24022 is not set
6491 +# CONFIG_UIO is not set
6492 +
6493 +#
6494 +# File systems
6495 +#
6496 +CONFIG_EXT2_FS=y
6497 +# CONFIG_EXT2_FS_XATTR is not set
6498 +# CONFIG_EXT2_FS_XIP is not set
6499 +CONFIG_EXT3_FS=y
6500 +CONFIG_EXT3_FS_XATTR=y
6501 +CONFIG_EXT3_FS_POSIX_ACL=y
6502 +CONFIG_EXT3_FS_SECURITY=y
6503 +# CONFIG_EXT4_FS is not set
6504 +CONFIG_JBD=y
6505 +CONFIG_FS_MBCACHE=y
6506 +# CONFIG_REISERFS_FS is not set
6507 +# CONFIG_JFS_FS is not set
6508 +CONFIG_FS_POSIX_ACL=y
6509 +CONFIG_FILE_LOCKING=y
6510 +# CONFIG_XFS_FS is not set
6511 +# CONFIG_GFS2_FS is not set
6512 +CONFIG_DNOTIFY=y
6513 +CONFIG_INOTIFY=y
6514 +CONFIG_INOTIFY_USER=y
6515 +# CONFIG_QUOTA is not set
6516 +# CONFIG_AUTOFS_FS is not set
6517 +# CONFIG_AUTOFS4_FS is not set
6518 +# CONFIG_FUSE_FS is not set
6519 +CONFIG_GENERIC_ACL=y
6520 +
6521 +#
6522 +# CD-ROM/DVD Filesystems
6523 +#
6524 +# CONFIG_ISO9660_FS is not set
6525 +# CONFIG_UDF_FS is not set
6526 +
6527 +#
6528 +# DOS/FAT/NT Filesystems
6529 +#
6530 +# CONFIG_MSDOS_FS is not set
6531 +# CONFIG_VFAT_FS is not set
6532 +# CONFIG_NTFS_FS is not set
6533 +
6534 +#
6535 +# Pseudo filesystems
6536 +#
6537 +CONFIG_PROC_FS=y
6538 +CONFIG_PROC_SYSCTL=y
6539 +CONFIG_PROC_PAGE_MONITOR=y
6540 +CONFIG_SYSFS=y
6541 +CONFIG_TMPFS=y
6542 +CONFIG_TMPFS_POSIX_ACL=y
6543 +# CONFIG_HUGETLB_PAGE is not set
6544 +# CONFIG_CONFIGFS_FS is not set
6545 +
6546 +#
6547 +# Miscellaneous filesystems
6548 +#
6549 +# CONFIG_ADFS_FS is not set
6550 +# CONFIG_AFFS_FS is not set
6551 +# CONFIG_HFS_FS is not set
6552 +# CONFIG_HFSPLUS_FS is not set
6553 +# CONFIG_BEFS_FS is not set
6554 +# CONFIG_BFS_FS is not set
6555 +# CONFIG_EFS_FS is not set
6556 +CONFIG_CRAMFS=y
6557 +# CONFIG_VXFS_FS is not set
6558 +# CONFIG_MINIX_FS is not set
6559 +# CONFIG_OMFS_FS is not set
6560 +# CONFIG_HPFS_FS is not set
6561 +# CONFIG_QNX4FS_FS is not set
6562 +CONFIG_ROMFS_FS=y
6563 +# CONFIG_SYSV_FS is not set
6564 +# CONFIG_UFS_FS is not set
6565 +
6566 +#
6567 +# Partition Types
6568 +#
6569 +# CONFIG_PARTITION_ADVANCED is not set
6570 +CONFIG_MSDOS_PARTITION=y
6571 +# CONFIG_NLS is not set
6572 +
6573 +#
6574 +# Kernel hacking
6575 +#
6576 +# CONFIG_PRINTK_TIME is not set
6577 +CONFIG_ENABLE_WARN_DEPRECATED=y
6578 +CONFIG_ENABLE_MUST_CHECK=y
6579 +CONFIG_FRAME_WARN=1024
6580 +CONFIG_MAGIC_SYSRQ=y
6581 +# CONFIG_UNUSED_SYMBOLS is not set
6582 +# CONFIG_DEBUG_FS is not set
6583 +# CONFIG_HEADERS_CHECK is not set
6584 +CONFIG_DEBUG_KERNEL=y
6585 +# CONFIG_DEBUG_SHIRQ is not set
6586 +CONFIG_DETECT_SOFTLOCKUP=y
6587 +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
6588 +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
6589 +CONFIG_SCHED_DEBUG=y
6590 +# CONFIG_SCHEDSTATS is not set
6591 +# CONFIG_TIMER_STATS is not set
6592 +# CONFIG_DEBUG_OBJECTS is not set
6593 +# CONFIG_SLUB_DEBUG_ON is not set
6594 +# CONFIG_SLUB_STATS is not set
6595 +CONFIG_DEBUG_RT_MUTEXES=y
6596 +CONFIG_DEBUG_PI_LIST=y
6597 +# CONFIG_RT_MUTEX_TESTER is not set
6598 +CONFIG_DEBUG_SPINLOCK=y
6599 +CONFIG_DEBUG_MUTEXES=y
6600 +# CONFIG_DEBUG_LOCK_ALLOC is not set
6601 +# CONFIG_PROVE_LOCKING is not set
6602 +# CONFIG_LOCK_STAT is not set
6603 +CONFIG_DEBUG_SPINLOCK_SLEEP=y
6604 +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
6605 +# CONFIG_DEBUG_KOBJECT is not set
6606 +CONFIG_DEBUG_BUGVERBOSE=y
6607 +CONFIG_DEBUG_INFO=y
6608 +# CONFIG_DEBUG_VM is not set
6609 +# CONFIG_DEBUG_WRITECOUNT is not set
6610 +CONFIG_DEBUG_MEMORY_INIT=y
6611 +# CONFIG_DEBUG_LIST is not set
6612 +# CONFIG_DEBUG_SG is not set
6613 +CONFIG_FRAME_POINTER=y
6614 +# CONFIG_BOOT_PRINTK_DELAY is not set
6615 +# CONFIG_RCU_TORTURE_TEST is not set
6616 +# CONFIG_RCU_CPU_STALL_DETECTOR is not set
6617 +# CONFIG_BACKTRACE_SELF_TEST is not set
6618 +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
6619 +# CONFIG_FAULT_INJECTION is not set
6620 +# CONFIG_LATENCYTOP is not set
6621 +CONFIG_SYSCTL_SYSCALL_CHECK=y
6622 +CONFIG_HAVE_FUNCTION_TRACER=y
6623 +
6624 +#
6625 +# Tracers
6626 +#
6627 +# CONFIG_FUNCTION_TRACER is not set
6628 +# CONFIG_SCHED_TRACER is not set
6629 +# CONFIG_CONTEXT_SWITCH_TRACER is not set
6630 +# CONFIG_BOOT_TRACER is not set
6631 +# CONFIG_STACK_TRACER is not set
6632 +# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
6633 +# CONFIG_SAMPLES is not set
6634 +CONFIG_HAVE_ARCH_KGDB=y
6635 +# CONFIG_KGDB is not set
6636 +CONFIG_DEBUG_USER=y
6637 +CONFIG_DEBUG_ERRORS=y
6638 +# CONFIG_DEBUG_STACK_USAGE is not set
6639 +CONFIG_DEBUG_LL=y
6640 +# CONFIG_DEBUG_ICEDCC is not set
6641 +CONFIG_DEBUG_S3C_PORT=y
6642 +CONFIG_DEBUG_S3C_UART=0
6643 +
6644 +#
6645 +# Security options
6646 +#
6647 +# CONFIG_KEYS is not set
6648 +# CONFIG_SECURITY is not set
6649 +# CONFIG_SECURITYFS is not set
6650 +# CONFIG_SECURITY_FILE_CAPABILITIES is not set
6651 +# CONFIG_CRYPTO is not set
6652 +
6653 +#
6654 +# Library routines
6655 +#
6656 +CONFIG_BITREVERSE=y
6657 +# CONFIG_CRC_CCITT is not set
6658 +# CONFIG_CRC16 is not set
6659 +# CONFIG_CRC_T10DIF is not set
6660 +# CONFIG_CRC_ITU_T is not set
6661 +CONFIG_CRC32=y
6662 +# CONFIG_CRC7 is not set
6663 +# CONFIG_LIBCRC32C is not set
6664 +CONFIG_ZLIB_INFLATE=y
6665 +CONFIG_PLIST=y
6666 +CONFIG_HAS_IOMEM=y
6667 +CONFIG_HAS_DMA=y
6668 Index: linux-2.6.28/arch/arm/Kconfig
6669 ===================================================================
6670 --- linux-2.6.28.orig/arch/arm/Kconfig 2008-12-25 00:26:37.000000000 +0100
6671 +++ linux-2.6.28/arch/arm/Kconfig 2009-01-02 00:01:56.000000000 +0100
6672 @@ -498,6 +498,13 @@ config ARCH_S3C2410
6673 BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
6674 the Samsung SMDK2410 development board (and derivatives).
6675
6676 +config ARCH_S3C64XX
6677 + bool "Samsung S3C64XX"
6678 + select GENERIC_GPIO
6679 + select HAVE_CLK
6680 + help
6681 + Samsung S3C64XX series based systems
6682 +
6683 config ARCH_SHARK
6684 bool "Shark"
6685 select ISA
6686 @@ -590,6 +597,7 @@ source "arch/arm/mach-orion5x/Kconfig"
6687 source "arch/arm/mach-kirkwood/Kconfig"
6688
6689 source "arch/arm/plat-s3c24xx/Kconfig"
6690 +source "arch/arm/plat-s3c64xx/Kconfig"
6691 source "arch/arm/plat-s3c/Kconfig"
6692
6693 if ARCH_S3C2410
6694 @@ -601,6 +609,11 @@ source "arch/arm/mach-s3c2442/Kconfig"
6695 source "arch/arm/mach-s3c2443/Kconfig"
6696 endif
6697
6698 +if ARCH_S3C64XX
6699 +source "arch/arm/mach-s3c6400/Kconfig"
6700 +source "arch/arm/mach-s3c6410/Kconfig"
6701 +endif
6702 +
6703 source "arch/arm/mach-lh7a40x/Kconfig"
6704
6705 source "arch/arm/mach-imx/Kconfig"
6706 @@ -1256,6 +1269,8 @@ source "drivers/usb/Kconfig"
6707
6708 source "drivers/uwb/Kconfig"
6709
6710 +source "drivers/ar6000/Kconfig"
6711 +
6712 source "drivers/mmc/Kconfig"
6713
6714 source "drivers/memstick/Kconfig"
6715 @@ -1268,6 +1283,8 @@ source "drivers/rtc/Kconfig"
6716
6717 source "drivers/dma/Kconfig"
6718
6719 +source "drivers/android/Kconfig"
6720 +
6721 source "drivers/dca/Kconfig"
6722
6723 source "drivers/auxdisplay/Kconfig"
6724 Index: linux-2.6.28/arch/arm/kernel/vmlinux.lds.S
6725 ===================================================================
6726 --- linux-2.6.28.orig/arch/arm/kernel/vmlinux.lds.S 2008-12-25 00:26:37.000000000 +0100
6727 +++ linux-2.6.28/arch/arm/kernel/vmlinux.lds.S 2009-01-02 00:01:56.000000000 +0100
6728 @@ -106,6 +106,8 @@ SECTIONS
6729 *(.got) /* Global offset table */
6730 }
6731
6732 + NOTES
6733 +
6734 RODATA
6735
6736 _etext = .; /* End of text and rodata section */
6737 Index: linux-2.6.28/arch/arm/mach-s3c2410/clock.c
6738 ===================================================================
6739 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/clock.c 2008-12-25 00:26:37.000000000 +0100
6740 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
6741 @@ -1,276 +0,0 @@
6742 -/* linux/arch/arm/mach-s3c2410/clock.c
6743 - *
6744 - * Copyright (c) 2006 Simtec Electronics
6745 - * Ben Dooks <ben@simtec.co.uk>
6746 - *
6747 - * S3C2410,S3C2440,S3C2442 Clock control support
6748 - *
6749 - * This program is free software; you can redistribute it and/or modify
6750 - * it under the terms of the GNU General Public License as published by
6751 - * the Free Software Foundation; either version 2 of the License, or
6752 - * (at your option) any later version.
6753 - *
6754 - * This program is distributed in the hope that it will be useful,
6755 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
6756 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
6757 - * GNU General Public License for more details.
6758 - *
6759 - * You should have received a copy of the GNU General Public License
6760 - * along with this program; if not, write to the Free Software
6761 - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
6762 -*/
6763 -
6764 -#include <linux/init.h>
6765 -#include <linux/module.h>
6766 -#include <linux/kernel.h>
6767 -#include <linux/list.h>
6768 -#include <linux/errno.h>
6769 -#include <linux/err.h>
6770 -#include <linux/sysdev.h>
6771 -#include <linux/clk.h>
6772 -#include <linux/mutex.h>
6773 -#include <linux/delay.h>
6774 -#include <linux/serial_core.h>
6775 -#include <linux/io.h>
6776 -
6777 -#include <asm/mach/map.h>
6778 -
6779 -#include <mach/hardware.h>
6780 -
6781 -#include <plat/regs-serial.h>
6782 -#include <mach/regs-clock.h>
6783 -#include <mach/regs-gpio.h>
6784 -
6785 -#include <plat/s3c2410.h>
6786 -#include <plat/clock.h>
6787 -#include <plat/cpu.h>
6788 -
6789 -int s3c2410_clkcon_enable(struct clk *clk, int enable)
6790 -{
6791 - unsigned int clocks = clk->ctrlbit;
6792 - unsigned long clkcon;
6793 -
6794 - clkcon = __raw_readl(S3C2410_CLKCON);
6795 -
6796 - if (enable)
6797 - clkcon |= clocks;
6798 - else
6799 - clkcon &= ~clocks;
6800 -
6801 - /* ensure none of the special function bits set */
6802 - clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER);
6803 -
6804 - __raw_writel(clkcon, S3C2410_CLKCON);
6805 -
6806 - return 0;
6807 -}
6808 -
6809 -static int s3c2410_upll_enable(struct clk *clk, int enable)
6810 -{
6811 - unsigned long clkslow = __raw_readl(S3C2410_CLKSLOW);
6812 - unsigned long orig = clkslow;
6813 -
6814 - if (enable)
6815 - clkslow &= ~S3C2410_CLKSLOW_UCLK_OFF;
6816 - else
6817 - clkslow |= S3C2410_CLKSLOW_UCLK_OFF;
6818 -
6819 - __raw_writel(clkslow, S3C2410_CLKSLOW);
6820 -
6821 - /* if we started the UPLL, then allow to settle */
6822 -
6823 - if (enable && (orig & S3C2410_CLKSLOW_UCLK_OFF))
6824 - udelay(200);
6825 -
6826 - return 0;
6827 -}
6828 -
6829 -/* standard clock definitions */
6830 -
6831 -static struct clk init_clocks_disable[] = {
6832 - {
6833 - .name = "nand",
6834 - .id = -1,
6835 - .parent = &clk_h,
6836 - .enable = s3c2410_clkcon_enable,
6837 - .ctrlbit = S3C2410_CLKCON_NAND,
6838 - }, {
6839 - .name = "sdi",
6840 - .id = -1,
6841 - .parent = &clk_p,
6842 - .enable = s3c2410_clkcon_enable,
6843 - .ctrlbit = S3C2410_CLKCON_SDI,
6844 - }, {
6845 - .name = "adc",
6846 - .id = -1,
6847 - .parent = &clk_p,
6848 - .enable = s3c2410_clkcon_enable,
6849 - .ctrlbit = S3C2410_CLKCON_ADC,
6850 - }, {
6851 - .name = "i2c",
6852 - .id = -1,
6853 - .parent = &clk_p,
6854 - .enable = s3c2410_clkcon_enable,
6855 - .ctrlbit = S3C2410_CLKCON_IIC,
6856 - }, {
6857 - .name = "iis",
6858 - .id = -1,
6859 - .parent = &clk_p,
6860 - .enable = s3c2410_clkcon_enable,
6861 - .ctrlbit = S3C2410_CLKCON_IIS,
6862 - }, {
6863 - .name = "spi",
6864 - .id = -1,
6865 - .parent = &clk_p,
6866 - .enable = s3c2410_clkcon_enable,
6867 - .ctrlbit = S3C2410_CLKCON_SPI,
6868 - }
6869 -};
6870 -
6871 -static struct clk init_clocks[] = {
6872 - {
6873 - .name = "lcd",
6874 - .id = -1,
6875 - .parent = &clk_h,
6876 - .enable = s3c2410_clkcon_enable,
6877 - .ctrlbit = S3C2410_CLKCON_LCDC,
6878 - }, {
6879 - .name = "gpio",
6880 - .id = -1,
6881 - .parent = &clk_p,
6882 - .enable = s3c2410_clkcon_enable,
6883 - .ctrlbit = S3C2410_CLKCON_GPIO,
6884 - }, {
6885 - .name = "usb-host",
6886 - .id = -1,
6887 - .parent = &clk_h,
6888 - .enable = s3c2410_clkcon_enable,
6889 - .ctrlbit = S3C2410_CLKCON_USBH,
6890 - }, {
6891 - .name = "usb-device",
6892 - .id = -1,
6893 - .parent = &clk_h,
6894 - .enable = s3c2410_clkcon_enable,
6895 - .ctrlbit = S3C2410_CLKCON_USBD,
6896 - }, {
6897 - .name = "timers",
6898 - .id = -1,
6899 - .parent = &clk_p,
6900 - .enable = s3c2410_clkcon_enable,
6901 - .ctrlbit = S3C2410_CLKCON_PWMT,
6902 - }, {
6903 - .name = "uart",
6904 - .id = 0,
6905 - .parent = &clk_p,
6906 - .enable = s3c2410_clkcon_enable,
6907 - .ctrlbit = S3C2410_CLKCON_UART0,
6908 - }, {
6909 - .name = "uart",
6910 - .id = 1,
6911 - .parent = &clk_p,
6912 - .enable = s3c2410_clkcon_enable,
6913 - .ctrlbit = S3C2410_CLKCON_UART1,
6914 - }, {
6915 - .name = "uart",
6916 - .id = 2,
6917 - .parent = &clk_p,
6918 - .enable = s3c2410_clkcon_enable,
6919 - .ctrlbit = S3C2410_CLKCON_UART2,
6920 - }, {
6921 - .name = "rtc",
6922 - .id = -1,
6923 - .parent = &clk_p,
6924 - .enable = s3c2410_clkcon_enable,
6925 - .ctrlbit = S3C2410_CLKCON_RTC,
6926 - }, {
6927 - .name = "watchdog",
6928 - .id = -1,
6929 - .parent = &clk_p,
6930 - .ctrlbit = 0,
6931 - }, {
6932 - .name = "usb-bus-host",
6933 - .id = -1,
6934 - .parent = &clk_usb_bus,
6935 - }, {
6936 - .name = "usb-bus-gadget",
6937 - .id = -1,
6938 - .parent = &clk_usb_bus,
6939 - },
6940 -};
6941 -
6942 -/* s3c2410_baseclk_add()
6943 - *
6944 - * Add all the clocks used by the s3c2410 or compatible CPUs
6945 - * such as the S3C2440 and S3C2442.
6946 - *
6947 - * We cannot use a system device as we are needed before any
6948 - * of the init-calls that initialise the devices are actually
6949 - * done.
6950 -*/
6951 -
6952 -int __init s3c2410_baseclk_add(void)
6953 -{
6954 - unsigned long clkslow = __raw_readl(S3C2410_CLKSLOW);
6955 - unsigned long clkcon = __raw_readl(S3C2410_CLKCON);
6956 - struct clk *clkp;
6957 - struct clk *xtal;
6958 - int ret;
6959 - int ptr;
6960 -
6961 - clk_upll.enable = s3c2410_upll_enable;
6962 -
6963 - if (s3c24xx_register_clock(&clk_usb_bus) < 0)
6964 - printk(KERN_ERR "failed to register usb bus clock\n");
6965 -
6966 - /* register clocks from clock array */
6967 -
6968 - clkp = init_clocks;
6969 - for (ptr = 0; ptr < ARRAY_SIZE(init_clocks); ptr++, clkp++) {
6970 - /* ensure that we note the clock state */
6971 -
6972 - clkp->usage = clkcon & clkp->ctrlbit ? 1 : 0;
6973 -
6974 - ret = s3c24xx_register_clock(clkp);
6975 - if (ret < 0) {
6976 - printk(KERN_ERR "Failed to register clock %s (%d)\n",
6977 - clkp->name, ret);
6978 - }
6979 - }
6980 -
6981 - /* We must be careful disabling the clocks we are not intending to
6982 - * be using at boot time, as subsystems such as the LCD which do
6983 - * their own DMA requests to the bus can cause the system to lockup
6984 - * if they where in the middle of requesting bus access.
6985 - *
6986 - * Disabling the LCD clock if the LCD is active is very dangerous,
6987 - * and therefore the bootloader should be careful to not enable
6988 - * the LCD clock if it is not needed.
6989 - */
6990 -
6991 - /* install (and disable) the clocks we do not need immediately */
6992 -
6993 - clkp = init_clocks_disable;
6994 - for (ptr = 0; ptr < ARRAY_SIZE(init_clocks_disable); ptr++, clkp++) {
6995 -
6996 - ret = s3c24xx_register_clock(clkp);
6997 - if (ret < 0) {
6998 - printk(KERN_ERR "Failed to register clock %s (%d)\n",
6999 - clkp->name, ret);
7000 - }
7001 -
7002 - s3c2410_clkcon_enable(clkp, 0);
7003 - }
7004 -
7005 - /* show the clock-slow value */
7006 -
7007 - xtal = clk_get(NULL, "xtal");
7008 -
7009 - printk("CLOCK: Slow mode (%ld.%ld MHz), %s, MPLL %s, UPLL %s\n",
7010 - print_mhz(clk_get_rate(xtal) /
7011 - ( 2 * S3C2410_CLKSLOW_GET_SLOWVAL(clkslow))),
7012 - (clkslow & S3C2410_CLKSLOW_SLOW) ? "slow" : "fast",
7013 - (clkslow & S3C2410_CLKSLOW_MPLL_OFF) ? "off" : "on",
7014 - (clkslow & S3C2410_CLKSLOW_UCLK_OFF) ? "off" : "on");
7015 -
7016 - return 0;
7017 -}
7018 Index: linux-2.6.28/arch/arm/mach-s3c2410/dma.c
7019 ===================================================================
7020 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/dma.c 2008-12-25 00:26:37.000000000 +0100
7021 +++ linux-2.6.28/arch/arm/mach-s3c2410/dma.c 2009-01-02 00:01:56.000000000 +0100
7022 @@ -25,12 +25,12 @@
7023
7024 #include <plat/regs-serial.h>
7025 #include <mach/regs-gpio.h>
7026 -#include <asm/plat-s3c/regs-ac97.h>
7027 +#include <plat/regs-ac97.h>
7028 #include <mach/regs-mem.h>
7029 #include <mach/regs-lcd.h>
7030 #include <mach/regs-sdi.h>
7031 #include <asm/plat-s3c24xx/regs-iis.h>
7032 -#include <asm/plat-s3c24xx/regs-spi.h>
7033 +#include <plat/regs-spi.h>
7034
7035 static struct s3c24xx_dma_map __initdata s3c2410_dma_mappings[] = {
7036 [DMACH_XD0] = {
7037 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/fiq_ipc_gta02.h
7038 ===================================================================
7039 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7040 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/fiq_ipc_gta02.h 2009-01-02 00:01:56.000000000 +0100
7041 @@ -0,0 +1,60 @@
7042 +#ifndef _LINUX_FIQ_IPC_H
7043 +#define _LINUX_FIQ_IPC_H
7044 +
7045 +/*
7046 + * this defines the struct which is used to communicate between the FIQ
7047 + * world and the normal linux kernel world. One of these structs is
7048 + * statically defined for you in the monolithic kernel so the FIQ ISR code
7049 + * can safely touch it any any time.
7050 + *
7051 + * You also want to include this file in your kernel module that wants to
7052 + * communicate with your FIQ code. Add any kinds of vars that are used by
7053 + * the FIQ ISR and the module in here.
7054 + *
7055 + * To get you started there is just an int that is incremented every FIQ
7056 + * you can remove this when you are ready to customize, but it is useful
7057 + * for testing
7058 + */
7059 +
7060 +#include <mach/pwm.h>
7061 +#include <plat/regs-timer.h>
7062 +
7063 +extern u8 fiq_ready;
7064 +
7065 +enum hdq_bitbang_states {
7066 + HDQB_IDLE = 0,
7067 + HDQB_TX_BREAK,
7068 + HDQB_TX_BREAK_RECOVERY,
7069 + HDQB_ADS_CALC,
7070 + HDQB_ADS_LOW,
7071 + HDQB_ADS_HIGH,
7072 + HDQB_WAIT_RX,
7073 + HDQB_DATA_RX_LOW,
7074 + HDQB_DATA_RX_HIGH,
7075 + HDQB_WAIT_TX,
7076 +};
7077 +
7078 +struct fiq_ipc {
7079 + /* vibrator */
7080 + unsigned long vib_gpio_pin; /* which pin to meddle with */
7081 + u8 vib_pwm; /* 0 = OFF -- will ensure GPIO deasserted and stop FIQ */
7082 + u8 vib_pwm_latched;
7083 +
7084 + /* hdq */
7085 + u8 hdq_probed; /* nonzero after HDQ driver probed */
7086 + struct mutex hdq_lock; /* if you want to use hdq, you have to take lock */
7087 + unsigned long hdq_gpio_pin; /* GTA02 = GPD14 which pin to meddle with */
7088 + u8 hdq_ads; /* b7..b6 = register address, b0 = r/w */
7089 + u8 hdq_tx_data; /* data to tx for write action */
7090 + u8 hdq_rx_data; /* data received in read action */
7091 + u8 hdq_request_ctr; /* incremented by "user" to request a transfer */
7092 + u8 hdq_transaction_ctr; /* incremented after each transfer */
7093 + u8 hdq_error; /* 0 = no error */
7094 +};
7095 +
7096 +/* actual definition lives in arch/arm/mach-s3c2440/fiq_c_isr.c */
7097 +extern struct fiq_ipc fiq_ipc;
7098 +extern unsigned long _fiq_count_fiqs;
7099 +extern void fiq_kick(void); /* provoke a FIQ "immediately" */
7100 +
7101 +#endif /* _LINUX_FIQ_IPC_H */
7102 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gpio-core.h
7103 ===================================================================
7104 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7105 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gpio-core.h 2009-01-02 00:01:56.000000000 +0100
7106 @@ -0,0 +1,21 @@
7107 +/* arch/arm/mach-s3c24100/include/mach/gpio-core.h
7108 + *
7109 + * Copyright 2008 Openmoko, Inc.
7110 + * Copyright 2008 Simtec Electronics
7111 + * Ben Dooks <ben@simtec.co.uk>
7112 + * http://armlinux.simtec.co.uk/
7113 + *
7114 + * S3C2410 - GPIO core support
7115 + *
7116 + * This program is free software; you can redistribute it and/or modify
7117 + * it under the terms of the GNU General Public License version 2 as
7118 + * published by the Free Software Foundation.
7119 +*/
7120 +
7121 +#ifndef __ASM_ARCH_GPIO_CORE_H
7122 +#define __ASM_ARCH_GPIO_CORE_H __FILE__
7123 +
7124 +/* currently we just include the platform support */
7125 +#include <plat/gpio-core.h>
7126 +
7127 +#endif /* __ASM_ARCH_GPIO_CORE_H */
7128 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gpio.h
7129 ===================================================================
7130 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/gpio.h 2008-12-25 00:26:37.000000000 +0100
7131 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gpio.h 2009-01-02 00:01:56.000000000 +0100
7132 @@ -15,4 +15,14 @@
7133 #define gpio_set_value __gpio_set_value
7134 #define gpio_cansleep __gpio_cansleep
7135
7136 +/* These two defines should be removed as soon as the
7137 + * generic irq handling makes it upstream */
7138 +#include <mach/hardware.h>
7139 +#define gpio_to_irq(gpio) s3c2410_gpio_getirq(gpio)
7140 +#define irq_to_gpio(irq) s3c2410_gpio_irq2pin(irq)
7141 +/* -- cut to here when generic irq makes it */
7142 +
7143 #include <asm-generic/gpio.h>
7144 +#include <mach/gpio-nrs.h>
7145 +
7146 +#define S3C_GPIO_END (S3C2410_GPIO_BANKH + 32)
7147 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gpio-nrs.h
7148 ===================================================================
7149 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7150 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gpio-nrs.h 2009-01-02 00:01:56.000000000 +0100
7151 @@ -0,0 +1,23 @@
7152 +/* arch/arm/mach-s3c2410/include/mach/gpio-nrs.h
7153 + *
7154 + * Copyright (c) 2008 Simtec Electronics
7155 + * http://armlinux.simtec.co.uk/
7156 + * Ben Dooks <ben@simtec.co.uk>
7157 + *
7158 + * S3C2410 - GPIO bank numbering
7159 + *
7160 + * This program is free software; you can redistribute it and/or modify
7161 + * it under the terms of the GNU General Public License version 2 as
7162 + * published by the Free Software Foundation.
7163 +*/
7164 +
7165 +#define S3C2410_GPIONO(bank,offset) ((bank) + (offset))
7166 +
7167 +#define S3C2410_GPIO_BANKA (32*0)
7168 +#define S3C2410_GPIO_BANKB (32*1)
7169 +#define S3C2410_GPIO_BANKC (32*2)
7170 +#define S3C2410_GPIO_BANKD (32*3)
7171 +#define S3C2410_GPIO_BANKE (32*4)
7172 +#define S3C2410_GPIO_BANKF (32*5)
7173 +#define S3C2410_GPIO_BANKG (32*6)
7174 +#define S3C2410_GPIO_BANKH (32*7)
7175 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gta01.h
7176 ===================================================================
7177 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7178 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gta01.h 2009-01-02 00:01:56.000000000 +0100
7179 @@ -0,0 +1,74 @@
7180 +#ifndef _GTA01_H
7181 +#define _GTA01_H
7182 +
7183 +#include <mach/regs-gpio.h>
7184 +#include <mach/irqs.h>
7185 +
7186 +/* Different hardware revisions, passed in ATAG_REVISION by u-boot */
7187 +#define GTA01v3_SYSTEM_REV 0x00000130
7188 +#define GTA01v4_SYSTEM_REV 0x00000140
7189 +#define GTA01Bv2_SYSTEM_REV 0x00000220
7190 +#define GTA01Bv3_SYSTEM_REV 0x00000230
7191 +#define GTA01Bv4_SYSTEM_REV 0x00000240
7192 +
7193 +/* Backlight */
7194 +
7195 +extern void gta01bl_deferred_resume(void);
7196 +
7197 +struct gta01bl_machinfo {
7198 + unsigned int default_intensity;
7199 + unsigned int max_intensity;
7200 + unsigned int limit_mask;
7201 + unsigned int defer_resume_backlight;
7202 +};
7203 +
7204 +/* Definitions common to all revisions */
7205 +#define GTA01_GPIO_BACKLIGHT S3C2410_GPB0
7206 +#define GTA01_GPIO_GPS_PWRON S3C2410_GPB1
7207 +#define GTA01_GPIO_MODEM_RST S3C2410_GPB6
7208 +#define GTA01_GPIO_MODEM_ON S3C2410_GPB7
7209 +#define GTA01_GPIO_LCD_RESET S3C2410_GPC6
7210 +#define GTA01_GPIO_PMU_IRQ S3C2410_GPG8
7211 +#define GTA01_GPIO_JACK_INSERT S3C2410_GPF4
7212 +#define GTA01_GPIO_nSD_DETECT S3C2410_GPF5
7213 +#define GTA01_GPIO_AUX_KEY S3C2410_GPF6
7214 +#define GTA01_GPIO_HOLD_KEY S3C2410_GPF7
7215 +#define GTA01_GPIO_VIBRATOR_ON S3C2410_GPG11
7216 +
7217 +#define GTA01_IRQ_MODEM IRQ_EINT1
7218 +#define GTA01_IRQ_JACK_INSERT IRQ_EINT4
7219 +#define GTA01_IRQ_nSD_DETECT IRQ_EINT5
7220 +#define GTA01_IRQ_AUX_KEY IRQ_EINT6
7221 +#define GTA01_IRQ_PCF50606 IRQ_EINT16
7222 +
7223 +/* GTA01v3 */
7224 +#define GTA01v3_GPIO_nGSM_EN S3C2410_GPG9
7225 +
7226 +/* GTA01v4 */
7227 +#define GTA01_GPIO_MODEM_DNLOAD S3C2410_GPG0
7228 +
7229 +/* GTA01Bv2 */
7230 +#define GTA01Bv2_GPIO_nGSM_EN S3C2410_GPF2
7231 +#define GTA01Bv2_GPIO_VIBRATOR_ON S3C2410_GPB10
7232 +
7233 +/* GTA01Bv3 */
7234 +#define GTA01_GPIO_GPS_EN_3V3 S3C2410_GPG9
7235 +
7236 +#define GTA01_GPIO_SDMMC_ON S3C2410_GPB2
7237 +#define GTA01_GPIO_BT_EN S3C2410_GPB5
7238 +#define GTA01_GPIO_AB_DETECT S3C2410_GPB8
7239 +#define GTA01_GPIO_USB_PULLUP S3C2410_GPB9
7240 +#define GTA01_GPIO_USB_ATTACH S3C2410_GPB10
7241 +
7242 +#define GTA01_GPIO_GPS_EN_2V8 S3C2410_GPG9
7243 +#define GTA01_GPIO_GPS_EN_3V S3C2410_GPG10
7244 +#define GTA01_GPIO_GPS_RESET S3C2410_GPC0
7245 +
7246 +/* GTA01Bv4 */
7247 +#define GTA01Bv4_GPIO_nNAND_WP S3C2410_GPA16
7248 +#define GTA01Bv4_GPIO_VIBRATOR_ON S3C2410_GPB3
7249 +#define GTA01Bv4_GPIO_PMU_IRQ S3C2410_GPG1
7250 +
7251 +#define GTA01Bv4_IRQ_PCF50606 IRQ_EINT9
7252 +
7253 +#endif /* _GTA01_H */
7254 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gta02.h
7255 ===================================================================
7256 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7257 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gta02.h 2009-01-02 00:01:56.000000000 +0100
7258 @@ -0,0 +1,113 @@
7259 +#ifndef _GTA02_H
7260 +#define _GTA02_H
7261 +
7262 +#include <mach/regs-gpio.h>
7263 +#include <mach/irqs.h>
7264 +
7265 +#include <linux/mfd/pcf50633/core.h>
7266 +
7267 +/* Different hardware revisions, passed in ATAG_REVISION by u-boot */
7268 +#define GTA02v1_SYSTEM_REV 0x00000310
7269 +#define GTA02v2_SYSTEM_REV 0x00000320
7270 +#define GTA02v3_SYSTEM_REV 0x00000330
7271 +#define GTA02v4_SYSTEM_REV 0x00000340
7272 +#define GTA02v5_SYSTEM_REV 0x00000350
7273 +#define GTA02v6_SYSTEM_REV 0x00000360
7274 +
7275 +#define GTA02_GPIO_n3DL_GSM S3C2410_GPA13 /* v1 + v2 + v3 only */
7276 +
7277 +#define GTA02_GPIO_PWR_LED1 S3C2410_GPB0
7278 +#define GTA02_GPIO_PWR_LED2 S3C2410_GPB1
7279 +#define GTA02_GPIO_AUX_LED S3C2410_GPB2
7280 +#define GTA02_GPIO_VIBRATOR_ON S3C2410_GPB3
7281 +#define GTA02v1_GPIO_GPS_PWRON S3C2410_GPB4 /* v1 only */
7282 +#define GTA02_GPIO_MODEM_RST S3C2410_GPB5
7283 +#define GTA02_GPIO_BT_EN S3C2410_GPB6
7284 +#define GTA02_GPIO_MODEM_ON S3C2410_GPB7
7285 +#define GTA02v1_GPIO_EN_AGPS3V S3C2410_GPB8 /* v1 only */
7286 +#define GTA02_GPIO_EXTINT8 S3C2410_GPB8
7287 +#define GTA02_GPIO_USB_PULLUP S3C2410_GPB9
7288 +
7289 +#define GTA02v1_GPIO_nGPS_RST S3C2410_GPC0 /* v1 only */
7290 +#define GTA02v12_GPIO_PIO3 S3C2410_GPC5 /* v1 + v2 only */
7291 +#define GTA02_GPIO_PIO5 S3C2410_GPC5 /* v3 + v4 only */
7292 +#define GTA02_GPIO_LCD_RESET S3C2410_GPC6 /* v1 + v2 only */
7293 +#define GTA02v12_GPIO_PIO2 S3C2410_GPC7 /* v1 + v2 only */
7294 +#define GTA02v2_nUSB_FLT S3C2410_GPC9 /* v2 only */
7295 +#define GTA02v2_nUSB_OC S3C2410_GPC10 /* v2 only */
7296 +#define GTA02v2_nGSM_OC S3C2410_GPC12 /* v2 only */
7297 +
7298 +#define GTA02v3_GPIO_nG1_CS S3C2410_GPD12 /* v3 + v4 only */
7299 +#define GTA02v3_GPIO_nG2_CS S3C2410_GPD13 /* v3 + v4 only */
7300 +#define GTA02v5_GPIO_HDQ S3C2410_GPD14 /* v5 + */
7301 +
7302 +#define GTA02_GPIO_nG1_INT S3C2410_GPF0
7303 +#define GTA02_GPIO_IO1 S3C2410_GPF1
7304 +#define GTA02v1_GPIO_nG2_INT S3C2410_GPF2 /* v1 only */
7305 +#define GTA02_GPIO_PIO_2 S3C2410_GPF2 /* v2 + v3 + v4 only */
7306 +#define GTA02_GPIO_JACK_INSERT S3C2410_GPF4
7307 +#define GTA02v1_GPIO_nSD_DETECT S3C2410_GPF5 /* v1 only */
7308 +#define GTA02_GPIO_WLAN_GPIO1 S3C2410_GPF5 /* v2 + v3 + v4 only */
7309 +#define GTA02_GPIO_AUX_KEY S3C2410_GPF6
7310 +#define GTA02_GPIO_HOLD_KEY S3C2410_GPF7
7311 +
7312 +#define GTA02_GPIO_3D_IRQ S3C2410_GPG4
7313 +#define GTA02v1_GPIO_nG1_CS S3C2410_GPG8 /* v1 only */
7314 +#define GTA02v2_GPIO_nG2_INT S3C2410_GPG8 /* v2 + v3 + v4 only */
7315 +#define GTA02v3_GPIO_nUSB_OC S3C2410_GPG9 /* v3 + v4 only */
7316 +#define GTA02v3_GPIO_nUSB_FLT S3C2410_GPG10 /* v3 + v4 only */
7317 +#define GTA02v1_GPIO_nG2_CS S3C2410_GPG11 /* v1 only */
7318 +#define GTA02v3_GPIO_nGSM_OC S3C2410_GPG11 /* v3 + v4 only */
7319 +
7320 +#define GTA02v1_GPIO_3D_RESET S3C2440_GPJ0 /* v1 only */
7321 +#define GTA02v2_GPIO_BAT_ID S3C2440_GPJ0 /* v2 only */
7322 +#define GTA02v1_GPIO_WLAN_GPIO8 S3C2440_GPJ1 /* v1 only */
7323 +#define GTA02_GPIO_AMP_SHUT S3C2440_GPJ1 /* v2 + v3 + v4 only */
7324 +#define GTA02v1_GPIO_WLAN_GPIO10 S3C2440_GPJ2
7325 +#define GTA02_GPIO_HP_IN S3C2440_GPJ2 /* v2 + v3 + v4 only */
7326 +#define GTA02v1_GPIO_KEEPACT S3C2440_GPJ3 /* v1 only */
7327 +#define GTA02_GPIO_INT0 S3C2440_GPJ3 /* v2 + v3 + v4 only */
7328 +#define GTA02_GPIO_nGSM_EN S3C2440_GPJ4
7329 +#define GTA02_GPIO_3D_RESET S3C2440_GPJ5
7330 +#define GTA02_GPIO_nDL_GSM S3C2440_GPJ6 /* v4 + v5 only */
7331 +#define GTA02_GPIO_WLAN_GPIO0 S3C2440_GPJ7
7332 +#define GTA02v1_GPIO_BAT_ID S3C2440_GPJ8
7333 +#define GTA02_GPIO_KEEPACT S3C2440_GPJ8
7334 +#define GTA02v1_GPIO_AMP_SHUT S3C2440_GPJ9 /* v1 only */
7335 +#define GTA02v2_nG1_CS S3C2440_GPJ9 /* v2 only */
7336 +#define GTA02v1_GPIO_HP_IN S3C2440_GPJ10
7337 +#define GTA02v2_nG2_CS S3C2440_GPJ10 /* v2 only */
7338 +#define GTA02v1_GPIO_INT0 S3C2440_GPJ11 /* v1 only */
7339 +#define GTA02_CHIP_PWD S3C2440_GPJ11 /* v2 + v3 + v4 only */
7340 +#define GTA02v1_GPIO_nGSM_EN S3C2440_GPJ12 /* v1 only */
7341 +#define GTA02_GPIO_nWLAN_RESET S3C2440_GPJ12 /* v2 + v3 + v4 only */
7342 +
7343 +#define GTA02_IRQ_GSENSOR_1 IRQ_EINT0
7344 +#define GTA02_IRQ_MODEM IRQ_EINT1
7345 +#define GTA02v1_IRQ_GSENSOR_2 IRQ_EINT2 /* v1 only */
7346 +#define GTA02_IRQ_PIO_2 IRQ_EINT2 /* v2 + v3 + v4 only */
7347 +#define GTA02_IRQ_nJACK_INSERT IRQ_EINT4
7348 +#define GTA02v1_IRQ_nSD_CD IRQ_EINT5 /* v1 only */
7349 +#define GTA02_IRQ_WLAN_GPIO1 IRQ_EINT5
7350 +#define GTA02_IRQ_AUX IRQ_EINT6
7351 +#define GTA02_IRQ_nHOLD IRQ_EINT7
7352 +#define GTA02v1_IRQ_nSIM_CD IRQ_EINT8 /* v1 only */
7353 +#define GTA02_IRQ_PCF50633 IRQ_EINT9
7354 +#define GTA02_IRQ_3D IRQ_EINT12
7355 +#define GTA02_IRQ_GSENSOR_2 IRQ_EINT16 /* v2 + v3 + v4 only */
7356 +#define GTA02v3_IRQ_nUSB_OC IRQ_EINT17 /* v3 + v4 only */
7357 +#define GTA02v3_IRQ_nUSB_FLT IRQ_EINT18 /* v3 + v4 only */
7358 +#define GTA02v3_IRQ_nGSM_OC IRQ_EINT19 /* v3 + v4 only */
7359 +
7360 +/* returns 00 000 on GTA02 A5 and earlier, A6 returns 01 001 */
7361 +#define GTA02_PCB_ID1_0 S3C2410_GPC13
7362 +#define GTA02_PCB_ID1_1 S3C2410_GPC15
7363 +#define GTA02_PCB_ID1_2 S3C2410_GPD0
7364 +#define GTA02_PCB_ID2_0 S3C2410_GPD3
7365 +#define GTA02_PCB_ID2_1 S3C2410_GPD4
7366 +
7367 +int gta02_get_pcb_revision(void);
7368 +
7369 +extern struct pcf50633_platform_data gta02_pcf_pdata;
7370 +
7371 +#endif /* _GTA02_H */
7372 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gta02-pm-wlan.h
7373 ===================================================================
7374 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7375 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/gta02-pm-wlan.h 2009-01-02 00:01:56.000000000 +0100
7376 @@ -0,0 +1 @@
7377 +void gta02_wlan_power(int on);
7378 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/irqs.h
7379 ===================================================================
7380 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/irqs.h 2008-12-25 00:26:37.000000000 +0100
7381 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/irqs.h 2009-01-02 00:01:56.000000000 +0100
7382 @@ -12,9 +12,9 @@
7383 #ifndef __ASM_ARCH_IRQS_H
7384 #define __ASM_ARCH_IRQS_H __FILE__
7385
7386 -#ifndef __ASM_ARM_IRQ_H
7387 -#error "Do not include this directly, instead #include <asm/irq.h>"
7388 -#endif
7389 +//#ifndef __ASM_ARM_IRQ_H
7390 +//#error "Do not include this directly, instead #include <asm/irq.h>"
7391 +//#endif
7392
7393 /* we keep the first set of CPU IRQs out of the range of
7394 * the ISA space, so that the PC104 has them to itself
7395 @@ -84,7 +84,7 @@
7396 #define IRQ_EINT22 S3C2410_IRQ(50)
7397 #define IRQ_EINT23 S3C2410_IRQ(51)
7398
7399 -
7400 +#define IRQ_EINT_BIT(x) ((x) - IRQ_EINT4 + 4)
7401 #define IRQ_EINT(x) (((x) >= 4) ? (IRQ_EINT4 + (x) - 4) : (IRQ_EINT0 + (x)))
7402
7403 #define IRQ_LCD_FIFO S3C2410_IRQ(52)
7404 @@ -134,6 +134,8 @@
7405 #define IRQ_S3C2443_HSMMC S3C2410_IRQ(20) /* IRQ_SDI */
7406 #define IRQ_S3C2443_NAND S3C2410_IRQ(24) /* reserved */
7407
7408 +#define IRQ_HSMMC0 IRQ_S3C2443_HSMMC
7409 +
7410 #define IRQ_S3C2443_LCD1 S3C2410_IRQSUB(14)
7411 #define IRQ_S3C2443_LCD2 S3C2410_IRQSUB(15)
7412 #define IRQ_S3C2443_LCD3 S3C2410_IRQSUB(16)
7413 @@ -155,12 +157,47 @@
7414 #define IRQ_S3C2443_AC97 S3C2410_IRQSUB(28)
7415
7416 #ifdef CONFIG_CPU_S3C2443
7417 -#define NR_IRQS (IRQ_S3C2443_AC97+1)
7418 +#define _NR_IRQS (IRQ_S3C2443_AC97+1)
7419 #else
7420 -#define NR_IRQS (IRQ_S3C2440_AC97+1)
7421 +#define _NR_IRQS (IRQ_S3C2440_AC97+1)
7422 #endif
7423
7424 +/* compatibility define. */
7425 +#define IRQ_UART3 IRQ_S3C2443_UART3
7426 +#define IRQ_S3CUART_RX3 IRQ_S3C2443_RX3
7427 +#define IRQ_S3CUART_TX3 IRQ_S3C2443_TX3
7428 +#define IRQ_S3CUART_ERR3 IRQ_S3C2443_ERR3
7429 +
7430 /* Our FIQs are routable from IRQ_EINT0 to IRQ_ADCPARENT */
7431 #define FIQ_START IRQ_EINT0
7432
7433 +
7434 +/*
7435 + * The next 16 interrupts are for board specific purposes. Since
7436 + * the kernel can only run on one machine at a time, we can re-use
7437 + * these. If you need more, increase IRQ_BOARD_END, but keep it
7438 + * within sensible limits.
7439 + */
7440 +#define IRQ_BOARD_START _NR_IRQS
7441 +#define IRQ_BOARD_END (_NR_IRQS + 10)
7442 +
7443 +#if defined(CONFIG_MACH_NEO1973_GTA02)
7444 +#define NR_IRQS (IRQ_BOARD_END)
7445 +#else
7446 +#define NR_IRQS (IRQ_BOARD_START)
7447 +#endif
7448 +
7449 +/* Neo1973 GTA02 interrupts */
7450 +#define NEO1973_GTA02_IRQ(x) (IRQ_BOARD_START + (x))
7451 +#define IRQ_GLAMO(x) NEO1973_GTA02_IRQ(x)
7452 +#define IRQ_GLAMO_HOSTBUS IRQ_GLAMO(0)
7453 +#define IRQ_GLAMO_JPEG IRQ_GLAMO(1)
7454 +#define IRQ_GLAMO_MPEG IRQ_GLAMO(2)
7455 +#define IRQ_GLAMO_MPROC1 IRQ_GLAMO(3)
7456 +#define IRQ_GLAMO_MPROC0 IRQ_GLAMO(4)
7457 +#define IRQ_GLAMO_CMDQUEUE IRQ_GLAMO(5)
7458 +#define IRQ_GLAMO_2D IRQ_GLAMO(6)
7459 +#define IRQ_GLAMO_MMC IRQ_GLAMO(7)
7460 +#define IRQ_GLAMO_RISC IRQ_GLAMO(8)
7461 +
7462 #endif /* __ASM_ARCH_IRQ_H */
7463 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/map.h
7464 ===================================================================
7465 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/map.h 2008-12-25 00:26:37.000000000 +0100
7466 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/map.h 2009-01-02 00:01:56.000000000 +0100
7467 @@ -13,34 +13,20 @@
7468 #ifndef __ASM_ARCH_MAP_H
7469 #define __ASM_ARCH_MAP_H
7470
7471 +#include <plat/map-base.h>
7472 #include <plat/map.h>
7473
7474 #define S3C2410_ADDR(x) S3C_ADDR(x)
7475
7476 -/* interrupt controller is the first thing we put in, to make
7477 - * the assembly code for the irq detection easier
7478 - */
7479 -#define S3C24XX_VA_IRQ S3C_VA_IRQ
7480 -#define S3C2410_PA_IRQ (0x4A000000)
7481 -#define S3C24XX_SZ_IRQ SZ_1M
7482 -
7483 -/* memory controller registers */
7484 -#define S3C24XX_VA_MEMCTRL S3C_VA_MEM
7485 -#define S3C2410_PA_MEMCTRL (0x48000000)
7486 -#define S3C24XX_SZ_MEMCTRL SZ_1M
7487 -
7488 /* USB host controller */
7489 #define S3C2410_PA_USBHOST (0x49000000)
7490 -#define S3C24XX_SZ_USBHOST SZ_1M
7491
7492 /* DMA controller */
7493 #define S3C2410_PA_DMA (0x4B000000)
7494 #define S3C24XX_SZ_DMA SZ_1M
7495
7496 /* Clock and Power management */
7497 -#define S3C24XX_VA_CLKPWR S3C_VA_SYS
7498 #define S3C2410_PA_CLKPWR (0x4C000000)
7499 -#define S3C24XX_SZ_CLKPWR SZ_1M
7500
7501 /* LCD controller */
7502 #define S3C2410_PA_LCD (0x4D000000)
7503 @@ -48,48 +34,12 @@
7504
7505 /* NAND flash controller */
7506 #define S3C2410_PA_NAND (0x4E000000)
7507 -#define S3C24XX_SZ_NAND SZ_1M
7508 -
7509 -/* UARTs */
7510 -#define S3C24XX_VA_UART S3C_VA_UART
7511 -#define S3C2410_PA_UART (0x50000000)
7512 -#define S3C24XX_SZ_UART SZ_1M
7513 -
7514 -/* Timers */
7515 -#define S3C24XX_VA_TIMER S3C_VA_TIMER
7516 -#define S3C2410_PA_TIMER (0x51000000)
7517 -#define S3C24XX_SZ_TIMER SZ_1M
7518 -
7519 -/* USB Device port */
7520 -#define S3C2410_PA_USBDEV (0x52000000)
7521 -#define S3C24XX_SZ_USBDEV SZ_1M
7522 -
7523 -/* Watchdog */
7524 -#define S3C24XX_VA_WATCHDOG S3C_VA_WATCHDOG
7525 -#define S3C2410_PA_WATCHDOG (0x53000000)
7526 -#define S3C24XX_SZ_WATCHDOG SZ_1M
7527
7528 /* IIC hardware controller */
7529 #define S3C2410_PA_IIC (0x54000000)
7530 -#define S3C24XX_SZ_IIC SZ_1M
7531
7532 /* IIS controller */
7533 #define S3C2410_PA_IIS (0x55000000)
7534 -#define S3C24XX_SZ_IIS SZ_1M
7535 -
7536 -/* GPIO ports */
7537 -
7538 -/* the calculation for the VA of this must ensure that
7539 - * it is the same distance apart from the UART in the
7540 - * phsyical address space, as the initial mapping for the IO
7541 - * is done as a 1:1 maping. This puts it (currently) at
7542 - * 0xFA800000, which is not in the way of any current mapping
7543 - * by the base system.
7544 -*/
7545 -
7546 -#define S3C2410_PA_GPIO (0x56000000)
7547 -#define S3C24XX_VA_GPIO ((S3C2410_PA_GPIO - S3C24XX_PA_UART) + S3C24XX_VA_UART)
7548 -#define S3C24XX_SZ_GPIO SZ_1M
7549
7550 /* RTC */
7551 #define S3C2410_PA_RTC (0x57000000)
7552 @@ -97,15 +47,12 @@
7553
7554 /* ADC */
7555 #define S3C2410_PA_ADC (0x58000000)
7556 -#define S3C24XX_SZ_ADC SZ_1M
7557
7558 /* SPI */
7559 #define S3C2410_PA_SPI (0x59000000)
7560 -#define S3C24XX_SZ_SPI SZ_1M
7561
7562 /* SDI */
7563 #define S3C2410_PA_SDI (0x5A000000)
7564 -#define S3C24XX_SZ_SDI SZ_1M
7565
7566 /* CAMIF */
7567 #define S3C2440_PA_CAMIF (0x4F000000)
7568 @@ -120,13 +67,6 @@
7569 #define S3C2443_PA_HSMMC (0x4A800000)
7570 #define S3C2443_SZ_HSMMC (256)
7571
7572 -/* ISA style IO, for each machine to sort out mappings for, if it
7573 - * implements it. We reserve two 16M regions for ISA.
7574 - */
7575 -
7576 -#define S3C24XX_VA_ISA_WORD S3C2410_ADDR(0x02000000)
7577 -#define S3C24XX_VA_ISA_BYTE S3C2410_ADDR(0x03000000)
7578 -
7579 /* physical addresses of all the chip-select areas */
7580
7581 #define S3C2410_CS0 (0x00000000)
7582 @@ -152,27 +92,16 @@
7583 #define S3C24XX_PA_TIMER S3C2410_PA_TIMER
7584 #define S3C24XX_PA_USBDEV S3C2410_PA_USBDEV
7585 #define S3C24XX_PA_WATCHDOG S3C2410_PA_WATCHDOG
7586 -#define S3C24XX_PA_IIC S3C2410_PA_IIC
7587 #define S3C24XX_PA_IIS S3C2410_PA_IIS
7588 #define S3C24XX_PA_GPIO S3C2410_PA_GPIO
7589 #define S3C24XX_PA_RTC S3C2410_PA_RTC
7590 #define S3C24XX_PA_ADC S3C2410_PA_ADC
7591 #define S3C24XX_PA_SPI S3C2410_PA_SPI
7592 +#define S3C24XX_PA_SDI S3C2410_PA_SDI
7593 +#define S3C24XX_PA_NAND S3C2410_PA_NAND
7594
7595 -/* deal with the registers that move under the 2412/2413 */
7596 -
7597 -#if defined(CONFIG_CPU_S3C2412) || defined(CONFIG_CPU_S3C2413)
7598 -#ifndef __ASSEMBLY__
7599 -extern void __iomem *s3c24xx_va_gpio2;
7600 -#endif
7601 -#ifdef CONFIG_CPU_S3C2412_ONLY
7602 -#define S3C24XX_VA_GPIO2 (S3C24XX_VA_GPIO + 0x10)
7603 -#else
7604 -#define S3C24XX_VA_GPIO2 s3c24xx_va_gpio2
7605 -#endif
7606 -#else
7607 -#define s3c24xx_va_gpio2 S3C24XX_VA_GPIO
7608 -#define S3C24XX_VA_GPIO2 S3C24XX_VA_GPIO
7609 -#endif
7610 +#define S3C_PA_IIC S3C2410_PA_IIC
7611 +#define S3C_PA_UART S3C24XX_PA_UART
7612 +#define S3C_PA_HSMMC0 S3C2443_PA_HSMMC
7613
7614 #endif /* __ASM_ARCH_MAP_H */
7615 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/mci.h
7616 ===================================================================
7617 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7618 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/mci.h 2009-01-02 00:01:56.000000000 +0100
7619 @@ -0,0 +1,13 @@
7620 +#ifndef _ARCH_MCI_H
7621 +#define _ARCH_MCI_H
7622 +
7623 +struct s3c24xx_mci_pdata {
7624 + unsigned int gpio_detect;
7625 + unsigned int gpio_wprotect;
7626 + unsigned long ocr_avail;
7627 + unsigned int do_dma;
7628 + void (*set_power)(unsigned char power_mode,
7629 + unsigned short vdd);
7630 +};
7631 +
7632 +#endif /* _ARCH_NCI_H */
7633 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/neo1973-pm-gsm.h
7634 ===================================================================
7635 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7636 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/neo1973-pm-gsm.h 2009-01-02 00:01:56.000000000 +0100
7637 @@ -0,0 +1 @@
7638 +extern int gta_gsm_interrupts;
7639 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/pwm.h
7640 ===================================================================
7641 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7642 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/pwm.h 2009-01-02 00:01:56.000000000 +0100
7643 @@ -0,0 +1,46 @@
7644 +#ifndef __S3C2410_PWM_H
7645 +#define __S3C2410_PWM_H
7646 +
7647 +#include <linux/err.h>
7648 +#include <linux/platform_device.h>
7649 +#include <linux/clk.h>
7650 +
7651 +#include <mach/io.h>
7652 +#include <mach/hardware.h>
7653 +#include <asm/mach-types.h>
7654 +#include <plat/regs-timer.h>
7655 +#include <mach/gta01.h>
7656 +
7657 +enum pwm_timer {
7658 + PWM0,
7659 + PWM1,
7660 + PWM2,
7661 + PWM3,
7662 + PWM4
7663 +};
7664 +
7665 +struct s3c2410_pwm {
7666 + enum pwm_timer timerid;
7667 + struct clk *pclk;
7668 + unsigned long pclk_rate;
7669 + unsigned long prescaler;
7670 + unsigned long divider;
7671 + unsigned long counter;
7672 + unsigned long comparer;
7673 +};
7674 +
7675 +struct s3c24xx_pwm_platform_data{
7676 + /* callback to attach platform children (to enforce suspend / resume
7677 + * ordering */
7678 + void (*attach_child_devices)(struct device *parent_device);
7679 +};
7680 +
7681 +int s3c2410_pwm_init(struct s3c2410_pwm *s3c2410_pwm);
7682 +int s3c2410_pwm_enable(struct s3c2410_pwm *s3c2410_pwm);
7683 +int s3c2410_pwm_disable(struct s3c2410_pwm *s3c2410_pwm);
7684 +int s3c2410_pwm_start(struct s3c2410_pwm *s3c2410_pwm);
7685 +int s3c2410_pwm_stop(struct s3c2410_pwm *s3c2410_pwm);
7686 +int s3c2410_pwm_duty_cycle(int reg_value, struct s3c2410_pwm *s3c2410_pwm);
7687 +int s3c2410_pwm_dumpregs(void);
7688 +
7689 +#endif /* __S3C2410_PWM_H */
7690 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/regs-clock.h
7691 ===================================================================
7692 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/regs-clock.h 2008-12-25 00:26:37.000000000 +0100
7693 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/regs-clock.h 2009-01-02 00:01:56.000000000 +0100
7694 @@ -42,13 +42,6 @@
7695 #define S3C2410_CLKCON_IIS (1<<17)
7696 #define S3C2410_CLKCON_SPI (1<<18)
7697
7698 -#define S3C2410_PLLCON_MDIVSHIFT 12
7699 -#define S3C2410_PLLCON_PDIVSHIFT 4
7700 -#define S3C2410_PLLCON_SDIVSHIFT 0
7701 -#define S3C2410_PLLCON_MDIVMASK ((1<<(1+(19-12)))-1)
7702 -#define S3C2410_PLLCON_PDIVMASK ((1<<5)-1)
7703 -#define S3C2410_PLLCON_SDIVMASK 3
7704 -
7705 /* DCLKCON register addresses in gpio.h */
7706
7707 #define S3C2410_DCLKCON_DCLK0EN (1<<0)
7708 @@ -76,32 +69,6 @@
7709 #define S3C2410_CLKSLOW_SLOWVAL(x) (x)
7710 #define S3C2410_CLKSLOW_GET_SLOWVAL(x) ((x) & 7)
7711
7712 -#ifndef __ASSEMBLY__
7713 -
7714 -#include <asm/div64.h>
7715 -
7716 -static inline unsigned int
7717 -s3c2410_get_pll(unsigned int pllval, unsigned int baseclk)
7718 -{
7719 - unsigned int mdiv, pdiv, sdiv;
7720 - uint64_t fvco;
7721 -
7722 - mdiv = pllval >> S3C2410_PLLCON_MDIVSHIFT;
7723 - pdiv = pllval >> S3C2410_PLLCON_PDIVSHIFT;
7724 - sdiv = pllval >> S3C2410_PLLCON_SDIVSHIFT;
7725 -
7726 - mdiv &= S3C2410_PLLCON_MDIVMASK;
7727 - pdiv &= S3C2410_PLLCON_PDIVMASK;
7728 - sdiv &= S3C2410_PLLCON_SDIVMASK;
7729 -
7730 - fvco = (uint64_t)baseclk * (mdiv + 8);
7731 - do_div(fvco, (pdiv + 2) << sdiv);
7732 -
7733 - return (unsigned int)fvco;
7734 -}
7735 -
7736 -#endif /* __ASSEMBLY__ */
7737 -
7738 #if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2442)
7739
7740 /* extra registers */
7741 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/regs-gpio.h
7742 ===================================================================
7743 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/regs-gpio.h 2008-12-25 00:26:37.000000000 +0100
7744 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/regs-gpio.h 2009-01-02 00:01:56.000000000 +0100
7745 @@ -14,16 +14,7 @@
7746 #ifndef __ASM_ARCH_REGS_GPIO_H
7747 #define __ASM_ARCH_REGS_GPIO_H
7748
7749 -#define S3C2410_GPIONO(bank,offset) ((bank) + (offset))
7750 -
7751 -#define S3C2410_GPIO_BANKA (32*0)
7752 -#define S3C2410_GPIO_BANKB (32*1)
7753 -#define S3C2410_GPIO_BANKC (32*2)
7754 -#define S3C2410_GPIO_BANKD (32*3)
7755 -#define S3C2410_GPIO_BANKE (32*4)
7756 -#define S3C2410_GPIO_BANKF (32*5)
7757 -#define S3C2410_GPIO_BANKG (32*6)
7758 -#define S3C2410_GPIO_BANKH (32*7)
7759 +#include <mach/gpio-nrs.h>
7760
7761 #ifdef CONFIG_CPU_S3C2400
7762 #define S3C24XX_GPIO_BASE(x) S3C2400_GPIO_BASE(x)
7763 @@ -1053,13 +1044,6 @@
7764 #define S3C24XX_EXTINT1 S3C24XX_GPIOREG2(0x8C)
7765 #define S3C24XX_EXTINT2 S3C24XX_GPIOREG2(0x90)
7766
7767 -/* values for S3C2410_EXTINT0/1/2 */
7768 -#define S3C2410_EXTINT_LOWLEV (0x00)
7769 -#define S3C2410_EXTINT_HILEV (0x01)
7770 -#define S3C2410_EXTINT_FALLEDGE (0x02)
7771 -#define S3C2410_EXTINT_RISEEDGE (0x04)
7772 -#define S3C2410_EXTINT_BOTHEDGE (0x06)
7773 -
7774 /* interrupt filtering conrrol for EINT16..EINT23 */
7775 #define S3C2410_EINFLT0 S3C2410_GPIOREG(0x94)
7776 #define S3C2410_EINFLT1 S3C2410_GPIOREG(0x98)
7777 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/regs-sdi.h
7778 ===================================================================
7779 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/regs-sdi.h 2008-12-25 00:26:37.000000000 +0100
7780 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/regs-sdi.h 2009-01-02 00:01:56.000000000 +0100
7781 @@ -30,6 +30,7 @@
7782 #define S3C2410_SDIFSTA (0x38)
7783
7784 #define S3C2410_SDIDATA (0x3C)
7785 +#define S3C2410_SDIDATA_BYTE (0x3C)
7786 #define S3C2410_SDIIMSK (0x40)
7787
7788 #define S3C2440_SDIDATA (0x40)
7789 @@ -37,6 +38,8 @@
7790
7791 #define S3C2440_SDICON_SDRESET (1<<8)
7792 #define S3C2440_SDICON_MMCCLOCK (1<<5)
7793 +#define S3C2440_SDIDATA_BYTE (0x48)
7794 +
7795 #define S3C2410_SDICON_BYTEORDER (1<<4)
7796 #define S3C2410_SDICON_SDIOIRQ (1<<3)
7797 #define S3C2410_SDICON_RWAITEN (1<<2)
7798 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/s3c24xx-serial.h
7799 ===================================================================
7800 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7801 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/s3c24xx-serial.h 2009-01-02 00:01:56.000000000 +0100
7802 @@ -0,0 +1,5 @@
7803 +#include <linux/resume-dependency.h>
7804 +
7805 +extern void s3c24xx_serial_console_set_silence(int silence);
7806 +extern void s3c24xx_serial_register_resume_dependency(struct resume_dependency *
7807 + resume_dependency, int uart_index);
7808 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/spi-gpio.h
7809 ===================================================================
7810 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/spi-gpio.h 2008-12-25 00:26:37.000000000 +0100
7811 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/spi-gpio.h 2009-01-02 00:43:03.000000000 +0100
7812 @@ -21,7 +21,15 @@ struct s3c2410_spigpio_info {
7813 int num_chipselect;
7814 int bus_num;
7815
7816 - void (*chip_select)(struct s3c2410_spigpio_info *spi, int cs);
7817 + /*
7818 + * FIXME: board_size and board_info DO NOT belong here.
7819 + * These were already removed upstream... but we still rely on them
7820 + * so leave for now and revisit this.
7821 + */
7822 + unsigned long board_size;
7823 + struct spi_board_info *board_info;
7824 +
7825 + void (*chip_select)(struct s3c2410_spigpio_info *spi, int csid, int cs);
7826 };
7827
7828
7829 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/spi.h
7830 ===================================================================
7831 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/spi.h 2008-12-25 00:26:37.000000000 +0100
7832 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/spi.h 2009-01-02 00:01:56.000000000 +0100
7833 @@ -22,5 +22,12 @@ struct s3c2410_spi_info {
7834 void (*set_cs)(struct s3c2410_spi_info *spi, int cs, int pol);
7835 };
7836
7837 +/* Standard setup / suspend routines for SPI GPIO pins. */
7838 +
7839 +extern void s3c24xx_spi_gpiocfg_bus0_gpe11_12_13(struct s3c2410_spi_info *spi,
7840 + int enable);
7841 +
7842 +extern void s3c24xx_spi_gpiocfg_bus1_gpg5_6_7(struct s3c2410_spi_info *spi,
7843 + int enable);
7844
7845 #endif /* __ASM_ARCH_SPI_H */
7846 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/system-reset.h
7847 ===================================================================
7848 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/system-reset.h 2008-12-25 00:26:37.000000000 +0100
7849 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/system-reset.h 2009-01-02 00:01:56.000000000 +0100
7850 @@ -13,7 +13,7 @@
7851 #include <mach/hardware.h>
7852 #include <linux/io.h>
7853
7854 -#include <asm/plat-s3c/regs-watchdog.h>
7855 +#include <plat/regs-watchdog.h>
7856 #include <mach/regs-clock.h>
7857
7858 #include <linux/clk.h>
7859 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/tick.h
7860 ===================================================================
7861 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7862 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/tick.h 2009-01-02 00:01:56.000000000 +0100
7863 @@ -0,0 +1,15 @@
7864 +/* linux/arch/arm/mach-s3c2410/include/mach/tick.h
7865 + *
7866 + * Copyright 2008 Simtec Electronics
7867 + * Ben Dooks <ben@simtec.co.uk>
7868 + * http://armlinux.simtec.co.uk/
7869 + *
7870 + * S3C2410 - timer tick support
7871 + */
7872 +
7873 +#define SRCPND_TIMER4 (1<<(IRQ_TIMER4 - IRQ_EINT0))
7874 +
7875 +static inline int s3c24xx_ostimer_pending(void)
7876 +{
7877 + return __raw_readl(S3C2410_SRCPND) & SRCPND_TIMER4;
7878 +}
7879 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/timex.h
7880 ===================================================================
7881 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/timex.h 2008-12-25 00:26:37.000000000 +0100
7882 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
7883 @@ -1,26 +0,0 @@
7884 -/* arch/arm/mach-s3c2410/include/mach/timex.h
7885 - *
7886 - * Copyright (c) 2003-2005 Simtec Electronics
7887 - * Ben Dooks <ben@simtec.co.uk>
7888 - *
7889 - * S3C2410 - time parameters
7890 - *
7891 - * This program is free software; you can redistribute it and/or modify
7892 - * it under the terms of the GNU General Public License version 2 as
7893 - * published by the Free Software Foundation.
7894 -*/
7895 -
7896 -#ifndef __ASM_ARCH_TIMEX_H
7897 -#define __ASM_ARCH_TIMEX_H
7898 -
7899 -/* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it
7900 - * a variable is useless. It seems as long as we make our timers an
7901 - * exact multiple of HZ, any value that makes a 1->1 correspondence
7902 - * for the time conversion functions to/from jiffies is acceptable.
7903 -*/
7904 -
7905 -
7906 -#define CLOCK_TICK_RATE 12000000
7907 -
7908 -
7909 -#endif /* __ASM_ARCH_TIMEX_H */
7910 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/ts.h
7911 ===================================================================
7912 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
7913 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/ts.h 2009-01-02 00:01:56.000000000 +0100
7914 @@ -0,0 +1,35 @@
7915 +/* arch/arm/mach-s3c2410/include/mach/ts.h
7916 + *
7917 + * Copyright (c) 2005 Arnaud Patard <arnaud.patard@rtp-net.org>
7918 + *
7919 + *
7920 + * This program is free software; you can redistribute it and/or modify
7921 + * it under the terms of the GNU General Public License version 2 as
7922 + * published by the Free Software Foundation.
7923 + *
7924 + *
7925 + * Changelog:
7926 + * 24-Mar-2005 RTP Created file
7927 + * 03-Aug-2005 RTP Renamed to ts.h
7928 + */
7929 +
7930 +#ifndef __ASM_ARM_TS_H
7931 +#define __ASM_ARM_TS_H
7932 +
7933 +#include <linux/ts_filter.h>
7934 +
7935 +struct s3c2410_ts_mach_info {
7936 + int delay;
7937 + int presc;
7938 + /* array of pointers to filter APIs we want to use, in order
7939 + * ends on first NULL, all NULL is OK
7940 + */
7941 + struct ts_filter_api *filter_sequence[MAX_TS_FILTER_CHAIN];
7942 + /* array of configuration ints, one for each filter above */
7943 + void *filter_config[MAX_TS_FILTER_CHAIN];
7944 +};
7945 +
7946 +void set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
7947 +
7948 +#endif /* __ASM_ARM_TS_H */
7949 +
7950 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/uncompress.h
7951 ===================================================================
7952 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/uncompress.h 2008-12-25 00:26:37.000000000 +0100
7953 +++ linux-2.6.28/arch/arm/mach-s3c2410/include/mach/uncompress.h 2009-01-02 00:01:56.000000000 +0100
7954 @@ -1,3 +1,4 @@
7955 +
7956 /* arch/arm/mach-s3c2410/include/mach/uncompress.h
7957 *
7958 * Copyright (c) 2003, 2007 Simtec Electronics
7959 Index: linux-2.6.28/arch/arm/mach-s3c2410/include/mach/vmalloc.h
7960 ===================================================================
7961 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/include/mach/vmalloc.h 2008-12-25 00:26:37.000000000 +0100
7962 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
7963 @@ -1,20 +0,0 @@
7964 -/* arch/arm/mach-s3c2410/include/mach/vmalloc.h
7965 - *
7966 - * from arch/arm/mach-iop3xx/include/mach/vmalloc.h
7967 - *
7968 - * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
7969 - * http://www.simtec.co.uk/products/SWLINUX/
7970 - *
7971 - * This program is free software; you can redistribute it and/or modify
7972 - * it under the terms of the GNU General Public License version 2 as
7973 - * published by the Free Software Foundation.
7974 - *
7975 - * S3C2410 vmalloc definition
7976 -*/
7977 -
7978 -#ifndef __ASM_ARCH_VMALLOC_H
7979 -#define __ASM_ARCH_VMALLOC_H
7980 -
7981 -#define VMALLOC_END (0xE0000000)
7982 -
7983 -#endif /* __ASM_ARCH_VMALLOC_H */
7984 Index: linux-2.6.28/arch/arm/mach-s3c2410/Kconfig
7985 ===================================================================
7986 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/Kconfig 2008-12-25 00:26:37.000000000 +0100
7987 +++ linux-2.6.28/arch/arm/mach-s3c2410/Kconfig 2009-01-02 00:01:56.000000000 +0100
7988 @@ -9,6 +9,7 @@ config CPU_S3C2410
7989 depends on ARCH_S3C2410
7990 select S3C2410_CLOCK
7991 select S3C2410_GPIO
7992 + select S3C2410_PWM
7993 select CPU_LLSERIAL_S3C2410
7994 select S3C2410_PM if PM
7995 help
7996 @@ -32,11 +33,6 @@ config S3C2410_GPIO
7997 help
7998 GPIO code for S3C2410 and similar processors
7999
8000 -config S3C2410_CLOCK
8001 - bool
8002 - help
8003 - Clock code for the S3C2410, and similar processors
8004 -
8005 config SIMTEC_NOR
8006 bool
8007 help
8008 @@ -49,6 +45,12 @@ config MACH_BAST_IDE
8009 Internal node for machines with an BAST style IDE
8010 interface
8011
8012 +config S3C2410_PWM
8013 + bool
8014 + help
8015 + PWM timer code for the S3C2410, and similar processors
8016 +
8017 +
8018 menu "S3C2410 Machines"
8019
8020 config ARCH_SMDK2410
8021 @@ -84,6 +86,7 @@ config ARCH_BAST
8022 select PM_SIMTEC if PM
8023 select SIMTEC_NOR
8024 select MACH_BAST_IDE
8025 + select S3C24XX_DCLK
8026 select ISA
8027 help
8028 Say Y here if you are using the Simtec Electronics EB2410ITX
8029 @@ -121,6 +124,7 @@ config MACH_TCT_HAMMER
8030 config MACH_VR1000
8031 bool "Thorcom VR1000"
8032 select PM_SIMTEC if PM
8033 + select S3C24XX_DCLK
8034 select SIMTEC_NOR
8035 select MACH_BAST_IDE
8036 select CPU_S3C2410
8037 @@ -130,7 +134,16 @@ config MACH_VR1000
8038 config MACH_QT2410
8039 bool "QT2410"
8040 select CPU_S3C2410
8041 + select DISPLAY_JBT6K74
8042 help
8043 Say Y here if you are using the Armzone QT2410
8044
8045 +config MACH_NEO1973_GTA01
8046 + bool "FIC Neo1973 GSM Phone (GTA01 Hardware)"
8047 + select CPU_S3C2410
8048 + select MACH_NEO1973
8049 + select SENSORS_PCF50606
8050 + help
8051 + Say Y here if you are using the FIC Neo1973 GSM Phone
8052 +
8053 endmenu
8054 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-amlm5900.c
8055 ===================================================================
8056 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-amlm5900.c 2008-12-25 00:26:37.000000000 +0100
8057 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-amlm5900.c 2009-01-02 00:01:56.000000000 +0100
8058 @@ -52,6 +52,7 @@
8059 #include <mach/regs-lcd.h>
8060 #include <mach/regs-gpio.h>
8061
8062 +#include <plat/iic.h>
8063 #include <plat/devs.h>
8064 #include <plat/cpu.h>
8065
8066 @@ -150,7 +151,7 @@ static struct platform_device *amlm5900_
8067 #endif
8068 &s3c_device_adc,
8069 &s3c_device_wdt,
8070 - &s3c_device_i2c,
8071 + &s3c_device_i2c0,
8072 &s3c_device_usb,
8073 &s3c_device_rtc,
8074 &s3c_device_usbgadget,
8075 @@ -233,6 +234,7 @@ static void __init amlm5900_init(void)
8076 #ifdef CONFIG_FB_S3C2410
8077 s3c24xx_fb_set_platdata(&amlm5900_fb_info);
8078 #endif
8079 + s3c_i2c0_set_platdata(NULL);
8080 platform_add_devices(amlm5900_devices, ARRAY_SIZE(amlm5900_devices));
8081 }
8082
8083 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-bast.c
8084 ===================================================================
8085 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-bast.c 2008-12-25 00:26:37.000000000 +0100
8086 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-bast.c 2009-01-02 00:01:56.000000000 +0100
8087 @@ -44,8 +44,8 @@
8088 #include <mach/regs-mem.h>
8089 #include <mach/regs-lcd.h>
8090
8091 -#include <asm/plat-s3c/nand.h>
8092 -#include <asm/plat-s3c/iic.h>
8093 +#include <plat/nand.h>
8094 +#include <plat/iic.h>
8095 #include <mach/fb.h>
8096
8097 #include <linux/mtd/mtd.h>
8098 @@ -406,7 +406,7 @@ static struct platform_device bast_sio =
8099 * standard 100KHz i2c bus frequency
8100 */
8101
8102 -static struct s3c2410_platform_i2c bast_i2c_info = {
8103 +static struct s3c2410_platform_i2c __initdata bast_i2c_info = {
8104 .flags = 0,
8105 .slave_addr = 0x10,
8106 .bus_freq = 100*1000,
8107 @@ -553,7 +553,7 @@ static struct platform_device *bast_devi
8108 &s3c_device_usb,
8109 &s3c_device_lcd,
8110 &s3c_device_wdt,
8111 - &s3c_device_i2c,
8112 + &s3c_device_i2c0,
8113 &s3c_device_rtc,
8114 &s3c_device_nand,
8115 &bast_device_dm9k,
8116 @@ -588,7 +588,8 @@ static void __init bast_map_io(void)
8117 s3c24xx_register_clocks(bast_clocks, ARRAY_SIZE(bast_clocks));
8118
8119 s3c_device_nand.dev.platform_data = &bast_nand_info;
8120 - s3c_device_i2c.dev.platform_data = &bast_i2c_info;
8121 +
8122 + s3c_i2c0_set_platdata(&bast_i2c_info);
8123
8124 s3c24xx_init_io(bast_iodesc, ARRAY_SIZE(bast_iodesc));
8125 s3c24xx_init_clocks(0);
8126 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-gta01.c
8127 ===================================================================
8128 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
8129 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-gta01.c 2009-01-02 00:01:56.000000000 +0100
8130 @@ -0,0 +1,786 @@
8131 +/*
8132 + * linux/arch/arm/mach-s3c2410/mach-gta01.c
8133 + *
8134 + * S3C2410 Machine Support for the FIC Neo1973 GTA01
8135 + *
8136 + * Copyright (C) 2006-2007 by Openmoko, Inc.
8137 + * Author: Harald Welte <laforge@openmoko.org>
8138 + * All rights reserved.
8139 + *
8140 + * This program is free software; you can redistribute it and/or
8141 + * modify it under the terms of the GNU General Public License as
8142 + * published by the Free Software Foundation; either version 2 of
8143 + * the License, or (at your option) any later version.
8144 + *
8145 + * This program is distributed in the hope that it will be useful,
8146 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
8147 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
8148 + * GNU General Public License for more details.
8149 + *
8150 + * You should have received a copy of the GNU General Public License
8151 + * along with this program; if not, write to the Free Software
8152 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
8153 + * MA 02111-1307 USA
8154 + *
8155 + */
8156 +
8157 +#include <linux/kernel.h>
8158 +#include <linux/types.h>
8159 +#include <linux/interrupt.h>
8160 +#include <linux/list.h>
8161 +#include <linux/timer.h>
8162 +#include <linux/init.h>
8163 +#include <linux/workqueue.h>
8164 +#include <linux/platform_device.h>
8165 +#include <linux/i2c.h>
8166 +#include <linux/serial_core.h>
8167 +#include <mach/ts.h>
8168 +#include <linux/spi/spi.h>
8169 +#include <linux/spi/spi_bitbang.h>
8170 +#include <linux/mmc/mmc.h>
8171 +#include <linux/mmc/host.h>
8172 +
8173 +#include <linux/mtd/mtd.h>
8174 +#include <linux/mtd/nand.h>
8175 +#include <linux/mtd/nand_ecc.h>
8176 +#include <linux/mtd/partitions.h>
8177 +
8178 +#include <linux/mmc/host.h>
8179 +
8180 +#include <linux/pcf50606.h>
8181 +
8182 +#include <asm/mach/arch.h>
8183 +#include <asm/mach/map.h>
8184 +#include <asm/mach/irq.h>
8185 +
8186 +#include <mach/hardware.h>
8187 +#include <mach/io.h>
8188 +#include <asm/irq.h>
8189 +#include <asm/mach-types.h>
8190 +
8191 +#include <mach/regs-gpio.h>
8192 +#include <mach/fb.h>
8193 +#include <mach/mci.h>
8194 +#include <mach/spi.h>
8195 +#include <mach/spi-gpio.h>
8196 +#include <mach/usb-control.h>
8197 +
8198 +#include <mach/gta01.h>
8199 +
8200 +#include <plat/regs-serial.h>
8201 +#include <plat/nand.h>
8202 +#include <plat/devs.h>
8203 +#include <plat/cpu.h>
8204 +#include <plat/pm.h>
8205 +#include <plat/udc.h>
8206 +#include <plat/iic.h>
8207 +#include <asm/plat-s3c24xx/neo1973.h>
8208 +#include <mach/neo1973-pm-gsm.h>
8209 +
8210 +#include <linux/jbt6k74.h>
8211 +
8212 +#include <linux/ts_filter_mean.h>
8213 +#include <linux/ts_filter_median.h>
8214 +
8215 +
8216 +static struct map_desc gta01_iodesc[] __initdata = {
8217 + {
8218 + .virtual = 0xe0000000,
8219 + .pfn = __phys_to_pfn(S3C2410_CS3+0x01000000),
8220 + .length = SZ_1M,
8221 + .type = MT_DEVICE
8222 + },
8223 +};
8224 +
8225 +#define UCON S3C2410_UCON_DEFAULT
8226 +#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
8227 +#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
8228 +/* UFCON for the gta01 sets the FIFO trigger level at 4, not 8 */
8229 +#define UFCON_GTA01_PORT0 S3C2410_UFCON_FIFOMODE
8230 +
8231 +static struct s3c2410_uartcfg gta01_uartcfgs[] = {
8232 + [0] = {
8233 + .hwport = 0,
8234 + .flags = 0,
8235 + .ucon = UCON,
8236 + .ulcon = ULCON,
8237 + .ufcon = UFCON_GTA01_PORT0,
8238 + },
8239 + [1] = {
8240 + .hwport = 1,
8241 + .flags = 0,
8242 + .ucon = UCON,
8243 + .ulcon = ULCON,
8244 + .ufcon = UFCON,
8245 + },
8246 +};
8247 +
8248 +/* PMU driver info */
8249 +
8250 +static int pmu_callback(struct device *dev, unsigned int feature,
8251 + enum pmu_event event)
8252 +{
8253 + switch (feature) {
8254 + case PCF50606_FEAT_ACD:
8255 + switch (event) {
8256 + case PMU_EVT_INSERT:
8257 + pcf50606_charge_fast(pcf50606_global, 1);
8258 + break;
8259 + case PMU_EVT_REMOVE:
8260 + pcf50606_charge_fast(pcf50606_global, 0);
8261 + break;
8262 + default:
8263 + break;
8264 + }
8265 + break;
8266 + default:
8267 + break;
8268 + }
8269 +
8270 + return 0;
8271 +}
8272 +
8273 +static struct pcf50606_platform_data gta01_pcf_pdata = {
8274 + .used_features = PCF50606_FEAT_EXTON |
8275 + PCF50606_FEAT_MBC |
8276 + PCF50606_FEAT_BBC |
8277 + PCF50606_FEAT_RTC |
8278 + PCF50606_FEAT_WDT |
8279 + PCF50606_FEAT_CHGCUR |
8280 + PCF50606_FEAT_BATVOLT |
8281 + PCF50606_FEAT_BATTEMP,
8282 + .onkey_seconds_required = 3,
8283 + .cb = &pmu_callback,
8284 + .r_fix_batt = 10000,
8285 + .r_fix_batt_par = 10000,
8286 + .r_sense_milli = 220,
8287 + .rails = {
8288 + [PCF50606_REGULATOR_D1REG] = {
8289 + .name = "bt_3v15",
8290 + .voltage = {
8291 + .init = 3150,
8292 + .max = 3150,
8293 + },
8294 + },
8295 + [PCF50606_REGULATOR_D2REG] = {
8296 + .name = "gl_2v5",
8297 + .voltage = {
8298 + .init = 2500,
8299 + .max = 2500,
8300 + },
8301 + },
8302 + [PCF50606_REGULATOR_D3REG] = {
8303 + .name = "stby_1v8",
8304 + .flags = PMU_VRAIL_F_SUSPEND_ON,
8305 + .voltage = {
8306 + .init = 1800,
8307 + .max = 2100,
8308 + },
8309 + },
8310 + [PCF50606_REGULATOR_DCD] = {
8311 + .name = "gl_1v5",
8312 + .voltage = {
8313 + .init = 1500,
8314 + .max = 1500,
8315 + },
8316 + },
8317 + [PCF50606_REGULATOR_DCDE] = {
8318 + .name = "io_3v3",
8319 + .flags = PMU_VRAIL_F_SUSPEND_ON,
8320 + .voltage = {
8321 + .init = 3300,
8322 + .max = 3330,
8323 + },
8324 + },
8325 + [PCF50606_REGULATOR_DCUD] = {
8326 + .name = "core_1v8",
8327 + .flags = PMU_VRAIL_F_SUSPEND_ON,
8328 + .voltage = {
8329 + .init = 2100,
8330 + .max = 2100,
8331 + },
8332 + },
8333 + [PCF50606_REGULATOR_IOREG] = {
8334 + .name = "codec_3v3",
8335 + .voltage = {
8336 + .init = 3300,
8337 + .max = 3300,
8338 + },
8339 + },
8340 + [PCF50606_REGULATOR_LPREG] = {
8341 + .name = "lcm_3v3",
8342 + .voltage = {
8343 + .init = 3300,
8344 + .max = 3300,
8345 + },
8346 + }
8347 + },
8348 +};
8349 +
8350 +static void cfg_pmu_vrail(struct pmu_voltage_rail *vrail, char *name,
8351 + unsigned int flags, unsigned int init,
8352 + unsigned int max)
8353 +{
8354 + vrail->name = name;
8355 + vrail->flags = flags;
8356 + vrail->voltage.init = init;
8357 + vrail->voltage.max = max;
8358 +}
8359 +
8360 +static void mangle_pmu_pdata_by_system_rev(void)
8361 +{
8362 + switch (system_rev) {
8363 + case GTA01Bv4_SYSTEM_REV:
8364 + gta01_pcf_pdata.used_features |= PCF50606_FEAT_ACD;
8365 + break;
8366 + case GTA01Bv3_SYSTEM_REV:
8367 + case GTA01Bv2_SYSTEM_REV:
8368 + gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG]
8369 + .name = "user1";
8370 + gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG]
8371 + .flags &= ~PMU_VRAIL_F_SUSPEND_ON;
8372 + gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG]
8373 + .flags = PMU_VRAIL_F_UNUSED;
8374 + break;
8375 + case GTA01v4_SYSTEM_REV:
8376 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_DCUD],
8377 + "core_1v8", PMU_VRAIL_F_SUSPEND_ON, 1800, 1800);
8378 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D1REG],
8379 + "vrf_3v", 0, 3000, 3000);
8380 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG],
8381 + "vtcxo_2v8", 0, 2800, 2800);
8382 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_DCD],
8383 + "gl_3v5", 0, 3500, 3500);
8384 + break;
8385 + case GTA01v3_SYSTEM_REV:
8386 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D1REG],
8387 + "vrf_3v", 0, 3000, 3000);
8388 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D2REG],
8389 + "sd_3v3", 0, 3300, 3300);
8390 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_D3REG],
8391 + "codec_3v3", 0, 3300, 3300);
8392 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_DCD],
8393 + "gpsio_3v3", 0, 3300, 3300);
8394 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_DCUD],
8395 + "core_1v8", PMU_VRAIL_F_SUSPEND_ON, 1800, 1800);
8396 + cfg_pmu_vrail(&gta01_pcf_pdata.rails[PCF50606_REGULATOR_IOREG],
8397 + "vtcxo_2v8", 0, 2800, 2800);
8398 + break;
8399 + }
8400 +}
8401 +
8402 +static struct resource gta01_pmu_resources[] = {
8403 + [0] = {
8404 + .flags = IORESOURCE_IRQ,
8405 + .start = GTA01_IRQ_PCF50606,
8406 + .end = GTA01_IRQ_PCF50606,
8407 + },
8408 +};
8409 +
8410 +struct platform_device gta01_pmu_dev = {
8411 + .name = "pcf50606",
8412 + .num_resources = ARRAY_SIZE(gta01_pmu_resources),
8413 + .resource = gta01_pmu_resources,
8414 + .dev = {
8415 + .platform_data = &gta01_pcf_pdata,
8416 + },
8417 +};
8418 +
8419 +/* LCD driver info */
8420 +
8421 +/* Configuration for 480x640 toppoly TD028TTEC1.
8422 + * Do not mark this as __initdata or it will break! */
8423 +static struct s3c2410fb_display gta01_displays[] = {
8424 + {
8425 + .type = S3C2410_LCDCON1_TFT,
8426 + .width = 43,
8427 + .height = 58,
8428 + .xres = 480,
8429 + .yres = 640,
8430 + .bpp = 16,
8431 +
8432 + .pixclock = 40000, /* HCLK/4 */
8433 + .left_margin = 104,
8434 + .right_margin = 8,
8435 + .hsync_len = 8,
8436 + .upper_margin = 2,
8437 + .lower_margin = 16,
8438 + .vsync_len = 2,
8439 + .lcdcon5 = S3C2410_LCDCON5_FRM565 |
8440 + S3C2410_LCDCON5_INVVCLK |
8441 + S3C2410_LCDCON5_INVVLINE |
8442 + S3C2410_LCDCON5_INVVFRAME |
8443 + S3C2410_LCDCON5_PWREN |
8444 + S3C2410_LCDCON5_HWSWP,
8445 + },
8446 + {
8447 + .type = S3C2410_LCDCON1_TFT,
8448 + .width = 43,
8449 + .height = 58,
8450 + .xres = 480,
8451 + .yres = 640,
8452 + .bpp = 32,
8453 +
8454 + .pixclock = 40000, /* HCLK/4 */
8455 + .left_margin = 104,
8456 + .right_margin = 8,
8457 + .hsync_len = 8,
8458 + .upper_margin = 2,
8459 + .lower_margin = 16,
8460 + .vsync_len = 2,
8461 + .lcdcon5 = S3C2410_LCDCON5_FRM565 |
8462 + S3C2410_LCDCON5_INVVCLK |
8463 + S3C2410_LCDCON5_INVVLINE |
8464 + S3C2410_LCDCON5_INVVFRAME |
8465 + S3C2410_LCDCON5_PWREN |
8466 + S3C2410_LCDCON5_HWSWP,
8467 + },
8468 + {
8469 + .type = S3C2410_LCDCON1_TFT,
8470 + .width = 43,
8471 + .height = 58,
8472 + .xres = 240,
8473 + .yres = 320,
8474 + .bpp = 16,
8475 +
8476 + .pixclock = 40000, /* HCLK/4 */
8477 + .left_margin = 104,
8478 + .right_margin = 8,
8479 + .hsync_len = 8,
8480 + .upper_margin = 2,
8481 + .lower_margin = 16,
8482 + .vsync_len = 2,
8483 + .lcdcon5 = S3C2410_LCDCON5_FRM565 |
8484 + S3C2410_LCDCON5_INVVCLK |
8485 + S3C2410_LCDCON5_INVVLINE |
8486 + S3C2410_LCDCON5_INVVFRAME |
8487 + S3C2410_LCDCON5_PWREN |
8488 + S3C2410_LCDCON5_HWSWP,
8489 + },
8490 +};
8491 +
8492 +static struct s3c2410fb_mach_info gta01_lcd_cfg __initdata = {
8493 + .displays = gta01_displays,
8494 + .num_displays = ARRAY_SIZE(gta01_displays),
8495 + .default_display = 0,
8496 +
8497 + .lpcsel = ((0xCE6) & ~7) | 1<<4,
8498 +};
8499 +
8500 +static struct platform_device *gta01_devices[] __initdata = {
8501 + &s3c_device_usb,
8502 + &s3c_device_lcd,
8503 + &s3c_device_wdt,
8504 + &s3c_device_i2c0,
8505 + &s3c_device_iis,
8506 + &s3c_device_sdi,
8507 + &s3c_device_usbgadget,
8508 + &s3c_device_nand,
8509 + &s3c_device_ts,
8510 +};
8511 +
8512 +static struct s3c2410_nand_set gta01_nand_sets[] = {
8513 + [0] = {
8514 + .name = "neo1973-nand",
8515 + .nr_chips = 1,
8516 + .flags = S3C2410_NAND_BBT,
8517 + },
8518 +};
8519 +
8520 +static struct s3c2410_platform_nand gta01_nand_info = {
8521 + .tacls = 20,
8522 + .twrph0 = 60,
8523 + .twrph1 = 20,
8524 + .nr_sets = ARRAY_SIZE(gta01_nand_sets),
8525 + .sets = gta01_nand_sets,
8526 +};
8527 +
8528 +static void gta01_mmc_set_power(unsigned char power_mode, unsigned short vdd)
8529 +{
8530 + int bit;
8531 + int mv = 1700; /* 1.7V for MMC_VDD_165_195 */
8532 +
8533 + printk(KERN_DEBUG "mmc_set_power(power_mode=%u, vdd=%u)\n",
8534 + power_mode, vdd);
8535 +
8536 + switch (system_rev) {
8537 + case GTA01v3_SYSTEM_REV:
8538 + switch (power_mode) {
8539 + case MMC_POWER_OFF:
8540 + pcf50606_onoff_set(pcf50606_global,
8541 + PCF50606_REGULATOR_D2REG, 0);
8542 + break;
8543 + case MMC_POWER_ON:
8544 + /* translate MMC_VDD_* VDD bit to mv */
8545 + for (bit = 8; bit != 24; bit++)
8546 + if (vdd == (1 << bit))
8547 + mv += 100 * (bit - 4);
8548 + pcf50606_voltage_set(pcf50606_global,
8549 + PCF50606_REGULATOR_D2REG, mv);
8550 + pcf50606_onoff_set(pcf50606_global,
8551 + PCF50606_REGULATOR_D2REG, 1);
8552 + break;
8553 + }
8554 + break;
8555 + case GTA01v4_SYSTEM_REV:
8556 + case GTA01Bv2_SYSTEM_REV:
8557 + case GTA01Bv3_SYSTEM_REV:
8558 + case GTA01Bv4_SYSTEM_REV:
8559 + switch (power_mode) {
8560 + case MMC_POWER_OFF:
8561 + neo1973_gpb_setpin(GTA01_GPIO_SDMMC_ON, 1);
8562 + break;
8563 + case MMC_POWER_ON:
8564 + neo1973_gpb_setpin(GTA01_GPIO_SDMMC_ON, 0);
8565 + break;
8566 + }
8567 + break;
8568 + }
8569 +}
8570 +
8571 +static struct s3c24xx_mci_pdata gta01_mmc_cfg = {
8572 + .gpio_detect = GTA01_GPIO_nSD_DETECT,
8573 + .set_power = &gta01_mmc_set_power,
8574 + .ocr_avail = MMC_VDD_165_195|MMC_VDD_20_21|
8575 + MMC_VDD_21_22|MMC_VDD_22_23|MMC_VDD_23_24|
8576 + MMC_VDD_24_25|MMC_VDD_25_26|MMC_VDD_26_27|
8577 + MMC_VDD_27_28|MMC_VDD_28_29|MMC_VDD_29_30|
8578 + MMC_VDD_30_31|MMC_VDD_31_32|MMC_VDD_32_33,
8579 +};
8580 +
8581 +static void gta01_udc_command(enum s3c2410_udc_cmd_e cmd)
8582 +{
8583 + printk(KERN_DEBUG "%s(%d)\n", __func__, cmd);
8584 +
8585 + switch (cmd) {
8586 + case S3C2410_UDC_P_ENABLE:
8587 + neo1973_gpb_setpin(GTA01_GPIO_USB_PULLUP, 1);
8588 + break;
8589 + case S3C2410_UDC_P_DISABLE:
8590 + neo1973_gpb_setpin(GTA01_GPIO_USB_PULLUP, 0);
8591 + break;
8592 + default:
8593 + break;
8594 + }
8595 +}
8596 +
8597 +/* use a work queue, since I2C API inherently schedules
8598 + * and we get called in hardirq context from UDC driver */
8599 +
8600 +struct vbus_draw {
8601 + struct work_struct work;
8602 + int ma;
8603 +};
8604 +static struct vbus_draw gta01_udc_vbus_drawer;
8605 +
8606 +static void __gta01_udc_vbus_draw(struct work_struct *work)
8607 +{
8608 + /* this is a fix to work around boot-time ordering problems if the
8609 + * s3c2410_udc is initialized before the pcf50606 driver has defined
8610 + * pcf50606_global */
8611 + if (!pcf50606_global)
8612 + return;
8613 +
8614 + if (gta01_udc_vbus_drawer.ma >= 500) {
8615 + /* enable fast charge */
8616 + printk(KERN_DEBUG "udc: enabling fast charge\n");
8617 + pcf50606_charge_fast(pcf50606_global, 1);
8618 + } else {
8619 + /* disable fast charge */
8620 + printk(KERN_DEBUG "udc: disabling fast charge\n");
8621 + pcf50606_charge_fast(pcf50606_global, 0);
8622 + }
8623 +}
8624 +
8625 +static void gta01_udc_vbus_draw(unsigned int ma)
8626 +{
8627 + gta01_udc_vbus_drawer.ma = ma;
8628 + schedule_work(&gta01_udc_vbus_drawer.work);
8629 +}
8630 +
8631 +static struct s3c2410_udc_mach_info gta01_udc_cfg = {
8632 + .vbus_draw = gta01_udc_vbus_draw,
8633 +};
8634 +
8635 +
8636 +/* touchscreen configuration */
8637 +
8638 +static struct ts_filter_median_configuration gta01_ts_median_config = {
8639 + .extent = 31,
8640 + .decimation_below = 24,
8641 + .decimation_threshold = 8 * 3,
8642 + .decimation_above = 12,
8643 +};
8644 +
8645 +static struct ts_filter_mean_configuration gta01_ts_mean_config = {
8646 + .bits_filter_length = 5,
8647 + .averaging_threshold = 12
8648 +};
8649 +
8650 +static struct s3c2410_ts_mach_info gta01_ts_cfg = {
8651 + .delay = 10000,
8652 + .presc = 0xff, /* slow as we can go */
8653 + .filter_sequence = {
8654 + [0] = &ts_filter_median_api,
8655 + [1] = &ts_filter_mean_api,
8656 + },
8657 + .filter_config = {
8658 + [0] = &gta01_ts_median_config,
8659 + [1] = &gta01_ts_mean_config,
8660 + },
8661 +};
8662 +
8663 +
8664 +/* SPI */
8665 +
8666 +static void gta01_jbt6k74_reset(int devidx, int level)
8667 +{
8668 + /* empty place holder; gta01 does not yet use this */
8669 + printk(KERN_DEBUG "gta01_jbt6k74_reset\n");
8670 +}
8671 +
8672 +static void gta01_jbt6k74_resuming(int devidx)
8673 +{
8674 + gta01bl_deferred_resume();
8675 +}
8676 +
8677 +const struct jbt6k74_platform_data gta01_jbt6k74_pdata = {
8678 + .reset = gta01_jbt6k74_reset,
8679 + .resuming = gta01_jbt6k74_resuming,
8680 +};
8681 +
8682 +static struct spi_board_info gta01_spi_board_info[] = {
8683 + {
8684 + .modalias = "jbt6k74",
8685 + .platform_data = &gta01_jbt6k74_pdata,
8686 + /* controller_data */
8687 + /* irq */
8688 + .max_speed_hz = 10 * 1000 * 1000,
8689 + .bus_num = 1,
8690 + /* chip_select */
8691 + },
8692 +};
8693 +
8694 +static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int csidx, int cs)
8695 +{
8696 + switch (cs) {
8697 + case BITBANG_CS_ACTIVE:
8698 + s3c2410_gpio_setpin(S3C2410_GPG3, 0);
8699 + break;
8700 + case BITBANG_CS_INACTIVE:
8701 + s3c2410_gpio_setpin(S3C2410_GPG3, 1);
8702 + break;
8703 + }
8704 +}
8705 +
8706 +static struct s3c2410_spigpio_info spi_gpio_cfg = {
8707 + .pin_clk = S3C2410_GPG7,
8708 + .pin_mosi = S3C2410_GPG6,
8709 + .pin_miso = S3C2410_GPG5,
8710 + .board_size = ARRAY_SIZE(gta01_spi_board_info),
8711 + .board_info = gta01_spi_board_info,
8712 + .chip_select = &spi_gpio_cs,
8713 + .num_chipselect = 2, /*** Should be 1 or 2 for gta01? ***/
8714 +};
8715 +
8716 +static struct resource s3c_spi_lcm_resource[] = {
8717 + [0] = {
8718 + .start = S3C2410_GPG3,
8719 + .end = S3C2410_GPG3,
8720 + },
8721 + [1] = {
8722 + .start = S3C2410_GPG5,
8723 + .end = S3C2410_GPG5,
8724 + },
8725 + [2] = {
8726 + .start = S3C2410_GPG6,
8727 + .end = S3C2410_GPG6,
8728 + },
8729 + [3] = {
8730 + .start = S3C2410_GPG7,
8731 + .end = S3C2410_GPG7,
8732 + },
8733 +};
8734 +
8735 +struct platform_device s3c_device_spi_lcm = {
8736 + .name = "spi_s3c24xx_gpio",
8737 + .id = 1,
8738 + .num_resources = ARRAY_SIZE(s3c_spi_lcm_resource),
8739 + .resource = s3c_spi_lcm_resource,
8740 + .dev = {
8741 + .platform_data = &spi_gpio_cfg,
8742 + },
8743 +};
8744 +
8745 +static struct gta01bl_machinfo backlight_machinfo = {
8746 + .default_intensity = 1,
8747 + .max_intensity = 1,
8748 + .limit_mask = 1,
8749 + .defer_resume_backlight = 1,
8750 +};
8751 +
8752 +static struct resource gta01_bl_resources[] = {
8753 + [0] = {
8754 + .start = GTA01_GPIO_BACKLIGHT,
8755 + .end = GTA01_GPIO_BACKLIGHT,
8756 + },
8757 +};
8758 +
8759 +struct platform_device gta01_bl_dev = {
8760 + .name = "gta01-bl",
8761 + .num_resources = ARRAY_SIZE(gta01_bl_resources),
8762 + .resource = gta01_bl_resources,
8763 + .dev = {
8764 + .platform_data = &backlight_machinfo,
8765 + },
8766 +};
8767 +
8768 +static struct resource gta01_led_resources[] = {
8769 + [0] = {
8770 + .start = GTA01_GPIO_VIBRATOR_ON,
8771 + .end = GTA01_GPIO_VIBRATOR_ON,
8772 + },
8773 +};
8774 +
8775 +struct platform_device gta01_led_dev = {
8776 + .name = "neo1973-vibrator",
8777 + .num_resources = ARRAY_SIZE(gta01_led_resources),
8778 + .resource = gta01_led_resources,
8779 +};
8780 +
8781 +static struct resource gta01_button_resources[] = {
8782 + [0] = {
8783 + .start = GTA01_GPIO_AUX_KEY,
8784 + .end = GTA01_GPIO_AUX_KEY,
8785 + },
8786 + [1] = {
8787 + .start = GTA01_GPIO_HOLD_KEY,
8788 + .end = GTA01_GPIO_HOLD_KEY,
8789 + },
8790 + [2] = {
8791 + .start = GTA01_GPIO_JACK_INSERT,
8792 + .end = GTA01_GPIO_JACK_INSERT,
8793 + },
8794 + [3] = {
8795 + .start = 0,
8796 + .end = 0,
8797 + },
8798 + [4] = {
8799 + .start = 0,
8800 + .end = 0,
8801 + },
8802 +};
8803 +
8804 +struct platform_device gta01_button_dev = {
8805 + .name = "neo1973-button",
8806 + .num_resources = ARRAY_SIZE(gta01_button_resources),
8807 + .resource = gta01_button_resources,
8808 +};
8809 +
8810 +static struct platform_device gta01_pm_gsm_dev = {
8811 + .name = "neo1973-pm-gsm",
8812 +};
8813 +
8814 +/* USB */
8815 +static struct s3c2410_hcd_info gta01_usb_info = {
8816 + .port[0] = {
8817 + .flags = S3C_HCDFLG_USED,
8818 + },
8819 + .port[1] = {
8820 + .flags = 0,
8821 + },
8822 +};
8823 +
8824 +static void __init gta01_map_io(void)
8825 +{
8826 + s3c24xx_init_io(gta01_iodesc, ARRAY_SIZE(gta01_iodesc));
8827 + s3c24xx_init_clocks(12*1000*1000);
8828 + s3c24xx_init_uarts(gta01_uartcfgs, ARRAY_SIZE(gta01_uartcfgs));
8829 +}
8830 +
8831 +static irqreturn_t gta01_modem_irq(int irq, void *param)
8832 +{
8833 + printk(KERN_DEBUG "GSM wakeup interrupt (IRQ %d)\n", irq);
8834 + gta_gsm_interrupts++;
8835 + return IRQ_HANDLED;
8836 +}
8837 +
8838 +static void __init gta01_machine_init(void)
8839 +{
8840 + int rc;
8841 +
8842 + if (system_rev == GTA01v4_SYSTEM_REV ||
8843 + system_rev == GTA01Bv2_SYSTEM_REV ||
8844 + system_rev == GTA01Bv3_SYSTEM_REV ||
8845 + system_rev == GTA01Bv4_SYSTEM_REV) {
8846 + gta01_udc_cfg.udc_command = gta01_udc_command;
8847 + gta01_mmc_cfg.ocr_avail = MMC_VDD_32_33;
8848 + }
8849 +
8850 + s3c_device_usb.dev.platform_data = &gta01_usb_info;
8851 + s3c_device_nand.dev.platform_data = &gta01_nand_info;
8852 + s3c_device_sdi.dev.platform_data = &gta01_mmc_cfg;
8853 +
8854 + s3c24xx_fb_set_platdata(&gta01_lcd_cfg);
8855 +
8856 + INIT_WORK(&gta01_udc_vbus_drawer.work, __gta01_udc_vbus_draw);
8857 + s3c24xx_udc_set_platdata(&gta01_udc_cfg);
8858 + s3c_i2c0_set_platdata(NULL);
8859 + set_s3c2410ts_info(&gta01_ts_cfg);
8860 +
8861 + /* Set LCD_RESET / XRES to high */
8862 + s3c2410_gpio_cfgpin(S3C2410_GPC6, S3C2410_GPIO_OUTPUT);
8863 + s3c2410_gpio_setpin(S3C2410_GPC6, 1);
8864 +
8865 + /* SPI chip select is gpio output */
8866 + s3c2410_gpio_cfgpin(S3C2410_GPG3, S3C2410_GPIO_OUTPUT);
8867 + s3c2410_gpio_setpin(S3C2410_GPG3, 1);
8868 + platform_device_register(&s3c_device_spi_lcm);
8869 +
8870 + platform_device_register(&gta01_bl_dev);
8871 + platform_device_register(&gta01_button_dev);
8872 + platform_device_register(&gta01_pm_gsm_dev);
8873 +
8874 + switch (system_rev) {
8875 + case GTA01v3_SYSTEM_REV:
8876 + case GTA01v4_SYSTEM_REV:
8877 + /* just use the default (GTA01_IRQ_PCF50606) */
8878 + break;
8879 + case GTA01Bv2_SYSTEM_REV:
8880 + case GTA01Bv3_SYSTEM_REV:
8881 + /* just use the default (GTA01_IRQ_PCF50606) */
8882 + gta01_led_resources[0].start =
8883 + gta01_led_resources[0].end = GTA01Bv2_GPIO_VIBRATOR_ON;
8884 + break;
8885 + case GTA01Bv4_SYSTEM_REV:
8886 + gta01_pmu_resources[0].start =
8887 + gta01_pmu_resources[0].end = GTA01Bv4_IRQ_PCF50606;
8888 + gta01_led_resources[0].start =
8889 + gta01_led_resources[0].end = GTA01Bv4_GPIO_VIBRATOR_ON;
8890 + break;
8891 + }
8892 + mangle_pmu_pdata_by_system_rev();
8893 + platform_device_register(&gta01_pmu_dev);
8894 + platform_device_register(&gta01_led_dev);
8895 +
8896 + platform_add_devices(gta01_devices, ARRAY_SIZE(gta01_devices));
8897 +
8898 + s3c2410_pm_init();
8899 +
8900 + set_irq_type(GTA01_IRQ_MODEM, IRQ_TYPE_EDGE_RISING);
8901 + rc = request_irq(GTA01_IRQ_MODEM, gta01_modem_irq, IRQF_DISABLED,
8902 + "modem", NULL);
8903 + enable_irq_wake(GTA01_IRQ_MODEM);
8904 + printk(KERN_DEBUG "Enabled GSM wakeup IRQ %d (rc=%d)\n",
8905 + GTA01_IRQ_MODEM, rc);
8906 +}
8907 +
8908 +MACHINE_START(NEO1973_GTA01, "GTA01")
8909 + .phys_io = S3C2410_PA_UART,
8910 + .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
8911 + .boot_params = S3C2410_SDRAM_PA + 0x100,
8912 + .map_io = gta01_map_io,
8913 + .init_irq = s3c24xx_init_irq,
8914 + .init_machine = gta01_machine_init,
8915 + .timer = &s3c24xx_timer,
8916 +MACHINE_END
8917 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-h1940.c
8918 ===================================================================
8919 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-h1940.c 2008-12-25 00:26:37.000000000 +0100
8920 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-h1940.c 2009-01-02 00:01:56.000000000 +0100
8921 @@ -38,11 +38,13 @@
8922 #include <mach/h1940.h>
8923 #include <mach/h1940-latch.h>
8924 #include <mach/fb.h>
8925 -#include <asm/plat-s3c24xx/udc.h>
8926 +#include <plat/udc.h>
8927 +#include <plat/iic.h>
8928
8929 #include <plat/clock.h>
8930 #include <plat/devs.h>
8931 #include <plat/cpu.h>
8932 +#include <plat/pll.h>
8933 #include <plat/pm.h>
8934
8935 static struct map_desc h1940_iodesc[] __initdata = {
8936 @@ -129,6 +131,11 @@ static struct s3c2410_udc_mach_info h194
8937 .vbus_pin_inverted = 1,
8938 };
8939
8940 +static struct s3c2410_ts_mach_info h1940_ts_cfg __initdata = {
8941 + .delay = 10000,
8942 + .presc = 49,
8943 + .oversampling_shift = 2,
8944 +};
8945
8946 /**
8947 * Set lcd on or off
8948 @@ -183,9 +190,10 @@ static struct platform_device *h1940_dev
8949 &s3c_device_usb,
8950 &s3c_device_lcd,
8951 &s3c_device_wdt,
8952 - &s3c_device_i2c,
8953 + &s3c_device_i2c0,
8954 &s3c_device_iis,
8955 &s3c_device_usbgadget,
8956 + &s3c_device_ts,
8957 &s3c_device_leds,
8958 &s3c_device_bluetooth,
8959 };
8960 @@ -201,7 +209,7 @@ static void __init h1940_map_io(void)
8961 #ifdef CONFIG_PM_H1940
8962 memcpy(phys_to_virt(H1940_SUSPEND_RESUMEAT), h1940_pm_return, 1024);
8963 #endif
8964 - s3c2410_pm_init();
8965 + s3c_pm_init();
8966 }
8967
8968 static void __init h1940_init_irq(void)
8969 @@ -214,7 +222,9 @@ static void __init h1940_init(void)
8970 u32 tmp;
8971
8972 s3c24xx_fb_set_platdata(&h1940_fb_info);
8973 + set_s3c2410ts_info(&h1940_ts_cfg);
8974 s3c24xx_udc_set_platdata(&h1940_udc_cfg);
8975 + s3c_i2c0_set_platdata(NULL);
8976
8977 /* Turn off suspend on both USB ports, and switch the
8978 * selectable USB port to USB device mode. */
8979 @@ -223,10 +233,9 @@ static void __init h1940_init(void)
8980 S3C2410_MISCCR_USBSUSPND0 |
8981 S3C2410_MISCCR_USBSUSPND1, 0x0);
8982
8983 - tmp = (
8984 - 0x78 << S3C2410_PLLCON_MDIVSHIFT)
8985 - | (0x02 << S3C2410_PLLCON_PDIVSHIFT)
8986 - | (0x03 << S3C2410_PLLCON_SDIVSHIFT);
8987 + tmp = (0x78 << S3C24XX_PLLCON_MDIVSHIFT)
8988 + | (0x02 << S3C24XX_PLLCON_PDIVSHIFT)
8989 + | (0x03 << S3C24XX_PLLCON_SDIVSHIFT);
8990 writel(tmp, S3C2410_UPLLCON);
8991
8992 platform_add_devices(h1940_devices, ARRAY_SIZE(h1940_devices));
8993 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-n30.c
8994 ===================================================================
8995 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-n30.c 2008-12-25 00:26:37.000000000 +0100
8996 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-n30.c 2009-01-02 00:01:56.000000000 +0100
8997 @@ -40,14 +40,14 @@
8998 #include <asm/mach/irq.h>
8999 #include <asm/mach/map.h>
9000
9001 -#include <asm/plat-s3c/iic.h>
9002 +#include <plat/iic.h>
9003 #include <plat/regs-serial.h>
9004
9005 #include <plat/clock.h>
9006 #include <plat/cpu.h>
9007 #include <plat/devs.h>
9008 #include <plat/s3c2410.h>
9009 -#include <asm/plat-s3c24xx/udc.h>
9010 +#include <plat/udc.h>
9011
9012 static struct map_desc n30_iodesc[] __initdata = {
9013 /* nothing here yet */
9014 @@ -320,7 +320,7 @@ static struct s3c2410fb_mach_info n30_fb
9015 static struct platform_device *n30_devices[] __initdata = {
9016 &s3c_device_lcd,
9017 &s3c_device_wdt,
9018 - &s3c_device_i2c,
9019 + &s3c_device_i2c0,
9020 &s3c_device_iis,
9021 &s3c_device_usb,
9022 &s3c_device_usbgadget,
9023 @@ -332,7 +332,7 @@ static struct platform_device *n30_devic
9024 static struct platform_device *n35_devices[] __initdata = {
9025 &s3c_device_lcd,
9026 &s3c_device_wdt,
9027 - &s3c_device_i2c,
9028 + &s3c_device_i2c0,
9029 &s3c_device_iis,
9030 &s3c_device_usbgadget,
9031 &n35_button_device,
9032 @@ -501,7 +501,7 @@ static void __init n30_init_irq(void)
9033 static void __init n30_init(void)
9034 {
9035 s3c24xx_fb_set_platdata(&n30_fb_info);
9036 - s3c_device_i2c.dev.platform_data = &n30_i2ccfg;
9037 + s3c_device_i2c0.dev.platform_data = &n30_i2ccfg;
9038 s3c24xx_udc_set_platdata(&n30_udc_cfg);
9039
9040 /* Turn off suspend on both USB ports, and switch the
9041 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-otom.c
9042 ===================================================================
9043 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-otom.c 2008-12-25 00:26:37.000000000 +0100
9044 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-otom.c 2009-01-02 00:01:56.000000000 +0100
9045 @@ -35,6 +35,7 @@
9046 #include <plat/s3c2410.h>
9047 #include <plat/clock.h>
9048 #include <plat/devs.h>
9049 +#include <plat/iic.h>
9050 #include <plat/cpu.h>
9051
9052 static struct map_desc otom11_iodesc[] __initdata = {
9053 @@ -94,7 +95,7 @@ static struct platform_device *otom11_de
9054 &s3c_device_usb,
9055 &s3c_device_lcd,
9056 &s3c_device_wdt,
9057 - &s3c_device_i2c,
9058 + &s3c_device_i2c0,
9059 &s3c_device_iis,
9060 &s3c_device_rtc,
9061 &otom_device_nor,
9062 @@ -109,6 +110,7 @@ static void __init otom11_map_io(void)
9063
9064 static void __init otom11_init(void)
9065 {
9066 + s3c_i2c0_set_platdata(NULL);
9067 platform_add_devices(otom11_devices, ARRAY_SIZE(otom11_devices));
9068 }
9069
9070 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-qt2410.c
9071 ===================================================================
9072 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-qt2410.c 2008-12-25 00:26:37.000000000 +0100
9073 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-qt2410.c 2009-01-02 00:01:56.000000000 +0100
9074 @@ -1,6 +1,6 @@
9075 /* linux/arch/arm/mach-s3c2410/mach-qt2410.c
9076 *
9077 - * Copyright (C) 2006 by OpenMoko, Inc.
9078 + * Copyright (C) 2006 by Openmoko, Inc.
9079 * Author: Harald Welte <laforge@openmoko.org>
9080 * All rights reserved.
9081 *
9082 @@ -50,10 +50,11 @@
9083 #include <mach/leds-gpio.h>
9084 #include <plat/regs-serial.h>
9085 #include <mach/fb.h>
9086 -#include <asm/plat-s3c/nand.h>
9087 -#include <asm/plat-s3c24xx/udc.h>
9088 +#include <plat/nand.h>
9089 +#include <plat/udc.h>
9090 #include <mach/spi.h>
9091 #include <mach/spi-gpio.h>
9092 +#include <plat/iic.h>
9093
9094 #include <plat/common-smdk.h>
9095 #include <plat/devs.h>
9096 @@ -213,7 +214,7 @@ static struct platform_device qt2410_led
9097
9098 /* SPI */
9099
9100 -static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int cs)
9101 +static void spi_gpio_cs(struct s3c2410_spigpio_info *spi, int csidx, int cs)
9102 {
9103 switch (cs) {
9104 case BITBANG_CS_ACTIVE:
9105 @@ -247,7 +248,7 @@ static struct platform_device *qt2410_de
9106 &s3c_device_usb,
9107 &s3c_device_lcd,
9108 &s3c_device_wdt,
9109 - &s3c_device_i2c,
9110 + &s3c_device_i2c0,
9111 &s3c_device_iis,
9112 &s3c_device_sdi,
9113 &s3c_device_usbgadget,
9114 @@ -320,6 +321,24 @@ static int __init qt2410_tft_setup(char
9115
9116 __setup("tft=", qt2410_tft_setup);
9117
9118 +static struct resource qt2410_button_resources[] = {
9119 + [0] = {
9120 + .start = S3C2410_GPF0,
9121 + .end = S3C2410_GPF0,
9122 + },
9123 + [1] = {
9124 + .start = S3C2410_GPF2,
9125 + .end = S3C2410_GPF2,
9126 + },
9127 +};
9128 +
9129 +struct platform_device qt2410_button_dev = {
9130 + .name ="qt2410-button",
9131 + .num_resources = ARRAY_SIZE(qt2410_button_resources),
9132 + .resource = qt2410_button_resources,
9133 +};
9134 +
9135 +
9136 static void __init qt2410_map_io(void)
9137 {
9138 s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
9139 @@ -349,11 +368,12 @@ static void __init qt2410_machine_init(v
9140 s3c2410_gpio_setpin(S3C2410_GPB0, 1);
9141
9142 s3c24xx_udc_set_platdata(&qt2410_udc_cfg);
9143 + s3c_i2c0_set_platdata(NULL);
9144
9145 s3c2410_gpio_cfgpin(S3C2410_GPB5, S3C2410_GPIO_OUTPUT);
9146
9147 platform_add_devices(qt2410_devices, ARRAY_SIZE(qt2410_devices));
9148 - s3c2410_pm_init();
9149 + s3c_pm_init();
9150 }
9151
9152 MACHINE_START(QT2410, "QT2410")
9153 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-smdk2410.c
9154 ===================================================================
9155 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-smdk2410.c 2008-12-25 00:26:37.000000000 +0100
9156 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-smdk2410.c 2009-01-02 00:01:56.000000000 +0100
9157 @@ -47,6 +47,7 @@
9158 #include <asm/mach-types.h>
9159
9160 #include <plat/regs-serial.h>
9161 +#include <plat/iic.h>
9162
9163 #include <plat/devs.h>
9164 #include <plat/cpu.h>
9165 @@ -89,7 +90,7 @@ static struct platform_device *smdk2410_
9166 &s3c_device_usb,
9167 &s3c_device_lcd,
9168 &s3c_device_wdt,
9169 - &s3c_device_i2c,
9170 + &s3c_device_i2c0,
9171 &s3c_device_iis,
9172 };
9173
9174 @@ -102,6 +103,7 @@ static void __init smdk2410_map_io(void)
9175
9176 static void __init smdk2410_init(void)
9177 {
9178 + s3c_i2c0_set_platdata(NULL);
9179 platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
9180 smdk_machine_init();
9181 }
9182 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-tct_hammer.c
9183 ===================================================================
9184 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-tct_hammer.c 2008-12-25 00:26:37.000000000 +0100
9185 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-tct_hammer.c 2009-01-02 00:01:56.000000000 +0100
9186 @@ -45,6 +45,7 @@
9187 #include <asm/mach-types.h>
9188
9189 #include <plat/regs-serial.h>
9190 +#include <plat/iic.h>
9191 #include <plat/devs.h>
9192 #include <plat/cpu.h>
9193
9194 @@ -127,7 +128,7 @@ static struct s3c2410_uartcfg tct_hammer
9195 static struct platform_device *tct_hammer_devices[] __initdata = {
9196 &s3c_device_adc,
9197 &s3c_device_wdt,
9198 - &s3c_device_i2c,
9199 + &s3c_device_i2c0,
9200 &s3c_device_usb,
9201 &s3c_device_rtc,
9202 &s3c_device_usbgadget,
9203 @@ -146,6 +147,7 @@ static void __init tct_hammer_map_io(voi
9204
9205 static void __init tct_hammer_init(void)
9206 {
9207 + s3c_i2c0_set_platdata(NULL);
9208 platform_add_devices(tct_hammer_devices, ARRAY_SIZE(tct_hammer_devices));
9209 }
9210
9211 Index: linux-2.6.28/arch/arm/mach-s3c2410/mach-vr1000.c
9212 ===================================================================
9213 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/mach-vr1000.c 2008-12-25 00:26:37.000000000 +0100
9214 +++ linux-2.6.28/arch/arm/mach-s3c2410/mach-vr1000.c 2009-01-02 00:01:56.000000000 +0100
9215 @@ -47,6 +47,7 @@
9216 #include <plat/clock.h>
9217 #include <plat/devs.h>
9218 #include <plat/cpu.h>
9219 +#include <plat/iic.h>
9220
9221 #include "usb-simtec.h"
9222 #include "nor-simtec.h"
9223 @@ -334,7 +335,7 @@ static struct platform_device *vr1000_de
9224 &s3c_device_usb,
9225 &s3c_device_lcd,
9226 &s3c_device_wdt,
9227 - &s3c_device_i2c,
9228 + &s3c_device_i2c0,
9229 &s3c_device_adc,
9230 &serial_device,
9231 &vr1000_dm9k0,
9232 @@ -384,6 +385,7 @@ static void __init vr1000_map_io(void)
9233
9234 static void __init vr1000_init(void)
9235 {
9236 + s3c_i2c0_set_platdata(NULL);
9237 platform_add_devices(vr1000_devices, ARRAY_SIZE(vr1000_devices));
9238
9239 i2c_register_board_info(0, vr1000_i2c_devs,
9240 Index: linux-2.6.28/arch/arm/mach-s3c2410/Makefile
9241 ===================================================================
9242 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/Makefile 2008-12-25 00:26:37.000000000 +0100
9243 +++ linux-2.6.28/arch/arm/mach-s3c2410/Makefile 2009-01-02 00:01:56.000000000 +0100
9244 @@ -15,7 +15,8 @@ obj-$(CONFIG_CPU_S3C2410_DMA) += dma.o
9245 obj-$(CONFIG_CPU_S3C2410_DMA) += dma.o
9246 obj-$(CONFIG_S3C2410_PM) += pm.o sleep.o
9247 obj-$(CONFIG_S3C2410_GPIO) += gpio.o
9248 -obj-$(CONFIG_S3C2410_CLOCK) += clock.o
9249 +#obj-$(CONFIG_S3C2410_CLOCK) += clock.o
9250 +obj-$(CONFIG_S3C2410_PWM) += pwm.o
9251
9252 # Machine support
9253
9254 @@ -38,3 +39,5 @@ obj-$(CONFIG_SIMTEC_NOR) += nor-simtec.o
9255 # machine additions
9256
9257 obj-$(CONFIG_MACH_BAST_IDE) += bast-ide.o
9258 +obj-$(CONFIG_MACH_NEO1973_GTA01)+= mach-gta01.o
9259 +
9260 Index: linux-2.6.28/arch/arm/mach-s3c2410/pm.c
9261 ===================================================================
9262 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/pm.c 2008-12-25 00:26:37.000000000 +0100
9263 +++ linux-2.6.28/arch/arm/mach-s3c2410/pm.c 2009-01-02 00:01:56.000000000 +0100
9264 @@ -37,21 +37,14 @@
9265 #include <plat/cpu.h>
9266 #include <plat/pm.h>
9267
9268 -#ifdef CONFIG_S3C2410_PM_DEBUG
9269 -extern void pm_dbg(const char *fmt, ...);
9270 -#define DBG(fmt...) pm_dbg(fmt)
9271 -#else
9272 -#define DBG(fmt...) printk(KERN_DEBUG fmt)
9273 -#endif
9274 -
9275 static void s3c2410_pm_prepare(void)
9276 {
9277 /* ensure at least GSTATUS3 has the resume address */
9278
9279 - __raw_writel(virt_to_phys(s3c2410_cpu_resume), S3C2410_GSTATUS3);
9280 + __raw_writel(virt_to_phys(s3c_cpu_resume), S3C2410_GSTATUS3);
9281
9282 - DBG("GSTATUS3 0x%08x\n", __raw_readl(S3C2410_GSTATUS3));
9283 - DBG("GSTATUS4 0x%08x\n", __raw_readl(S3C2410_GSTATUS4));
9284 + S3C_PMDBG("GSTATUS3 0x%08x\n", __raw_readl(S3C2410_GSTATUS3));
9285 + S3C_PMDBG("GSTATUS4 0x%08x\n", __raw_readl(S3C2410_GSTATUS4));
9286
9287 if (machine_is_h1940()) {
9288 void *base = phys_to_virt(H1940_SUSPEND_CHECK);
9289 Index: linux-2.6.28/arch/arm/mach-s3c2410/pwm.c
9290 ===================================================================
9291 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
9292 +++ linux-2.6.28/arch/arm/mach-s3c2410/pwm.c 2009-01-02 00:01:56.000000000 +0100
9293 @@ -0,0 +1,288 @@
9294 +/*
9295 + * arch/arm/mach-s3c2410/3c2410-pwm.c
9296 + *
9297 + * Copyright (c) by Javi Roman <javiroman@kernel-labs.org>
9298 + * for the Openmoko Project.
9299 + *
9300 + * S3C2410A SoC PWM support
9301 + *
9302 + * This program is free software; you can redistribute it and/or modify
9303 + * it under the terms of the GNU General Public License as published by
9304 + * the Free Software Foundation; either version 2 of the License, or
9305 + * (at your option) any later version.
9306 + *
9307 + * You should have received a copy of the GNU General Public License
9308 + * along with this program; if not, write to the Free Software
9309 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
9310 + *
9311 + */
9312 +
9313 +#include <linux/kernel.h>
9314 +#include <linux/init.h>
9315 +#include <linux/clk.h>
9316 +#include <linux/device.h>
9317 +#include <mach/hardware.h>
9318 +#include <plat/regs-timer.h>
9319 +#include <mach/pwm.h>
9320 +#include <asm/io.h>
9321 +
9322 +#ifdef CONFIG_PM
9323 + static unsigned long standby_reg_tcon;
9324 + static unsigned long standby_reg_tcfg0;
9325 + static unsigned long standby_reg_tcfg1;
9326 +#endif
9327 +
9328 +int s3c2410_pwm_disable(struct s3c2410_pwm *pwm)
9329 +{
9330 + unsigned long tcon;
9331 +
9332 + /* stop timer */
9333 + tcon = __raw_readl(S3C2410_TCON);
9334 + tcon &= 0xffffff00;
9335 + __raw_writel(tcon, S3C2410_TCON);
9336 +
9337 + clk_disable(pwm->pclk);
9338 + clk_put(pwm->pclk);
9339 +
9340 + return 0;
9341 +}
9342 +EXPORT_SYMBOL_GPL(s3c2410_pwm_disable);
9343 +
9344 +int s3c2410_pwm_init(struct s3c2410_pwm *pwm)
9345 +{
9346 + pwm->pclk = clk_get(NULL, "timers");
9347 + if (IS_ERR(pwm->pclk))
9348 + return PTR_ERR(pwm->pclk);
9349 +
9350 + clk_enable(pwm->pclk);
9351 + pwm->pclk_rate = clk_get_rate(pwm->pclk);
9352 + return 0;
9353 +}
9354 +EXPORT_SYMBOL_GPL(s3c2410_pwm_init);
9355 +
9356 +int s3c2410_pwm_enable(struct s3c2410_pwm *pwm)
9357 +{
9358 + unsigned long tcfg0, tcfg1, tcnt, tcmp;
9359 +
9360 + /* control registers bits */
9361 + tcfg1 = __raw_readl(S3C2410_TCFG1);
9362 + tcfg0 = __raw_readl(S3C2410_TCFG0);
9363 +
9364 + /* divider & scaler slection */
9365 + switch (pwm->timerid) {
9366 + case PWM0:
9367 + tcfg1 &= ~S3C2410_TCFG1_MUX0_MASK;
9368 + tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
9369 + break;
9370 + case PWM1:
9371 + tcfg1 &= ~S3C2410_TCFG1_MUX1_MASK;
9372 + tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
9373 + break;
9374 + case PWM2:
9375 + tcfg1 &= ~S3C2410_TCFG1_MUX2_MASK;
9376 + tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
9377 + break;
9378 + case PWM3:
9379 + tcfg1 &= ~S3C2410_TCFG1_MUX3_MASK;
9380 + tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
9381 + break;
9382 + case PWM4:
9383 + /* timer four is not capable of doing PWM */
9384 + break;
9385 + default:
9386 + clk_disable(pwm->pclk);
9387 + clk_put(pwm->pclk);
9388 + return -1;
9389 + }
9390 +
9391 + /* divider & scaler values */
9392 + tcfg1 |= pwm->divider;
9393 + __raw_writel(tcfg1, S3C2410_TCFG1);
9394 +
9395 + switch (pwm->timerid) {
9396 + case PWM0:
9397 + case PWM1:
9398 + tcfg0 |= pwm->prescaler;
9399 + __raw_writel(tcfg0, S3C2410_TCFG0);
9400 + break;
9401 + default:
9402 + if ((tcfg0 | pwm->prescaler) != tcfg0) {
9403 + printk(KERN_WARNING "not changing prescaler of PWM %u,"
9404 + " since it's shared with timer4 (clock tick)\n",
9405 + pwm->timerid);
9406 + }
9407 + break;
9408 + }
9409 +
9410 + /* timer count and compare buffer initial values */
9411 + tcnt = pwm->counter;
9412 + tcmp = pwm->comparer;
9413 +
9414 + __raw_writel(tcnt, S3C2410_TCNTB(pwm->timerid));
9415 + __raw_writel(tcmp, S3C2410_TCMPB(pwm->timerid));
9416 +
9417 + /* ensure timer is stopped */
9418 + s3c2410_pwm_stop(pwm);
9419 +
9420 + return 0;
9421 +}
9422 +EXPORT_SYMBOL_GPL(s3c2410_pwm_enable);
9423 +
9424 +int s3c2410_pwm_start(struct s3c2410_pwm *pwm)
9425 +{
9426 + unsigned long tcon;
9427 +
9428 + tcon = __raw_readl(S3C2410_TCON);
9429 +
9430 + switch (pwm->timerid) {
9431 + case PWM0:
9432 + tcon |= S3C2410_TCON_T0START;
9433 + tcon &= ~S3C2410_TCON_T0MANUALUPD;
9434 + break;
9435 + case PWM1:
9436 + tcon |= S3C2410_TCON_T1START;
9437 + tcon &= ~S3C2410_TCON_T1MANUALUPD;
9438 + break;
9439 + case PWM2:
9440 + tcon |= S3C2410_TCON_T2START;
9441 + tcon &= ~S3C2410_TCON_T2MANUALUPD;
9442 + break;
9443 + case PWM3:
9444 + tcon |= S3C2410_TCON_T3START;
9445 + tcon &= ~S3C2410_TCON_T3MANUALUPD;
9446 + break;
9447 + case PWM4:
9448 + /* timer four is not capable of doing PWM */
9449 + default:
9450 + return -ENODEV;
9451 + }
9452 +
9453 + __raw_writel(tcon, S3C2410_TCON);
9454 +
9455 + return 0;
9456 +}
9457 +EXPORT_SYMBOL_GPL(s3c2410_pwm_start);
9458 +
9459 +int s3c2410_pwm_stop(struct s3c2410_pwm *pwm)
9460 +{
9461 + unsigned long tcon;
9462 +
9463 + tcon = __raw_readl(S3C2410_TCON);
9464 +
9465 + switch (pwm->timerid) {
9466 + case PWM0:
9467 + tcon &= ~0x00000000;
9468 + tcon |= S3C2410_TCON_T0RELOAD;
9469 + tcon |= S3C2410_TCON_T0MANUALUPD;
9470 + break;
9471 + case PWM1:
9472 + tcon &= ~0x00000080;
9473 + tcon |= S3C2410_TCON_T1RELOAD;
9474 + tcon |= S3C2410_TCON_T1MANUALUPD;
9475 + break;
9476 + case PWM2:
9477 + tcon &= ~0x00000800;
9478 + tcon |= S3C2410_TCON_T2RELOAD;
9479 + tcon |= S3C2410_TCON_T2MANUALUPD;
9480 + break;
9481 + case PWM3:
9482 + tcon &= ~0x00008000;
9483 + tcon |= S3C2410_TCON_T3RELOAD;
9484 + tcon |= S3C2410_TCON_T3MANUALUPD;
9485 + break;
9486 + case PWM4:
9487 + /* timer four is not capable of doing PWM */
9488 + default:
9489 + return -ENODEV;
9490 + }
9491 +
9492 + __raw_writel(tcon, S3C2410_TCON);
9493 +
9494 + return 0;
9495 +}
9496 +EXPORT_SYMBOL_GPL(s3c2410_pwm_stop);
9497 +
9498 +int s3c2410_pwm_duty_cycle(int reg_value, struct s3c2410_pwm *pwm)
9499 +{
9500 + __raw_writel(reg_value, S3C2410_TCMPB(pwm->timerid));
9501 +
9502 + return 0;
9503 +}
9504 +EXPORT_SYMBOL_GPL(s3c2410_pwm_duty_cycle);
9505 +
9506 +int s3c2410_pwm_dumpregs(void)
9507 +{
9508 + printk(KERN_INFO "TCON: %08lx, TCFG0: %08lx, TCFG1: %08lx\n",
9509 + (unsigned long) __raw_readl(S3C2410_TCON),
9510 + (unsigned long) __raw_readl(S3C2410_TCFG0),
9511 + (unsigned long) __raw_readl(S3C2410_TCFG1));
9512 +
9513 + return 0;
9514 +}
9515 +EXPORT_SYMBOL_GPL(s3c2410_pwm_dumpregs);
9516 +
9517 +static int __init s3c24xx_pwm_probe(struct platform_device *pdev)
9518 +{
9519 + struct s3c24xx_pwm_platform_data *pdata = pdev->dev.platform_data;
9520 +
9521 + dev_info(&pdev->dev, "s3c24xx_pwm is registered \n");
9522 +
9523 + /* if platform was interested, give him a chance to register
9524 + * platform devices that switch power with us as the parent
9525 + * at registration time -- ensures suspend / resume ordering
9526 + */
9527 + if (pdata)
9528 + if (pdata->attach_child_devices)
9529 + (pdata->attach_child_devices)(&pdev->dev);
9530 +
9531 + return 0;
9532 +}
9533 +
9534 +#ifdef CONFIG_PM
9535 +static int s3c24xx_pwm_suspend(struct platform_device *pdev, pm_message_t state)
9536 +{
9537 + /* PWM config should be kept in suspending */
9538 + standby_reg_tcon = __raw_readl(S3C2410_TCON);
9539 + standby_reg_tcfg0 = __raw_readl(S3C2410_TCFG0);
9540 + standby_reg_tcfg1 = __raw_readl(S3C2410_TCFG1);
9541 +
9542 + return 0;
9543 +}
9544 +
9545 +static int s3c24xx_pwm_resume(struct platform_device *pdev)
9546 +{
9547 + __raw_writel(standby_reg_tcon, S3C2410_TCON);
9548 + __raw_writel(standby_reg_tcfg0, S3C2410_TCFG0);
9549 + __raw_writel(standby_reg_tcfg1, S3C2410_TCFG1);
9550 +
9551 + return 0;
9552 +}
9553 +#else
9554 +#define sc32440_pwm_suspend NULL
9555 +#define sc32440_pwm_resume NULL
9556 +#endif
9557 +
9558 +static struct platform_driver s3c24xx_pwm_driver = {
9559 + .driver = {
9560 + .name = "s3c24xx_pwm",
9561 + .owner = THIS_MODULE,
9562 + },
9563 + .probe = s3c24xx_pwm_probe,
9564 + .suspend = s3c24xx_pwm_suspend,
9565 + .resume = s3c24xx_pwm_resume,
9566 +};
9567 +
9568 +static int __init s3c24xx_pwm_init(void)
9569 +{
9570 + return platform_driver_register(&s3c24xx_pwm_driver);
9571 +}
9572 +
9573 +static void __exit s3c24xx_pwm_exit(void)
9574 +{
9575 +}
9576 +
9577 +MODULE_AUTHOR("Javi Roman <javiroman@kernel-labs.org>");
9578 +MODULE_LICENSE("GPL");
9579 +
9580 +module_init(s3c24xx_pwm_init);
9581 +module_exit(s3c24xx_pwm_exit);
9582 Index: linux-2.6.28/arch/arm/mach-s3c2410/s3c2410.c
9583 ===================================================================
9584 --- linux-2.6.28.orig/arch/arm/mach-s3c2410/s3c2410.c 2008-12-25 00:26:37.000000000 +0100
9585 +++ linux-2.6.28/arch/arm/mach-s3c2410/s3c2410.c 2009-01-02 00:01:56.000000000 +0100
9586 @@ -16,6 +16,7 @@
9587 #include <linux/list.h>
9588 #include <linux/timer.h>
9589 #include <linux/init.h>
9590 +#include <linux/clk.h>
9591 #include <linux/sysdev.h>
9592 #include <linux/serial_core.h>
9593 #include <linux/platform_device.h>
9594 @@ -28,6 +29,8 @@
9595 #include <mach/hardware.h>
9596 #include <asm/irq.h>
9597
9598 +#include <plat/cpu-freq.h>
9599 +
9600 #include <mach/regs-clock.h>
9601 #include <plat/regs-serial.h>
9602
9603 @@ -35,6 +38,7 @@
9604 #include <plat/cpu.h>
9605 #include <plat/devs.h>
9606 #include <plat/clock.h>
9607 +#include <plat/pll.h>
9608
9609 /* Initial IO mappings */
9610
9611 @@ -59,25 +63,28 @@ void __init s3c2410_init_uarts(struct s3
9612 * machine specific initialisation.
9613 */
9614
9615 -void __init s3c2410_map_io(struct map_desc *mach_desc, int mach_size)
9616 +void __init s3c2410_map_io(void)
9617 {
9618 - /* register our io-tables */
9619 -
9620 iotable_init(s3c2410_iodesc, ARRAY_SIZE(s3c2410_iodesc));
9621 - iotable_init(mach_desc, mach_size);
9622 }
9623
9624 -void __init s3c2410_init_clocks(int xtal)
9625 +void __init_or_cpufreq s3c2410_setup_clocks(void)
9626 {
9627 + struct clk *xtal_clk;
9628 unsigned long tmp;
9629 + unsigned long xtal;
9630 unsigned long fclk;
9631 unsigned long hclk;
9632 unsigned long pclk;
9633
9634 + xtal_clk = clk_get(NULL, "xtal");
9635 + xtal = clk_get_rate(xtal_clk);
9636 + clk_put(xtal_clk);
9637 +
9638 /* now we've got our machine bits initialised, work out what
9639 * clocks we've got */
9640
9641 - fclk = s3c2410_get_pll(__raw_readl(S3C2410_MPLLCON), xtal);
9642 + fclk = s3c24xx_get_pll(__raw_readl(S3C2410_MPLLCON), xtal);
9643
9644 tmp = __raw_readl(S3C2410_CLKDIVN);
9645
9646 @@ -95,7 +102,13 @@ void __init s3c2410_init_clocks(int xtal
9647 * console to use them
9648 */
9649
9650 - s3c24xx_setup_clocks(xtal, fclk, hclk, pclk);
9651 + s3c24xx_setup_clocks(fclk, hclk, pclk);
9652 +}
9653 +
9654 +void __init s3c2410_init_clocks(int xtal)
9655 +{
9656 + s3c24xx_register_baseclocks(xtal);
9657 + s3c2410_setup_clocks();
9658 s3c2410_baseclk_add();
9659 }
9660
9661 Index: linux-2.6.28/arch/arm/mach-s3c2412/clock.c
9662 ===================================================================
9663 --- linux-2.6.28.orig/arch/arm/mach-s3c2412/clock.c 2008-12-25 00:26:37.000000000 +0100
9664 +++ linux-2.6.28/arch/arm/mach-s3c2412/clock.c 2009-01-02 00:01:56.000000000 +0100
9665 @@ -93,12 +93,6 @@ static int s3c2412_upll_enable(struct cl
9666
9667 /* clock selections */
9668
9669 -/* CPU EXTCLK input */
9670 -static struct clk clk_ext = {
9671 - .name = "extclk",
9672 - .id = -1,
9673 -};
9674 -
9675 static struct clk clk_erefclk = {
9676 .name = "erefclk",
9677 .id = -1,
9678 @@ -773,5 +767,6 @@ int __init s3c2412_baseclk_add(void)
9679 s3c2412_clkcon_enable(clkp, 0);
9680 }
9681
9682 + s3c_pwmclk_init();
9683 return 0;
9684 }
9685 Index: linux-2.6.28/arch/arm/mach-s3c2412/dma.c
9686 ===================================================================
9687 --- linux-2.6.28.orig/arch/arm/mach-s3c2412/dma.c 2008-12-25 00:26:37.000000000 +0100
9688 +++ linux-2.6.28/arch/arm/mach-s3c2412/dma.c 2009-01-02 00:01:56.000000000 +0100
9689 @@ -26,13 +26,13 @@
9690
9691 #include <plat/regs-serial.h>
9692 #include <mach/regs-gpio.h>
9693 -#include <asm/plat-s3c/regs-ac97.h>
9694 +#include <plat/regs-ac97.h>
9695 #include <mach/regs-mem.h>
9696 #include <mach/regs-lcd.h>
9697 #include <mach/regs-sdi.h>
9698 #include <asm/plat-s3c24xx/regs-s3c2412-iis.h>
9699 #include <asm/plat-s3c24xx/regs-iis.h>
9700 -#include <asm/plat-s3c24xx/regs-spi.h>
9701 +#include <plat/regs-spi.h>
9702
9703 #define MAP(x) { (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID, (x)| DMA_CH_VALID }
9704
9705 Index: linux-2.6.28/arch/arm/mach-s3c2412/mach-jive.c
9706 ===================================================================
9707 --- linux-2.6.28.orig/arch/arm/mach-s3c2412/mach-jive.c 2008-12-25 00:26:37.000000000 +0100
9708 +++ linux-2.6.28/arch/arm/mach-s3c2412/mach-jive.c 2009-01-02 00:01:56.000000000 +0100
9709 @@ -31,8 +31,8 @@
9710 #include <asm/mach/irq.h>
9711
9712 #include <plat/regs-serial.h>
9713 -#include <asm/plat-s3c/nand.h>
9714 -#include <asm/plat-s3c/iic.h>
9715 +#include <plat/nand.h>
9716 +#include <plat/iic.h>
9717
9718 #include <mach/regs-power.h>
9719 #include <mach/regs-gpio.h>
9720 @@ -52,7 +52,8 @@
9721 #include <plat/devs.h>
9722 #include <plat/cpu.h>
9723 #include <plat/pm.h>
9724 -#include <asm/plat-s3c24xx/udc.h>
9725 +#include <plat/udc.h>
9726 +#include <plat/iic.h>
9727
9728 static struct map_desc jive_iodesc[] __initdata = {
9729 };
9730 @@ -450,14 +451,14 @@ static struct spi_board_info __initdata
9731
9732 /* I2C bus and device configuration. */
9733
9734 -static struct s3c2410_platform_i2c jive_i2c_cfg = {
9735 +static struct s3c2410_platform_i2c jive_i2c_cfg __initdata = {
9736 .max_freq = 80 * 1000,
9737 .bus_freq = 50 * 1000,
9738 .flags = S3C_IICFLG_FILTER,
9739 .sda_delay = 2,
9740 };
9741
9742 -static struct i2c_board_info jive_i2c_devs[] = {
9743 +static struct i2c_board_info jive_i2c_devs[] __initdata = {
9744 [0] = {
9745 I2C_BOARD_INFO("lis302dl", 0x1c),
9746 .irq = IRQ_EINT14,
9747 @@ -470,7 +471,7 @@ static struct platform_device *jive_devi
9748 &s3c_device_usb,
9749 &s3c_device_rtc,
9750 &s3c_device_wdt,
9751 - &s3c_device_i2c,
9752 + &s3c_device_i2c0,
9753 &s3c_device_lcd,
9754 &jive_device_lcdspi,
9755 &jive_device_wm8750,
9756 @@ -492,7 +493,7 @@ static int jive_pm_suspend(struct sys_de
9757 * correct address to resume from. */
9758
9759 __raw_writel(0x2BED, S3C2412_INFORM0);
9760 - __raw_writel(virt_to_phys(s3c2410_cpu_resume), S3C2412_INFORM1);
9761 + __raw_writel(virt_to_phys(s3c_cpu_resume), S3C2412_INFORM1);
9762
9763 return 0;
9764 }
9765 @@ -628,7 +629,7 @@ static void __init jive_machine_init(voi
9766
9767 /* initialise the power management now we've setup everything. */
9768
9769 - s3c2410_pm_init();
9770 + s3c_pm_init();
9771
9772 s3c_device_nand.dev.platform_data = &jive_nand_info;
9773
9774 @@ -663,7 +664,7 @@ static void __init jive_machine_init(voi
9775
9776 spi_register_board_info(jive_spi_devs, ARRAY_SIZE(jive_spi_devs));
9777
9778 - s3c_device_i2c.dev.platform_data = &jive_i2c_cfg;
9779 + s3c_i2c0_set_platdata(&jive_i2c_cfg);
9780 i2c_register_board_info(0, jive_i2c_devs, ARRAY_SIZE(jive_i2c_devs));
9781
9782 pm_power_off = jive_power_off;
9783 Index: linux-2.6.28/arch/arm/mach-s3c2412/mach-smdk2413.c
9784 ===================================================================
9785 --- linux-2.6.28.orig/arch/arm/mach-s3c2412/mach-smdk2413.c 2008-12-25 00:26:37.000000000 +0100
9786 +++ linux-2.6.28/arch/arm/mach-s3c2412/mach-smdk2413.c 2009-01-02 00:01:56.000000000 +0100
9787 @@ -37,7 +37,8 @@
9788 #include <mach/regs-lcd.h>
9789
9790 #include <mach/idle.h>
9791 -#include <asm/plat-s3c24xx/udc.h>
9792 +#include <plat/udc.h>
9793 +#include <plat/iic.h>
9794 #include <mach/fb.h>
9795
9796 #include <plat/s3c2410.h>
9797 @@ -105,7 +106,7 @@ static struct platform_device *smdk2413_
9798 &s3c_device_usb,
9799 //&s3c_device_lcd,
9800 &s3c_device_wdt,
9801 - &s3c_device_i2c,
9802 + &s3c_device_i2c0,
9803 &s3c_device_iis,
9804 &s3c_device_usbgadget,
9805 };
9806 @@ -142,6 +143,7 @@ static void __init smdk2413_machine_init
9807
9808
9809 s3c24xx_udc_set_platdata(&smdk2413_udc_cfg);
9810 + s3c_i2c0_set_platdata(NULL);
9811
9812 platform_add_devices(smdk2413_devices, ARRAY_SIZE(smdk2413_devices));
9813 smdk_machine_init();
9814 Index: linux-2.6.28/arch/arm/mach-s3c2412/mach-vstms.c
9815 ===================================================================
9816 --- linux-2.6.28.orig/arch/arm/mach-s3c2412/mach-vstms.c 2008-12-25 00:26:37.000000000 +0100
9817 +++ linux-2.6.28/arch/arm/mach-s3c2412/mach-vstms.c 2009-01-02 00:01:56.000000000 +0100
9818 @@ -39,7 +39,8 @@
9819 #include <mach/idle.h>
9820 #include <mach/fb.h>
9821
9822 -#include <asm/plat-s3c/nand.h>
9823 +#include <plat/iic.h>
9824 +#include <plat/nand.h>
9825
9826 #include <plat/s3c2410.h>
9827 #include <plat/s3c2412.h>
9828 @@ -122,7 +123,7 @@ static struct s3c2410_platform_nand vstm
9829 static struct platform_device *vstms_devices[] __initdata = {
9830 &s3c_device_usb,
9831 &s3c_device_wdt,
9832 - &s3c_device_i2c,
9833 + &s3c_device_i2c0,
9834 &s3c_device_iis,
9835 &s3c_device_rtc,
9836 &s3c_device_nand,
9837 @@ -151,6 +152,7 @@ static void __init vstms_map_io(void)
9838
9839 static void __init vstms_init(void)
9840 {
9841 + s3c_i2c0_set_platdata(NULL);
9842 platform_add_devices(vstms_devices, ARRAY_SIZE(vstms_devices));
9843 }
9844
9845 Index: linux-2.6.28/arch/arm/mach-s3c2412/pm.c
9846 ===================================================================
9847 --- linux-2.6.28.orig/arch/arm/mach-s3c2412/pm.c 2008-12-25 00:26:37.000000000 +0100
9848 +++ linux-2.6.28/arch/arm/mach-s3c2412/pm.c 2009-01-02 00:01:56.000000000 +0100
9849 @@ -85,7 +85,7 @@ static struct sleep_save s3c2412_sleep[]
9850
9851 static int s3c2412_pm_suspend(struct sys_device *dev, pm_message_t state)
9852 {
9853 - s3c2410_pm_do_save(s3c2412_sleep, ARRAY_SIZE(s3c2412_sleep));
9854 + s3c_pm_do_save(s3c2412_sleep, ARRAY_SIZE(s3c2412_sleep));
9855 return 0;
9856 }
9857
9858 @@ -98,7 +98,7 @@ static int s3c2412_pm_resume(struct sys_
9859 tmp |= S3C2412_PWRCFG_STANDBYWFI_IDLE;
9860 __raw_writel(tmp, S3C2412_PWRCFG);
9861
9862 - s3c2410_pm_do_restore(s3c2412_sleep, ARRAY_SIZE(s3c2412_sleep));
9863 + s3c_pm_do_restore(s3c2412_sleep, ARRAY_SIZE(s3c2412_sleep));
9864 return 0;
9865 }
9866
9867 Index: linux-2.6.28/arch/arm/mach-s3c2412/s3c2412.c
9868 ===================================================================
9869 --- linux-2.6.28.orig/arch/arm/mach-s3c2412/s3c2412.c 2008-12-25 00:26:37.000000000 +0100
9870 +++ linux-2.6.28/arch/arm/mach-s3c2412/s3c2412.c 2009-01-02 00:01:56.000000000 +0100
9871 @@ -16,6 +16,7 @@
9872 #include <linux/list.h>
9873 #include <linux/timer.h>
9874 #include <linux/init.h>
9875 +#include <linux/clk.h>
9876 #include <linux/delay.h>
9877 #include <linux/sysdev.h>
9878 #include <linux/serial_core.h>
9879 @@ -33,13 +34,15 @@
9880 #include <mach/reset.h>
9881 #include <mach/idle.h>
9882
9883 +#include <plat/cpu-freq.h>
9884 +
9885 #include <mach/regs-clock.h>
9886 #include <plat/regs-serial.h>
9887 #include <mach/regs-power.h>
9888 #include <mach/regs-gpio.h>
9889 #include <mach/regs-gpioj.h>
9890 #include <mach/regs-dsc.h>
9891 -#include <asm/plat-s3c24xx/regs-spi.h>
9892 +#include <plat/regs-spi.h>
9893 #include <mach/regs-s3c2412.h>
9894
9895 #include <plat/s3c2412.h>
9896 @@ -47,6 +50,7 @@
9897 #include <plat/devs.h>
9898 #include <plat/clock.h>
9899 #include <plat/pm.h>
9900 +#include <plat/pll.h>
9901
9902 #ifndef CONFIG_CPU_S3C2412_ONLY
9903 void __iomem *s3c24xx_va_gpio2 = S3C24XX_VA_GPIO;
9904 @@ -136,7 +140,7 @@ static void s3c2412_hard_reset(void)
9905 * machine specific initialisation.
9906 */
9907
9908 -void __init s3c2412_map_io(struct map_desc *mach_desc, int mach_size)
9909 +void __init s3c2412_map_io(void)
9910 {
9911 /* move base of IO */
9912
9913 @@ -153,20 +157,25 @@ void __init s3c2412_map_io(struct map_de
9914 /* register our io-tables */
9915
9916 iotable_init(s3c2412_iodesc, ARRAY_SIZE(s3c2412_iodesc));
9917 - iotable_init(mach_desc, mach_size);
9918 }
9919
9920 -void __init s3c2412_init_clocks(int xtal)
9921 +void __init_or_cpufreq s3c2412_setup_clocks(void)
9922 {
9923 + struct clk *xtal_clk;
9924 unsigned long tmp;
9925 + unsigned long xtal;
9926 unsigned long fclk;
9927 unsigned long hclk;
9928 unsigned long pclk;
9929
9930 + xtal_clk = clk_get(NULL, "xtal");
9931 + xtal = clk_get_rate(xtal_clk);
9932 + clk_put(xtal_clk);
9933 +
9934 /* now we've got our machine bits initialised, work out what
9935 * clocks we've got */
9936
9937 - fclk = s3c2410_get_pll(__raw_readl(S3C2410_MPLLCON), xtal*2);
9938 + fclk = s3c24xx_get_pll(__raw_readl(S3C2410_MPLLCON), xtal * 2);
9939
9940 clk_mpll.rate = fclk;
9941
9942 @@ -183,11 +192,17 @@ void __init s3c2412_init_clocks(int xtal
9943 printk("S3C2412: core %ld.%03ld MHz, memory %ld.%03ld MHz, peripheral %ld.%03ld MHz\n",
9944 print_mhz(fclk), print_mhz(hclk), print_mhz(pclk));
9945
9946 + s3c24xx_setup_clocks(fclk, hclk, pclk);
9947 +}
9948 +
9949 +void __init s3c2412_init_clocks(int xtal)
9950 +{
9951 /* initialise the clocks here, to allow other things like the
9952 * console to use them
9953 */
9954
9955 - s3c24xx_setup_clocks(xtal, fclk, hclk, pclk);
9956 + s3c24xx_register_baseclocks(xtal);
9957 + s3c2412_setup_clocks();
9958 s3c2412_baseclk_add();
9959 }
9960
9961 @@ -216,5 +231,8 @@ int __init s3c2412_init(void)
9962 {
9963 printk("S3C2412: Initialising architecture\n");
9964
9965 + /* make sure SD/MMC driver can distinguish 2412 from 2410 */
9966 + s3c_device_sdi.name = "s3c2412-sdi";
9967 +
9968 return sysdev_register(&s3c2412_sysdev);
9969 }
9970 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/bits.h
9971 ===================================================================
9972 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
9973 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/bits.h 2009-01-02 00:01:56.000000000 +0100
9974 @@ -0,0 +1,48 @@
9975 +/*
9976 + * Copyright (C) Samsung Electroincs 2003
9977 + * Author: SW.LEE <hitchcar@samsung.com>
9978 + *
9979 + * This program is free software; you can redistribute it and/or modify
9980 + * it under the terms of the GNU General Public License as published by
9981 + * the Free Software Foundation; either version 2 of the License, or
9982 + * (at your option) any later version.
9983 + *
9984 + */
9985 +
9986 +#ifndef __SW_BITS_H
9987 +#define __SW_BITS_H
9988 +
9989 +#define BIT0 0x00000001
9990 +#define BIT1 0x00000002
9991 +#define BIT2 0x00000004
9992 +#define BIT3 0x00000008
9993 +#define BIT4 0x00000010
9994 +#define BIT5 0x00000020
9995 +#define BIT6 0x00000040
9996 +#define BIT7 0x00000080
9997 +#define BIT8 0x00000100
9998 +#define BIT9 0x00000200
9999 +#define BIT10 0x00000400
10000 +#define BIT11 0x00000800
10001 +#define BIT12 0x00001000
10002 +#define BIT13 0x00002000
10003 +#define BIT14 0x00004000
10004 +#define BIT15 0x00008000
10005 +#define BIT16 0x00010000
10006 +#define BIT17 0x00020000
10007 +#define BIT18 0x00040000
10008 +#define BIT19 0x00080000
10009 +#define BIT20 0x00100000
10010 +#define BIT21 0x00200000
10011 +#define BIT22 0x00400000
10012 +#define BIT23 0x00800000
10013 +#define BIT24 0x01000000
10014 +#define BIT25 0x02000000
10015 +#define BIT26 0x04000000
10016 +#define BIT27 0x08000000
10017 +#define BIT28 0x10000000
10018 +#define BIT29 0x20000000
10019 +#define BIT30 0x40000000
10020 +#define BIT31 0x80000000
10021 +
10022 +#endif
10023 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/camif.c
10024 ===================================================================
10025 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
10026 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/camif.c 2009-01-02 00:01:56.000000000 +0100
10027 @@ -0,0 +1,1047 @@
10028 +/*
10029 + * Copyright (C) 2004 Samsung Electronics
10030 + * SW.LEE <hitchcar@samsung.com>
10031 + *
10032 + * This file is subject to the terms and conditions of the GNU General Public
10033 + * License 2. See the file COPYING in the main directory of this archive
10034 + * for more details.
10035 + */
10036 +
10037 +#include <linux/module.h>
10038 +#include <linux/kernel.h>
10039 +#include <linux/init.h>
10040 +#include <linux/sched.h>
10041 +#include <linux/irq.h>
10042 +#include <linux/completion.h>
10043 +#include <linux/delay.h>
10044 +#include <linux/slab.h>
10045 +#include <linux/vmalloc.h>
10046 +#include <linux/miscdevice.h>
10047 +#include <linux/wait.h>
10048 +#include <linux/miscdevice.h>
10049 +#include <asm/io.h>
10050 +#include <asm/semaphore.h>
10051 +#include <asm/hardware.h>
10052 +#include <asm/uaccess.h>
10053 +#include <linux/device.h>
10054 +#include <linux/dma-mapping.h>
10055 +#include <linux/clk.h>
10056 +
10057 +#ifdef CONFIG_ARCH_S3C24A0A
10058 +#include <asm/arch/S3C24A0.h>
10059 +#include <asm/arch/clocks.h>
10060 +#else
10061 +#include <asm/arch/regs-gpio.h>
10062 +#include <asm/arch/regs-gpioj.h>
10063 +#include <asm/arch/regs-irq.h>
10064 +#endif
10065 +
10066 +#include "cam_reg.h"
10067 +//#define SW_DEBUG
10068 +#define CONFIG_VIDEO_V4L1_COMPAT
10069 +#include <linux/videodev.h>
10070 +#include "camif.h"
10071 +#include "miscdevice.h"
10072 +
10073 +static int camif_dma_burst(camif_cfg_t *);
10074 +static int camif_scaler(camif_cfg_t *);
10075 +
10076 +/* For SXGA Image */
10077 +#define RESERVE_MEM 15*1024*1024
10078 +#define YUV_MEM 10*1024*1024
10079 +#define RGB_MEM (RESERVE_MEM - YUV_MEM)
10080 +
10081 +static int camif_malloc(camif_cfg_t *cfg)
10082 +{
10083 + unsigned int t_size;
10084 + unsigned int daon = cfg->target_x *cfg->target_y;
10085 +
10086 + if(cfg->dma_type & CAMIF_CODEC) {
10087 + if (cfg->fmt & CAMIF_OUT_YCBCR420) {
10088 + t_size = daon * 3 / 2 ;
10089 + }
10090 + else { t_size = daon * 2; /* CAMIF_OUT_YCBCR422 */ }
10091 + t_size = t_size *cfg->pp_num;
10092 +
10093 +#ifndef SAMSUNG_SXGA_CAM
10094 + cfg->pp_virt_buf = dma_alloc_coherent(cfg->v->dev,
10095 + t_size, &cfg->pp_phys_buf,
10096 + GFP_KERNEL);
10097 +#else
10098 + printk(KERN_INFO "Reserving High RAM Addresses \n");
10099 + cfg->pp_phys_buf = PHYS_OFFSET + (MEM_SIZE - RESERVE_MEM);
10100 + cfg->pp_virt_buf = ioremap_nocache(cfg->pp_phys_buf, YUV_MEM);
10101 +#endif
10102 +
10103 + if ( !cfg->pp_virt_buf ) {
10104 + printk(KERN_ERR"CAMERA:Failed to request YCBCR MEM\n");
10105 + return -ENOMEM;
10106 + }
10107 + memset(cfg->pp_virt_buf, 0, t_size);
10108 + cfg->pp_totalsize = t_size;
10109 + return 0;
10110 + }
10111 + if ( cfg->dma_type & CAMIF_PREVIEW ) {
10112 + if (cfg->fmt & CAMIF_RGB16)
10113 + t_size = daon * 2; /* 4byte per two pixel*/
10114 + else {
10115 + assert(cfg->fmt & CAMIF_RGB24);
10116 + t_size = daon * 4; /* 4byte per one pixel */
10117 + }
10118 + t_size = t_size * cfg->pp_num;
10119 +#ifndef SAMSUNG_SXGA_CAM
10120 + cfg->pp_virt_buf = dma_alloc_coherent(cfg->v->dev,
10121 + t_size, &cfg->pp_phys_buf,
10122 + GFP_KERNEL);
10123 +#else
10124 + printk(KERN_INFO "Reserving High RAM Addresses \n");
10125 + cfg->pp_phys_buf = PHYS_OFFSET + (MEM_SIZE - RESERVE_MEM ) + YUV_MEM;
10126 + cfg->pp_virt_buf = ioremap_nocache(cfg->pp_phys_buf,RGB_MEM);
10127 +#endif
10128 + if ( !cfg->pp_virt_buf ) {
10129 + printk(KERN_ERR"CAMERA:Failed to request RGB MEM\n");
10130 + return -ENOMEM;
10131 + }
10132 + memset(cfg->pp_virt_buf, 0, t_size);
10133 + cfg->pp_totalsize = t_size;
10134 + return 0;
10135 + }
10136 +
10137 + return 0; /* Never come. */
10138 +}
10139 +
10140 +static int camif_demalloc(camif_cfg_t *cfg)
10141 +{
10142 +#ifndef SAMSUNG_SXGA_CAM
10143 + if ( cfg->pp_virt_buf ) {
10144 + dma_free_coherent(cfg->v->dev, cfg->pp_totalsize,
10145 + cfg->pp_virt_buf, cfg->pp_phys_buf);
10146 + cfg->pp_virt_buf = 0;
10147 + }
10148 +#else
10149 + iounmap(cfg->pp_virt_buf);
10150 + cfg->pp_virt_buf = 0;
10151 +#endif
10152 + return 0;
10153 +}
10154 +
10155 +/*
10156 + * advise a person to use this func in ISR
10157 + * index value indicates the next frame count to be used
10158 + */
10159 +int camif_g_frame_num(camif_cfg_t *cfg)
10160 +{
10161 + int index = 0;
10162 +
10163 + if (cfg->dma_type & CAMIF_CODEC ) {
10164 + index = FRAME_CNT(readl(camregs + S3C2440_CAM_REG_CICOSTATUS));
10165 + DPRINTK("CAMIF_CODEC frame %d \n", index);
10166 + }
10167 + else {
10168 + assert(cfg->dma_type & CAMIF_PREVIEW );
10169 + index = FRAME_CNT(readl(camregs + S3C2440_CAM_REG_CIPRSTATUS));
10170 + DPRINTK("CAMIF_PREVIEW frame %d 0x%08X \n", index,
10171 + readl(camregs + S3C2440_CAM_REG_CIPRSTATUS));
10172 + }
10173 + cfg->now_frame_num = (index + 2) % 4; /* When 4 PingPong */
10174 + return index; /* meaningless */
10175 +}
10176 +
10177 +static int camif_pp_codec(camif_cfg_t *cfg)
10178 +{
10179 + u32 i, c_size; /* Cb,Cr size */
10180 + u32 one_p_size;
10181 + u32 daon = cfg->target_x * cfg->target_y;
10182 + if (cfg->fmt & CAMIF_OUT_YCBCR420)
10183 + c_size = daon / 4;
10184 + else {
10185 + assert(cfg->fmt & CAMIF_OUT_YCBCR422);
10186 + c_size = daon / 2;
10187 + }
10188 + switch ( cfg->pp_num ) {
10189 + case 1 :
10190 + for (i =0 ; i < 4; i++) {
10191 + cfg->img_buf[i].virt_y = cfg->pp_virt_buf;
10192 + cfg->img_buf[i].phys_y = cfg->pp_phys_buf;
10193 + cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon;
10194 + cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon;
10195 + cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size;
10196 + cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size;
10197 + writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
10198 + writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
10199 + writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
10200 + }
10201 + break;
10202 + case 2:
10203 +#define TRY (( i%2 ) ? 1 :0)
10204 + one_p_size = daon + 2*c_size;
10205 + for (i = 0; i < 4 ; i++) {
10206 + cfg->img_buf[i].virt_y = cfg->pp_virt_buf + TRY * one_p_size;
10207 + cfg->img_buf[i].phys_y = cfg->pp_phys_buf + TRY * one_p_size;
10208 + cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon + TRY * one_p_size;
10209 + cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon + TRY * one_p_size;
10210 + cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size + TRY * one_p_size;
10211 + cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size + TRY * one_p_size;
10212 + writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
10213 + writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
10214 + writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
10215 + }
10216 + break;
10217 + case 4:
10218 + one_p_size = daon + 2*c_size;
10219 + for (i = 0; i < 4 ; i++) {
10220 + cfg->img_buf[i].virt_y = cfg->pp_virt_buf + i * one_p_size;
10221 + cfg->img_buf[i].phys_y = cfg->pp_phys_buf + i * one_p_size;
10222 + cfg->img_buf[i].virt_cb = cfg->pp_virt_buf + daon + i * one_p_size;
10223 + cfg->img_buf[i].phys_cb = cfg->pp_phys_buf + daon + i * one_p_size;
10224 + cfg->img_buf[i].virt_cr = cfg->pp_virt_buf + daon + c_size + i * one_p_size;
10225 + cfg->img_buf[i].phys_cr = cfg->pp_phys_buf + daon + c_size + i * one_p_size;
10226 + writel(cfg->img_buf[i].phys_y, camregs + S3C2440_CAM_REG_CICOYSA(i));
10227 + writel(cfg->img_buf[i].phys_cb, camregs + S3C2440_CAM_REG_CICOCBSA(i));
10228 + writel(cfg->img_buf[i].phys_cr, camregs + S3C2440_CAM_REG_CICOCRSA(i));
10229 + }
10230 + break;
10231 + default:
10232 + printk("Invalid PingPong Number %d \n",cfg->pp_num);
10233 + panic("halt\n");
10234 +}
10235 + return 0;
10236 +}
10237 +
10238 +/* RGB Buffer Allocation */
10239 +static int camif_pp_preview(camif_cfg_t *cfg)
10240 +{
10241 + int i;
10242 + u32 daon = cfg->target_x * cfg->target_y;
10243 +
10244 + if(cfg->fmt & CAMIF_RGB24)
10245 + daon = daon * 4 ;
10246 + else {
10247 + assert (cfg->fmt & CAMIF_RGB16);
10248 + daon = daon *2;
10249 + }
10250 + switch ( cfg->pp_num ) {
10251 + case 1:
10252 + for ( i = 0; i < 4 ; i++ ) {
10253 + cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf ;
10254 + cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf ;
10255 + writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
10256 + }
10257 + break;
10258 + case 2:
10259 + for ( i = 0; i < 4 ; i++) {
10260 + cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf + TRY * daon;
10261 + cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf + TRY * daon;
10262 + writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
10263 + }
10264 + break;
10265 + case 4:
10266 + for ( i = 0; i < 4 ; i++) {
10267 + cfg->img_buf[i].virt_rgb = cfg->pp_virt_buf + i * daon;
10268 + cfg->img_buf[i].phys_rgb = cfg->pp_phys_buf + i * daon;
10269 + writel(cfg->img_buf[i].phys_rgb, camregs + S3C2440_CAM_REG_CICOCRSA(i));
10270 + }
10271 + break;
10272 + default:
10273 + printk("Invalid PingPong Number %d \n",cfg->pp_num);
10274 + panic("halt\n");
10275 + }
10276 + return 0;
10277 +}
10278 +
10279 +static int camif_pingpong(camif_cfg_t *cfg)
10280 +{
10281 + if (cfg->dma_type & CAMIF_CODEC ) {
10282 + camif_pp_codec(cfg);
10283 + }
10284 +
10285 + if ( cfg->dma_type & CAMIF_PREVIEW) {
10286 + camif_pp_preview(cfg);
10287 + }
10288 + return 0;
10289 +}
10290 +
10291 +
10292 +/*********** Image Convert *******************************/
10293 +/* Return Format
10294 + * Supported by Hardware
10295 + * V4L2_PIX_FMT_YUV420,
10296 + * V4L2_PIX_FMT_YUV422P,
10297 + * V4L2_PIX_FMT_BGR32 (BGR4)
10298 + * -----------------------------------
10299 + * V4L2_PIX_FMT_RGB565(X)
10300 + * Currenly 2byte --> BGR656 Format
10301 + * S3C2440A,S3C24A0 supports vairants with reversed FMT_RGB565
10302 + i.e blue toward the least, red towards the most significant bit
10303 + -- by SW.LEE
10304 + */
10305 +
10306 +
10307 +/*
10308 + * After calling camif_g_frame_num,
10309 + * this func must be called
10310 + */
10311 +u8 * camif_g_frame(camif_cfg_t *cfg)
10312 +{
10313 + u8 * ret = NULL;
10314 + int cnt = cfg->now_frame_num;
10315 +
10316 + if(cfg->dma_type & CAMIF_PREVIEW) {
10317 + ret = cfg->img_buf[cnt].virt_rgb;
10318 + }
10319 + if (cfg->dma_type & CAMIF_CODEC) {
10320 + ret = cfg->img_buf[cnt].virt_y;
10321 + }
10322 + return ret;
10323 +}
10324 +
10325 +/* This function must be called in module initial time */
10326 +static int camif_source_fmt(camif_gc_t *gc)
10327 +{
10328 + u32 cmd = 0;
10329 +
10330 + /* Configure CISRCFMT --Source Format */
10331 + if (gc->itu_fmt & CAMIF_ITU601) {
10332 + cmd = CAMIF_ITU601;
10333 + }
10334 + else {
10335 + assert ( gc->itu_fmt & CAMIF_ITU656);
10336 + cmd = CAMIF_ITU656;
10337 + }
10338 + cmd |= SOURCE_HSIZE(gc->source_x)| SOURCE_VSIZE(gc->source_y);
10339 + /* Order422 */
10340 + cmd |= gc->order422;
10341 + writel(cmd, camregs + S3C2440_CAM_REG_CISRCFMT);
10342 +
10343 + return 0 ;
10344 +}
10345 +
10346 +
10347 +/*
10348 + * Codec Input YCBCR422 will be Fixed
10349 + */
10350 +static int camif_target_fmt(camif_cfg_t *cfg)
10351 +{
10352 + u32 cmd = 0;
10353 +
10354 + if (cfg->dma_type & CAMIF_CODEC) {
10355 + /* YCBCR setting */
10356 + cmd = TARGET_HSIZE(cfg->target_x)| TARGET_VSIZE(cfg->target_y);
10357 + if ( cfg->fmt & CAMIF_OUT_YCBCR420 ) {
10358 + cmd |= OUT_YCBCR420|IN_YCBCR422;
10359 + }
10360 + else {
10361 + assert(cfg->fmt & CAMIF_OUT_YCBCR422);
10362 + cmd |= OUT_YCBCR422|IN_YCBCR422;
10363 + }
10364 + writel(cmd | cfg->flip, camregs + S3C2440_CAM_REG_CICOTRGFMT);
10365 +
10366 + } else {
10367 + assert(cfg->dma_type & CAMIF_PREVIEW);
10368 + writel(TARGET_HSIZE(cfg->target_x)|TARGET_VSIZE(cfg->target_y)|cfg->flip,
10369 + camregs + S3C2440_CAM_REG_CIPRTRGFMT);
10370 + }
10371 + return 0;
10372 +}
10373 +
10374 +void camif_change_flip(camif_cfg_t *cfg)
10375 +{
10376 + u32 cmd = readl(camregs + S3C2440_CAM_REG_CICOTRGFMT);
10377 +
10378 + cmd &= ~(BIT14|BIT15);
10379 + cmd |= cfg->flip;
10380 +
10381 + writel(cmd, camregs + S3C2440_CAM_REG_CICOTRGFMT);
10382 +}
10383 +
10384 +
10385 +
10386 +/* Must:
10387 + * Before calling this function,
10388 + * you must use "camif_dynamic_open"
10389 + * If you want to enable both CODEC and preview
10390 + * you must do it at the same time.
10391 + */
10392 +int camif_capture_start(camif_cfg_t *cfg)
10393 +{
10394 + u32 n_cmd = 0; /* Next Command */
10395 +
10396 + switch(cfg->exec) {
10397 + case CAMIF_BOTH_DMA_ON:
10398 + camif_reset(CAMIF_RESET, 0); /* Flush Camera Core Buffer */
10399 + writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) |
10400 + SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
10401 + writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) |
10402 + SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
10403 + n_cmd = CAMIF_CAP_PREVIEW_ON | CAMIF_CAP_CODEC_ON;
10404 + break;
10405 + case CAMIF_DMA_ON:
10406 + camif_reset(CAMIF_RESET, 0); /* Flush Camera Core Buffer */
10407 + if (cfg->dma_type&CAMIF_CODEC) {
10408 + writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) |
10409 + SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
10410 + n_cmd = CAMIF_CAP_CODEC_ON;
10411 + } else {
10412 + writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) |
10413 + SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
10414 + n_cmd = CAMIF_CAP_PREVIEW_ON;
10415 + }
10416 +
10417 + /* wait until Sync Time expires */
10418 + /* First settting, to wait VSYNC fall */
10419 + /* By VESA spec,in 640x480 @60Hz
10420 + MAX Delay Time is around 64us which "while" has.*/
10421 + while(VSYNC & readl(camregs + S3C2440_CAM_REG_CICOSTATUS));
10422 + break;
10423 + default:
10424 + break;
10425 +}
10426 + writel(n_cmd | CAMIF_CAP_ON, camregs + S3C2440_CAM_REG_CIIMGCPT);
10427 + return 0;
10428 +}
10429 +
10430 +
10431 +int camif_capture_stop(camif_cfg_t *cfg)
10432 +{
10433 + u32 n_cmd = readl(camregs + S3C2440_CAM_REG_CIIMGCPT); /* Next Command */
10434 +
10435 + switch(cfg->exec) {
10436 + case CAMIF_BOTH_DMA_OFF:
10437 + writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) &
10438 + ~SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
10439 + writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) &
10440 + ~SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
10441 + n_cmd = 0;
10442 + break;
10443 + case CAMIF_DMA_OFF_L_IRQ: /* fall thru */
10444 + case CAMIF_DMA_OFF:
10445 + if (cfg->dma_type&CAMIF_CODEC) {
10446 + writel(readl(camregs + S3C2440_CAM_REG_CICOSCCTRL) &
10447 + ~SCALERSTART, camregs + S3C2440_CAM_REG_CICOSCCTRL);
10448 + n_cmd &= ~CAMIF_CAP_CODEC_ON;
10449 + if (!(n_cmd & CAMIF_CAP_PREVIEW_ON))
10450 + n_cmd = 0;
10451 + } else {
10452 + writel(readl(camregs + S3C2440_CAM_REG_CIPRSCCTRL) &
10453 + ~SCALERSTART, camregs + S3C2440_CAM_REG_CIPRSCCTRL);
10454 + n_cmd &= ~CAMIF_CAP_PREVIEW_ON;
10455 + if (!(n_cmd & CAMIF_CAP_CODEC_ON))
10456 + n_cmd = 0;
10457 + }
10458 + break;
10459 + default:
10460 + panic("Unexpected \n");
10461 + }
10462 + writel(n_cmd, camregs + S3C2440_CAM_REG_CIIMGCPT);
10463 +
10464 + if (cfg->exec == CAMIF_DMA_OFF_L_IRQ) { /* Last IRQ */
10465 + if (cfg->dma_type & CAMIF_CODEC)
10466 + writel(readl(camregs + S3C2440_CAM_REG_CICOCTRL) |
10467 + LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CICOCTRL);
10468 + else
10469 + writel(readl(camregs + S3C2440_CAM_REG_CIPRCTRL) |
10470 + LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CIPRCTRL);
10471 + }
10472 +#if 0
10473 + else { /* to make internal state machine of CAMERA stop */
10474 + camif_reset(CAMIF_RESET, 0);
10475 + }
10476 +#endif
10477 + return 0;
10478 +}
10479 +
10480 +
10481 +/* LastIRQEn is autoclear */
10482 +void camif_last_irq_en(camif_cfg_t *cfg)
10483 +{
10484 + if ((cfg->exec == CAMIF_BOTH_DMA_ON) || (cfg->dma_type & CAMIF_CODEC))
10485 + writel(readl(camregs + S3C2440_CAM_REG_CICOCTRL) |
10486 + LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CICOCTRL);
10487 +
10488 + if ((cfg->exec == CAMIF_BOTH_DMA_ON) || !(cfg->dma_type & CAMIF_CODEC))
10489 + writel(readl(camregs + S3C2440_CAM_REG_CIPRCTRL) |
10490 + LAST_IRQ_EN, camregs + S3C2440_CAM_REG_CIPRCTRL);
10491 +}
10492 +
10493 +static int
10494 +camif_scaler_internal(u32 srcWidth, u32 dstWidth, u32 *ratio, u32 *shift)
10495 +{
10496 + if(srcWidth>=64*dstWidth){
10497 + printk(KERN_ERR"CAMERA:out of prescaler range: srcWidth /dstWidth = %d(< 64)\n",
10498 + srcWidth/dstWidth);
10499 + return 1;
10500 + }
10501 + else if(srcWidth>=32*dstWidth){
10502 + *ratio=32;
10503 + *shift=5;
10504 + }
10505 + else if(srcWidth>=16*dstWidth){
10506 + *ratio=16;
10507 + *shift=4;
10508 + }
10509 + else if(srcWidth>=8*dstWidth){
10510 + *ratio=8;
10511 + *shift=3;
10512 + }
10513 + else if(srcWidth>=4*dstWidth){
10514 + *ratio=4;
10515 + *shift=2;
10516 + }
10517 + else if(srcWidth>=2*dstWidth){
10518 + *ratio=2;
10519 + *shift=1;
10520 + }
10521 + else {
10522 + *ratio=1;
10523 + *shift=0;
10524 + }
10525 + return 0;
10526 +}
10527 +
10528 +
10529 +int camif_g_fifo_status(camif_cfg_t *cfg)
10530 +{
10531 + u32 reg;
10532 +
10533 + if (cfg->dma_type & CAMIF_CODEC) {
10534 + u32 flag = CO_OVERFLOW_Y | CO_OVERFLOW_CB | CO_OVERFLOW_CR;
10535 + reg = readl(camregs + S3C2440_CAM_REG_CICOSTATUS);
10536 + if (reg & flag) {
10537 + printk("CODEC: FIFO error(0x%08x) and corrected\n",reg);
10538 + /* FIFO Error Count ++ */
10539 + writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) |
10540 + CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR,
10541 + camregs + S3C2440_CAM_REG_CIWDOFST);
10542 +
10543 + writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) &
10544 + ~(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR),
10545 + camregs + S3C2440_CAM_REG_CIWDOFST);
10546 + return 1; /* Error */
10547 + }
10548 + }
10549 + if (cfg->dma_type & CAMIF_PREVIEW) {
10550 + u32 flag = PR_OVERFLOW_CB | PR_OVERFLOW_CR;
10551 + reg = readl(camregs + S3C2440_CAM_REG_CIPRSTATUS);
10552 + if (reg & flag) {
10553 + printk("PREVIEW:FIFO error(0x%08x) and corrected\n",reg);
10554 + writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) |
10555 + CO_FIFO_CB | CO_FIFO_CR,
10556 + camregs + S3C2440_CAM_REG_CIWDOFST);
10557 +
10558 + writel(readl(camregs + S3C2440_CAM_REG_CIWDOFST) &
10559 + ~(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR),
10560 + camregs + S3C2440_CAM_REG_CIWDOFST);
10561 + /* FIFO Error Count ++ */
10562 + return 1; /* Error */
10563 + }
10564 + }
10565 + return 0; /* No Error */
10566 +}
10567 +
10568 +
10569 +/* Policy:
10570 + * if codec or preview define the win offset,
10571 + * other must follow that value.
10572 + */
10573 +int camif_win_offset(camif_gc_t *gc )
10574 +{
10575 + u32 h = gc->win_hor_ofst;
10576 + u32 v = gc->win_ver_ofst;
10577 +
10578 + /*Clear Overflow */
10579 + writel(CO_FIFO_Y | CO_FIFO_CB | CO_FIFO_CR | PR_FIFO_CB | PR_FIFO_CB,
10580 + camregs + S3C2440_CAM_REG_CIWDOFST);
10581 + writel(0, camregs + S3C2440_CAM_REG_CIWDOFST);
10582 +
10583 + if (!h && !v) {
10584 + writel(0, camregs + S3C2440_CAM_REG_CIWDOFST);
10585 + return 0;
10586 + }
10587 +
10588 + writel(WINOFEN | WINHOROFST(h) | WINVEROFST(v), camregs + S3C2440_CAM_REG_CIWDOFST);
10589 + return 0;
10590 +}
10591 +
10592 +/*
10593 + * when you change the resolution in a specific camera,
10594 + * sometimes, it is necessary to change the polarity
10595 + * -- SW.LEE
10596 + */
10597 +static void camif_polarity(camif_gc_t *gc)
10598 +{
10599 + u32 cmd = readl(camregs + S3C2440_CAM_REG_CIGCTRL);;
10600 +
10601 + cmd = cmd & ~(BIT26|BIT25|BIT24); /* clear polarity */
10602 + if (gc->polarity_pclk)
10603 + cmd |= GC_INVPOLPCLK;
10604 + if (gc->polarity_vsync)
10605 + cmd |= GC_INVPOLVSYNC;
10606 + if (gc->polarity_href)
10607 + cmd |= GC_INVPOLHREF;
10608 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
10609 + cmd, camregs + S3C2440_CAM_REG_CIGCTRL);
10610 +}
10611 +
10612 +
10613 +int camif_dynamic_open(camif_cfg_t *cfg)
10614 +{
10615 + camif_win_offset(cfg->gc);
10616 + camif_polarity(cfg->gc);
10617 +
10618 + if(camif_scaler(cfg)) {
10619 + printk(KERN_ERR "CAMERA:Preview Scaler, Change WinHorOfset or Target Size\n");
10620 + return 1;
10621 + }
10622 + camif_target_fmt(cfg);
10623 + if (camif_dma_burst(cfg)) {
10624 + printk(KERN_ERR "CAMERA:DMA Busrt Length Error \n");
10625 + return 1;
10626 + }
10627 + if(camif_malloc(cfg) ) {
10628 + printk(KERN_ERR " Instead of using consistent_alloc()\n"
10629 + " lease use dedicated memory allocation for DMA memory\n");
10630 + return -1;
10631 + }
10632 + camif_pingpong(cfg);
10633 + return 0;
10634 +}
10635 +
10636 +int camif_dynamic_close(camif_cfg_t *cfg)
10637 +{
10638 + camif_demalloc(cfg);
10639 + return 0;
10640 +}
10641 +
10642 +static int camif_target_area(camif_cfg_t *cfg)
10643 +{
10644 + u32 rect = cfg->target_x * cfg->target_y;
10645 +
10646 + if (cfg->dma_type & CAMIF_CODEC)
10647 + writel(rect, camregs + S3C2440_CAM_REG_CICOTAREA);
10648 +
10649 + if (cfg->dma_type & CAMIF_PREVIEW)
10650 + writel(rect, camregs + S3C2440_CAM_REG_CIPRTAREA);
10651 +
10652 + return 0;
10653 +}
10654 +
10655 +static int inline camif_hw_reg(camif_cfg_t *cfg)
10656 +{
10657 + u32 cmd = 0;
10658 +
10659 + if (cfg->dma_type & CAMIF_CODEC) {
10660 + writel(PRE_SHIFT(cfg->sc.shfactor) |
10661 + PRE_HRATIO(cfg->sc.prehratio) |
10662 + PRE_VRATIO(cfg->sc.prevratio),
10663 + camregs + S3C2440_CAM_REG_CICOSCPRERATIO);
10664 + writel(PRE_DST_WIDTH(cfg->sc.predst_x) |
10665 + PRE_DST_HEIGHT(cfg->sc.predst_y),
10666 + camregs + S3C2440_CAM_REG_CICOSCPREDST);
10667 +
10668 + /* Differ from Preview */
10669 + if (cfg->sc.scalerbypass)
10670 + cmd |= SCALERBYPASS;
10671 + if (cfg->sc.scaleup_h & cfg->sc.scaleup_v)
10672 + cmd |= BIT30|BIT29;
10673 + writel(cmd | MAIN_HRATIO(cfg->sc.mainhratio) |
10674 + MAIN_VRATIO(cfg->sc.mainvratio),
10675 + camregs + S3C2440_CAM_REG_CICOSCCTRL);
10676 + return 0;
10677 + }
10678 + if (cfg->dma_type & CAMIF_PREVIEW) {
10679 + writel(PRE_SHIFT(cfg->sc.shfactor) |
10680 + PRE_HRATIO(cfg->sc.prehratio) |
10681 + PRE_VRATIO(cfg->sc.prevratio),
10682 + camregs + S3C2440_CAM_REG_CIPRSCPRERATIO);
10683 + writel(PRE_DST_WIDTH(cfg->sc.predst_x) |
10684 + PRE_DST_HEIGHT(cfg->sc.predst_y),
10685 + camregs + S3C2440_CAM_REG_CIPRSCPREDST);
10686 + /* Differ from Codec */
10687 + if (cfg->fmt & CAMIF_RGB24)
10688 + cmd |= RGB_FMT24;
10689 + if (cfg->sc.scaleup_h & cfg->sc.scaleup_v)
10690 + cmd |= BIT29 | BIT28;
10691 + writel(cmd | MAIN_HRATIO(cfg->sc.mainhratio) | S_METHOD |
10692 + MAIN_VRATIO(cfg->sc.mainvratio),
10693 + camregs + S3C2440_CAM_REG_CIPRSCCTRL);
10694 + return 0;
10695 + }
10696 +
10697 + panic("CAMERA:DMA_TYPE Wrong \n");
10698 + return 0;
10699 +}
10700 +
10701 +
10702 +/* Configure Pre-scaler control & main scaler control register */
10703 +static int camif_scaler(camif_cfg_t *cfg)
10704 +{
10705 + int tx = cfg->target_x, ty = cfg->target_y;
10706 + int sx, sy;
10707 +
10708 + if (tx <= 0 || ty <= 0)
10709 + panic("CAMERA: Invalid target size \n");
10710 +
10711 + sx = cfg->gc->source_x - 2 * cfg->gc->win_hor_ofst;
10712 + sy = cfg->gc->source_y - 2 * cfg->gc->win_ver_ofst;
10713 + if (sx <= 0 || sy <= 0)
10714 + panic("CAMERA: Invalid source size \n");
10715 +
10716 + cfg->sc.modified_src_x = sx;
10717 + cfg->sc.modified_src_y = sy;
10718 +
10719 + /* Pre-scaler control register 1 */
10720 + camif_scaler_internal(sx, tx, &cfg->sc.prehratio, &cfg->sc.hfactor);
10721 + camif_scaler_internal(sy, ty, &cfg->sc.prevratio, &cfg->sc.vfactor);
10722 +
10723 + if (cfg->dma_type & CAMIF_PREVIEW)
10724 + if ((sx / cfg->sc.prehratio) > 640) {
10725 + printk(KERN_INFO "CAMERA: Internal Preview line "
10726 + "buffer is 640 pixels\n");
10727 + return 1; /* Error */
10728 + }
10729 +
10730 + cfg->sc.shfactor = 10 - (cfg->sc.hfactor + cfg->sc.vfactor);
10731 + /* Pre-scaler control register 2 */
10732 + cfg->sc.predst_x = sx / cfg->sc.prehratio;
10733 + cfg->sc.predst_y = sy / cfg->sc.prevratio;
10734 +
10735 + /* Main-scaler control register */
10736 + cfg->sc.mainhratio = (sx << 8) / (tx << cfg->sc.hfactor);
10737 + cfg->sc.mainvratio = (sy << 8) / (ty << cfg->sc.vfactor);
10738 + DPRINTK(" sx %d, sy %d tx %d ty %d \n", sx, sy, tx, ty);
10739 + DPRINTK(" hfactor %d vfactor %d \n",cfg->sc.hfactor, cfg->sc.vfactor);
10740 +
10741 + cfg->sc.scaleup_h = (sx <= tx) ? 1: 0;
10742 + cfg->sc.scaleup_v = (sy <= ty) ? 1: 0;
10743 + if (cfg->sc.scaleup_h != cfg->sc.scaleup_v)
10744 + printk(KERN_ERR "scaleup_h must be same to scaleup_v \n");
10745 +
10746 + camif_hw_reg(cfg);
10747 + camif_target_area(cfg);
10748 +
10749 + return 0;
10750 +}
10751 +
10752 +/******************************************************
10753 + CalculateBurstSize - Calculate the busrt lengths
10754 + Description:
10755 + - dstHSize: the number of the byte of H Size.
10756 +********************************************************/
10757 +static void camif_g_bsize(u32 hsize, u32 *mburst, u32 *rburst)
10758 +{
10759 + u32 tmp;
10760 +
10761 + tmp = (hsize / 4) % 16;
10762 + switch(tmp) {
10763 + case 0:
10764 + *mburst=16;
10765 + *rburst=16;
10766 + break;
10767 + case 4:
10768 + *mburst=16;
10769 + *rburst=4;
10770 + break;
10771 + case 8:
10772 + *mburst=16;
10773 + *rburst=8;
10774 + break;
10775 + default:
10776 + tmp=(hsize / 4) % 8;
10777 + switch(tmp) {
10778 + case 0:
10779 + *mburst = 8;
10780 + *rburst = 8;
10781 + break;
10782 + case 4:
10783 + *mburst = 8;
10784 + *rburst = 4;
10785 + default:
10786 + *mburst = 4;
10787 + tmp = (hsize / 4) % 4;
10788 + *rburst= (tmp) ? tmp: 4;
10789 + break;
10790 + }
10791 + break;
10792 + }
10793 +}
10794 +
10795 +/* SXGA 1028x1024*/
10796 +/* XGA 1024x768 */
10797 +/* SVGA 800x600 */
10798 +/* VGA 640x480 */
10799 +/* CIF 352x288 */
10800 +/* QVGA 320x240 */
10801 +/* QCIF 176x144 */
10802 +/* ret val
10803 + 1 : DMA Size Error
10804 +*/
10805 +#define BURST_ERR 1
10806 +static int camif_dma_burst(camif_cfg_t *cfg)
10807 +{
10808 + int width = cfg->target_x;
10809 +
10810 + if (cfg->dma_type & CAMIF_CODEC ) {
10811 + u32 yburst_m, yburst_r;
10812 + u32 cburst_m, cburst_r;
10813 + /* CODEC DMA WIDHT is multiple of 16 */
10814 + if (width % 16)
10815 + return BURST_ERR; /* DMA Burst Length Error */
10816 + camif_g_bsize(width, &yburst_m, &yburst_r);
10817 + camif_g_bsize(width / 2, &cburst_m, &cburst_r);
10818 +
10819 + writel(YBURST_M(yburst_m) | CBURST_M(cburst_m) |
10820 + YBURST_R(yburst_r) | CBURST_R(cburst_r),
10821 + camregs + S3C2440_CAM_REG_CICOCTRL);
10822 + }
10823 +
10824 + if (cfg->dma_type & CAMIF_PREVIEW) {
10825 + u32 rgburst_m, rgburst_r;
10826 + if(cfg->fmt == CAMIF_RGB24) {
10827 + if (width % 2)
10828 + return BURST_ERR; /* DMA Burst Length Error */
10829 + camif_g_bsize(width*4,&rgburst_m,&rgburst_r);
10830 + } else { /* CAMIF_RGB16 */
10831 + if ((width / 2) %2)
10832 + return BURST_ERR; /* DMA Burst Length Error */
10833 + camif_g_bsize(width*2,&rgburst_m,&rgburst_r);
10834 + }
10835 +
10836 + writel(RGBURST_M(rgburst_m) | RGBURST_R(rgburst_r),
10837 + camregs + S3C2440_CAM_REG_CIPRCTRL);
10838 + }
10839 + return 0;
10840 +}
10841 +
10842 +static int camif_gpio_init(void)
10843 +{
10844 +#ifdef CONFIG_ARCH_S3C24A0A
10845 + /* S3C24A0A has the dedicated signal pins for Camera */
10846 +#else
10847 + s3c2410_gpio_cfgpin(S3C2440_GPJ0, S3C2440_GPJ0_CAMDATA0);
10848 + s3c2410_gpio_cfgpin(S3C2440_GPJ1, S3C2440_GPJ1_CAMDATA1);
10849 + s3c2410_gpio_cfgpin(S3C2440_GPJ2, S3C2440_GPJ2_CAMDATA2);
10850 + s3c2410_gpio_cfgpin(S3C2440_GPJ3, S3C2440_GPJ3_CAMDATA3);
10851 + s3c2410_gpio_cfgpin(S3C2440_GPJ4, S3C2440_GPJ4_CAMDATA4);
10852 + s3c2410_gpio_cfgpin(S3C2440_GPJ5, S3C2440_GPJ5_CAMDATA5);
10853 + s3c2410_gpio_cfgpin(S3C2440_GPJ6, S3C2440_GPJ6_CAMDATA6);
10854 + s3c2410_gpio_cfgpin(S3C2440_GPJ7, S3C2440_GPJ7_CAMDATA7);
10855 +
10856 + s3c2410_gpio_cfgpin(S3C2440_GPJ8, S3C2440_GPJ8_CAMPCLK);
10857 + s3c2410_gpio_cfgpin(S3C2440_GPJ9, S3C2440_GPJ9_CAMVSYNC);
10858 + s3c2410_gpio_cfgpin(S3C2440_GPJ10, S3C2440_GPJ10_CAMHREF);
10859 + s3c2410_gpio_cfgpin(S3C2440_GPJ11, S3C2440_GPJ11_CAMCLKOUT);
10860 + s3c2410_gpio_cfgpin(S3C2440_GPJ12, S3C2440_GPJ12_CAMRESET);
10861 +#endif
10862 + return 0;
10863 +}
10864 +
10865 +
10866 +#define ROUND_ADD 0x100000
10867 +
10868 +#ifdef CONFIG_ARCH_S3C24A0A
10869 +int camif_clock_init(camif_gc_t *gc)
10870 +{
10871 + unsigned int upll, camclk_div, camclk;
10872 +
10873 + if (!gc) camclk = 24000000;
10874 + else {
10875 + camclk = gc->camclk;
10876 + if (camclk > 48000000)
10877 + printk(KERN_ERR "Wrong Camera Clock\n");
10878 + }
10879 +
10880 + CLKCON |= CLKCON_CAM_UPLL | CLKCON_CAM_HCLK;
10881 + upll = get_bus_clk(GET_UPLL);
10882 + printk(KERN_INFO "CAMERA:Default UPLL %08d and Assing 96Mhz to UPLL\n",upll);
10883 + UPLLCON = FInsrt(56, fPLL_MDIV) | FInsrt(2, fPLL_PDIV)| FInsrt(1, fPLL_SDIV);
10884 + upll = get_bus_clk(GET_UPLL);
10885 +
10886 + camclk_div = (upll+ROUND_ADD) / camclk - 1;
10887 + CLKDIVN = (CLKDIVN & 0xFF) | CLKDIVN_CAM(camclk_div);
10888 + printk(KERN_INFO"CAMERA:upll %d MACRO 0x%08X CLKDIVN 0x%08X \n",
10889 + upll, CLKDIVN_CAM(camclk_div), CLKDIVN);
10890 + writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT); /* Dummy ? */
10891 +
10892 + return 0;
10893 +}
10894 +#else
10895 +int camif_clock_init(camif_gc_t *gc)
10896 +{
10897 + unsigned int camclk;
10898 + struct clk *clk_camif = clk_get(NULL, "camif");
10899 + struct clk *clk_camif_upll = clk_get(NULL, "camif-upll");
10900 +
10901 + if (!gc)
10902 + camclk = 24000000;
10903 + else {
10904 + camclk = gc->camclk;
10905 + if (camclk > 48000000)
10906 + printk(KERN_ERR "Wrong Camera Clock\n");
10907 + }
10908 +
10909 + clk_set_rate(clk_camif, camclk);
10910 +
10911 + clk_enable(clk_camif);
10912 + clk_enable(clk_camif_upll);
10913 +
10914 +
10915 +#if 0
10916 + CLKCON |= CLKCON_CAMIF;
10917 + upll = elfin_get_bus_clk(GET_UPLL);
10918 + printk(KERN_INFO "CAMERA:Default UPLL %08d and Assing 96Mhz to UPLL\n",upll);
10919 + {
10920 + UPLLCON = FInsrt(60, fPLL_MDIV) | FInsrt(4, fPLL_PDIV)| FInsrt(1, fPLL_SDIV);
10921 + CLKDIVN |= DIVN_UPLL; /* For USB */
10922 + upll = elfin_get_bus_clk(GET_UPLL);
10923 + }
10924 +
10925 + camclk_div = (upll+ROUND_ADD) /(camclk * 2) -1;
10926 + CAMDIVN = CAMCLK_SET_DIV|(camclk_div&0xf);
10927 + printk(KERN_INFO "CAMERA:upll %08d cam_clk %08d CAMDIVN 0x%08x \n",upll,camclk, CAMDIVN);
10928 +#endif
10929 + writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT); /* Dummy ? */
10930 +
10931 + return 0;
10932 +}
10933 +#endif
10934 +
10935 +/*
10936 + Reset Camera IP in CPU
10937 + Reset External Sensor
10938 + */
10939 +void camif_reset(int is, int delay)
10940 +{
10941 + switch (is) {
10942 + case CAMIF_RESET:
10943 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
10944 + GC_SWRST,
10945 + camregs + S3C2440_CAM_REG_CIGCTRL);
10946 + mdelay(1);
10947 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
10948 + ~GC_SWRST,
10949 + camregs + S3C2440_CAM_REG_CIGCTRL);
10950 + break;
10951 + case CAMIF_EX_RESET_AH: /*Active High */
10952 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
10953 + ~GC_CAMRST,
10954 + camregs + S3C2440_CAM_REG_CIGCTRL);
10955 + udelay(200);
10956 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
10957 + GC_CAMRST,
10958 + camregs + S3C2440_CAM_REG_CIGCTRL);
10959 + udelay(delay);
10960 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
10961 + ~GC_CAMRST,
10962 + camregs + S3C2440_CAM_REG_CIGCTRL);
10963 + break;
10964 + case CAMIF_EX_RESET_AL: /*Active Low */
10965 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
10966 + GC_CAMRST,
10967 + camregs + S3C2440_CAM_REG_CIGCTRL);
10968 + udelay(200);
10969 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) &
10970 + ~GC_CAMRST,
10971 + camregs + S3C2440_CAM_REG_CIGCTRL);
10972 + udelay(delay);
10973 + writel(readl(camregs + S3C2440_CAM_REG_CIGCTRL) |
10974 + GC_CAMRST,
10975 + camregs + S3C2440_CAM_REG_CIGCTRL);
10976 + break;
10977 + default:
10978 + break;
10979 + }
10980 +}
10981 +
10982 +/* For Camera Operation,
10983 + * we can give the high priority to REQ2 of ARBITER1
10984 + */
10985 +
10986 +/* Please move me into proper place
10987 + * camif_gc_t is not because "rmmod imgsenor" will delete the instance of camif_gc_t
10988 + */
10989 +static u32 old_priority;
10990 +
10991 +static void camif_bus_priority(int flag)
10992 +{
10993 + if (flag) {
10994 +#ifdef CONFIG_ARCH_S3C24A0A
10995 + old_priority = PRIORITY0;
10996 + PRIORITY0 = PRIORITY_I_FIX;
10997 + PRIORITY1 = PRIORITY_I_FIX;
10998 +
10999 +#else
11000 + old_priority = readl(S3C2410_PRIORITY);
11001 + writel(readl(S3C2410_PRIORITY) & ~(3<<7), S3C2410_PRIORITY);
11002 + writel(readl(S3C2410_PRIORITY) | (1<<7), S3C2410_PRIORITY); /* Arbiter 1, REQ2 first */
11003 + writel(readl(S3C2410_PRIORITY) & ~(1<<1), S3C2410_PRIORITY); /* Disable Priority Rotate */
11004 +#endif
11005 + }
11006 + else {
11007 +#ifdef CONFIG_ARCH_S3C24A0A
11008 + PRIORITY0 = old_priority;
11009 + PRIORITY1 = old_priority;
11010 +#else
11011 + writel(old_priority, S3C2410_PRIORITY);
11012 +#endif
11013 + }
11014 +}
11015 +
11016 +static void inline camif_clock_off(void)
11017 +{
11018 +#if defined (CONFIG_ARCH_S3C24A0A)
11019 + writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);
11020 +
11021 + CLKCON &= ~CLKCON_CAM_UPLL;
11022 + CLKCON &= ~CLKCON_CAM_HCLK;
11023 +#else
11024 + struct clk *clk_camif = clk_get(NULL, "camif");
11025 + struct clk *clk_camif_upll = clk_get(NULL, "camif-upll");
11026 +
11027 + writel(0, camregs + S3C2440_CAM_REG_CIIMGCPT);
11028 +
11029 + clk_disable(clk_camif);
11030 + clk_disable(clk_camif_upll);
11031 +#endif
11032 +}
11033 +
11034 +
11035 +/* Init external image sensor
11036 + * Before make some value into image senor,
11037 + * you must set up the pixel clock.
11038 + */
11039 +void camif_setup_sensor(void)
11040 +{
11041 + camif_reset(CAMIF_RESET, 0);
11042 + camif_gpio_init();
11043 + camif_clock_init(NULL);
11044 +/* Sometimes ,Before loading I2C module, we need the reset signal */
11045 +#ifdef CONFIG_ARCH_S3C24A0A
11046 + camif_reset(CAMIF_EX_RESET_AL,1000);
11047 +#else
11048 + camif_reset(CAMIF_EX_RESET_AH,1000);
11049 +#endif
11050 +}
11051 +
11052 +void camif_hw_close(camif_cfg_t *cfg)
11053 +{
11054 + camif_bus_priority(0);
11055 + camif_clock_off();
11056 +}
11057 +
11058 +void camif_hw_open(camif_gc_t *gc)
11059 +{
11060 + camif_source_fmt(gc);
11061 + camif_win_offset(gc);
11062 + camif_bus_priority(1);
11063 +}
11064 +
11065 +
11066 +
11067 +/*
11068 + * Local variables:
11069 + * tab-width: 8
11070 + * c-indent-level: 8
11071 + * c-basic-offset: 8
11072 + * c-set-style: "K&R"
11073 + * End:
11074 + */
11075 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/camif_fsm.c
11076 ===================================================================
11077 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
11078 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/camif_fsm.c 2009-01-02 00:01:56.000000000 +0100
11079 @@ -0,0 +1,432 @@
11080 +/*
11081 + Copyright (C) 2004 Samsung Electronics
11082 + SW.LEE <hitchcar@sec.samsung.com>
11083 +
11084 + This program is free software; you can redistribute it and/or modify
11085 + it under the terms of the GNU General Public License as published by
11086 + the Free Software Foundation; either version 2 of the License, or
11087 + (at your option) any later version.
11088 +*/
11089 +
11090 +#include <linux/version.h>
11091 +#include <linux/module.h>
11092 +#include <linux/delay.h>
11093 +#include <linux/errno.h>
11094 +#include <linux/fs.h>
11095 +#include <linux/kernel.h>
11096 +#include <linux/major.h>
11097 +#include <linux/slab.h>
11098 +#include <linux/poll.h>
11099 +#include <linux/signal.h>
11100 +#include <linux/ioport.h>
11101 +#include <linux/sched.h>
11102 +#include <linux/types.h>
11103 +#include <linux/interrupt.h>
11104 +#include <linux/kmod.h>
11105 +#include <linux/vmalloc.h>
11106 +#include <linux/init.h>
11107 +#include <linux/pagemap.h>
11108 +#include <asm/io.h>
11109 +#include <asm/irq.h>
11110 +#include <asm/semaphore.h>
11111 +#include <linux/miscdevice.h>
11112 +
11113 +#define CONFIG_VIDEO_V4L1_COMPAT
11114 +#include <linux/videodev.h>
11115 +#include "camif.h"
11116 +
11117 +//#define SW_DEBUG
11118 +static void camif_start_p_with_c(camif_cfg_t *cfg);
11119 +
11120 +#include "camif.h"
11121 +const char *fsm_version =
11122 + "$Id: camif_fsm.c,v 1.3 2004/04/27 10:26:28 swlee Exp $";
11123 +
11124 +
11125 +/*
11126 + * FSM function is the place where Synchronization in not necessary
11127 + * because IRS calls this functions.
11128 + */
11129 +
11130 +ssize_t camif_p_1fsm_start(camif_cfg_t *cfg)
11131 +{
11132 + //camif_reset(CAMIF_RESET,0);
11133 + cfg->exec = CAMIF_DMA_ON;
11134 + camif_capture_start(cfg);
11135 + camif_last_irq_en(cfg);
11136 + cfg->status = CAMIF_STARTED;
11137 + cfg->fsm = CAMIF_1nd_INT;
11138 + return 0;
11139 +}
11140 +
11141 +
11142 +ssize_t camif_p_2fsm_start(camif_cfg_t *cfg)
11143 +{
11144 + camif_reset(CAMIF_RESET,0);/* FIFO Count goes to zero */
11145 + cfg->exec = CAMIF_DMA_ON;
11146 + camif_capture_start(cfg);
11147 + cfg->status = CAMIF_STARTED;
11148 + cfg->fsm = CAMIF_1nd_INT;
11149 + return 0;
11150 +}
11151 +
11152 +
11153 +ssize_t camif_4fsm_start(camif_cfg_t *cfg)
11154 +{
11155 + camif_reset(CAMIF_RESET,0); /* FIFO Count goes to zero */
11156 + cfg->exec = CAMIF_DMA_ON;
11157 + camif_capture_start(cfg);
11158 + cfg->status = CAMIF_STARTED;
11159 + cfg->fsm = CAMIF_1nd_INT;
11160 + cfg->perf.frames = 0;
11161 + return 0;
11162 +}
11163 +
11164 +
11165 +/* Policy:
11166 + cfg->perf.frames set in camif_fsm.c
11167 + cfg->status set in video-driver.c
11168 + */
11169 +
11170 +/*
11171 + * Don't insert camif_reset(CAM_RESET, 0 ) into this func
11172 + */
11173 +ssize_t camif_p_stop(camif_cfg_t *cfg)
11174 +{
11175 + cfg->exec = CAMIF_DMA_OFF;
11176 +// cfg->status = CAMIF_STOPPED;
11177 + camif_capture_stop(cfg);
11178 + cfg->perf.frames = 0; /* Dupplicated ? */
11179 + return 0;
11180 +}
11181 +
11182 +/* When C working, P asks C to play togehter */
11183 +/* Only P must call this function */
11184 +void camif_start_c_with_p (camif_cfg_t *cfg, camif_cfg_t *other)
11185 +{
11186 +// cfg->gc->other = get_camif(CODEC_MINOR);
11187 + cfg->gc->other = other;
11188 + camif_start_p_with_c(cfg);
11189 +}
11190 +
11191 +static void camif_start_p_with_c(camif_cfg_t *cfg)
11192 +{
11193 + camif_cfg_t *other = (camif_cfg_t *)cfg->gc->other;
11194 + /* Preview Stop */
11195 + cfg->exec = CAMIF_DMA_OFF;
11196 + camif_capture_stop(cfg);
11197 + /* Start P and C */
11198 + camif_reset(CAMIF_RESET, 0);
11199 + cfg->exec =CAMIF_BOTH_DMA_ON;
11200 + camif_capture_start(cfg);
11201 + cfg->fsm = CAMIF_1nd_INT; /* For Preview */
11202 + if(!other) panic("Unexpected Error \n");
11203 + other->fsm = CAMIF_1nd_INT; /* For Preview */
11204 +}
11205 +
11206 +static void camif_auto_restart(camif_cfg_t *cfg)
11207 +{
11208 +// if (cfg->dma_type & CAMIF_CODEC) return;
11209 + if (cfg->auto_restart)
11210 + camif_start_p_with_c(cfg);
11211 +}
11212 +
11213 +
11214 +/* Supposed that PREVIEW already running
11215 + * request PREVIEW to start with Codec
11216 + */
11217 +static int camif_check_global(camif_cfg_t *cfg)
11218 +{
11219 + int ret = 0;
11220 +
11221 + if (down_interruptible(&cfg->gc->lock))
11222 + return -ERESTARTSYS;
11223 + if ( cfg->gc->status & CWANT2START ) {
11224 + cfg->gc->status &= ~CWANT2START;
11225 + cfg->auto_restart = 1;
11226 + ret = 1;
11227 + }
11228 + else {
11229 + ret = 0; /* There is no codec */
11230 + cfg->auto_restart = 0; /* Duplicated ..Dummy */
11231 + }
11232 +
11233 + up(&cfg->gc->lock);
11234 +
11235 + return ret;
11236 +}
11237 +
11238 +/*
11239 + * 1nd INT : Start Interrupt
11240 + * Xnd INT : enable Last IRQ : pingpong get the valid data
11241 + * Ynd INT : Stop Codec or Preview : pingpong get the valid data
11242 + * Znd INT : Last IRQ : valid data
11243 + */
11244 +#define CHECK_FREQ 5
11245 +int camif_enter_p_4fsm(camif_cfg_t *cfg)
11246 +{
11247 + int ret = 0;
11248 +
11249 + cfg->perf.frames++;
11250 + if (cfg->fsm == CAMIF_NORMAL_INT)
11251 + if (cfg->perf.frames % CHECK_FREQ == 0)
11252 + ret = camif_check_global(cfg);
11253 + if (ret > 0) cfg->fsm = CAMIF_Xnd_INT; /* Codec wait for Preview */
11254 +
11255 + switch (cfg->fsm) {
11256 + case CAMIF_1nd_INT: /* Start IRQ */
11257 + cfg->fsm = CAMIF_NORMAL_INT;
11258 + ret = INSTANT_SKIP;
11259 + DPRINTK(KERN_INFO "1nd INT \n");
11260 + break;
11261 + case CAMIF_NORMAL_INT:
11262 + cfg->status = CAMIF_INT_HAPPEN;
11263 + cfg->fsm = CAMIF_NORMAL_INT;
11264 + ret = INSTANT_GO;
11265 + DPRINTK(KERN_INFO "NORMAL INT \n");
11266 + break;
11267 + case CAMIF_Xnd_INT:
11268 + camif_last_irq_en(cfg);/* IRQ for Enabling LAST IRQ */
11269 + cfg->status = CAMIF_INT_HAPPEN;
11270 + cfg->fsm = CAMIF_Ynd_INT;
11271 + ret = INSTANT_GO;
11272 + DPRINTK(KERN_INFO "Xnd INT \n");
11273 + break;
11274 + case CAMIF_Ynd_INT: /* Capture Stop */
11275 + cfg->exec = CAMIF_DMA_OFF;
11276 + cfg->status = CAMIF_INT_HAPPEN;
11277 + camif_capture_stop(cfg);
11278 + cfg->fsm = CAMIF_Znd_INT;
11279 + ret = INSTANT_GO;
11280 + DPRINTK(KERN_INFO "Ynd INT \n");
11281 + break;
11282 + case CAMIF_Znd_INT: /* LAST IRQ (Dummy IRQ */
11283 + cfg->fsm = CAMIF_DUMMY_INT;
11284 + cfg->status = CAMIF_INT_HAPPEN;
11285 + ret = INSTANT_GO;
11286 + camif_auto_restart(cfg); /* Automatically Restart Camera */
11287 + DPRINTK(KERN_INFO "Znd INT \n");
11288 + break;
11289 + case CAMIF_DUMMY_INT:
11290 + cfg->status = CAMIF_STOPPED; /* Dupplicate ? */
11291 + ret = INSTANT_SKIP;
11292 +// DPRINTK(KERN_INFO "Dummy INT \n");
11293 + break;
11294 + default:
11295 + printk(KERN_INFO "Unexpect INT %d \n",cfg->fsm);
11296 + ret = INSTANT_SKIP;
11297 + break;
11298 + }
11299 + return ret;
11300 +}
11301 +
11302 +
11303 +/*
11304 + * NO autorestart included in this function
11305 + */
11306 +int camif_enter_c_4fsm(camif_cfg_t *cfg)
11307 +{
11308 + int ret;
11309 +
11310 + cfg->perf.frames++;
11311 +#if 0
11312 + if ( (cfg->fsm==CAMIF_NORMAL_INT)
11313 + && (cfg->perf.frames>cfg->restart_limit-1)
11314 + )
11315 + cfg->fsm = CAMIF_Xnd_INT;
11316 +#endif
11317 + switch (cfg->fsm) {
11318 + case CAMIF_1nd_INT: /* Start IRQ */
11319 + cfg->fsm = CAMIF_NORMAL_INT;
11320 +// cfg->status = CAMIF_STARTED; /* need this to meet auto-restart */
11321 + ret = INSTANT_SKIP;
11322 + DPRINTK(KERN_INFO "1nd INT \n");
11323 + break;
11324 + case CAMIF_NORMAL_INT:
11325 + cfg->status = CAMIF_INT_HAPPEN;
11326 + cfg->fsm = CAMIF_NORMAL_INT;
11327 + ret = INSTANT_GO;
11328 + DPRINTK(KERN_INFO "NORMALd INT \n");
11329 + break;
11330 + case CAMIF_Xnd_INT:
11331 + camif_last_irq_en(cfg);/* IRQ for Enabling LAST IRQ */
11332 + cfg->status = CAMIF_INT_HAPPEN;
11333 + cfg->fsm = CAMIF_Ynd_INT;
11334 + ret = INSTANT_GO;
11335 + DPRINTK(KERN_INFO "Xnd INT \n");
11336 + break;
11337 + case CAMIF_Ynd_INT: /* Capture Stop */
11338 + cfg->exec = CAMIF_DMA_OFF;
11339 + cfg->status = CAMIF_INT_HAPPEN;
11340 + camif_capture_stop(cfg);
11341 + cfg->fsm = CAMIF_Znd_INT;
11342 + ret = INSTANT_GO;
11343 + DPRINTK(KERN_INFO "Ynd INT \n");
11344 + break;
11345 + case CAMIF_Znd_INT: /* LAST IRQ (Dummy IRQ */
11346 + cfg->fsm = CAMIF_DUMMY_INT;
11347 + cfg->status = CAMIF_INT_HAPPEN;
11348 + ret = INSTANT_GO;
11349 + DPRINTK(KERN_INFO "Znd INT \n");
11350 + break;
11351 + case CAMIF_DUMMY_INT:
11352 + cfg->status = CAMIF_STOPPED; /* Dupplicate ? */
11353 + ret = INSTANT_SKIP;
11354 + break;
11355 + default:
11356 + printk(KERN_INFO "Unexpect INT %d \n",cfg->fsm);
11357 + ret = INSTANT_SKIP;
11358 + break;
11359 + }
11360 + return ret;
11361 +}
11362 +
11363 +/* 4 Interrups State Machine is for two pingpong
11364 + * 1nd INT : Start Interrupt
11365 + * Xnd INT : enable Last IRQ : pingpong get the valid data
11366 + * Ynd INT : Stop Codec or Preview : pingpong get the valid data
11367 + * Znd INT : Last IRQ : valid data
11368 + *
11369 + * Note:
11370 + * Before calling this func, you must call camif_reset
11371 + */
11372 +
11373 +int camif_enter_2fsm(camif_cfg_t *cfg) /* Codec FSM */
11374 +{
11375 + int ret;
11376 +
11377 + cfg->perf.frames++;
11378 + switch (cfg->fsm) {
11379 + case CAMIF_1nd_INT: /* Start IRQ */
11380 + cfg->fsm = CAMIF_Xnd_INT;
11381 + ret = INSTANT_SKIP;
11382 +// printk(KERN_INFO "1nd INT \n");
11383 + break;
11384 + case CAMIF_Xnd_INT:
11385 + camif_last_irq_en(cfg);/* IRQ for Enabling LAST IRQ */
11386 + cfg->now_frame_num = 0;
11387 + cfg->status = CAMIF_INT_HAPPEN;
11388 + cfg->fsm = CAMIF_Ynd_INT;
11389 + ret = INSTANT_GO;
11390 +// printk(KERN_INFO "2nd INT \n");
11391 + break;
11392 + case CAMIF_Ynd_INT: /* Capture Stop */
11393 + cfg->exec = CAMIF_DMA_OFF;
11394 + cfg->now_frame_num = 1;
11395 + cfg->status = CAMIF_INT_HAPPEN;
11396 + camif_capture_stop(cfg);
11397 + cfg->fsm = CAMIF_Znd_INT;
11398 + ret = INSTANT_GO;
11399 +// printk(KERN_INFO "Ynd INT \n");
11400 + break;
11401 + case CAMIF_Znd_INT: /* LAST IRQ (Dummy IRQ */
11402 + cfg->now_frame_num = 0;
11403 +// cfg->fsm = CAMIF_DUMMY_INT;
11404 + cfg->status = CAMIF_INT_HAPPEN;
11405 + ret = INSTANT_GO;
11406 +// printk(KERN_INFO "Znd INT \n");
11407 + break;
11408 + case CAMIF_DUMMY_INT:
11409 + cfg->status = CAMIF_STOPPED; /* Dupplicate ? */
11410 + ret = INSTANT_SKIP;
11411 + printk(KERN_INFO "Dummy INT \n");
11412 + break;
11413 + default: /* CAMIF_PENDING_INT */
11414 + printk(KERN_INFO "Unexpect INT \n");
11415 + ret = INSTANT_SKIP;
11416 + break;
11417 + }
11418 + return ret;
11419 +}
11420 +
11421 +
11422 +/* 2 Interrups State Machine is for one pingpong
11423 + * 1nd INT : Stop Codec or Preview : pingpong get the valid data
11424 + * 2nd INT : Last IRQ : dummy data
11425 + */
11426 +int camif_enter_1fsm(camif_cfg_t *cfg) /* Codec FSM */
11427 +{
11428 + int ret;
11429 +
11430 + cfg->perf.frames++;
11431 + switch (cfg->fsm) {
11432 + case CAMIF_Ynd_INT: /* IRQ for Enabling LAST IRQ */
11433 + cfg->exec = CAMIF_DMA_OFF;
11434 + camif_capture_stop(cfg);
11435 + cfg->fsm = CAMIF_Znd_INT;
11436 + ret = INSTANT_SKIP;
11437 + // printk(KERN_INFO "Ynd INT \n");
11438 + break;
11439 + case CAMIF_Znd_INT: /* LAST IRQ (Dummy IRQ */
11440 + cfg->fsm = CAMIF_DUMMY_INT;
11441 + cfg->status = CAMIF_INT_HAPPEN;
11442 + ret = INSTANT_GO;
11443 + // printk(KERN_INFO "Znd INT \n");
11444 + break;
11445 + case CAMIF_DUMMY_INT:
11446 + cfg->status = CAMIF_STOPPED; /* Dupplicate ? */
11447 + ret = INSTANT_SKIP;
11448 + printk(KERN_INFO "Dummy INT \n");
11449 + break;
11450 + default:
11451 + printk(KERN_INFO "Unexpect INT \n");
11452 + ret = INSTANT_SKIP;
11453 + break;
11454 + }
11455 + return ret;
11456 +}
11457 +
11458 +
11459 +/*
11460 + * GLOBAL STATUS CONTROL FUNCTION
11461 + *
11462 + */
11463 +
11464 +
11465 +/* Supposed that PREVIEW already running
11466 + * request PREVIEW to start with Codec
11467 + */
11468 +int camif_callback_start(camif_cfg_t *cfg)
11469 +{
11470 + int doit = 1;
11471 + while (doit) {
11472 + if (down_interruptible(&cfg->gc->lock)) {
11473 + return -ERESTARTSYS;
11474 + }
11475 + cfg->gc->status = CWANT2START;
11476 + cfg->gc->other = cfg;
11477 + up(&cfg->gc->lock);
11478 + doit = 0;
11479 + }
11480 + return 0;
11481 +}
11482 +
11483 +/*
11484 + * Return status of Preview Machine
11485 + ret value :
11486 + 0: Preview is not working
11487 + X: Codec must follow PREVIEW start
11488 +*/
11489 +int camif_check_preview(camif_cfg_t *cfg)
11490 +{
11491 + int ret = 0;
11492 +
11493 + if (down_interruptible(&cfg->gc->lock)) {
11494 + ret = -ERESTARTSYS;
11495 + return ret;
11496 + }
11497 + if (cfg->gc->user == 1) ret = 0;
11498 + // else if (cfg->gc->status & PNOTWORKING) ret = 0;
11499 + else ret = 1;
11500 + up(&cfg->gc->lock);
11501 + return ret;
11502 +}
11503 +
11504 +
11505 +
11506 +
11507 +/*
11508 + * Local variables:
11509 + * c-basic-offset: 8
11510 + * End:
11511 + */
11512 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/camif.h
11513 ===================================================================
11514 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
11515 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/camif.h 2009-01-02 00:01:56.000000000 +0100
11516 @@ -0,0 +1,304 @@
11517 +/*
11518 + FIMC2.0 Camera Header File
11519 +
11520 + Copyright (C) 2003 Samsung Electronics (SW.LEE: hitchcar@samsung.com)
11521 +
11522 + Author : SW.LEE <hitchcar@samsung.com>
11523 +
11524 + This program is free software; you can redistribute it and/or modify
11525 + it under the terms of the GNU General Public License as published by
11526 + the Free Software Foundation; either version 2 of the License, or
11527 + (at your option) any later version.
11528 +*
11529 +*/
11530 +
11531 +
11532 +#ifndef __FIMC20_CAMIF_H_
11533 +#define __FIMC20_CAMIF_H_
11534 +
11535 +#ifdef __KERNEL__
11536 +
11537 +#include "bits.h"
11538 +#include "videodev.h"
11539 +#include <asm/types.h>
11540 +#include <linux/i2c.h>
11541 +
11542 +#endif /* __KERNEL__ */
11543 +
11544 +#ifndef O_NONCAP
11545 +#define O_NONCAP O_TRUNC
11546 +#endif
11547 +
11548 +/* Codec or Preview Status */
11549 +#define CAMIF_STARTED BIT1
11550 +#define CAMIF_STOPPED BIT2
11551 +#define CAMIF_INT_HAPPEN BIT3
11552 +
11553 +/* Codec or Preview : Interrupt FSM */
11554 +#define CAMIF_1nd_INT BIT7
11555 +#define CAMIF_Xnd_INT BIT8
11556 +#define CAMIF_Ynd_INT BIT9
11557 +#define CAMIF_Znd_INT BIT10
11558 +#define CAMIF_NORMAL_INT BIT11
11559 +#define CAMIF_DUMMY_INT BIT12
11560 +#define CAMIF_PENDING_INT 0
11561 +
11562 +
11563 +/* CAMIF RESET Definition */
11564 +#define CAMIF_RESET BIT0
11565 +#define CAMIF_EX_RESET_AL BIT1 /* Active Low */
11566 +#define CAMIF_EX_RESET_AH BIT2 /* Active High */
11567 +
11568 +
11569 +enum camif_itu_fmt {
11570 + CAMIF_ITU601 = BIT31,
11571 + CAMIF_ITU656 = 0
11572 +};
11573 +
11574 +/* It is possbie to use two device simultaneously */
11575 +enum camif_dma_type {
11576 + CAMIF_PREVIEW = BIT0,
11577 + CAMIF_CODEC = BIT1,
11578 +};
11579 +
11580 +enum camif_order422 {
11581 + CAMIF_YCBYCR = 0,
11582 + CAMIF_YCRYCB = BIT14,
11583 + CAMIF_CBYCRY = BIT15,
11584 + CAMIF_CRYCBY = BIT14 | BIT15
11585 +};
11586 +
11587 +enum flip_mode {
11588 + CAMIF_FLIP = 0,
11589 + CAMIF_FLIP_X = BIT14,
11590 + CAMIF_FLIP_Y = BIT15,
11591 + CAMIF_FLIP_MIRROR = BIT14 |BIT15,
11592 +};
11593 +
11594 +enum camif_codec_fmt {
11595 + /* Codec part */
11596 + CAMIF_IN_YCBCR420 = BIT0, /* Currently IN_YCBCR format fixed */
11597 + CAMIF_IN_YCBCR422 = BIT1,
11598 + CAMIF_OUT_YCBCR420 = BIT4,
11599 + CAMIF_OUT_YCBCR422 = BIT5,
11600 + /* Preview Part */
11601 + CAMIF_RGB16 = BIT2,
11602 + CAMIF_RGB24 = BIT3,
11603 +};
11604 +
11605 +enum camif_capturing {
11606 + CAMIF_BOTH_DMA_ON = BIT4,
11607 + CAMIF_DMA_ON = BIT3,
11608 + CAMIF_BOTH_DMA_OFF = BIT1,
11609 + CAMIF_DMA_OFF = BIT0,
11610 + /*------------------------*/
11611 + CAMIF_DMA_OFF_L_IRQ= BIT5,
11612 +};
11613 +
11614 +typedef struct camif_performance
11615 +{
11616 + int frames;
11617 + int framesdropped;
11618 + __u64 bytesin;
11619 + __u64 bytesout;
11620 + __u32 reserved[4];
11621 +} camif_perf_t;
11622 +
11623 +
11624 +typedef struct {
11625 + dma_addr_t phys_y;
11626 + dma_addr_t phys_cb;
11627 + dma_addr_t phys_cr;
11628 + u8 *virt_y;
11629 + u8 *virt_cb;
11630 + u8 *virt_cr;
11631 + dma_addr_t phys_rgb;
11632 + u8 *virt_rgb;
11633 +}img_buf_t;
11634 +
11635 +
11636 +/* this structure convers the CIWDOFFST, prescaler, mainscaler */
11637 +typedef struct {
11638 + u32 modified_src_x; /* After windows applyed to source_x */
11639 + u32 modified_src_y;
11640 + u32 hfactor;
11641 + u32 vfactor;
11642 + u32 shfactor; /* SHfactor = 10 - ( hfactor + vfactor ) */
11643 + u32 prehratio;
11644 + u32 prevratio;
11645 + u32 predst_x;
11646 + u32 predst_y;
11647 + u32 scaleup_h;
11648 + u32 scaleup_v;
11649 + u32 mainhratio;
11650 + u32 mainvratio;
11651 + u32 scalerbypass; /* only codec */
11652 +} scaler_t;
11653 +
11654 +
11655 +enum v4l2_status {
11656 + CAMIF_V4L2_INIT = BIT0,
11657 + CAMIF_v4L2_DIRTY = BIT1,
11658 +};
11659 +
11660 +
11661 +/* Global Status Definition */
11662 +#define PWANT2START BIT0
11663 +#define CWANT2START BIT1
11664 +#define BOTH_STARTED (PWANT2START|CWANT2START)
11665 +#define PNOTWORKING BIT4
11666 +#define C_WORKING BIT5
11667 +
11668 +typedef struct {
11669 + struct semaphore lock;
11670 + enum camif_itu_fmt itu_fmt;
11671 + enum camif_order422 order422;
11672 + u32 win_hor_ofst;
11673 + u32 win_ver_ofst;
11674 + u32 camclk; /* External Image Sensor Camera Clock */
11675 + u32 source_x;
11676 + u32 source_y;
11677 + u32 polarity_pclk;
11678 + u32 polarity_vsync;
11679 + u32 polarity_href;
11680 + struct i2c_client *sensor;
11681 + u32 user; /* MAX 2 (codec, preview) */
11682 + u32 old_priority; /* BUS PRIORITY register */
11683 + u32 status;
11684 + u32 init_sensor;/* initializing sensor */
11685 + void *other; /* Codec camif_cfg_t */
11686 + u32 reset_type; /* External Sensor Reset Type */
11687 + u32 reset_udelay;
11688 +} camif_gc_t; /* gobal control register */
11689 +
11690 +
11691 +/* when App want to change v4l2 parameter,
11692 + * we instantly store it into v4l2_t v2
11693 + * and then reflect it to hardware
11694 + */
11695 +typedef struct v4l2 {
11696 + struct v4l2_fmtdesc *fmtdesc;
11697 + struct v4l2_pix_format fmt; /* current pixel format */
11698 + struct v4l2_input input;
11699 + struct video_picture picture;
11700 + enum v4l2_status status;
11701 + int used_fmt ; /* used format index */
11702 +} v4l2_t;
11703 +
11704 +
11705 +typedef struct camif_c_t {
11706 + struct video_device *v;
11707 + /* V4L2 param only for v4l2 driver */
11708 + v4l2_t v2;
11709 + camif_gc_t *gc; /* Common between Codec and Preview */
11710 + /* logical parameter */
11711 + wait_queue_head_t waitq;
11712 + u32 status; /* Start/Stop */
11713 + u32 fsm; /* Start/Stop */
11714 + u32 open_count; /* duplicated */
11715 + int irq;
11716 + char shortname[16];
11717 + u32 target_x;
11718 + u32 target_y;
11719 + scaler_t sc;
11720 + enum flip_mode flip;
11721 + enum camif_dma_type dma_type;
11722 + /* 4 pingpong Frame memory */
11723 + u8 *pp_virt_buf;
11724 + dma_addr_t pp_phys_buf;
11725 + u32 pp_totalsize;
11726 + u32 pp_num; /* used pingpong memory number */
11727 + img_buf_t img_buf[4];
11728 + enum camif_codec_fmt fmt;
11729 + enum camif_capturing exec;
11730 + camif_perf_t perf;
11731 + u32 now_frame_num;
11732 + u32 auto_restart; /* Only For Preview */
11733 +} camif_cfg_t;
11734 +
11735 +#ifdef SW_DEBUG
11736 +#define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args)
11737 +#else
11738 +#define DPRINTK(fmt, args...)
11739 +#endif
11740 +
11741 +
11742 +#ifdef SW_DEBUG
11743 +#define assert(expr) \
11744 + if(!(expr)) { \
11745 + printk( "Assertion failed! %s,%s,%s,line=%d\n", \
11746 + #expr,__FILE__,__FUNCTION__,__LINE__); \
11747 + }
11748 +#else
11749 +#define assert(expr)
11750 +#endif
11751 +
11752 +
11753 +
11754 +extern int camif_capture_start(camif_cfg_t *);
11755 +extern int camif_capture_stop(camif_cfg_t *);
11756 +extern int camif_g_frame_num(camif_cfg_t *);
11757 +extern u8 * camif_g_frame(camif_cfg_t *);
11758 +extern int camif_win_offset(camif_gc_t *);
11759 +extern void camif_hw_open(camif_gc_t *);
11760 +extern void camif_hw_close(camif_cfg_t *);
11761 +extern int camif_dynamic_open(camif_cfg_t *);
11762 +extern int camif_dynamic_close(camif_cfg_t *);
11763 +extern void camif_reset(int,int);
11764 +extern void camif_setup_sensor(void);
11765 +extern int camif_g_fifo_status(camif_cfg_t *);
11766 +extern void camif_last_irq_en(camif_cfg_t *);
11767 +extern void camif_change_flip(camif_cfg_t *);
11768 +
11769 +
11770 +/* Todo
11771 + * API Interface function to both Character and V4L2 Drivers
11772 + */
11773 +extern int camif_do_write(struct file *,const char *, size_t, loff_t *);
11774 +extern int camif_do_ioctl(struct inode *, struct file *,unsigned int, void *);
11775 +
11776 +
11777 +/*
11778 + * API for Decoder (S5x532, OV7620..)
11779 + */
11780 +void camif_register_decoder(struct i2c_client *);
11781 +void camif_unregister_decoder(struct i2c_client*);
11782 +
11783 +
11784 +
11785 +/* API for FSM */
11786 +#define INSTANT_SKIP 0
11787 +#define INSTANT_GO 1
11788 +
11789 +extern ssize_t camif_p_1fsm_start(camif_cfg_t *);
11790 +extern ssize_t camif_p_2fsm_start(camif_cfg_t *);
11791 +extern ssize_t camif_4fsm_start(camif_cfg_t *);
11792 +extern ssize_t camif_p_stop(camif_cfg_t *);
11793 +extern int camif_enter_p_4fsm(camif_cfg_t *);
11794 +extern int camif_enter_c_4fsm(camif_cfg_t *);
11795 +extern int camif_enter_2fsm(camif_cfg_t *);
11796 +extern int camif_enter_1fsm(camif_cfg_t *);
11797 +extern int camif_check_preview(camif_cfg_t *);
11798 +extern int camif_callback_start(camif_cfg_t *);
11799 +extern int camif_clock_init(camif_gc_t *);
11800 +
11801 +/*
11802 + * V4L2 Part
11803 + */
11804 +#define VID_HARDWARE_SAMSUNG_FIMC20 236
11805 +
11806 +
11807 +
11808 +
11809 +
11810 +#endif
11811 +
11812 +
11813 +/*
11814 + * Local variables:
11815 + * tab-width: 8
11816 + * c-indent-level: 8
11817 + * c-basic-offset: 8
11818 + * c-set-style: "K&R"
11819 + * End:
11820 + */
11821 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/cam_reg.h
11822 ===================================================================
11823 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
11824 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/cam_reg.h 2009-01-02 00:01:56.000000000 +0100
11825 @@ -0,0 +1,234 @@
11826 + /*----------------------------------------------------------
11827 + * (C) 2004 Samsung Electronics
11828 + * SW.LEE < hitchcar@samsung.com>
11829 + *
11830 + ----------------------------------------------------------- */
11831 +
11832 +#ifndef __FIMC20_CAMERA_H__
11833 +#define __FIMC20_CAMERA_H__
11834 +
11835 +extern u32 * camregs;
11836 +
11837 +#ifdef CONFIG_ARCH_S3C24A0
11838 +#define CAM_BASE_ADD 0x48000000
11839 +#else /* S3C2440A */
11840 +#define CAM_BASE_ADD 0x4F000000
11841 +#endif
11842 +
11843 +#if ! defined(FExtr)
11844 +#define UData(Data) ((unsigned long) (Data))
11845 +#define FExtr(Data, Field) \
11846 + ((UData (Data) >> FShft (Field)) & FAlnMsk (Field))
11847 +#define FInsrt(Value, Field) \
11848 + (UData (Value) << FShft (Field))
11849 +#define FSize(Field) ((Field) >> 16)
11850 +#define FShft(Field) ((Field) & 0x0000FFFF)
11851 +#define FMsk(Field) (((UData (1) << FSize (Field)) - 1) << FShft (Field))
11852 +#define FAlnMsk(Field) ((UData (1) << FSize (Field)) - 1)
11853 +#define F1stBit(Field) (UData (1) << FShft (Field))
11854 +#define Fld(Size, Shft) (((Size) << 16) + (Shft))
11855 +#endif
11856 +
11857 +/*
11858 + * CAMERA IP
11859 + * P-port is used as RGB Capturing device which including scale and crop
11860 + * those who want to see(preview ) the image on display needs RGB image.
11861 + *
11862 + * C-port is used as YCbCr(4:2:0, 4:2:2) Capturing device which including the scale and crop
11863 + * the prefix of C-port have the meaning of "Codec" ex. mpeg4, h263.. which requries the
11864 + YCBCB format not RGB
11865 + */
11866 +
11867 +#define S3C2440_CAM_REG_CISRCFMT (0x00) // RW Input Source Format
11868 +#define S3C2440_CAM_REG_CIWDOFST (0x04) // Window offset register
11869 +#define S3C2440_CAM_REG_CIGCTRL (0x08) // Global control register
11870 +#define S3C2440_CAM_REG_CICOYSA0 (0x18) // Y 1 st frame start ads
11871 +#define S3C2440_CAM_REG_CICOYSA1 (0x1C) // Y 2 nd frame start ads
11872 +#define S3C2440_CAM_REG_CICOYSA2 (0x20) // Y 3 rd frame start ads
11873 +#define S3C2440_CAM_REG_CICOYSA3 (0x24) // Y 4 th frame start ads
11874 +#define S3C2440_CAM_REG_CICOCBSA0 (0x28) // Cb 1 st frame start ads
11875 +#define S3C2440_CAM_REG_CICOCBSA1 (0x2C) // Cb 2 nd frame start ads
11876 +#define S3C2440_CAM_REG_CICOCBSA2 (0x30) // Cb 3 rd frame start ads
11877 +#define S3C2440_CAM_REG_CICOCBSA3 (0x34) // Cb 4 th frame start ads
11878 +#define S3C2440_CAM_REG_CICOCRSA0 (0x38) // Cr 1 st frame start ads
11879 +#define S3C2440_CAM_REG_CICOCRSA1 (0x3C) // Cr 2 nd frame start ads
11880 +#define S3C2440_CAM_REG_CICOCRSA2 (0x40) // Cr 3 rd frame start ads
11881 +#define S3C2440_CAM_REG_CICOCRSA3 (0x44) // Cr 4 th frame start ads
11882 +#define S3C2440_CAM_REG_CICOTRGFMT (0x48) // Target img format of codec
11883 +#define S3C2440_CAM_REG_CICOCTRL (0x4C) // Codec DMA control related
11884 +#define S3C2440_CAM_REG_CICOSCPRERATIO (0x50) // Codec pre-scaler ratio
11885 +#define S3C2440_CAM_REG_CICOSCPREDST (0x54) // Codec pre-scaler dest
11886 +#define S3C2440_CAM_REG_CICOSCCTRL (0x58) // Codec main-scaler control
11887 +#define S3C2440_CAM_REG_CICOTAREA (0x5C) // Codec pre-scaler dest
11888 +#define S3C2440_CAM_REG_CICOSTATUS (0x64) // Codec path status
11889 +#define S3C2440_CAM_REG_CIPRCLRSA0 (0x6C) // RGB 1 st frame start ads
11890 +#define S3C2440_CAM_REG_CIPRCLRSA1 (0x70) // RGB 2 nd frame start ads
11891 +#define S3C2440_CAM_REG_CIPRCLRSA2 (0x74) // RGB 3 rd frame start ads
11892 +#define S3C2440_CAM_REG_CIPRCLRSA3 (0x78) // RGB 4 th frame start ads
11893 +#define S3C2440_CAM_REG_CIPRTRGFMT (0x7C) // Target img fmt of preview
11894 +#define S3C2440_CAM_REG_CIPRCTRL (0x80) // Preview DMA ctl related
11895 +#define S3C2440_CAM_REG_CIPRSCPRERATIO (0x84) // Preview pre-scaler ratio
11896 +#define S3C2440_CAM_REG_CIPRSCPREDST (0x88) // Preview pre-scaler dest
11897 +#define S3C2440_CAM_REG_CIPRSCCTRL (0x8C) // Preview main-scaler ctl
11898 +#define S3C2440_CAM_REG_CIPRTAREA (0x90) // Preview pre-scaler dest
11899 +#define S3C2440_CAM_REG_CIPRSTATUS (0x98) // Preview path status
11900 +#define S3C2440_CAM_REG_CIIMGCPT (0xA0) // Image capture enable cmd
11901 +
11902 +#define S3C2440_CAM_REG_CICOYSA(__x) (0x18 + (__x)*4 )
11903 +#define S3C2440_CAM_REG_CICOCBSA(__x) (0x28 + (__x)*4 )
11904 +#define S3C2440_CAM_REG_CICOCRSA(__x) (0x38 + (__x)*4 )
11905 +#define S3C2440_CAM_REG_CIPRCLRSA(__x) (0x6C + (__x)*4 )
11906 +
11907 +/* CISRCFMT BitField */
11908 +#define SRCFMT_ITU601 BIT31
11909 +#define SRCFMT_ITU656 0
11910 +#define SRCFMT_UVOFFSET_128 BIT30
11911 +#define fCAM_SIZE_H Fld(13, 16)
11912 +#define fCAM_SIZE_V Fld(13, 0)
11913 +#define SOURCE_HSIZE(x) FInsrt((x), fCAM_SIZE_H)
11914 +#define SOURCE_VSIZE(x) FInsrt((x), fCAM_SIZE_V)
11915 +
11916 +
11917 +/* Window Option Register */
11918 +#define WINOFEN BIT31
11919 +#define CO_FIFO_Y BIT30
11920 +#define CO_FIFO_CB BIT15
11921 +#define CO_FIFO_CR BIT14
11922 +#define PR_FIFO_CB BIT13
11923 +#define PR_FIFO_CR BIT12
11924 +#define fWINHOR Fld(11, 16)
11925 +#define fWINVER Fld(11, 0)
11926 +#define WINHOROFST(x) FInsrt((x), fWINHOR)
11927 +#define WINVEROFST(x) FInsrt((x), fWINVER)
11928 +
11929 +/* Global Control Register */
11930 +#define GC_SWRST BIT31
11931 +#define GC_CAMRST BIT30
11932 +#define GC_INVPOLPCLK BIT26
11933 +#define GC_INVPOLVSYNC BIT25
11934 +#define GC_INVPOLHREF BIT24
11935 +
11936 +/*--------------------------------------------------
11937 + REGISTER BIT FIELD DEFINITION TO
11938 + YCBCR and RGB
11939 +----------------------------------------------------*/
11940 +/* Codec Target Format Register */
11941 +#define IN_YCBCR420 0
11942 +#define IN_YCBCR422 BIT31
11943 +#define OUT_YCBCR420 0
11944 +#define OUT_YCBCR422 BIT30
11945 +
11946 +#if 0
11947 +#define FLIP_NORMAL 0
11948 +#define FLIP_X (BIT14)
11949 +#define FLIP_Y (BIT15)
11950 +#define FLIP_MIRROR (BIT14|BIT15)
11951 +#endif
11952 +
11953 +/** BEGIN ************************************/
11954 +/* Cotents: Common in both P and C port */
11955 +#define fTARGET_HSIZE Fld(13,16)
11956 +#define TARGET_HSIZE(x) FInsrt((x), fTARGET_HSIZE)
11957 +#define fTARGET_VSIZE Fld(13,0)
11958 +#define TARGET_VSIZE(x) FInsrt((x), fTARGET_VSIZE)
11959 +#define FLIP_X_MIRROR BIT14
11960 +#define FLIP_Y_MIRROR BIT15
11961 +#define FLIP_180_MIRROR (BIT14 | BIT15)
11962 +/** END *************************************/
11963 +
11964 +/* Codec DMA Control Register */
11965 +#define fYBURST_M Fld(5,19)
11966 +#define fYBURST_R Fld(5,14)
11967 +#define fCBURST_M Fld(5,9)
11968 +#define fCBURST_R Fld(5,4)
11969 +#define YBURST_M(x) FInsrt((x), fYBURST_M)
11970 +#define CBURST_M(x) FInsrt((x), fCBURST_M)
11971 +#define YBURST_R(x) FInsrt((x), fYBURST_R)
11972 +#define CBURST_R(x) FInsrt((x), fCBURST_R)
11973 +#define LAST_IRQ_EN BIT2 /* Common in both P and C port */
11974 +/*
11975 + * Check the done signal of capturing image for JPEG
11976 + * !!! AutoClear Bit
11977 + */
11978 +
11979 +
11980 +/* (Codec, Preview ) Pre-Scaler Control Register 1 */
11981 +#define fSHIFT Fld(4,28)
11982 +#define PRE_SHIFT(x) FInsrt((x), fSHIFT)
11983 +#define fRATIO_H Fld(7,16)
11984 +#define PRE_HRATIO(x) FInsrt((x), fRATIO_H)
11985 +#define fRATIO_V Fld(7,0)
11986 +#define PRE_VRATIO(x) FInsrt((x), fRATIO_V)
11987 +
11988 +/* (Codec, Preview ) Pre-Scaler Control Register 2*/
11989 +#define fDST_WIDTH Fld(12,16)
11990 +#define fDST_HEIGHT Fld(12,0)
11991 +#define PRE_DST_WIDTH(x) FInsrt((x), fDST_WIDTH)
11992 +#define PRE_DST_HEIGHT(x) FInsrt((x), fDST_HEIGHT)
11993 +
11994 +
11995 +/* (Codec, Preview) Main-scaler control Register */
11996 +#define S_METHOD BIT31 /* Sampling method only for P-port */
11997 +#define SCALERSTART BIT15
11998 +/* Codec scaler bypass for upper 2048x2048
11999 + where ImgCptEn_CoSC and ImgCptEn_PrSC should be 0
12000 +*/
12001 +
12002 +#define SCALERBYPASS BIT31
12003 +#define RGB_FMT24 BIT30
12004 +#define RGB_FMT16 0
12005 +
12006 +/*
12007 +#define SCALE_UP_H BIT29
12008 +#define SCALE_UP_V BIT28
12009 +*/
12010 +
12011 +#define fMAIN_HRATIO Fld(9, 16)
12012 +#define MAIN_HRATIO(x) FInsrt((x), fMAIN_HRATIO)
12013 +
12014 +#define SCALER_START BIT15
12015 +
12016 +#define fMAIN_VRATIO Fld(9, 0)
12017 +#define MAIN_VRATIO(x) FInsrt((x), fMAIN_VRATIO)
12018 +
12019 +/* (Codec, Preview ) DMA Target AREA Register */
12020 +#define fCICOTAREA Fld(26,0)
12021 +#define TARGET_DMA_AREA(x) FInsrt((x), fCICOTAREA)
12022 +
12023 +/* Preview DMA Control Register */
12024 +#define fRGBURST_M Fld(5,19)
12025 +#define fRGBURST_R Fld(5,14)
12026 +#define RGBURST_M(x) FInsrt((x), fRGBURST_M)
12027 +#define RGBURST_R(x) FInsrt((x), fRGBURST_R)
12028 +
12029 +
12030 +/* (Codec, Preview) Status Register */
12031 +#define CO_OVERFLOW_Y BIT31
12032 +#define CO_OVERFLOW_CB BIT30
12033 +#define CO_OVERFLOW_CR BIT29
12034 +#define PR_OVERFLOW_CB BIT31
12035 +#define PR_OVERFLOW_CR BIT30
12036 +
12037 +#define VSYNC BIT28
12038 +
12039 +#define fFRAME_CNT Fld(2,26)
12040 +#define FRAME_CNT(x) FExtr((x),fFRAME_CNT)
12041 +
12042 +#define WIN_OFF_EN BIT25
12043 +#define fFLIP_MODE Fld(2,23)
12044 +#define FLIP_MODE(x) EExtr((x), fFLIP_MODE)
12045 +#define CAP_STATUS_CAMIF BIT22
12046 +#define CAP_STATUS_CODEC BIT21
12047 +#define CAP_STATUS_PREVIEW BIT21
12048 +#define VSYNC_A BIT20
12049 +#define VSYNC_B BIT19
12050 +
12051 +/* Image Capture Enable Regiser */
12052 +#define CAMIF_CAP_ON BIT31
12053 +#define CAMIF_CAP_CODEC_ON BIT30
12054 +#define CAMIF_CAP_PREVIEW_ON BIT29
12055 +
12056 +
12057 +
12058 +
12059 +#endif /* S3C2440_CAMER_H */
12060 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/imgsensor.c
12061 ===================================================================
12062 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12063 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/imgsensor.c 2009-01-02 00:01:56.000000000 +0100
12064 @@ -0,0 +1,250 @@
12065 +/*
12066 + * Copyright (C) 2004 Samsung Electronics
12067 + * SW.LEE <hitchcar@samsung.com>
12068 + *
12069 + * Copyright (C) 2000 Russell King : pcf8583.c
12070 + *
12071 + * This program is free software; you can redistribute it and/or modify
12072 + * it under the terms of the GNU General Public License version 2 as
12073 + * published by the Free Software Foundation.
12074 + *
12075 + * Driver for FIMC20 Camera Decoder
12076 + */
12077 +
12078 +
12079 +#include <linux/module.h>
12080 +#include <linux/kernel.h>
12081 +#include <linux/init.h>
12082 +#include <linux/i2c.h>
12083 +#include <linux/slab.h>
12084 +#include <linux/string.h>
12085 +#include <linux/init.h>
12086 +#include <linux/delay.h>
12087 +
12088 +
12089 +#ifdef CONFIG_ARCH_S3C24A0A
12090 +#else
12091 +//#include <asm/arch/S3C2440.h>
12092 +#endif
12093 +
12094 +#define SW_DEBUG
12095 +#define CONFIG_VIDEO_V4L1_COMPAT
12096 +#include <linux/videodev.h>
12097 +#include "camif.h"
12098 +#include "sensor.h"
12099 +
12100 +#ifndef SAMSUNG_SXGA_CAM
12101 +#include "s5x532_rev36.h"
12102 +#else
12103 +#include "sxga.h"
12104 +#endif
12105 +
12106 +static struct i2c_driver s5x532_driver;
12107 +static camif_gc_t data = {
12108 + itu_fmt: CAMIF_ITU601,
12109 + order422: CAMIF_YCBYCR,
12110 + camclk: 24000000,
12111 +#ifndef SAMSUNG_SXGA_CAM
12112 + source_x: 640,
12113 + source_y: 480,
12114 + win_hor_ofst: 112,
12115 + win_ver_ofst: 20,
12116 +#else
12117 + source_x: 1280,
12118 + source_y: 1024,
12119 + win_hor_ofst: 0,
12120 + win_ver_ofst: 0,
12121 +#endif
12122 + polarity_pclk:1,
12123 + polarity_href:0,
12124 +#ifdef CONFIG_ARCH_S3C24A0A
12125 + reset_type:CAMIF_EX_RESET_AL, /* Active Low */
12126 +#else
12127 + reset_type:CAMIF_EX_RESET_AH, /* Ref board has inverted signal */
12128 +#endif
12129 + reset_udelay:2000,
12130 +};
12131 +
12132 +#define CAM_ID 0x5a
12133 +
12134 +static unsigned short ignore = I2C_CLIENT_END;
12135 +static unsigned short normal_addr[] = { (CAM_ID>>1), I2C_CLIENT_END };
12136 +static struct i2c_client_address_data addr_data = {
12137 + normal_i2c: normal_addr,
12138 + probe: &ignore,
12139 + ignore: &ignore,
12140 +};
12141 +
12142 +s5x532_t s5x532_regs_mirror[S5X532_REGS];
12143 +
12144 +unsigned char
12145 +s5x532_read(struct i2c_client *client, unsigned char subaddr)
12146 +{
12147 + int ret;
12148 + unsigned char buf[1];
12149 + struct i2c_msg msg ={ client->addr, 0, 1, buf};
12150 + buf[0] = subaddr;
12151 +
12152 + ret = i2c_transfer(client->adapter,&msg, 1) == 1 ? 0 : -EIO;
12153 + if (ret == -EIO) {
12154 + printk(" I2C write Error \n");
12155 + return -EIO;
12156 + }
12157 +
12158 + msg.flags = I2C_M_RD;
12159 + ret = i2c_transfer(client->adapter, &msg, 1) == 1 ? 0 : -EIO;
12160 +
12161 + return buf[0];
12162 +}
12163 +
12164 +
12165 +static int
12166 +s5x532_write(struct i2c_client *client,
12167 + unsigned char subaddr, unsigned char val)
12168 +{
12169 + unsigned char buf[2];
12170 + struct i2c_msg msg = { client->addr, 0, 2, buf};
12171 +
12172 + buf[0]= subaddr;
12173 + buf[1]= val;
12174 +
12175 + return i2c_transfer(client->adapter, &msg, 1) == 1 ? 0 : -EIO;
12176 +}
12177 +
12178 +void inline s5x532_init(struct i2c_client *sam_client)
12179 +{
12180 + int i;
12181 +
12182 + printk(KERN_ERR "s5x532_init \n");
12183 + for (i = 0; i < S5X532_INIT_REGS; i++) {
12184 + s5x532_write(sam_client,
12185 + s5x532_reg[i].subaddr, s5x532_reg[i].value );
12186 + }
12187 +
12188 +#ifdef YOU_WANT_TO_CHECK_IMG_SENSOR
12189 + for (i = 0; i < S5X532_INIT_REGS;i++) {
12190 + if ( s5x532_reg[i].subaddr == PAGE_ADDRESS ) {
12191 + s5x532_write(sam_client,
12192 + s5x532_reg[i].subaddr, s5x532_reg[i].value);
12193 +
12194 + printk(KERN_ERR "Page: Subaddr %02x = 0x%02x\n",
12195 + s5x532_reg[i].subaddr, s5x532_regs_mirror[i].value);
12196 +
12197 +
12198 + } else
12199 + {
12200 + s5x532_regs_mirror[i].subaddr = s5x532_reg[i].subaddr;
12201 + s5x532_regs_mirror[i].value =
12202 + s5x532_read(sam_client,s5x532_reg[i].subaddr);
12203 + printk(KERN_ERR "Subaddr %02x = 0x%02x\n",
12204 + s5x532_reg[i].subaddr, s5x532_regs_mirror[i].value);
12205 + }
12206 + }
12207 +#endif
12208 +
12209 +}
12210 +
12211 +static int
12212 +s5x532_attach(struct i2c_adapter *adap, int addr, int kind)
12213 +{
12214 + struct i2c_client *c;
12215 +
12216 + c = kmalloc(sizeof(*c), GFP_KERNEL);
12217 + if (!c) return -ENOMEM;
12218 +
12219 + strcpy(c->name, "S5X532");
12220 +// c->id = s5x532_driver.id;
12221 + c->flags = 0 /* I2C_CLIENT_ALLOW_USE */;
12222 + c->addr = addr;
12223 + c->adapter = adap;
12224 + c->driver = &s5x532_driver;
12225 + data.sensor = c;
12226 + i2c_set_clientdata(c, &data);
12227 +
12228 + camif_register_decoder(c);
12229 + return i2c_attach_client(c);
12230 +}
12231 +
12232 +static int s5x532_probe(struct i2c_adapter *adap)
12233 +{
12234 + return i2c_probe(adap, &addr_data, s5x532_attach);
12235 +}
12236 +
12237 +static int s5x532_detach(struct i2c_client *client)
12238 +{
12239 + i2c_detach_client(client);
12240 + camif_unregister_decoder(client);
12241 + return 0;
12242 +}
12243 +
12244 +static int
12245 +s5x532_command(struct i2c_client *client, unsigned int cmd, void *arg)
12246 +{
12247 + switch (cmd) {
12248 + case SENSOR_INIT:
12249 + s5x532_init(client);
12250 + printk(KERN_INFO "CAMERA: S5X532 Sensor initialized\n");
12251 + break;
12252 + case USER_ADD:
12253 + /* MOD_INC_USE_COUNT; uh.. 2.6 deals with this, old-timer */
12254 + break;
12255 + case USER_EXIT:
12256 + /* MOD_DEC_USE_COUNT; */
12257 + break;
12258 +/* Todo
12259 + case SENSOR_BRIGHTNESS:
12260 + change_sensor();
12261 + break;
12262 +*/
12263 + default:
12264 + panic("Unexpect Sensor Command \n");
12265 + break;
12266 + }
12267 + return 0;
12268 +}
12269 +
12270 +static struct i2c_driver s5x532_driver = {
12271 + driver: { name: "S5X532" },
12272 + id: 0, /* optional in i2c-id.h I2C_ALGO_S3C, */
12273 + attach_adapter: s5x532_probe,
12274 + detach_client: s5x532_detach,
12275 + command: s5x532_command
12276 +};
12277 +
12278 +static void iic_gpio_port(void)
12279 +{
12280 +/* FIXME: no gpio config for i2c !!!
12281 +#ifdef CONFIG_ARCH_S3C24A0A
12282 +#else
12283 + GPECON &= ~(0xf <<28);
12284 + GPECON |= 0xa <<28;
12285 +#endif
12286 +*/
12287 +}
12288 +
12289 +static __init int camif_sensor_init(void)
12290 +{
12291 + iic_gpio_port();
12292 + return i2c_add_driver(&s5x532_driver);
12293 +}
12294 +
12295 +
12296 +static __init void camif_sensor_exit(void)
12297 +{
12298 + i2c_del_driver(&s5x532_driver);
12299 +}
12300 +
12301 +module_init(camif_sensor_init)
12302 +module_exit(camif_sensor_exit)
12303 +
12304 +MODULE_AUTHOR("SW.LEE <hitchcar@sec.samsung.com>");
12305 +MODULE_DESCRIPTION("I2C Client Driver For Fimc2.0 MISC Driver");
12306 +MODULE_LICENSE("GPL");
12307 +
12308 +
12309 +
12310 +/*
12311 + * Local variables:
12312 + * c-basic-offset: 8
12313 + * End:
12314 + */
12315 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/Kconfig
12316 ===================================================================
12317 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12318 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/Kconfig 2009-01-02 00:01:56.000000000 +0100
12319 @@ -0,0 +1,7 @@
12320 +
12321 +config S3C2440_CAMERA
12322 + bool "S3C24xx Camera interface"
12323 + depends on ARCH_S3C2410
12324 + help
12325 + Camera driver for S3C2440 camera unit
12326 +
12327 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/Makefile
12328 ===================================================================
12329 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12330 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/Makefile 2009-01-02 00:01:56.000000000 +0100
12331 @@ -0,0 +1,8 @@
12332 +obj-$(CONFIG_S3C2440_CAMERA) += \
12333 + videodev.o \
12334 + imgsensor.o \
12335 + video-driver.o \
12336 + camif.o \
12337 + camif_fsm.o \
12338 + qt-driver.o
12339 +
12340 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/miscdevice.h
12341 ===================================================================
12342 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12343 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/miscdevice.h 2009-01-02 00:01:56.000000000 +0100
12344 @@ -0,0 +1,18 @@
12345 +
12346 + /*----------------------------------------------------------
12347 + * (C) 2004 Samsung Electronics
12348 + * SW.LEE < hitchcar@samsung.com>
12349 + *
12350 + ----------------------------------------------------------- */
12351 +
12352 +#ifndef _LINUX_S3C_MISCDEVICE_H
12353 +#define _LINUX_S3C_MISCDEVICE_H
12354 +
12355 +#define CODEC_MINOR 212
12356 +#define PREVIEW_MINOR 213
12357 +
12358 +
12359 +
12360 +
12361 +
12362 +#endif
12363 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/qt-driver.c
12364 ===================================================================
12365 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12366 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/qt-driver.c 2009-01-02 00:01:56.000000000 +0100
12367 @@ -0,0 +1,172 @@
12368 +/*
12369 + * SW.LEE <hitchcar@samsung.com>
12370 + *
12371 + * This file is subject to the terms and conditions of the GNU General Public
12372 + * License 2. See the file COPYING in the main directory of this archive
12373 + * for more details.
12374 + */
12375 +
12376 +#include <linux/version.h>
12377 +#include <linux/module.h>
12378 +#include <linux/delay.h>
12379 +#include <linux/errno.h>
12380 +#include <linux/fs.h>
12381 +#include <linux/kernel.h>
12382 +#include <linux/major.h>
12383 +#include <linux/slab.h>
12384 +#include <linux/poll.h>
12385 +#include <linux/signal.h>
12386 +#include <linux/ioport.h>
12387 +#include <linux/sched.h>
12388 +#include <linux/types.h>
12389 +#include <linux/interrupt.h>
12390 +#include <linux/kmod.h>
12391 +#include <linux/vmalloc.h>
12392 +#include <linux/init.h>
12393 +#include <asm/io.h>
12394 +#include <asm/page.h>
12395 +#include <asm/irq.h>
12396 +#include <asm/semaphore.h>
12397 +#include <linux/miscdevice.h>
12398 +
12399 +//#define SW_DEBUG
12400 +
12401 +#define CONFIG_VIDEO_V4L1_COMPAT
12402 +#include <linux/videodev.h>
12403 +#include "camif.h"
12404 +#include "miscdevice.h"
12405 +#include "cam_reg.h"
12406 +#include "sensor.h"
12407 +#include "userapp.h"
12408 +
12409 +extern camif_cfg_t * get_camif(int nr);
12410 +
12411 +
12412 +/************************* Sharp Zarus API **************************
12413 +* refering to Camera Driver API for SL-5000D/SL-5600 revision 1.00
12414 +* April 11, 2002.
12415 + SW.LEE <hitchcar@sec.samsung.com>
12416 + I want to use Sharp Camera Application.
12417 +*
12418 +*/
12419 +
12420 +#define READ_MODE_STATUS 0x1
12421 +#define READ_MODE_IMAGE 0x0
12422 +#define CAPTURE_SPEED
12423 +#define H_FLIP
12424 +#define V_FLIP
12425 +typedef enum sharp_readmode
12426 +{
12427 + IMAGE = 0, STATUS = 1,
12428 + FASTER = 0, BETTER = 2,
12429 + XNOFLIP = 0, XFLIP = 4,
12430 + YNOFLIP = 0, YFLIP = 8,
12431 + AUTOMATICFLIP = -1
12432 +} ReadMode_t;
12433 +
12434 +
12435 +static struct sharp_param_t {
12436 + ReadMode_t readMode;
12437 + char CameraStatus[4];
12438 +} sharp_param = { STATUS, {'s','m','c','A'}};
12439 +
12440 +
12441 +camif_param_t qt_parm = { 640,480,240,320,16,0};
12442 +
12443 +static void setReadMode(const char *b,size_t count)
12444 +{
12445 + int i = *(b+2) - 48 ;
12446 + if ( 4 == count ) {
12447 + i = (*(b+3) - 48) + i * 10;
12448 + }
12449 +
12450 + // DPRINTK(" setReadMode %s conversion value %d \n",b , i);
12451 + if ( i & STATUS ) {
12452 + // DPRINTK(" STATUS MODE \n");
12453 + sharp_param.readMode = i;
12454 + }
12455 + else {
12456 + // DPRINTK(" IMAGE MODE \n");
12457 + sharp_param.readMode = i;
12458 + }
12459 +}
12460 +
12461 +
12462 +
12463 +
12464 +extern ssize_t camif_p_read(struct file *, char *, size_t , loff_t *);
12465 +
12466 +ssize_t z_read(struct file *f, char *buf, size_t count, loff_t *pos)
12467 +{
12468 + size_t end;
12469 +
12470 + if (sharp_param.readMode & STATUS ) {
12471 + buf[0] = sharp_param.CameraStatus[0];
12472 + buf[1] = sharp_param.CameraStatus[1];
12473 + buf[2] = sharp_param.CameraStatus[2];
12474 + buf[3] = sharp_param.CameraStatus[3];
12475 + end = 4;
12476 + return end;
12477 + }
12478 + else { /* Image ReadMode */
12479 + /*
12480 + if (( sharp_param.readMode & (BETTER|X FLIP|YFLIP)))
12481 + DPRINTK(" Not Supporting BETTER|XFLIP|YFLIP\n");
12482 + */
12483 + return camif_p_read(f,buf,count,pos);
12484 + }
12485 +}
12486 +
12487 +static void z_config(camif_cfg_t *cfg,int x, int y)
12488 +{
12489 + cfg->target_x = x;
12490 + cfg->target_y = y;
12491 + cfg->fmt = CAMIF_RGB16;
12492 + if (camif_dynamic_open(cfg)) {
12493 + panic(" Eror Happens \n");
12494 + }
12495 +}
12496 +
12497 +
12498 +ssize_t z_write(struct file *f, const char *b, size_t c, loff_t *pos)
12499 +{
12500 + int array[5];
12501 + int zoom = 1;
12502 + camif_cfg_t *cfg;
12503 +
12504 + cfg = get_camif(MINOR(f->f_dentry->d_inode->i_rdev));
12505 +// DPRINTK(" param %s count %d \n",b, c );
12506 +
12507 + switch(*b) {
12508 + case 'M':
12509 + setReadMode(b, c);
12510 + break;
12511 + case 'B': /* Clear the latch flag of shutter button */
12512 + DPRINTK(" clear latch flag of camera's shutter button\n");
12513 + sharp_param.CameraStatus[0]='s';
12514 + break;
12515 + case 'Y': /* I don't know how to set Shutter pressed */
12516 + DPRINTK(" set latch flag n");
12517 + sharp_param.CameraStatus[0]='S';
12518 + break;
12519 + case 'S': /* Camera Image Resolution */
12520 + case 'R': /* Donot support Rotation */
12521 + DPRINTK(" param %s count %d \n",b, c );
12522 + get_options((char *)(b+2), 5, array);
12523 + if ( array[3] == 512 ) zoom = 2;
12524 + z_config(cfg, array[1] * zoom , array[2] * zoom );
12525 + camif_4fsm_start(cfg);
12526 + break;
12527 + case 'C':
12528 + DPRINTK(" param %s count %d \n",b, c );
12529 + DPRINTK(" Start the camera to capture \n");
12530 + sharp_param.CameraStatus[2]='C';
12531 + camif_4fsm_start(cfg);
12532 + break;
12533 + default:
12534 + printk("Unexpected param %s count %d \n",b, c );
12535 + }
12536 +
12537 + return c;
12538 +}
12539 +
12540 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/qt.h
12541 ===================================================================
12542 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12543 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/qt.h 2009-01-02 00:01:56.000000000 +0100
12544 @@ -0,0 +1,18 @@
12545 +/*
12546 + * SW.LEE <hitchcar@samsung.com>
12547 + *
12548 + * This file is subject to the terms and conditions of the GNU General Public
12549 + * License 2. See the file COPYING in the main directory of this archive
12550 + * for more details.
12551 + */
12552 +
12553 +#ifndef __Z_API_H_
12554 +#define __Z_API_H_
12555 +
12556 +extern ssize_t z_read(struct file *f, char *buf, size_t count, loff_t *pos);
12557 +extern ssize_t z_write(struct file *f, const char *b, size_t c, loff_t *pos);
12558 +
12559 +
12560 +
12561 +#endif
12562 +
12563 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/s5x532.h
12564 ===================================================================
12565 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12566 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/s5x532.h 2009-01-02 00:01:56.000000000 +0100
12567 @@ -0,0 +1,143 @@
12568 +/*
12569 + * 2004 (C) Samsung Electronics
12570 + * SW.LEE <hitchcar@sec.samsung.com>
12571 + * This file is subject to the terms and conditions of the GNU General Public
12572 + * License 2. See the file COPYING in the main directory of this archive
12573 + * for more details.
12574 + */
12575 +
12576 +
12577 +#ifndef _SMDK2440_S5X532_H_
12578 +#define _SMDK2440_S5X532_H_
12579 +
12580 +
12581 +#define CHIP_DELAY 0xFF
12582 +
12583 +typedef struct samsung_t{
12584 + unsigned char subaddr;
12585 + unsigned char value;
12586 + unsigned char page;
12587 +} s5x532_t;
12588 +
12589 +s5x532_t s5x532_reg[] = {
12590 + // page 5
12591 + {0xec,0x05},
12592 + {0x08,0x55,0x5},
12593 + {0x0a,0x75,0x5},
12594 + {0x0c,0x90,0x5},
12595 + {0x0e,0x18,0x5},
12596 + {0x12,0x09,0x5},
12597 + {0x14,0x9d,0x5},
12598 + {0x16,0x90,0x5},
12599 + {0x1a,0x18,0x5},
12600 + {0x1c,0x0c,0x5},
12601 + {0x1e,0x09,0x5},
12602 + {0x20,0x06,0x5},
12603 + {0x22,0x20,0x5},
12604 + {0x2a,0x00,0x5},
12605 + {0x2d,0x04,0x5},
12606 + {0x12,0x24,0x5},
12607 + // page 3
12608 + {0xec,0x03,0x3},
12609 + {0x0c,0x09,0x3},
12610 + {0x6c,0x09,0x3},
12611 + {0x2b,0x10,0x3}, // momo clock inversion
12612 + // page 2
12613 + {0xec,0x02,0x2},
12614 + {0x03,0x09,0x2},
12615 + {0x05,0x08,0x2},
12616 + {0x06,0x01,0x2},
12617 + {0x07,0xf8,0x2},
12618 + {0x15,0x25,0x2},
12619 + {0x30,0x29,0x2},
12620 + {0x36,0x12,0x2},
12621 + {0x38,0x04,0x2},
12622 + {0x1b,0x77,0x2}, // 24MHz : 0x77, 12MHz : 0x22
12623 + {0x1c,0x77,0x2}, // 24MHz : 0x77, 12MHz : 0x22
12624 + // page 1
12625 + {0xec,0x01,0x1},
12626 + {0x00,0x03,0x1}, //
12627 + {0x0a,0x08,0x1}, // 0x0-QQVGA, 0x06-CIF, 0x02-QCIF, 0x08-VGA, 0x04-QVGA, 0x0a-SXGA
12628 + {0x0c,0x00,0x1}, // Pattern selectio. 0-CIS, 1-Color bar, 2-Ramp, 3-Blue screen
12629 + {0x10,0x27,0x1},
12630 + // 0x21-ITU-R656(CrYCbY), 0x25-ITU-R601(CrYCbY), 0x26-ITU-R601(YCbYCr)
12631 + {0x50,0x21,0x1}, // Hblank
12632 + {0x51,0x00,0x1}, // Hblank
12633 + {0x52,0xA1,0x1}, // Hblank
12634 + {0x53,0x02,0x1}, // Hblank
12635 + {0x54,0x01,0x1}, // Vblank
12636 + {0x55,0x00,0x1}, // Vblank
12637 + {0x56,0xE1,0x1}, // Vblank
12638 + {0x57,0x01,0x1}, // Vblank
12639 + {0x58,0x21,0x1}, // Hsync
12640 + {0x59,0x00,0x1}, // Hsync
12641 + {0x5a,0xA1,0x1}, // Hsync
12642 + {0x5b,0x02,0x1}, // Hsync
12643 + {0x5c,0x03,0x1}, // Vref
12644 + {0x5d,0x00,0x1}, // Vref
12645 + {0x5e,0x05,0x1}, // Vref
12646 + {0x5f,0x00,0x1}, // Vref
12647 + {0x70,0x0E,0x1},
12648 + {0x71,0xD6,0x1},
12649 + {0x72,0x30,0x1},
12650 + {0x73,0xDB,0x1},
12651 + {0x74,0x0E,0x1},
12652 + {0x75,0xD6,0x1},
12653 + {0x76,0x18,0x1},
12654 + {0x77,0xF5,0x1},
12655 + {0x78,0x0E,0x1},
12656 + {0x79,0xD6,0x1},
12657 + {0x7a,0x28,0x1},
12658 + {0x7b,0xE6,0x1},
12659 + {0x50,0x00,0x1},
12660 + {0x5c,0x00,0x1},
12661 +
12662 + // page 0
12663 + {0xec,0x00,0x0},
12664 + {0x79,0x01,0x0},
12665 + {0x58,0x90,0x0},
12666 + {0x59,0xA0,0x0},
12667 + {0x5a,0x50,0x0},
12668 + {0x5b,0x70,0x0},
12669 + {0x5c,0xD0,0x0},
12670 + {0x5d,0xC0,0x0},
12671 + {0x5e,0x28,0x0},
12672 + {0x5f,0x08,0x0},
12673 + {0x50,0x90,0x0},
12674 + {0x51,0xA0,0x0},
12675 + {0x52,0x50,0x0},
12676 + {0x53,0x70,0x0},
12677 + {0x54,0xD0,0x0},
12678 + {0x55,0xC0,0x0},
12679 + {0x56,0x28,0x0},
12680 + {0x57,0x00,0x0},
12681 + {0x48,0x90,0x0},
12682 + {0x49,0xA0,0x0},
12683 + {0x4a,0x50,0x0},
12684 + {0x4b,0x70,0x0},
12685 + {0x4c,0xD0,0x0},
12686 + {0x4d,0xC0,0x0},
12687 + {0x4e,0x28,0x0},
12688 + {0x4f,0x08,0x0},
12689 + {0x72,0x82,0x0}, // main clock = 24MHz:0xd2, 16M:0x82, 12M:0x54
12690 + {0x75,0x05,0x0} // absolute vertical mirror. junon
12691 +
12692 +};
12693 +
12694 +
12695 +#define S5X532_INIT_REGS (sizeof(s5x532_reg)/sizeof(s5x532_reg[0]))
12696 +#define S5X532_RISC_REGS 0xEB
12697 +#define S5X532_ISP_REGS 0xFB /* S5C7323X */
12698 +#define S5X532_CIS_REGS 0x2F /* S5K437LA03 */
12699 +
12700 +
12701 +#define PAGE_ADDRESS 0xEC
12702 +
12703 +//#define S5X532_REGS (S5X532_RISC_REGS+S5X532_ISP_REGS+S5X532_CIS_REGS)
12704 +#define S5X532_REGS (0x1000)
12705 +
12706 +
12707 +
12708 +#endif
12709 +
12710 +
12711 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/s5x532_rev36.h
12712 ===================================================================
12713 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12714 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/s5x532_rev36.h 2009-01-02 00:01:56.000000000 +0100
12715 @@ -0,0 +1,208 @@
12716 +/*
12717 + * 2004 (C) Samsung Electronics
12718 + * SW.LEE <hitchcar@sec.samsung.com>
12719 + * This file is subject to the terms and conditions of the GNU General Public
12720 + * License 2. See the file COPYING in the main directory of this archive
12721 + * for more details.
12722 + */
12723 +
12724 +
12725 +#ifndef _SMDK2440_S5X532_H_
12726 +#define _SMDK2440_S5X532_H_
12727 +
12728 +
12729 +#define CHIP_DELAY 0xFF
12730 +
12731 +typedef struct samsung_t{
12732 + unsigned char subaddr;
12733 + unsigned char value;
12734 + unsigned char page;
12735 +} s5x532_t;
12736 +
12737 +s5x532_t s5x532_reg[] = {
12738 +
12739 + //=============== page0 ===============//
12740 + {0xec,0x00,0x00},
12741 + {0x02,0x00,0x00},
12742 + {0x14,0x60,0x00},
12743 + {0x15,0x60,0x00},
12744 + {0x16,0x60,0x00},
12745 + {0x1b,0x20,0x00},
12746 + {0x1c,0x20,0x00},
12747 + {0x1d,0x20,0x00},
12748 + {0x1e,0x20,0x00},
12749 + {0x72,0xdc,0x00},
12750 + {0x73,0x11,0x00},
12751 + {0x76,0x82,0x00},
12752 + {0x77,0x90,0x00},
12753 + {0x78,0x6c,0x00},
12754 + {0x0a,0x02,0x00},
12755 + {0x34,0x0d,0x00},
12756 + {0x35,0x0a,0x00},
12757 + {0x36,0x05,0x00},
12758 + {0x37,0x05,0x00},
12759 + {0x38,0x06,0x00},
12760 + {0x39,0x08,0x00},
12761 + {0x3A,0x0d,0x00},
12762 + {0x3B,0x0d,0x00},
12763 + {0x3C,0x18,0x00},
12764 + {0x3D,0xE0,0x00},
12765 + {0x3E,0x20,0x00},
12766 + {0x66,0x02,0x00},
12767 + {0x6c,0x40,0x00},
12768 + {0x7c,0x01,0x00},
12769 + {0x0D,0x24,0x00},
12770 + {0x40,0x1B,0x00},
12771 + {0x41,0x4F,0x00},
12772 + {0x42,0x24,0x00},
12773 + {0x43,0x3E,0x00},
12774 + {0x44,0x32,0x00},
12775 + {0x45,0x30,0x00},
12776 + {0x48,0xa0,0x00},
12777 + {0x49,0xd0,0x00},
12778 + {0x4A,0x28,0x00},
12779 + {0x4B,0x7d,0x00},
12780 + {0x4C,0xd0,0x00},
12781 + {0x4D,0xe0,0x00},
12782 + {0x4E,0x1a,0x00},
12783 + {0x4F,0xa0,0x00},
12784 + {0x50,0xc0,0x00},
12785 + {0x51,0xc0,0x00},
12786 + {0x52,0x42,0x00},
12787 + {0x53,0x7e,0x00},
12788 + {0x54,0xc0,0x00},
12789 + {0x55,0xf0,0x00},
12790 + {0x56,0x1e,0x00},
12791 + {0x57,0xe0,0x00},
12792 + {0x58,0xc0,0x00},
12793 + {0x59,0xa0,0x00},
12794 + {0x5A,0x4a,0x00},
12795 + {0x5B,0x7e,0x00},
12796 + {0x5C,0xc0,0x00},
12797 + {0x5D,0xf0,0x00},
12798 + {0x5E,0x2a,0x00},
12799 + {0x5F,0x10,0x00},
12800 + {0x79,0x00,0x00},
12801 + {0x7a,0x00,0x00},
12802 + {0xe0,0x0f,0x00},
12803 + {0xe3,0x14,0x00},
12804 + {0xe5,0x48,0x00},
12805 + {0xe7,0x58,0x00},
12806 +
12807 + //=============== page1 ===============//
12808 + {0xec,0x01,0x01},
12809 + {0x10,0x05,0x01},
12810 + {0x20,0xde,0x01},
12811 + {0x0b,0x06,0x01},
12812 + {0x30,0x00,0x01},
12813 + {0x31,0x00,0x01},
12814 + {0x32,0x00,0x01},
12815 + {0x24,0x28,0x01},
12816 + {0x25,0x3F,0x01},
12817 + {0x26,0x65,0x01},
12818 + {0x27,0xA1,0x01},
12819 + {0x28,0xFF,0x01},
12820 + {0x29,0x96,0x01},
12821 + {0x2A,0x85,0x01},
12822 + {0x2B,0xFF,0x01},
12823 + {0x2C,0x00,0x01},
12824 + {0x2D,0x1B,0x01},
12825 + {0xB0,0x28,0x01},
12826 + {0xB1,0x3F,0x01},
12827 + {0xB2,0x65,0x01},
12828 + {0xB3,0xA1,0x01},
12829 + {0xB4,0xFF,0x01},
12830 + {0xB5,0x96,0x01},
12831 + {0xB6,0x85,0x01},
12832 + {0xB7,0xFF,0x01},
12833 + {0xB8,0x00,0x01},
12834 + {0xB9,0x1B,0x01},
12835 + {0x15,0x15,0x01},
12836 + {0x18,0x85,0x01},
12837 + {0x1f,0x05,0x01},
12838 + {0x87,0x40,0x01},
12839 + {0x37,0x60,0x01},
12840 + {0x38,0xd5,0x01},
12841 + {0x48,0xa0,0x01},
12842 + {0x61,0x54,0x01},
12843 + {0x62,0x54,0x01},
12844 + {0x63,0x14,0x01},
12845 + {0x64,0x14,0x01},
12846 + {0x6d,0x12,0x01},
12847 + {0x78,0x09,0x01},
12848 + {0x79,0xD7,0x01},
12849 + {0x7A,0x14,0x01},
12850 + {0x7B,0xEE,0x01},
12851 +
12852 + //=============== page2 ===============//
12853 + {0xec,0x02,0x02},
12854 + {0x2c,0x76,0x02},
12855 + {0x25,0x25,0x02},
12856 + {0x27,0x27,0x02},
12857 + {0x30,0x29,0x02},
12858 + {0x36,0x08,0x02},
12859 + {0x38,0x04,0x02},
12860 +
12861 + //=============== page3 ===============//
12862 + {0xec,0x03,0x03},
12863 + {0x08,0x00,0x03},
12864 + {0x09,0x33,0x03},
12865 +
12866 + //=============== page4 ===============//
12867 + {0xec,0x04,0x04},
12868 + {0x00,0x21,0x04},
12869 + {0x01,0x00,0x04},
12870 + {0x02,0x9d,0x04},
12871 + {0x03,0x02,0x04},
12872 + {0x04,0x04,0x04},
12873 + {0x05,0x00,0x04},
12874 + {0x06,0x1f,0x04},
12875 + {0x07,0x02,0x04},
12876 + {0x08,0x21,0x04},
12877 + {0x09,0x00,0x04},
12878 + {0x0a,0x9d,0x04},
12879 + {0x0b,0x02,0x04},
12880 + {0x0c,0x04,0x04},
12881 + {0x0d,0x00,0x04},
12882 + {0x0e,0x20,0x04},
12883 + {0x0f,0x02,0x04},
12884 + {0x1b,0x3c,0x04},
12885 + {0x1c,0x3c,0x04},
12886 +
12887 + //=============== page5 ===============//
12888 + {0xec,0x05,0x05},
12889 + {0x1f,0x00,0x05},
12890 + {0x08,0x59,0x05},
12891 + {0x0a,0x71,0x05},
12892 + {0x1e,0x23,0x05},
12893 + {0x0e,0x3c,0x05},
12894 +
12895 + //=============== page7 ===============//
12896 + {0xec,0x07,0x07},
12897 + {0x11,0xfe,0x07},
12898 +
12899 + // added by junon
12900 + {0xec,0x01,0x07},
12901 + {0x10,0x26,0x07},
12902 + // 0x21-ITU-R656(CbYCrY), 0x25-ITU-R601(CbYCrY), 0x26-ITU-R601(YCrYCb)
12903 +
12904 +
12905 +};
12906 +
12907 +
12908 +#define S5X532_INIT_REGS (sizeof(s5x532_reg)/sizeof(s5x532_reg[0]))
12909 +#define S5X532_RISC_REGS 0xEB
12910 +#define S5X532_ISP_REGS 0xFB /* S5C7323X */
12911 +#define S5X532_CIS_REGS 0x2F /* S5K437LA03 */
12912 +
12913 +
12914 +#define PAGE_ADDRESS 0xEC
12915 +
12916 +//#define S5X532_REGS (S5X532_RISC_REGS+S5X532_ISP_REGS+S5X532_CIS_REGS)
12917 +#define S5X532_REGS (0x1000)
12918 +
12919 +
12920 +
12921 +#endif
12922 +
12923 +
12924 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/sensor.h
12925 ===================================================================
12926 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12927 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/sensor.h 2009-01-02 00:01:56.000000000 +0100
12928 @@ -0,0 +1,20 @@
12929 +/*
12930 + *
12931 + * Copyright (C) 2004 Samsung Electronics
12932 + * SW.LEE <hitchcar@sec.samsung.com>
12933 + *
12934 + * This program is free software; you can redistribute it and/or modify
12935 + * it under the terms of the GNU General Public License version 2 as
12936 + * published by the Free Software Foundation.
12937 + */
12938 +
12939 +#ifndef __SENSOR_CMD_H_
12940 +#define __SENSOR_CMD_H_
12941 +
12942 +#include "bits.h"
12943 +
12944 +#define SENSOR_INIT BIT0
12945 +#define USER_ADD BIT1
12946 +#define USER_EXIT BIT2
12947 +
12948 +#endif
12949 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/sxga.h
12950 ===================================================================
12951 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
12952 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/sxga.h 2009-01-02 00:01:56.000000000 +0100
12953 @@ -0,0 +1,504 @@
12954 +/*
12955 + * 2004 (C) Samsung Electronics
12956 + * SW.LEE <hitchcar@sec.samsung.com>
12957 + * This file is subject to the terms and conditions of the GNU General Public
12958 + * License 2. See the file COPYING in the main directory of this archive
12959 + * for more details.
12960 + */
12961 +
12962 +
12963 +#ifndef _SAMSUNG_SXGA_H_
12964 +#define _SAMSUNG_SXGA_H_
12965 +
12966 +
12967 +#define CHIP_DELAY 0xFF
12968 +
12969 +typedef struct samsung_t{
12970 + unsigned char subaddr;
12971 + unsigned char value;
12972 + unsigned char page;
12973 +} s5x532_t;
12974 +
12975 +s5x532_t s5x532_reg[] = {
12976 + // page 0
12977 + {0xec,0x00,0x0},
12978 + {0x0c,0x38,0x0},
12979 + {0x0d,0x24,0x0},
12980 + {0x13,0x10,0x0},
12981 + {0x14,0x10,0x0},
12982 + {0x15,0x10,0x0},
12983 + {0x16,0x10,0x0},
12984 + {0x17,0x20,0x0},
12985 + {0x18,0x30,0x0},
12986 + {0x19,0x30,0x0},
12987 + {0x1a,0x10,0x0},
12988 + {0x1b,0x10,0x0},
12989 +
12990 + {0x2d,0x40,0x0},
12991 + {0x3e,0x10,0x0},
12992 + {0x34,0x0a,0x0},
12993 + {0x39,0x04,0x0},
12994 + {0x3a,0x02,0x0},
12995 + {0x31,0x05,0x0},
12996 +
12997 + {0x40,0x1d,0x0},
12998 + {0x41,0x50,0x0},
12999 + {0x42,0x24,0x0},
13000 + {0x43,0x3f,0x0},
13001 + {0x44,0x30,0x0},
13002 + {0x45,0x31,0x0},
13003 +
13004 + {0x48,0xa0,0x0},
13005 + {0x49,0xc0,0x0},
13006 + {0x4a,0x58,0x0},
13007 + {0x4b,0x50,0x0},
13008 + {0x4c,0xb0,0x0},
13009 + {0x4d,0xc0,0x0},
13010 + {0x4e,0x30,0x0},
13011 + {0x4f,0x20,0x0},
13012 +
13013 + {0x50,0xa0,0x0},
13014 + {0x51,0xc0,0x0},
13015 + {0x52,0x50,0x0},
13016 + {0x53,0x60,0x0},
13017 + {0x54,0xb0,0x0},
13018 + {0x55,0xc0,0x0},
13019 + {0x56,0x20,0x0},
13020 + {0x57,0x08,0x0},
13021 +// {0x72,0x50,0x0}, // Clock 16
13022 + {0x72,0x78,0x0}, // Clock 24Mhz
13023 +// {0x72,0xf0,0x0}, // Clock 48Mhz
13024 + // page 1
13025 + {0xec,0x01,0x1},
13026 + {0x10,0x17,0x1}, // ITU-R601
13027 + /*
13028 + [3:2] : out_sel
13029 + 00 : 656
13030 + 01 : 601
13031 + 10 : RGB
13032 + 11 : CIS
13033 + [1] : YC_SEL
13034 + [0] : CBCR_SEL
13035 + */
13036 +
13037 + {0x0b,0x06,0x1}, // 6
13038 + {0x20,0xa8,0x1}, //b0); // Highlight C Supp 040215
13039 + {0x22,0x26,0x1}, //2f); 040225
13040 +
13041 + {0x24,0x08,0x1}, //00); //1F); 040226
13042 + {0x25,0x10,0x1}, //10); //34);
13043 + {0x26,0x40,0x1}, //56);
13044 + {0x27,0x80,0x1}, //8D);
13045 + {0x28,0x2c,0x1}, //E7);
13046 + {0x29,0xd6,0x1}, //7C);
13047 + {0x2A,0x0c,0x1}, //70);
13048 + {0x2B,0xFF,0x1}, //FF);
13049 + {0x2C,0x00,0x1}, //00);
13050 + {0x2D,0x5f,0x1}, //1B);
13051 + //
13052 + {0xB0,0x08,0x1}, //00); //1F); 040226
13053 + {0xB1,0x10,0x1}, //10); //34);50
13054 + {0xB2,0x40,0x1}, //36);
13055 + {0xB3,0x80,0x1}, //6D);
13056 + {0xB4,0x2c,0x1}, //b7);
13057 + {0xB5,0xd6,0x1}, //7C);
13058 + {0xB6,0x0c,0x1}, //70);
13059 + {0xB7,0xFF,0x1}, //FF);
13060 + {0xB8,0x00,0x1}, //00);
13061 + {0xB9,0x5f,0x1}, //1B);
13062 +
13063 +
13064 + {0xc2,0x01,0x1}, // shading On
13065 + {0xc3,0x80,0x1},
13066 + {0xc4,0x02,0x1},
13067 + {0xc5,0x00,0x1},
13068 + {0xc6,0x01,0x1},
13069 + {0xc7,0x00,0x1},
13070 + {0xc8,0x05,0x1},
13071 + {0xc9,0x00,0x1},
13072 + {0xca,0x04,0x1},
13073 +
13074 + // shading 5
13075 + {0xd0,0xb5,0x1},
13076 + {0xd1,0x9c,0x1},
13077 + {0xd2,0x8d,0x1},
13078 + {0xd3,0x84,0x1},
13079 + {0xd4,0x84,0x1},
13080 + {0xd5,0x91,0x1},
13081 + {0xd6,0xa0,0x1},
13082 + {0xd7,0xb5,0x1},
13083 +
13084 + {0xd8,0xc0,0x1},
13085 + {0xd9,0xa6,0x1},
13086 + {0xda,0x93,0x1},
13087 + {0xdb,0x85,0x1},
13088 + {0xdc,0x85,0x1},
13089 + {0xdd,0x90,0x1},
13090 + {0xde,0xa0,0x1},
13091 + {0xdf,0xb8,0x1},
13092 +
13093 + // Page 2
13094 + {0xec,0x02,0x02},
13095 +
13096 + {0x2d,0x02,0x02},
13097 + {0x20,0x13,0x02},
13098 + {0x21,0x13,0x2},
13099 + {0x22,0x13,0x2},
13100 + {0x23,0x13,0x2},
13101 + {0x2e,0x85,0x2},
13102 + {0x2f,0x34,0x2},
13103 + {0x30,0x00,0x2},
13104 + {0x28,0x94,0x2},
13105 +
13106 +
13107 + // page 3
13108 + {0xec,0x03,0x03},
13109 + {0x10,0x00,0x3},
13110 + {0x20,0x00,0x3},
13111 + {0x21,0x20,0x3},
13112 + {0x22,0x00,0x3},
13113 + {0x23,0x00,0x3},
13114 + {0x40,0x20,0x3},
13115 + {0x41,0x20,0x3},
13116 + {0x42,0x20,0x3},
13117 + {0x43,0x20,0x3},
13118 + {0x60,0x00,0x3},
13119 + {0x61,0x00,0x3},
13120 + {0x62,0x00,0x3},
13121 + {0x63,0x00,0x3},
13122 + {0x64,0x04,0x3},
13123 + {0x65,0x1C,0x3},
13124 + {0x66,0x05,0x3},
13125 + {0x67,0x1C,0x3},
13126 + {0x68,0x00,0x3},
13127 + {0x69,0x2D,0x3},
13128 + {0x6a,0x00,0x3},
13129 + {0x6b,0x72,0x3},
13130 + {0x6c,0x00,0x3},
13131 + {0x6d,0x00,0x3},
13132 + {0x6e,0x16,0x3}, // 2.38
13133 + {0x6f,0x16,0x3}, // 2.38
13134 + {0x70,0x00,0x3},
13135 + {0x71,0x00,0x3},
13136 + {0x72,0x45,0x3},
13137 + {0x73,0x00,0x3},
13138 + {0x74,0x1C,0x3},
13139 + {0x75,0x05,0x3},
13140 +
13141 + {0x80,0x00,0x3}, //for 0.02 _ 44
13142 + {0x81,0x00,0x3},
13143 + {0x82,0x00,0x3},
13144 + {0x83,0x00,0x3},
13145 + {0x84,0x04,0x3},
13146 + {0x85,0x1c,0x3},
13147 + {0x86,0x05,0x3},
13148 + {0x87,0x1c,0x3},
13149 + {0x88,0x00,0x3},
13150 + {0x89,0x2d,0x3},
13151 + {0x8a,0x00,0x3},
13152 + {0x8b,0xcc,0x3},
13153 + {0x8c,0x00,0x3},
13154 + {0x8d,0x00,0x3},
13155 + {0x8e,0x08,0x3},
13156 + {0x8f,0x08,0x3},
13157 + {0x90,0x01,0x3},
13158 + {0x91,0x00,0x3},
13159 + {0x92,0x91,0x3},
13160 + {0x93,0x00,0x3},
13161 + {0x94,0x88,0x3},
13162 + {0x95,0x02,0x3},
13163 +
13164 +
13165 +
13166 + // page 4
13167 + {0xec,0x04,0x04},
13168 + {0x3f,0x09,0x04}, // VGA : old board :0x08 , new board ; 0X09
13169 + {0x18,0x00,0x04}, // sxga
13170 + {0x1c,0x41,0x04},
13171 + {0x20,0x41,0x04}, // vga center 040215
13172 + {0x22,0xc1,0x04},// a1);
13173 + {0x23,0x02,0x04},
13174 + {0x28,0x41,0x04},
13175 + {0x2a,0xc1,0x04},// a1);
13176 + {0x2b,0x02,0x04},
13177 +
13178 + {0x3c,0x0b,0x04}, //f); // vga
13179 + {0x58,0x11,0x04},
13180 + {0x5c,0x14,0x04},
13181 + {0x60,0x21,0x04},
13182 + {0x61,0x00,0x04},
13183 + {0x62,0xB1,0x04},
13184 + {0x63,0x02,0x04},
13185 + {0x64,0x01,0x04},
13186 + {0x65,0x00,0x04},
13187 + {0x66,0x01,0x04},
13188 + {0x67,0x02,0x04},
13189 + {0x68,0x21,0x04},
13190 + {0x69,0x00,0x04},
13191 + {0x6a,0xB1,0x04},
13192 + {0x6b,0x02,0x04},
13193 + {0x6c,0x01,0x04},
13194 + {0x6d,0x00,0x04},
13195 + {0x6e,0x01,0x04},
13196 + {0x6f,0x02,0x04},
13197 + {0x70,0x2D,0x04},
13198 + {0x71,0x00,0x04},
13199 + {0x72,0xd3,0x04}, // 14
13200 + {0x73,0x05,0x04}, // 15
13201 + {0x74,0x1C,0x04},
13202 + {0x75,0x05,0x04},
13203 + {0x76,0x1b,0x04}, // HendL
13204 + {0x77,0x0b,0x04}, // HendH
13205 + {0x78,0x01,0x04}, // 5.00
13206 + {0x79,0x80,0x04}, // 5.2a
13207 + {0x7a,0x33,0x04},
13208 + {0x7b,0x00,0x04},
13209 + {0x7c,0x38,0x04}, // 5.0e
13210 + {0x7d,0x03,0x04},
13211 + {0x7e,0x00,0x04},
13212 + {0x7f,0x0A,0x04},
13213 +
13214 + {0x80,0x2e,0x04},
13215 + {0x81,0x00,0x04},
13216 + {0x82,0xae,0x04},
13217 + {0x83,0x02,0x04},
13218 + {0x84,0x00,0x04},
13219 + {0x85,0x00,0x04},
13220 + {0x86,0x01,0x04},
13221 + {0x87,0x02,0x04},
13222 + {0x88,0x2e,0x04},
13223 + {0x89,0x00,0x04},
13224 + {0x8a,0xae,0x04},
13225 + {0x8b,0x02,0x04},
13226 + {0x8c,0x1c,0x04},
13227 + {0x8d,0x00,0x04},
13228 + {0x8e,0x04,0x04},
13229 + {0x8f,0x02,0x04},
13230 + {0x90,0x2d,0x04},
13231 + {0x91,0x00,0x04},
13232 + {0x92,0xa5,0x04},
13233 + {0x93,0x00,0x04},
13234 + {0x94,0x88,0x04},
13235 + {0x95,0x02,0x04},
13236 + {0x96,0xb3,0x04},
13237 + {0x97,0x06,0x04},
13238 + {0x98,0x01,0x04},
13239 + {0x99,0x00,0x04},
13240 + {0x9a,0x33,0x04},
13241 + {0x9b,0x30,0x04},
13242 + {0x9c,0x50,0x04},
13243 + {0x9d,0x30,0x04},
13244 + {0x9e,0x01,0x04},
13245 + {0x9f,0x08,0x04},
13246 +
13247 + // page 5
13248 + {0xec,0x05,0x05},
13249 + {0x5a,0x22,0x05},
13250 +
13251 + // page 6
13252 + {0xec,0x06,0x06},
13253 + {0x14,0x1e,0x06},
13254 + {0x15,0xb4,0x04},
13255 + {0x16,0x25,0x04},
13256 + {0x17,0x74,0x04},
13257 +
13258 + {0x10,0x48,0x04},
13259 + {0x11,0xa0,0x04},
13260 + {0x12,0x40,0x04}, // 040216 AE1 window ÁÙÀÓ
13261 + {0x13,0x70,0x04},
13262 +
13263 + {0x1a,0x29,0x04}, // 040217 AWB window ÁÙÀÓ
13264 + {0x30,0x40,0x04},
13265 + {0x31,0xa2,0x04},
13266 + {0x32,0x50,0x04},
13267 + {0x33,0xbc,0x04},
13268 + {0x34,0x10,0x04},
13269 + {0x35,0xd2,0x04},
13270 + {0x36,0x18,0x04},
13271 + {0x37,0xf5,0x04},
13272 + {0x38,0x10,0x04},
13273 + {0x39,0xd3,0x04},
13274 + {0x3a,0x1a,0x04},
13275 + {0x3b,0xf0,0x04},
13276 +
13277 + // page 7
13278 + {0xec,0x07,0x07},
13279 + {0x08,0xff,0x7},
13280 + {0x38,0x01,0x7}, //07); 040315
13281 + {0x39,0x01,0x7}, //02); //4); 040223 040315
13282 + {0x11,0xfe,0x7}, //fe); // green -2 040303
13283 + {0x2a,0x20,0x7},
13284 + {0x2b,0x20,0x7},
13285 + {0x2c,0x10,0x7},
13286 + {0x2d,0x00,0x7},
13287 + {0x2e,0xf0,0x7},
13288 + {0x2f,0xd0,0x7},
13289 + {0x3a,0xf0,0x7},
13290 + {0x23,0x07,0x7}, // for ESD
13291 +
13292 + // page 0
13293 + {0xec,0x00,0x00},
13294 + {0x8a,0x04,0x00},
13295 +
13296 + // page 1
13297 + {0xec,0x01,0x01},
13298 + {0xe5,0xb0,0x01},
13299 + {0xe5,0xb0,0x01},
13300 + {0xc2,0x01,0x01},
13301 +
13302 + {0x61,0x7b,0x01},
13303 + {0x62,0x7b,0x01},
13304 + {0x63,0x1b,0x01},
13305 + {0x64,0x1b,0x01},
13306 +
13307 + // page 0
13308 + {0xec,0x00,0x00},
13309 + {0x7e,0x04,0x00},
13310 +
13311 + // page 4
13312 + {0xec,0x04,0x04},
13313 + {0x04,0x02,0x04},
13314 + {0x06,0x02,0x04},
13315 +
13316 + // page 1
13317 + {0xec,0x01,0x01},
13318 + {0x10,0x05,0x01},
13319 + {0x54,0x02,0x01},
13320 + {0x56,0x02,0x01},
13321 +
13322 + // page 3
13323 + {0xec,0x03,0x03},
13324 + {0x0e,0x08,0x03},
13325 + {0x0f,0x08,0x03},
13326 +
13327 + // page 4
13328 + {0xec,0x04,0x04},
13329 + {0x00,0x30,0x04},
13330 + {0x0a,0x30,0x04},
13331 +
13332 + // page 5
13333 + {0xec,0x05,0x05},
13334 + {0x08,0x33,0x05},
13335 +
13336 + // page 0
13337 + {0xec,0x00,0x00},
13338 + {0x02,0x00,0x00},
13339 +
13340 + // page 4
13341 +//scale out
13342 + {0xec,0x04,0x04},
13343 + {0x02,0x20,0x04},
13344 + {0x1c,0x4f,0x04},
13345 +
13346 + // page 1
13347 + {0xec,0x01,0x01},
13348 + {0x52,0x20,0x01},
13349 +
13350 + // page 5
13351 + {0xec,0x05,0x05},
13352 + {0x0e,0x4f,0x05},
13353 +
13354 +//ae speed
13355 + // page 0
13356 + {0xec,0x00,0x00},
13357 + {0x92,0x80,0x00},
13358 + {0x93,0x02,0x00},
13359 + {0x94,0x04,0x00},
13360 + {0x95,0x04,0x00},
13361 + {0x96,0x04,0x00},
13362 + {0x97,0x04,0x00},
13363 + {0x9b,0x47,0x00},
13364 +
13365 + {0xec,0x00,0x00},
13366 + {0x40,0x17,0x00},
13367 + {0x41,0x4c,0x00},
13368 + {0x42,0x1d,0x00},
13369 + {0x43,0x3e,0x00},
13370 + {0x44,0x2a,0x00},
13371 + {0x45,0x2d,0x00},
13372 +
13373 + {0xec,0x01,0x01},
13374 + {0x20,0xd0,0x01}, //high light color reference
13375 +
13376 + {0xec,0x00,0x00},
13377 + {0x7e,0x00,0x00},
13378 + {0x73,0x11,0x00}, // 41
13379 + {0x78,0x78,0x00},
13380 +
13381 + {0xec,0x07,0x07},
13382 + {0x1b,0x3e,0x07},
13383 +
13384 + {0xec,0x00,0x00},
13385 + {0x48,0xA0,0x00}, //s48C0
13386 + {0x49,0xB0,0x00}, //s49B0
13387 + {0x4a,0x30,0x00}, //s4a20
13388 + {0x4b,0x70,0x00}, //s4b70
13389 + {0x4c,0xD0,0x00}, //s4cA0
13390 + {0x4d,0xB0,0x00}, //s4dB0
13391 + {0x4e,0x30,0x00}, //s4e30
13392 + {0x4f,0xF0,0x00}, //s4fF0
13393 + {0x50,0xA0,0x00}, //s50D0
13394 + {0x51,0xB0,0x00}, //s51B0
13395 + {0x52,0x25,0x00}, //s5210
13396 + {0x53,0x70,0x00}, //s5370
13397 + {0x54,0xD0,0x00}, //s5490
13398 + {0x55,0xD0,0x00}, //s55B0
13399 + {0x56,0x3A,0x00}, //s5640
13400 + {0x57,0xD0,0x00}, //s57D0
13401 + {0x58,0xA0,0x00}, //s58D0
13402 + {0x59,0xA0,0x00}, //s59B0
13403 + {0x5a,0x32,0x00}, //s5a0A
13404 + {0x5b,0x7A,0x00}, //s5b7A
13405 + {0x5c,0xB0,0x00}, //s5c90
13406 + {0x5d,0xC0,0x00}, //s5dC0
13407 + {0x5e,0x3E,0x00}, //s5e4A
13408 + {0x5f,0xfa,0x00}, //s5fD0
13409 +
13410 + // gamma
13411 + {0xec,0x01,0x01},
13412 + {0x24,0x31,0x01},
13413 + {0x25,0x4C,0x01},
13414 + {0x26,0x75,0x01},
13415 + {0x27,0xB5,0x01},
13416 + {0x28,0x17,0x01},
13417 + {0x29,0xAE,0x01},
13418 + {0x2A,0x97,0x01},
13419 + {0x2B,0xFF,0x01},
13420 + {0x2C,0x00,0x01},
13421 + {0x2D,0x5B,0x01},
13422 +
13423 + {0xB0,0x31,0x01},
13424 + {0xB1,0x4C,0x01},
13425 + {0xB2,0x75,0x01},
13426 + {0xB3,0xB5,0x01},
13427 + {0xB4,0x17,0x01},
13428 + {0xB5,0xAE,0x01},
13429 + {0xB6,0x97,0x01},
13430 + {0xB7,0xFF,0x01},
13431 + {0xB8,0x00,0x01},
13432 + {0xB9,0x5B,0x01},
13433 +
13434 + {0xec,0x00,0x00},
13435 + {0x77,0xb0,0x00},
13436 + {0x39,0x06,0x00},
13437 + {0x3a,0x08,0x00},
13438 +
13439 +};
13440 +
13441 +
13442 +#define S5X532_INIT_REGS (sizeof(s5x532_reg)/sizeof(s5x532_reg[0]))
13443 +#define S5X532_RISC_REGS 0xEB
13444 +#define S5X532_ISP_REGS 0xFB /* S5C7323X */
13445 +#define S5X532_CIS_REGS 0x2F /* S5K437LA03 */
13446 +
13447 +
13448 +#define PAGE_ADDRESS 0xEC
13449 +
13450 +//#define S5X532_REGS (S5X532_RISC_REGS+S5X532_ISP_REGS+S5X532_CIS_REGS)
13451 +#define S5X532_REGS (0x1000)
13452 +
13453 +
13454 +
13455 +#endif
13456 +
13457 +
13458 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/userapp.h
13459 ===================================================================
13460 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
13461 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/userapp.h 2009-01-02 00:01:56.000000000 +0100
13462 @@ -0,0 +1,44 @@
13463 +/*
13464 + Character Driver API Interface
13465 +
13466 + Copyright (C) 2003 Samsung Electronics (SW.LEE: hitchcar@samsung.com)
13467 +
13468 + This program is free software; you can redistribute it and/or modify
13469 + it under the terms of the GNU General Public License as published by
13470 + the Free Software Foundation; either version 2 of the License, or
13471 + (at your option) any later version.
13472 +
13473 +*/
13474 +
13475 +#ifndef __FIMC20_CAMIF_USR_APP_H_
13476 +#define __FIMC20_CAMIF_USR_APP_H_
13477 +
13478 +
13479 +/*
13480 + * IOCTL Command for Character Driver
13481 + */
13482 +
13483 +#define CMD_CAMERA_INIT 0x23
13484 +/* Test Application Usage */
13485 +typedef struct {
13486 + int src_x;
13487 + int src_y;
13488 + int dst_x;
13489 + int dst_y;
13490 + int bpp;
13491 + int flip;
13492 +} camif_param_t;
13493 +
13494 +
13495 +
13496 +#endif
13497 +
13498 +
13499 +/*
13500 + * Local variables:
13501 + * tab-width: 8
13502 + * c-indent-level: 8
13503 + * c-basic-offset: 8
13504 + * c-set-style: "K&R"
13505 + * End:
13506 + */
13507 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/v4l2_api.c
13508 ===================================================================
13509 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
13510 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/v4l2_api.c 2009-01-02 00:01:56.000000000 +0100
13511 @@ -0,0 +1,311 @@
13512 +/*
13513 + * . 2004-01-03: SW.LEE <hitchcar@sec.samsung.com>
13514 + *
13515 + * This file is subject to the terms and conditions of the GNU General Public
13516 + * License 2. See the file COPYING in the main directory of this archive
13517 + * for more details.
13518 + */
13519 +
13520 +#include <linux/config.h>
13521 +#include <linux/module.h>
13522 +#include <linux/kernel.h>
13523 +#include <linux/init.h>
13524 +#include <linux/sched.h>
13525 +#include <linux/irq.h>
13526 +#include <linux/tqueue.h>
13527 +#include <linux/locks.h>
13528 +#include <linux/completion.h>
13529 +#include <linux/delay.h>
13530 +#include <linux/slab.h>
13531 +#include <linux/vmalloc.h>
13532 +#include <linux/miscdevice.h>
13533 +#include <linux/wait.h>
13534 +
13535 +#include <asm/io.h>
13536 +#include <asm/semaphore.h>
13537 +#include <asm/hardware.h>
13538 +#include <asm/uaccess.h>
13539 +
13540 +#include <asm/arch/cpu_s3c2440.h>
13541 +#include <asm/arch/S3C2440.h>
13542 +
13543 +#include "camif.h"
13544 +#include "videodev.h"
13545 +
13546 +/*
13547 + Codec_formats/Preview_format[0] must be same to initial value of
13548 + preview_init_param/codec_init_param
13549 +*/
13550 +
13551 +const struct v4l2_fmtdesc codec_formats[] = {
13552 + {
13553 + .index = 0,
13554 + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
13555 +// .flags = FORMAT_FLAGS_PLANAR,
13556 + .description = "4:2:2, planar, Y-Cb-Cr",
13557 + .pixelformat = V4L2_PIX_FMT_YUV422P,
13558 +
13559 + },{
13560 + .index = 1,
13561 + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
13562 +// .flags = FORMAT_FLAGS_PLANAR,
13563 + .name = "4:2:0, planar, Y-Cb-Cr",
13564 + .fourcc = V4L2_PIX_FMT_YUV420,
13565 + }
13566 +};
13567 +
13568 +
13569 +/* Todo
13570 + FIMC V4L2_PIX_FMT_RGB565 is not same to that of V4L2spec
13571 + and so we need image convert to FIMC V4l2_PIX_FMT_RGB565.
13572 +*/
13573 +const struct v4l2_fmtdesc preview_formats[] = {
13574 + {
13575 + .index = 1,
13576 + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
13577 + .description = "16 bpp RGB, le",
13578 + .fourcc = V4L2_PIX_FMT_RGB565,
13579 +// .flags = FORMAT_FLAGS_PACKED,
13580 + },
13581 + {
13582 + .index = 0,
13583 + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
13584 +// .flags = FORMAT_FLAGS_PACKED,
13585 + .description = "32 bpp RGB, le",
13586 + .fourcc = V4L2_PIX_FMT_BGR32,
13587 + }
13588 +}
13589 +
13590 +#define NUM_F ARRARY_SIZE(preview_formats)
13591 +
13592 +
13593 +/*
13594 + * This function and v4l2 structure made for V4L2 API functions
13595 + * App <--> v4l2 <--> logical param <--> hardware
13596 + */
13597 +static int camif_get_v4l2(camif_cfg_t *cfg)
13598 +{
13599 + return 0;
13600 +}
13601 +
13602 +
13603 +/*
13604 +** Gives the depth of a video4linux2 fourcc aka pixel format in bits.
13605 +*/
13606 +static int pixfmt2depth(int pixfmt,int *fmtptr)
13607 +{
13608 + int fmt, depth;
13609 +
13610 + switch (pixfmt) {
13611 + case V4L2_PIX_FMT_RGB565:
13612 + case V4L2_PIX_FMT_RGB565X:
13613 + fmt = CAMIF_RGB_16;
13614 + depth = 16;
13615 + break;
13616 + case V4L2_PIX_FMT_BGR24: /* Not tested */
13617 + case V4L2_PIX_FMT_RGB24:
13618 + fmt = CAMIF_RGB_24;
13619 + depth = 24;
13620 + break;
13621 + case V4L2_PIX_FMT_BGR32:
13622 + case V4L2_PIX_FMT_RGB32:
13623 + fmt = CAMIF_RGB_24;
13624 + depth 32;
13625 + break;
13626 + case V4L2_PIX_FMT_GREY: /* Not tested */
13627 + fmt = CAMIF_OUT_YCBCR420;
13628 + depth = 8;
13629 + break;
13630 + case V4L2_PIX_FMT_YUYV:
13631 + case V4L2_PIX_FMT_UYVY:
13632 + case V4L2_PIX_FMT_YUV422P:
13633 + fmt = CAMIF_OUT_YCBCR422;
13634 + depth = 16;
13635 + break;
13636 + case V4L2_PIX_FMT_YUV420:
13637 + fmt = CAMIF_OUT_YCBCR420;
13638 + depth = 12;
13639 + break;
13640 + }
13641 + if (fmtptr) *fmtptr = fmt;
13642 + return depth;
13643 +}
13644 +
13645 +
13646 +
13647 +static int camif_s_v4l2(camif_cfg_t *cfg)
13648 +{
13649 + int num = cfg->v2.used_fmt;
13650 +
13651 + if ( !(cfg->v2.status&CAMIF_V4L2_INIT)) {
13652 + int depth;
13653 + int fourcc = v2.fmtdesc[num].pixelformat;
13654 +
13655 + /* To define v4l2_fmtsdesc */
13656 + if (cfg->dma_type == CAMIF_CODEC)
13657 + cfg->v2->fmtdesc = codec_formats;
13658 + else
13659 + cfg->v2->fmtdesc = preview_formats;
13660 +
13661 + /* To define v4l2_format used currently */
13662 + cfg->v2.fmt.width = cfg->target_x;
13663 + cfg->v2.fmt.height = cfg->target_y;
13664 + cfg->v2.fmt.field = V4L2_FIELD_NONE;
13665 + cfg->v2.fmt.pixelformat = fourcc;
13666 + depth = pixfmt2depth(fourcc,NULL);
13667 + cfg->v2.fmt.bytesperline= cfg->v2.fmt.width*depth >> 3;
13668 + cfg->v2.fmt.sizeimage =
13669 + cfg->v2.fmt.height * cfg->v2.fmt.bytesperline;
13670 +
13671 + /* To define v4l2_input */
13672 + cfg->v2.input.index = 0;
13673 + if (cfg->dma_type == CAMIF_CODEC)
13674 + snprintf(cfg->v2.input.name, 31, "CAMIF CODEC");
13675 + else
13676 + snprintf(cfg->v2.input.name, 31, "CAMIF PREVIEW");
13677 + cfg->v2.input.type = V4L2_INPUT_TYPE_CAMERA;
13678 +
13679 + /* Write the Status of v4l2 machine */
13680 + cfg->v2.status |= CAMIF_V4L2_INIT;
13681 + }
13682 + return 0;
13683 +}
13684 +
13685 +
13686 +static int camif_g_fmt(camif_cfg_t *cfg, struct v4l2_format *f)
13687 +{
13688 + int size = sizeof(struct v4l2_pix_format);
13689 +
13690 + switch (f->type) {
13691 + case V4L2_BUF_TYPE_VIDEO_CAPTURE:
13692 + memset(&f->fmt.pix,0,size);
13693 + memcpy(&f->fmt.pix,&cfg->v2.fmt,size);
13694 + return 0;
13695 + default:
13696 + return -EINVAL;
13697 + }
13698 +}
13699 +
13700 +
13701 +/* Copy v4l2 parameter into other element of camif_cfg_t */
13702 +static int camif_s_try(camif_cfg_t *cfg, int f)
13703 +{
13704 + int fmt;
13705 + cfg->target_x = cfg->v2.fmt.width;
13706 + cfg->target_y = cfg->v2.fmt.height;
13707 + pixfmt2depth(cfg->v2.fmt.pixelformat,&fmt);
13708 + cfg->fmt = fmt;
13709 + camif_dynamic_conf(cfg);
13710 +}
13711 +
13712 +
13713 +static int camif_s_fmt(camif_cfg_t *cfg, struct v4l2_format *f)
13714 +{
13715 + int retval;
13716 +
13717 + switch (f->type) {
13718 + case V4L2_BUF_TYPE_VIDEO_CAPTURE:
13719 + {
13720 + /* update our state informations */
13721 +// down(&fh->cap.lock);
13722 + cfg->v2.fmt = f->pix;
13723 + cfg->v2.status |= CAMIF_v4L2_DIRTY;
13724 + camif_dynamic_conf(cfg);
13725 + cfg->v2.status &= ~CAMIF_v4L2_DIRTY; /* dummy ? */
13726 +// up(&fh->cap.lock);
13727 +
13728 + return 0;
13729 + }
13730 + default:
13731 + return -EINVAL;
13732 + }
13733 +
13734 +}
13735 +
13736 +/* Refer ioctl of videodeX.c and bttv-driver.c */
13737 +int camif_do_ioctl
13738 +(struct inode *inode, struct file *file,unsigned int cmd, void * arg)
13739 +{
13740 + camif_cfg_t *cfg = file->private_data;
13741 + int ret = 0;
13742 +
13743 + switch (cmd) {
13744 + case VIDIOC_QUERYCAP:
13745 + {
13746 + struct v4l2_capability *cap = arg;
13747 +
13748 + strcpy(cap->driver,"Fimc Camera");
13749 + strlcpy(cap->card,cfg->v->name,sizeof(cap->card));
13750 + sprintf(cap->bus_info,"FIMC 2.0 AHB Bus");
13751 + cap->version = 0;
13752 + cap->capabilities =
13753 + V4L2_CAP_VIDEO_CAPTURE |V4L2_CAP_READWRITE;
13754 + return 0;
13755 + }
13756 + case VIDIOC_G_FMT:
13757 + {
13758 + struct v4l2_format *f = arg;
13759 + return camif_g_fmt(cfg,f);
13760 + }
13761 + case VIDIOC_S_FMT:
13762 + {
13763 + struct v4l2_format *f = arg;
13764 + return camif_s_fmt(cfg,f);
13765 + }
13766 +
13767 + case VIDIOC_ENUM_FMT:
13768 + {
13769 + struct v4l2_fmtdesc *f = arg;
13770 + enum v4l2_buf_type type = f->type;
13771 + int index = f->index;
13772 +
13773 + if (index >= NUM_F)
13774 + return -EINVAL;
13775 + switch (f->type) {
13776 + case V4L2_BUF_TYPE_VIDEO_CAPTURE:
13777 + break;
13778 + case V4L2_BUF_TYPE_VIDEO_OVERLAY:
13779 + case V4L2_BUF_TYPE_VBI_CAPTURE:
13780 + default:
13781 + return -EINVAL;
13782 + }
13783 + memset(f,0,sizeof(*f));
13784 + memcpy(f,cfg->v2.fmtdesc+index,sizeof(*f));
13785 + return 0;
13786 + }
13787 + case VIDIOC_G_INPUT:
13788 + {
13789 + u32 *i = arg;
13790 + *i = cfg->v2.input;
13791 + return 0;
13792 + }
13793 + case VIDIOC_S_INPUT:
13794 + {
13795 + int index = *((int *)arg);
13796 + if (index != 0)
13797 + return -EINVAL;
13798 + cfg->v2.input.index = index;
13799 + return 0;
13800 + }
13801 +
13802 + default:
13803 + return -ENOIOCTLCMD; /* errno.h */
13804 + } /* End of Switch */
13805 +
13806 +
13807 +}
13808 +
13809 +
13810 +
13811 +
13812 +
13813 +
13814 +
13815 +/*
13816 + * Local variables:
13817 + * tab-width: 8
13818 + * c-indent-level: 8
13819 + * c-basic-offset: 8
13820 + * c-set-style: "K&R"
13821 + * End:
13822 + */
13823 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/videodev2.h
13824 ===================================================================
13825 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
13826 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/videodev2.h 2009-01-02 00:01:56.000000000 +0100
13827 @@ -0,0 +1,938 @@
13828 +#ifndef __LINUX_VIDEODEV2_H
13829 +#define __LINUX_VIDEODEV2_H
13830 +/*
13831 + * Video for Linux Two
13832 + *
13833 + * Header file for v4l or V4L2 drivers and applications, for
13834 + * Linux kernels 2.2.x or 2.4.x.
13835 + *
13836 + * See http://bytesex.org/v4l/ for API specs and other
13837 + * v4l2 documentation.
13838 + *
13839 + * Author: Bill Dirks <bdirks@pacbell.net>
13840 + * Justin Schoeman
13841 + * et al.
13842 + */
13843 +#ifdef __KERNEL__
13844 +#include <linux/time.h> /* need struct timeval */
13845 +#endif
13846 +
13847 +/*
13848 + * M I S C E L L A N E O U S
13849 + */
13850 +
13851 +/* Four-character-code (FOURCC) */
13852 +#define v4l2_fourcc(a,b,c,d)\
13853 + (((__u32)(a)<<0)|((__u32)(b)<<8)|((__u32)(c)<<16)|((__u32)(d)<<24))
13854 +
13855 +/*
13856 + * E N U M S
13857 + */
13858 +enum v4l2_field {
13859 + V4L2_FIELD_ANY = 0, /* driver can choose from none,
13860 + top, bottom, interlaced
13861 + depending on whatever it thinks
13862 + is approximate ... */
13863 + V4L2_FIELD_NONE = 1, /* this device has no fields ... */
13864 + V4L2_FIELD_TOP = 2, /* top field only */
13865 + V4L2_FIELD_BOTTOM = 3, /* bottom field only */
13866 + V4L2_FIELD_INTERLACED = 4, /* both fields interlaced */
13867 + V4L2_FIELD_SEQ_TB = 5, /* both fields sequential into one
13868 + buffer, top-bottom order */
13869 + V4L2_FIELD_SEQ_BT = 6, /* same as above + bottom-top order */
13870 + V4L2_FIELD_ALTERNATE = 7, /* both fields alternating into
13871 + separate buffers */
13872 +};
13873 +#define V4L2_FIELD_HAS_TOP(field) \
13874 + ((field) == V4L2_FIELD_TOP ||\
13875 + (field) == V4L2_FIELD_INTERLACED ||\
13876 + (field) == V4L2_FIELD_SEQ_TB ||\
13877 + (field) == V4L2_FIELD_SEQ_BT)
13878 +#define V4L2_FIELD_HAS_BOTTOM(field) \
13879 + ((field) == V4L2_FIELD_BOTTOM ||\
13880 + (field) == V4L2_FIELD_INTERLACED ||\
13881 + (field) == V4L2_FIELD_SEQ_TB ||\
13882 + (field) == V4L2_FIELD_SEQ_BT)
13883 +#define V4L2_FIELD_HAS_BOTH(field) \
13884 + ((field) == V4L2_FIELD_INTERLACED ||\
13885 + (field) == V4L2_FIELD_SEQ_TB ||\
13886 + (field) == V4L2_FIELD_SEQ_BT)
13887 +
13888 +enum v4l2_buf_type {
13889 + V4L2_BUF_TYPE_VIDEO_CAPTURE = 1,
13890 + V4L2_BUF_TYPE_VIDEO_OUTPUT = 2,
13891 + V4L2_BUF_TYPE_VIDEO_OVERLAY = 3,
13892 + V4L2_BUF_TYPE_VBI_CAPTURE = 4,
13893 + V4L2_BUF_TYPE_VBI_OUTPUT = 5,
13894 + V4L2_BUF_TYPE_PRIVATE = 0x80,
13895 +};
13896 +
13897 +enum v4l2_ctrl_type {
13898 + V4L2_CTRL_TYPE_INTEGER = 1,
13899 + V4L2_CTRL_TYPE_BOOLEAN = 2,
13900 + V4L2_CTRL_TYPE_MENU = 3,
13901 + V4L2_CTRL_TYPE_BUTTON = 4,
13902 +};
13903 +
13904 +enum v4l2_tuner_type {
13905 + V4L2_TUNER_RADIO = 1,
13906 + V4L2_TUNER_ANALOG_TV = 2,
13907 +};
13908 +
13909 +enum v4l2_memory {
13910 + V4L2_MEMORY_MMAP = 1,
13911 + V4L2_MEMORY_USERPTR = 2,
13912 + V4L2_MEMORY_OVERLAY = 3,
13913 +};
13914 +
13915 +/* see also http://vektor.theorem.ca/graphics/ycbcr/ */
13916 +enum v4l2_colorspace {
13917 + /* ITU-R 601 -- broadcast NTSC/PAL */
13918 + V4L2_COLORSPACE_SMPTE170M = 1,
13919 +
13920 + /* 1125-Line (US) HDTV */
13921 + V4L2_COLORSPACE_SMPTE240M = 2,
13922 +
13923 + /* HD and modern captures. */
13924 + V4L2_COLORSPACE_REC709 = 3,
13925 +
13926 + /* broken BT878 extents (601, luma range 16-253 instead of 16-235) */
13927 + V4L2_COLORSPACE_BT878 = 4,
13928 +
13929 + /* These should be useful. Assume 601 extents. */
13930 + V4L2_COLORSPACE_470_SYSTEM_M = 5,
13931 + V4L2_COLORSPACE_470_SYSTEM_BG = 6,
13932 +
13933 + /* I know there will be cameras that send this. So, this is
13934 + * unspecified chromaticities and full 0-255 on each of the
13935 + * Y'CbCr components
13936 + */
13937 + V4L2_COLORSPACE_JPEG = 7,
13938 +
13939 + /* For RGB colourspaces, this is probably a good start. */
13940 + V4L2_COLORSPACE_SRGB = 8,
13941 +};
13942 +
13943 +enum v4l2_priority {
13944 + V4L2_PRIORITY_UNSET = 0, /* not initialized */
13945 + V4L2_PRIORITY_BACKGROUND = 1,
13946 + V4L2_PRIORITY_INTERACTIVE = 2,
13947 + V4L2_PRIORITY_RECORD = 3,
13948 + V4L2_PRIORITY_DEFAULT = V4L2_PRIORITY_INTERACTIVE,
13949 +};
13950 +
13951 +struct v4l2_rect {
13952 + __s32 left;
13953 + __s32 top;
13954 + __s32 width;
13955 + __s32 height;
13956 +};
13957 +
13958 +struct v4l2_fract {
13959 + __u32 numerator;
13960 + __u32 denominator;
13961 +};
13962 +
13963 +/*
13964 + * D R I V E R C A P A B I L I T I E S
13965 + */
13966 +struct v4l2_capability
13967 +{
13968 + __u8 driver[16]; /* i.e. "bttv" */
13969 + __u8 card[32]; /* i.e. "Hauppauge WinTV" */
13970 + __u8 bus_info[32]; /* "PCI:" + pci_name(pci_dev) */
13971 + __u32 version; /* should use KERNEL_VERSION() */
13972 + __u32 capabilities; /* Device capabilities */
13973 + __u32 reserved[4];
13974 +};
13975 +
13976 +/* Values for 'capabilities' field */
13977 +#define V4L2_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */
13978 +#define V4L2_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */
13979 +#define V4L2_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */
13980 +#define V4L2_CAP_VBI_CAPTURE 0x00000010 /* Is a VBI capture device */
13981 +#define V4L2_CAP_VBI_OUTPUT 0x00000020 /* Is a VBI output device */
13982 +#define V4L2_CAP_RDS_CAPTURE 0x00000100 /* RDS data capture */
13983 +
13984 +#define V4L2_CAP_TUNER 0x00010000 /* has a tuner */
13985 +#define V4L2_CAP_AUDIO 0x00020000 /* has audio support */
13986 +#define V4L2_CAP_RADIO 0x00040000 /* is a radio device */
13987 +
13988 +#define V4L2_CAP_READWRITE 0x01000000 /* read/write systemcalls */
13989 +#define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */
13990 +#define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
13991 +
13992 +/*
13993 + * V I D E O I M A G E F O R M A T
13994 + */
13995 +
13996 +struct v4l2_pix_format
13997 +{
13998 + __u32 width;
13999 + __u32 height;
14000 + __u32 pixelformat;
14001 + enum v4l2_field field;
14002 + __u32 bytesperline; /* for padding, zero if unused */
14003 + __u32 sizeimage;
14004 + enum v4l2_colorspace colorspace;
14005 + __u32 priv; /* private data, depends on pixelformat */
14006 +};
14007 +
14008 +/* Pixel format FOURCC depth Description */
14009 +#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R','G','B','1') /* 8 RGB-3-3-2 */
14010 +#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R','G','B','O') /* 16 RGB-5-5-5 */
14011 +#define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R','G','B','P') /* 16 RGB-5-6-5 */
14012 +#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R','G','B','Q') /* 16 RGB-5-5-5 BE */
14013 +#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R','G','B','R') /* 16 RGB-5-6-5 BE */
14014 +#define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B','G','R','3') /* 24 BGR-8-8-8 */
14015 +#define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R','G','B','3') /* 24 RGB-8-8-8 */
14016 +#define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B','G','R','4') /* 32 BGR-8-8-8-8 */
14017 +#define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R','G','B','4') /* 32 RGB-8-8-8-8 */
14018 +#define V4L2_PIX_FMT_GREY v4l2_fourcc('G','R','E','Y') /* 8 Greyscale */
14019 +#define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y','V','U','9') /* 9 YVU 4:1:0 */
14020 +#define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y','V','1','2') /* 12 YVU 4:2:0 */
14021 +#define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y','U','Y','V') /* 16 YUV 4:2:2 */
14022 +#define V4L2_PIX_FMT_UYVY v4l2_fourcc('U','Y','V','Y') /* 16 YUV 4:2:2 */
14023 +#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4','2','2','P') /* 16 YVU422 planar */
14024 +#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4','1','1','P') /* 16 YVU411 planar */
14025 +#define V4L2_PIX_FMT_Y41P v4l2_fourcc('Y','4','1','P') /* 12 YUV 4:1:1 */
14026 +
14027 +/* two planes -- one Y, one Cr + Cb interleaved */
14028 +#define V4L2_PIX_FMT_NV12 v4l2_fourcc('N','V','1','2') /* 12 Y/CbCr 4:2:0 */
14029 +#define V4L2_PIX_FMT_NV21 v4l2_fourcc('N','V','2','1') /* 12 Y/CrCb 4:2:0 */
14030 +
14031 +/* The following formats are not defined in the V4L2 specification */
14032 +#define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y','U','V','9') /* 9 YUV 4:1:0 */
14033 +#define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y','U','1','2') /* 12 YUV 4:2:0 */
14034 +#define V4L2_PIX_FMT_YYUV v4l2_fourcc('Y','Y','U','V') /* 16 YUV 4:2:2 */
14035 +#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H','I','2','4') /* 8 8-bit color */
14036 +
14037 +/* compressed formats */
14038 +#define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M','J','P','G') /* Motion-JPEG */
14039 +#define V4L2_PIX_FMT_JPEG v4l2_fourcc('J','P','E','G') /* JFIF JPEG */
14040 +#define V4L2_PIX_FMT_DV v4l2_fourcc('d','v','s','d') /* 1394 */
14041 +#define V4L2_PIX_FMT_MPEG v4l2_fourcc('M','P','E','G') /* MPEG */
14042 +
14043 +/* Vendor-specific formats */
14044 +#define V4L2_PIX_FMT_WNVA v4l2_fourcc('W','N','V','A') /* Winnov hw compress */
14045 +
14046 +/*
14047 + * F O R M A T E N U M E R A T I O N
14048 + */
14049 +struct v4l2_fmtdesc
14050 +{
14051 + __u32 index; /* Format number */
14052 + enum v4l2_buf_type type; /* buffer type */
14053 + __u32 flags;
14054 + __u8 description[32]; /* Description string */
14055 + __u32 pixelformat; /* Format fourcc */
14056 + __u32 reserved[4];
14057 +};
14058 +
14059 +#define V4L2_FMT_FLAG_COMPRESSED 0x0001
14060 +
14061 +
14062 +/*
14063 + * T I M E C O D E
14064 + */
14065 +struct v4l2_timecode
14066 +{
14067 + __u32 type;
14068 + __u32 flags;
14069 + __u8 frames;
14070 + __u8 seconds;
14071 + __u8 minutes;
14072 + __u8 hours;
14073 + __u8 userbits[4];
14074 +};
14075 +
14076 +/* Type */
14077 +#define V4L2_TC_TYPE_24FPS 1
14078 +#define V4L2_TC_TYPE_25FPS 2
14079 +#define V4L2_TC_TYPE_30FPS 3
14080 +#define V4L2_TC_TYPE_50FPS 4
14081 +#define V4L2_TC_TYPE_60FPS 5
14082 +
14083 +/* Flags */
14084 +#define V4L2_TC_FLAG_DROPFRAME 0x0001 /* "drop-frame" mode */
14085 +#define V4L2_TC_FLAG_COLORFRAME 0x0002
14086 +#define V4L2_TC_USERBITS_field 0x000C
14087 +#define V4L2_TC_USERBITS_USERDEFINED 0x0000
14088 +#define V4L2_TC_USERBITS_8BITCHARS 0x0008
14089 +/* The above is based on SMPTE timecodes */
14090 +
14091 +
14092 +/*
14093 + * C O M P R E S S I O N P A R A M E T E R S
14094 + */
14095 +#if 0
14096 +/* ### generic compression settings don't work, there is too much
14097 + * ### codec-specific stuff. Maybe reuse that for MPEG codec settings
14098 + * ### later ... */
14099 +struct v4l2_compression
14100 +{
14101 + __u32 quality;
14102 + __u32 keyframerate;
14103 + __u32 pframerate;
14104 + __u32 reserved[5];
14105 +
14106 +/* what we'll need for MPEG, extracted from some postings on
14107 + the v4l list (Gert Vervoort, PlasmaJohn).
14108 +
14109 +system stream:
14110 + - type: elementary stream(ES), packatised elementary stream(s) (PES)
14111 + program stream(PS), transport stream(TS)
14112 + - system bitrate
14113 + - PS packet size (DVD: 2048 bytes, VCD: 2324 bytes)
14114 + - TS video PID
14115 + - TS audio PID
14116 + - TS PCR PID
14117 + - TS system information tables (PAT, PMT, CAT, NIT and SIT)
14118 + - (MPEG-1 systems stream vs. MPEG-2 program stream (TS not supported
14119 + by MPEG-1 systems)
14120 +
14121 +audio:
14122 + - type: MPEG (+Layer I,II,III), AC-3, LPCM
14123 + - bitrate
14124 + - sampling frequency (DVD: 48 Khz, VCD: 44.1 KHz, 32 kHz)
14125 + - Trick Modes? (ff, rew)
14126 + - Copyright
14127 + - Inverse Telecine
14128 +
14129 +video:
14130 + - picturesize (SIF, 1/2 D1, 2/3 D1, D1) and PAL/NTSC norm can be set
14131 + through excisting V4L2 controls
14132 + - noise reduction, parameters encoder specific?
14133 + - MPEG video version: MPEG-1, MPEG-2
14134 + - GOP (Group Of Pictures) definition:
14135 + - N: number of frames per GOP
14136 + - M: distance between reference (I,P) frames
14137 + - open/closed GOP
14138 + - quantiser matrix: inter Q matrix (64 bytes) and intra Q matrix (64 bytes)
14139 + - quantiser scale: linear or logarithmic
14140 + - scanning: alternate or zigzag
14141 + - bitrate mode: CBR (constant bitrate) or VBR (variable bitrate).
14142 + - target video bitrate for CBR
14143 + - target video bitrate for VBR
14144 + - maximum video bitrate for VBR - min. quantiser value for VBR
14145 + - max. quantiser value for VBR
14146 + - adaptive quantisation value
14147 + - return the number of bytes per GOP or bitrate for bitrate monitoring
14148 +
14149 +*/
14150 +};
14151 +#endif
14152 +
14153 +struct v4l2_jpegcompression
14154 +{
14155 + int quality;
14156 +
14157 + int APPn; /* Number of APP segment to be written,
14158 + * must be 0..15 */
14159 + int APP_len; /* Length of data in JPEG APPn segment */
14160 + char APP_data[60]; /* Data in the JPEG APPn segment. */
14161 +
14162 + int COM_len; /* Length of data in JPEG COM segment */
14163 + char COM_data[60]; /* Data in JPEG COM segment */
14164 +
14165 + __u32 jpeg_markers; /* Which markers should go into the JPEG
14166 + * output. Unless you exactly know what
14167 + * you do, leave them untouched.
14168 + * Inluding less markers will make the
14169 + * resulting code smaller, but there will
14170 + * be fewer aplications which can read it.
14171 + * The presence of the APP and COM marker
14172 + * is influenced by APP_len and COM_len
14173 + * ONLY, not by this property! */
14174 +
14175 +#define V4L2_JPEG_MARKER_DHT (1<<3) /* Define Huffman Tables */
14176 +#define V4L2_JPEG_MARKER_DQT (1<<4) /* Define Quantization Tables */
14177 +#define V4L2_JPEG_MARKER_DRI (1<<5) /* Define Restart Interval */
14178 +#define V4L2_JPEG_MARKER_COM (1<<6) /* Comment segment */
14179 +#define V4L2_JPEG_MARKER_APP (1<<7) /* App segment, driver will
14180 + * allways use APP0 */
14181 +};
14182 +
14183 +
14184 +/*
14185 + * M E M O R Y - M A P P I N G B U F F E R S
14186 + */
14187 +struct v4l2_requestbuffers
14188 +{
14189 + __u32 count;
14190 + enum v4l2_buf_type type;
14191 + enum v4l2_memory memory;
14192 + __u32 reserved[2];
14193 +};
14194 +
14195 +struct v4l2_buffer
14196 +{
14197 + __u32 index;
14198 + enum v4l2_buf_type type;
14199 + __u32 bytesused;
14200 + __u32 flags;
14201 + enum v4l2_field field;
14202 + struct timeval timestamp;
14203 + struct v4l2_timecode timecode;
14204 + __u32 sequence;
14205 +
14206 + /* memory location */
14207 + enum v4l2_memory memory;
14208 + union {
14209 + __u32 offset;
14210 + unsigned long userptr;
14211 + } m;
14212 + __u32 length;
14213 +
14214 + __u32 reserved[2];
14215 +};
14216 +
14217 +/* Flags for 'flags' field */
14218 +#define V4L2_BUF_FLAG_MAPPED 0x0001 /* Buffer is mapped (flag) */
14219 +#define V4L2_BUF_FLAG_QUEUED 0x0002 /* Buffer is queued for processing */
14220 +#define V4L2_BUF_FLAG_DONE 0x0004 /* Buffer is ready */
14221 +#define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */
14222 +#define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */
14223 +#define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */
14224 +#define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */
14225 +
14226 +/*
14227 + * O V E R L A Y P R E V I E W
14228 + */
14229 +struct v4l2_framebuffer
14230 +{
14231 + __u32 capability;
14232 + __u32 flags;
14233 +/* FIXME: in theory we should pass something like PCI device + memory
14234 + * region + offset instead of some physical address */
14235 + void* base;
14236 + struct v4l2_pix_format fmt;
14237 +};
14238 +/* Flags for the 'capability' field. Read only */
14239 +#define V4L2_FBUF_CAP_EXTERNOVERLAY 0x0001
14240 +#define V4L2_FBUF_CAP_CHROMAKEY 0x0002
14241 +#define V4L2_FBUF_CAP_LIST_CLIPPING 0x0004
14242 +#define V4L2_FBUF_CAP_BITMAP_CLIPPING 0x0008
14243 +/* Flags for the 'flags' field. */
14244 +#define V4L2_FBUF_FLAG_PRIMARY 0x0001
14245 +#define V4L2_FBUF_FLAG_OVERLAY 0x0002
14246 +#define V4L2_FBUF_FLAG_CHROMAKEY 0x0004
14247 +
14248 +struct v4l2_clip
14249 +{
14250 + struct v4l2_rect c;
14251 + struct v4l2_clip *next;
14252 +};
14253 +
14254 +struct v4l2_window
14255 +{
14256 + struct v4l2_rect w;
14257 + enum v4l2_field field;
14258 + __u32 chromakey;
14259 + struct v4l2_clip *clips;
14260 + __u32 clipcount;
14261 + void *bitmap;
14262 +};
14263 +
14264 +
14265 +/*
14266 + * C A P T U R E P A R A M E T E R S
14267 + */
14268 +struct v4l2_captureparm
14269 +{
14270 + __u32 capability; /* Supported modes */
14271 + __u32 capturemode; /* Current mode */
14272 + struct v4l2_fract timeperframe; /* Time per frame in .1us units */
14273 + __u32 extendedmode; /* Driver-specific extensions */
14274 + __u32 readbuffers; /* # of buffers for read */
14275 + __u32 reserved[4];
14276 +};
14277 +/* Flags for 'capability' and 'capturemode' fields */
14278 +#define V4L2_MODE_HIGHQUALITY 0x0001 /* High quality imaging mode */
14279 +#define V4L2_CAP_TIMEPERFRAME 0x1000 /* timeperframe field is supported */
14280 +
14281 +struct v4l2_outputparm
14282 +{
14283 + __u32 capability; /* Supported modes */
14284 + __u32 outputmode; /* Current mode */
14285 + struct v4l2_fract timeperframe; /* Time per frame in seconds */
14286 + __u32 extendedmode; /* Driver-specific extensions */
14287 + __u32 writebuffers; /* # of buffers for write */
14288 + __u32 reserved[4];
14289 +};
14290 +
14291 +/*
14292 + * I N P U T I M A G E C R O P P I N G
14293 + */
14294 +
14295 +struct v4l2_cropcap {
14296 + enum v4l2_buf_type type;
14297 + struct v4l2_rect bounds;
14298 + struct v4l2_rect defrect;
14299 + struct v4l2_fract pixelaspect;
14300 +};
14301 +
14302 +struct v4l2_crop {
14303 + enum v4l2_buf_type type;
14304 + struct v4l2_rect c;
14305 +};
14306 +
14307 +/*
14308 + * A N A L O G V I D E O S T A N D A R D
14309 + */
14310 +
14311 +typedef __u64 v4l2_std_id;
14312 +
14313 +/* one bit for each */
14314 +#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
14315 +#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
14316 +#define V4L2_STD_PAL_G ((v4l2_std_id)0x00000004)
14317 +#define V4L2_STD_PAL_H ((v4l2_std_id)0x00000008)
14318 +#define V4L2_STD_PAL_I ((v4l2_std_id)0x00000010)
14319 +#define V4L2_STD_PAL_D ((v4l2_std_id)0x00000020)
14320 +#define V4L2_STD_PAL_D1 ((v4l2_std_id)0x00000040)
14321 +#define V4L2_STD_PAL_K ((v4l2_std_id)0x00000080)
14322 +
14323 +#define V4L2_STD_PAL_M ((v4l2_std_id)0x00000100)
14324 +#define V4L2_STD_PAL_N ((v4l2_std_id)0x00000200)
14325 +#define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400)
14326 +#define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800)
14327 +
14328 +#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000)
14329 +#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000)
14330 +
14331 +#define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000)
14332 +#define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000)
14333 +#define V4L2_STD_SECAM_G ((v4l2_std_id)0x00040000)
14334 +#define V4L2_STD_SECAM_H ((v4l2_std_id)0x00080000)
14335 +#define V4L2_STD_SECAM_K ((v4l2_std_id)0x00100000)
14336 +#define V4L2_STD_SECAM_K1 ((v4l2_std_id)0x00200000)
14337 +#define V4L2_STD_SECAM_L ((v4l2_std_id)0x00400000)
14338 +
14339 +/* ATSC/HDTV */
14340 +#define V4L2_STD_ATSC_8_VSB ((v4l2_std_id)0x01000000)
14341 +#define V4L2_STD_ATSC_16_VSB ((v4l2_std_id)0x02000000)
14342 +
14343 +/* some common needed stuff */
14344 +#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\
14345 + V4L2_STD_PAL_B1 |\
14346 + V4L2_STD_PAL_G)
14347 +#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\
14348 + V4L2_STD_PAL_D1 |\
14349 + V4L2_STD_PAL_K)
14350 +#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\
14351 + V4L2_STD_PAL_DK |\
14352 + V4L2_STD_PAL_H |\
14353 + V4L2_STD_PAL_I)
14354 +#define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\
14355 + V4L2_STD_NTSC_M_JP)
14356 +#define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\
14357 + V4L2_STD_SECAM_D |\
14358 + V4L2_STD_SECAM_G |\
14359 + V4L2_STD_SECAM_H |\
14360 + V4L2_STD_SECAM_K |\
14361 + V4L2_STD_SECAM_K1 |\
14362 + V4L2_STD_SECAM_L)
14363 +
14364 +#define V4L2_STD_525_60 (V4L2_STD_PAL_M |\
14365 + V4L2_STD_PAL_60 |\
14366 + V4L2_STD_NTSC)
14367 +#define V4L2_STD_625_50 (V4L2_STD_PAL |\
14368 + V4L2_STD_PAL_N |\
14369 + V4L2_STD_PAL_Nc |\
14370 + V4L2_STD_SECAM)
14371 +
14372 +#define V4L2_STD_UNKNOWN 0
14373 +#define V4L2_STD_ALL (V4L2_STD_525_60 |\
14374 + V4L2_STD_625_50)
14375 +
14376 +struct v4l2_standard
14377 +{
14378 + __u32 index;
14379 + v4l2_std_id id;
14380 + __u8 name[24];
14381 + struct v4l2_fract frameperiod; /* Frames, not fields */
14382 + __u32 framelines;
14383 + __u32 reserved[4];
14384 +};
14385 +
14386 +
14387 +/*
14388 + * V I D E O I N P U T S
14389 + */
14390 +struct v4l2_input
14391 +{
14392 + __u32 index; /* Which input */
14393 + __u8 name[32]; /* Label */
14394 + __u32 type; /* Type of input */
14395 + __u32 audioset; /* Associated audios (bitfield) */
14396 + __u32 tuner; /* Associated tuner */
14397 + v4l2_std_id std;
14398 + __u32 status;
14399 + __u32 reserved[4];
14400 +};
14401 +/* Values for the 'type' field */
14402 +#define V4L2_INPUT_TYPE_TUNER 1
14403 +#define V4L2_INPUT_TYPE_CAMERA 2
14404 +
14405 +/* field 'status' - general */
14406 +#define V4L2_IN_ST_NO_POWER 0x00000001 /* Attached device is off */
14407 +#define V4L2_IN_ST_NO_SIGNAL 0x00000002
14408 +#define V4L2_IN_ST_NO_COLOR 0x00000004
14409 +
14410 +/* field 'status' - analog */
14411 +#define V4L2_IN_ST_NO_H_LOCK 0x00000100 /* No horizontal sync lock */
14412 +#define V4L2_IN_ST_COLOR_KILL 0x00000200 /* Color killer is active */
14413 +
14414 +/* field 'status' - digital */
14415 +#define V4L2_IN_ST_NO_SYNC 0x00010000 /* No synchronization lock */
14416 +#define V4L2_IN_ST_NO_EQU 0x00020000 /* No equalizer lock */
14417 +#define V4L2_IN_ST_NO_CARRIER 0x00040000 /* Carrier recovery failed */
14418 +
14419 +/* field 'status' - VCR and set-top box */
14420 +#define V4L2_IN_ST_MACROVISION 0x01000000 /* Macrovision detected */
14421 +#define V4L2_IN_ST_NO_ACCESS 0x02000000 /* Conditional access denied */
14422 +#define V4L2_IN_ST_VTR 0x04000000 /* VTR time constant */
14423 +
14424 +/*
14425 + * V I D E O O U T P U T S
14426 + */
14427 +struct v4l2_output
14428 +{
14429 + __u32 index; /* Which output */
14430 + __u8 name[32]; /* Label */
14431 + __u32 type; /* Type of output */
14432 + __u32 audioset; /* Associated audios (bitfield) */
14433 + __u32 modulator; /* Associated modulator */
14434 + v4l2_std_id std;
14435 + __u32 reserved[4];
14436 +};
14437 +/* Values for the 'type' field */
14438 +#define V4L2_OUTPUT_TYPE_MODULATOR 1
14439 +#define V4L2_OUTPUT_TYPE_ANALOG 2
14440 +#define V4L2_OUTPUT_TYPE_ANALOGVGAOVERLAY 3
14441 +
14442 +/*
14443 + * C O N T R O L S
14444 + */
14445 +struct v4l2_control
14446 +{
14447 + __u32 id;
14448 + __s32 value;
14449 +};
14450 +
14451 +/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
14452 +struct v4l2_queryctrl
14453 +{
14454 + __u32 id;
14455 + enum v4l2_ctrl_type type;
14456 + __u8 name[32]; /* Whatever */
14457 + __s32 minimum; /* Note signedness */
14458 + __s32 maximum;
14459 + __s32 step;
14460 + __s32 default_value;
14461 + __u32 flags;
14462 + __u32 reserved[2];
14463 +};
14464 +
14465 +/* Used in the VIDIOC_QUERYMENU ioctl for querying menu items */
14466 +struct v4l2_querymenu
14467 +{
14468 + __u32 id;
14469 + __u32 index;
14470 + __u8 name[32]; /* Whatever */
14471 + __u32 reserved;
14472 +};
14473 +
14474 +/* Control flags */
14475 +#define V4L2_CTRL_FLAG_DISABLED 0x0001
14476 +#define V4L2_CTRL_FLAG_GRABBED 0x0002
14477 +
14478 +/* Control IDs defined by V4L2 */
14479 +#define V4L2_CID_BASE 0x00980900
14480 +/* IDs reserved for driver specific controls */
14481 +#define V4L2_CID_PRIVATE_BASE 0x08000000
14482 +
14483 +#define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE+0)
14484 +#define V4L2_CID_CONTRAST (V4L2_CID_BASE+1)
14485 +#define V4L2_CID_SATURATION (V4L2_CID_BASE+2)
14486 +#define V4L2_CID_HUE (V4L2_CID_BASE+3)
14487 +#define V4L2_CID_AUDIO_VOLUME (V4L2_CID_BASE+5)
14488 +#define V4L2_CID_AUDIO_BALANCE (V4L2_CID_BASE+6)
14489 +#define V4L2_CID_AUDIO_BASS (V4L2_CID_BASE+7)
14490 +#define V4L2_CID_AUDIO_TREBLE (V4L2_CID_BASE+8)
14491 +#define V4L2_CID_AUDIO_MUTE (V4L2_CID_BASE+9)
14492 +#define V4L2_CID_AUDIO_LOUDNESS (V4L2_CID_BASE+10)
14493 +#define V4L2_CID_BLACK_LEVEL (V4L2_CID_BASE+11)
14494 +#define V4L2_CID_AUTO_WHITE_BALANCE (V4L2_CID_BASE+12)
14495 +#define V4L2_CID_DO_WHITE_BALANCE (V4L2_CID_BASE+13)
14496 +#define V4L2_CID_RED_BALANCE (V4L2_CID_BASE+14)
14497 +#define V4L2_CID_BLUE_BALANCE (V4L2_CID_BASE+15)
14498 +#define V4L2_CID_GAMMA (V4L2_CID_BASE+16)
14499 +#define V4L2_CID_WHITENESS (V4L2_CID_GAMMA) /* ? Not sure */
14500 +#define V4L2_CID_EXPOSURE (V4L2_CID_BASE+17)
14501 +#define V4L2_CID_AUTOGAIN (V4L2_CID_BASE+18)
14502 +#define V4L2_CID_GAIN (V4L2_CID_BASE+19)
14503 +#define V4L2_CID_HFLIP (V4L2_CID_BASE+20)
14504 +#define V4L2_CID_VFLIP (V4L2_CID_BASE+21)
14505 +#define V4L2_CID_HCENTER (V4L2_CID_BASE+22)
14506 +#define V4L2_CID_VCENTER (V4L2_CID_BASE+23)
14507 +#define V4L2_CID_LASTP1 (V4L2_CID_BASE+24) /* last CID + 1 */
14508 +
14509 +/*
14510 + * T U N I N G
14511 + */
14512 +struct v4l2_tuner
14513 +{
14514 + __u32 index;
14515 + __u8 name[32];
14516 + enum v4l2_tuner_type type;
14517 + __u32 capability;
14518 + __u32 rangelow;
14519 + __u32 rangehigh;
14520 + __u32 rxsubchans;
14521 + __u32 audmode;
14522 + __s32 signal;
14523 + __s32 afc;
14524 + __u32 reserved[4];
14525 +};
14526 +
14527 +struct v4l2_modulator
14528 +{
14529 + __u32 index;
14530 + __u8 name[32];
14531 + __u32 capability;
14532 + __u32 rangelow;
14533 + __u32 rangehigh;
14534 + __u32 txsubchans;
14535 + __u32 reserved[4];
14536 +};
14537 +
14538 +/* Flags for the 'capability' field */
14539 +#define V4L2_TUNER_CAP_LOW 0x0001
14540 +#define V4L2_TUNER_CAP_NORM 0x0002
14541 +#define V4L2_TUNER_CAP_STEREO 0x0010
14542 +#define V4L2_TUNER_CAP_LANG2 0x0020
14543 +#define V4L2_TUNER_CAP_SAP 0x0020
14544 +#define V4L2_TUNER_CAP_LANG1 0x0040
14545 +
14546 +/* Flags for the 'rxsubchans' field */
14547 +#define V4L2_TUNER_SUB_MONO 0x0001
14548 +#define V4L2_TUNER_SUB_STEREO 0x0002
14549 +#define V4L2_TUNER_SUB_LANG2 0x0004
14550 +#define V4L2_TUNER_SUB_SAP 0x0004
14551 +#define V4L2_TUNER_SUB_LANG1 0x0008
14552 +
14553 +/* Values for the 'audmode' field */
14554 +#define V4L2_TUNER_MODE_MONO 0x0000
14555 +#define V4L2_TUNER_MODE_STEREO 0x0001
14556 +#define V4L2_TUNER_MODE_LANG2 0x0002
14557 +#define V4L2_TUNER_MODE_SAP 0x0002
14558 +#define V4L2_TUNER_MODE_LANG1 0x0003
14559 +
14560 +struct v4l2_frequency
14561 +{
14562 + __u32 tuner;
14563 + enum v4l2_tuner_type type;
14564 + __u32 frequency;
14565 + __u32 reserved[8];
14566 +};
14567 +
14568 +/*
14569 + * A U D I O
14570 + */
14571 +struct v4l2_audio
14572 +{
14573 + __u32 index;
14574 + __u8 name[32];
14575 + __u32 capability;
14576 + __u32 mode;
14577 + __u32 reserved[2];
14578 +};
14579 +/* Flags for the 'capability' field */
14580 +#define V4L2_AUDCAP_STEREO 0x00001
14581 +#define V4L2_AUDCAP_AVL 0x00002
14582 +
14583 +/* Flags for the 'mode' field */
14584 +#define V4L2_AUDMODE_AVL 0x00001
14585 +
14586 +struct v4l2_audioout
14587 +{
14588 + __u32 index;
14589 + __u8 name[32];
14590 + __u32 capability;
14591 + __u32 mode;
14592 + __u32 reserved[2];
14593 +};
14594 +
14595 +/*
14596 + * D A T A S E R V I C E S ( V B I )
14597 + *
14598 + * Data services API by Michael Schimek
14599 + */
14600 +
14601 +struct v4l2_vbi_format
14602 +{
14603 + __u32 sampling_rate; /* in 1 Hz */
14604 + __u32 offset;
14605 + __u32 samples_per_line;
14606 + __u32 sample_format; /* V4L2_PIX_FMT_* */
14607 + __s32 start[2];
14608 + __u32 count[2];
14609 + __u32 flags; /* V4L2_VBI_* */
14610 + __u32 reserved[2]; /* must be zero */
14611 +};
14612 +
14613 +/* VBI flags */
14614 +#define V4L2_VBI_UNSYNC (1<< 0)
14615 +#define V4L2_VBI_INTERLACED (1<< 1)
14616 +
14617 +
14618 +/*
14619 + * A G G R E G A T E S T R U C T U R E S
14620 + */
14621 +
14622 +/* Stream data format
14623 + */
14624 +struct v4l2_format
14625 +{
14626 + enum v4l2_buf_type type;
14627 + union
14628 + {
14629 + struct v4l2_pix_format pix; // V4L2_BUF_TYPE_VIDEO_CAPTURE
14630 + struct v4l2_window win; // V4L2_BUF_TYPE_VIDEO_OVERLAY
14631 + struct v4l2_vbi_format vbi; // V4L2_BUF_TYPE_VBI_CAPTURE
14632 + __u8 raw_data[200]; // user-defined
14633 + } fmt;
14634 +};
14635 +
14636 +
14637 +/* Stream type-dependent parameters
14638 + */
14639 +struct v4l2_streamparm
14640 +{
14641 + enum v4l2_buf_type type;
14642 + union
14643 + {
14644 + struct v4l2_captureparm capture;
14645 + struct v4l2_outputparm output;
14646 + __u8 raw_data[200]; /* user-defined */
14647 + } parm;
14648 +};
14649 +
14650 +
14651 +
14652 +/*
14653 + * I O C T L C O D E S F O R V I D E O D E V I C E S
14654 + *
14655 + */
14656 +#define VIDIOC_QUERYCAP _IOR ('V', 0, struct v4l2_capability)
14657 +#define VIDIOC_RESERVED _IO ('V', 1)
14658 +#define VIDIOC_ENUM_FMT _IOWR ('V', 2, struct v4l2_fmtdesc)
14659 +#define VIDIOC_G_FMT _IOWR ('V', 4, struct v4l2_format)
14660 +#define VIDIOC_S_FMT _IOWR ('V', 5, struct v4l2_format)
14661 +#if 0
14662 +#define VIDIOC_G_COMP _IOR ('V', 6, struct v4l2_compression)
14663 +#define VIDIOC_S_COMP _IOW ('V', 7, struct v4l2_compression)
14664 +#endif
14665 +#define VIDIOC_REQBUFS _IOWR ('V', 8, struct v4l2_requestbuffers)
14666 +#define VIDIOC_QUERYBUF _IOWR ('V', 9, struct v4l2_buffer)
14667 +#define VIDIOC_G_FBUF _IOR ('V', 10, struct v4l2_framebuffer)
14668 +#define VIDIOC_S_FBUF _IOW ('V', 11, struct v4l2_framebuffer)
14669 +#define VIDIOC_OVERLAY _IOW ('V', 14, int)
14670 +#define VIDIOC_QBUF _IOWR ('V', 15, struct v4l2_buffer)
14671 +#define VIDIOC_DQBUF _IOWR ('V', 17, struct v4l2_buffer)
14672 +#define VIDIOC_STREAMON _IOW ('V', 18, int)
14673 +#define VIDIOC_STREAMOFF _IOW ('V', 19, int)
14674 +#define VIDIOC_G_PARM _IOWR ('V', 21, struct v4l2_streamparm)
14675 +#define VIDIOC_S_PARM _IOWR ('V', 22, struct v4l2_streamparm)
14676 +#define VIDIOC_G_STD _IOR ('V', 23, v4l2_std_id)
14677 +#define VIDIOC_S_STD _IOW ('V', 24, v4l2_std_id)
14678 +#define VIDIOC_ENUMSTD _IOWR ('V', 25, struct v4l2_standard)
14679 +#define VIDIOC_ENUMINPUT _IOWR ('V', 26, struct v4l2_input)
14680 +#define VIDIOC_G_CTRL _IOWR ('V', 27, struct v4l2_control)
14681 +#define VIDIOC_S_CTRL _IOWR ('V', 28, struct v4l2_control)
14682 +#define VIDIOC_G_TUNER _IOWR ('V', 29, struct v4l2_tuner)
14683 +#define VIDIOC_S_TUNER _IOW ('V', 30, struct v4l2_tuner)
14684 +#define VIDIOC_G_AUDIO _IOR ('V', 33, struct v4l2_audio)
14685 +#define VIDIOC_S_AUDIO _IOW ('V', 34, struct v4l2_audio)
14686 +#define VIDIOC_QUERYCTRL _IOWR ('V', 36, struct v4l2_queryctrl)
14687 +#define VIDIOC_QUERYMENU _IOWR ('V', 37, struct v4l2_querymenu)
14688 +#define VIDIOC_G_INPUT _IOR ('V', 38, int)
14689 +#define VIDIOC_S_INPUT _IOWR ('V', 39, int)
14690 +#define VIDIOC_G_OUTPUT _IOR ('V', 46, int)
14691 +#define VIDIOC_S_OUTPUT _IOWR ('V', 47, int)
14692 +#define VIDIOC_ENUMOUTPUT _IOWR ('V', 48, struct v4l2_output)
14693 +#define VIDIOC_G_AUDOUT _IOR ('V', 49, struct v4l2_audioout)
14694 +#define VIDIOC_S_AUDOUT _IOW ('V', 50, struct v4l2_audioout)
14695 +#define VIDIOC_G_MODULATOR _IOWR ('V', 54, struct v4l2_modulator)
14696 +#define VIDIOC_S_MODULATOR _IOW ('V', 55, struct v4l2_modulator)
14697 +#define VIDIOC_G_FREQUENCY _IOWR ('V', 56, struct v4l2_frequency)
14698 +#define VIDIOC_S_FREQUENCY _IOW ('V', 57, struct v4l2_frequency)
14699 +#define VIDIOC_CROPCAP _IOR ('V', 58, struct v4l2_cropcap)
14700 +#define VIDIOC_G_CROP _IOWR ('V', 59, struct v4l2_crop)
14701 +#define VIDIOC_S_CROP _IOW ('V', 60, struct v4l2_crop)
14702 +#define VIDIOC_G_JPEGCOMP _IOR ('V', 61, struct v4l2_jpegcompression)
14703 +#define VIDIOC_S_JPEGCOMP _IOW ('V', 62, struct v4l2_jpegcompression)
14704 +#define VIDIOC_QUERYSTD _IOR ('V', 63, v4l2_std_id)
14705 +#define VIDIOC_TRY_FMT _IOWR ('V', 64, struct v4l2_format)
14706 +#define VIDIOC_ENUMAUDIO _IOWR ('V', 65, struct v4l2_audio)
14707 +#define VIDIOC_ENUMAUDOUT _IOWR ('V', 66, struct v4l2_audioout)
14708 +#define VIDIOC_G_PRIORITY _IOR ('V', 67, enum v4l2_priority)
14709 +#define VIDIOC_S_PRIORITY _IOW ('V', 68, enum v4l2_priority)
14710 +
14711 +/* for compatibility, will go away some day */
14712 +#define VIDIOC_OVERLAY_OLD _IOWR ('V', 14, int)
14713 +#define VIDIOC_S_PARM_OLD _IOW ('V', 22, struct v4l2_streamparm)
14714 +#define VIDIOC_S_CTRL_OLD _IOW ('V', 28, struct v4l2_control)
14715 +#define VIDIOC_G_AUDIO_OLD _IOWR ('V', 33, struct v4l2_audio)
14716 +#define VIDIOC_G_AUDOUT_OLD _IOWR ('V', 49, struct v4l2_audioout)
14717 +
14718 +#define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */
14719 +
14720 +
14721 +#ifdef __KERNEL__
14722 +/*
14723 + *
14724 + * V 4 L 2 D R I V E R H E L P E R A P I
14725 + *
14726 + * Some commonly needed functions for drivers (v4l2-common.o module)
14727 + */
14728 +#include <linux/fs.h>
14729 +
14730 +/* Video standard functions */
14731 +extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs);
14732 +extern int v4l2_video_std_construct(struct v4l2_standard *vs,
14733 + int id, char *name);
14734 +
14735 +/* prority handling */
14736 +struct v4l2_prio_state {
14737 + atomic_t prios[4];
14738 +};
14739 +int v4l2_prio_init(struct v4l2_prio_state *global);
14740 +int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
14741 + enum v4l2_priority new);
14742 +int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local);
14743 +int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local);
14744 +enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global);
14745 +int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local);
14746 +
14747 +/* names for fancy debug output */
14748 +extern char *v4l2_field_names[];
14749 +extern char *v4l2_type_names[];
14750 +extern char *v4l2_ioctl_names[];
14751 +
14752 +/* Compatibility layer interface -- v4l1-compat module */
14753 +typedef int (*v4l2_kioctl)(struct inode *inode, struct file *file,
14754 + unsigned int cmd, void *arg);
14755 +int v4l_compat_translate_ioctl(struct inode *inode, struct file *file,
14756 + int cmd, void *arg, v4l2_kioctl driver_ioctl);
14757 +
14758 +#endif /* __KERNEL__ */
14759 +#endif /* __LINUX_VIDEODEV2_H */
14760 +
14761 +/*
14762 + * Local variables:
14763 + * c-basic-offset: 8
14764 + * End:
14765 + */
14766 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/videodev.c
14767 ===================================================================
14768 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
14769 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/videodev.c 2009-01-02 00:01:56.000000000 +0100
14770 @@ -0,0 +1,332 @@
14771 +/*
14772 + * Video capture interface for Linux Character Device Driver.
14773 + * based on
14774 + * Alan Cox, <alan@redhat.com> video4linux
14775 + *
14776 + * Author: SW.LEE <hitchcar@samsung.com>
14777 + * 2004 (C) Samsung Electronics
14778 + * Modified for S3C2440/S3C24A0 Interface
14779 + *
14780 + * This file is released under the GPLv2
14781 + */
14782 +
14783 +
14784 +#include <linux/module.h>
14785 +#include <linux/types.h>
14786 +#include <linux/kernel.h>
14787 +#include <linux/sched.h>
14788 +#include <linux/smp_lock.h>
14789 +#include <linux/mm.h>
14790 +#include <linux/string.h>
14791 +#include <linux/errno.h>
14792 +#include <linux/init.h>
14793 +#include <linux/kmod.h>
14794 +#include <linux/slab.h>
14795 +/* #include <linux/devfs_fs_kernel.h> */
14796 +#include <linux/miscdevice.h>
14797 +#include <asm/uaccess.h>
14798 +#include <asm/system.h>
14799 +#include <asm/semaphore.h>
14800 +
14801 +
14802 +
14803 +#define CONFIG_VIDEO_V4L1_COMPAT
14804 +#include <linux/videodev.h>
14805 +#include "camif.h"
14806 +#include "miscdevice.h"
14807 +
14808 +
14809 +static DECLARE_MUTEX(videodev_lock);
14810 +
14811 +const char *fimc_version = "$Id: videodev.c,v 1.1.1.1 2004/04/27 03:52:50 swlee Exp $";
14812 +
14813 +#define VIDEO_NAME "video4linux"
14814 +
14815 +
14816 +#define VIDEO_NUM_DEVICES 2
14817 +static struct video_device *video_device[VIDEO_NUM_DEVICES];
14818 +
14819 +static inline struct video_device * get_vd(int nr)
14820 +{
14821 + if ( nr == CODEC_MINOR)
14822 + return video_device[0];
14823 + else {
14824 + assert ( nr & PREVIEW_MINOR);
14825 + return video_device[1];
14826 + }
14827 +}
14828 +
14829 +static inline void set_vd ( struct video_device * vd, int nr)
14830 +{
14831 + if ( nr == CODEC_MINOR)
14832 + video_device[0] = vd;
14833 + else {
14834 + assert ( nr & PREVIEW_MINOR);
14835 + video_device[1] = vd;
14836 + }
14837 +}
14838 +
14839 +static inline int video_release(struct inode *inode, struct file *f)
14840 +{
14841 + int minor = MINOR(inode->i_rdev);
14842 + struct video_device *vfd;
14843 +
14844 + vfd = get_vd(minor);
14845 +#if 1 /* needed until all drivers are fixed */
14846 + if (!vfd->release)
14847 + return 0;
14848 +#endif
14849 + vfd->release(vfd);
14850 + return 0;
14851 +}
14852 +
14853 +struct video_device* video_devdata(struct file *file)
14854 +{
14855 + return video_device[iminor(file->f_dentry->d_inode)];
14856 +}
14857 +
14858 +
14859 +/*
14860 + * Open a video device.
14861 + */
14862 +static int video_open(struct inode *inode, struct file *file)
14863 +{
14864 + int minor = MINOR(inode->i_rdev);
14865 + int err = 0;
14866 + struct video_device *vfl;
14867 + struct file_operations const *old_fops;
14868 +
14869 + down(&videodev_lock);
14870 +
14871 + vfl = get_vd(minor);
14872 +
14873 + old_fops = file->f_op;
14874 + file->f_op = fops_get(vfl->fops);
14875 + if(file->f_op->open)
14876 + err = file->f_op->open(inode,file);
14877 + if (err) {
14878 + fops_put(file->f_op);
14879 + file->f_op = fops_get(old_fops);
14880 + }
14881 + fops_put(old_fops);
14882 + up(&videodev_lock);
14883 + return err;
14884 +}
14885 +
14886 +/*
14887 + * open/release helper functions -- handle exclusive opens
14888 + */
14889 +extern int video_exclusive_open(struct inode *inode, struct file *file)
14890 +{
14891 + struct video_device *vfl = get_vd(MINOR(inode->i_rdev));
14892 + int retval = 0;
14893 +
14894 + mutex_lock(&vfl->lock);
14895 + if (vfl->users) {
14896 + retval = -EBUSY;
14897 + } else {
14898 + vfl->users++;
14899 + }
14900 + mutex_unlock(&vfl->lock);
14901 + return retval;
14902 +}
14903 +
14904 +extern int video_exclusive_release(struct inode *inode, struct file *file)
14905 +{
14906 + struct video_device *vfl = get_vd(MINOR(inode->i_rdev));
14907 + vfl->users--;
14908 + return 0;
14909 +}
14910 +
14911 +int
14912 +video_usercopy(struct inode *inode, struct file *file,
14913 + unsigned int cmd, unsigned long arg,
14914 + int (*func)(struct inode *inode, struct file *file,
14915 + unsigned int cmd, void *arg))
14916 +{
14917 + char sbuf[128];
14918 + void *mbuf = NULL;
14919 + void *parg = NULL;
14920 + int err = -EINVAL;
14921 +
14922 + // cmd = video_fix_command(cmd);
14923 +
14924 + /* Copy arguments into temp kernel buffer */
14925 + switch (_IOC_DIR(cmd)) {
14926 + case _IOC_NONE:
14927 + parg = (void *)arg;
14928 + break;
14929 + case _IOC_READ:
14930 + case _IOC_WRITE:
14931 + case (_IOC_WRITE | _IOC_READ):
14932 + if (_IOC_SIZE(cmd) <= sizeof(sbuf)) {
14933 + parg = sbuf;
14934 + } else {
14935 + /* too big to allocate from stack */
14936 + mbuf = kmalloc(_IOC_SIZE(cmd),GFP_KERNEL);
14937 + if (NULL == mbuf)
14938 + return -ENOMEM;
14939 + parg = mbuf;
14940 + }
14941 +
14942 + err = -EFAULT;
14943 + if (_IOC_DIR(cmd) & _IOC_WRITE)
14944 + if (copy_from_user(parg, (void *)arg, _IOC_SIZE(cmd)))
14945 + goto out;
14946 + break;
14947 + }
14948 +
14949 + /* call driver */
14950 + err = func(inode, file, cmd, parg);
14951 + if (err == -ENOIOCTLCMD)
14952 + err = -EINVAL;
14953 + if (err < 0)
14954 + goto out;
14955 +
14956 + /* Copy results into user buffer */
14957 + switch (_IOC_DIR(cmd))
14958 + {
14959 + case _IOC_READ:
14960 + case (_IOC_WRITE | _IOC_READ):
14961 + if (copy_to_user((void *)arg, parg, _IOC_SIZE(cmd)))
14962 + err = -EFAULT;
14963 + break;
14964 + }
14965 +
14966 +out:
14967 + if (mbuf)
14968 + kfree(mbuf);
14969 + return err;
14970 +}
14971 +
14972 +
14973 +static struct file_operations video_fops=
14974 +{
14975 + .owner = THIS_MODULE,
14976 + .llseek = no_llseek,
14977 + .open = video_open,
14978 + .release = video_release,
14979 +};
14980 +
14981 +static struct miscdevice codec_dev = {
14982 + minor: CODEC_MINOR,
14983 + name : "codec",
14984 + fops : &video_fops
14985 +};
14986 +
14987 +static struct miscdevice preview_dev = {
14988 + minor: PREVIEW_MINOR,
14989 + name : "preview",
14990 + fops : &video_fops
14991 +};
14992 +
14993 +
14994 +/**
14995 + * video_register_device - register video4linux devices
14996 + * @vfd: video device structure we want to register
14997 + * @type: type of device to register
14998 + * @nr: minor number
14999 + *
15000 + * Zero is returned on success.
15001 + * type : ignored.
15002 + * nr :
15003 + * 0 Codec index
15004 + * 1 Preview index
15005 + */
15006 +int video_register_device(struct video_device *vfd, int type, int nr)
15007 +{
15008 + int ret=0;
15009 +
15010 + /* pick a minor number */
15011 + down(&videodev_lock);
15012 + set_vd (vfd, nr);
15013 + vfd->minor=nr;
15014 + up(&videodev_lock);
15015 +
15016 + switch (vfd->minor) {
15017 + case CODEC_MINOR:
15018 + ret = misc_register(&codec_dev);
15019 + if (ret) {
15020 + printk(KERN_ERR
15021 + "can't misc_register : codec on minor=%d\n", CODEC_MINOR);
15022 + panic(" Give me misc codec \n");
15023 + }
15024 + break;
15025 + case PREVIEW_MINOR:
15026 + ret = misc_register(&preview_dev);
15027 + if (ret) {
15028 + printk(KERN_ERR
15029 + "can't misc_register (preview) on minor=%d\n", PREVIEW_MINOR);
15030 + panic(" Give me misc codec \n");
15031 + }
15032 + break;
15033 + }
15034 +
15035 +#if 0 /* needed until all drivers are fixed */
15036 + if (!vfd->release)
15037 + printk(KERN_WARNING "videodev: \"%s\" has no release callback. "
15038 + "Please fix your driver for proper sysfs support, see "
15039 + "http://lwn.net/Articles/36850/\n", vfd->name);
15040 +#endif
15041 + return 0;
15042 +}
15043 +
15044 +/**
15045 + * video_unregister_device - unregister a video4linux device
15046 + * @vfd: the device to unregister
15047 + *
15048 + * This unregisters the passed device and deassigns the minor
15049 + * number. Future open calls will be met with errors.
15050 + */
15051 +
15052 +void video_unregister_device(struct video_device *vfd)
15053 +{
15054 + down(&videodev_lock);
15055 +
15056 + if(get_vd(vfd->minor)!=vfd)
15057 + panic("videodev: bad unregister");
15058 +
15059 + if (vfd->minor== CODEC_MINOR)
15060 + misc_deregister(&codec_dev);
15061 + else
15062 + misc_deregister(&preview_dev);
15063 + set_vd (NULL, vfd->minor);
15064 + up(&videodev_lock);
15065 +}
15066 +
15067 +
15068 +/*
15069 + * Initialise video for linux
15070 + */
15071 +
15072 +static int __init videodev_init(void)
15073 +{
15074 +// printk(KERN_INFO "FIMC2.0 Built:"__DATE__" "__TIME__"\n%s\n",fimc_version);
15075 + return 0;
15076 +}
15077 +
15078 +static void __exit videodev_exit(void)
15079 +{
15080 +}
15081 +
15082 +module_init(videodev_init)
15083 +module_exit(videodev_exit)
15084 +
15085 +EXPORT_SYMBOL(video_register_device);
15086 +EXPORT_SYMBOL(fimc_version);
15087 +EXPORT_SYMBOL(video_unregister_device);
15088 +EXPORT_SYMBOL(video_usercopy);
15089 +EXPORT_SYMBOL(video_exclusive_open);
15090 +EXPORT_SYMBOL(video_exclusive_release);
15091 +
15092 +
15093 +MODULE_AUTHOR("SW.LEE <hitchcar@sec.samsung.com>");
15094 +MODULE_DESCRIPTION("VideoDev For FIMC2.0 MISC Drivers");
15095 +MODULE_LICENSE("GPL");
15096 +
15097 +
15098 +/*
15099 + * Local variables:
15100 + * c-basic-offset: 8
15101 + * End:
15102 + */
15103 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/videodev.h
15104 ===================================================================
15105 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
15106 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/videodev.h 2009-01-02 00:01:56.000000000 +0100
15107 @@ -0,0 +1,108 @@
15108 +//#ifndef __LINUX_S3C_VIDEODEV_H
15109 +//#define __LINUX_S3C_VIDEODEV_H
15110 +
15111 +#include <linux/types.h>
15112 +#include <linux/version.h>
15113 +#include <media/v4l2-dev.h>
15114 +
15115 +#if 0
15116 +struct video_device
15117 +{
15118 + /* device info */
15119 + // struct device *dev;
15120 + char name[32];
15121 + int type; /* v4l1 */
15122 + int type2; /* v4l2 */
15123 + int hardware;
15124 + int minor;
15125 +
15126 + /* device ops + callbacks */
15127 + struct file_operations *fops;
15128 + void (*release)(struct video_device *vfd);
15129 +
15130 +
15131 +#if 1 /* to be removed in 2.7.x */
15132 + /* obsolete -- fops->owner is used instead */
15133 + struct module *owner;
15134 + /* dev->driver_data will be used instead some day.
15135 + * Use the video_{get|set}_drvdata() helper functions,
15136 + * so the switch over will be transparent for you.
15137 + * Or use {pci|usb}_{get|set}_drvdata() directly. */
15138 + void *priv;
15139 +#endif
15140 +
15141 + /* for videodev.c intenal usage -- please don't touch */
15142 + int users; /* video_exclusive_{open|close} ... */
15143 + struct semaphore lock; /* ... helper function uses these */
15144 + char devfs_name[64]; /* devfs */
15145 + // struct class_device class_dev; /* sysfs */
15146 +};
15147 +
15148 +#define VIDEO_MAJOR 81
15149 +
15150 +#define VFL_TYPE_GRABBER 0
15151 +
15152 +
15153 +extern int video_register_device(struct video_device *, int type, int nr);
15154 +extern void video_unregister_device(struct video_device *);
15155 +extern struct video_device* video_devdata(struct file*);
15156 +
15157 +
15158 +
15159 +struct video_picture
15160 +{
15161 + __u16 brightness;
15162 + __u16 hue;
15163 + __u16 colour;
15164 + __u16 contrast;
15165 + __u16 whiteness; /* Black and white only */
15166 + __u16 depth; /* Capture depth */
15167 + __u16 palette; /* Palette in use */
15168 +#define VIDEO_PALETTE_GREY 1 /* Linear greyscale */
15169 +#define VIDEO_PALETTE_HI240 2 /* High 240 cube (BT848) */
15170 +#define VIDEO_PALETTE_RGB565 3 /* 565 16 bit RGB */
15171 +#define VIDEO_PALETTE_RGB24 4 /* 24bit RGB */
15172 +#define VIDEO_PALETTE_RGB32 5 /* 32bit RGB */
15173 +#define VIDEO_PALETTE_RGB555 6 /* 555 15bit RGB */
15174 +#define VIDEO_PALETTE_YUV422 7 /* YUV422 capture */
15175 +#define VIDEO_PALETTE_YUYV 8
15176 +#define VIDEO_PALETTE_UYVY 9 /* The great thing about standards is ... */
15177 +#define VIDEO_PALETTE_YUV420 10
15178 +#define VIDEO_PALETTE_YUV411 11 /* YUV411 capture */
15179 +#define VIDEO_PALETTE_RAW 12 /* RAW capture (BT848) */
15180 +#define VIDEO_PALETTE_YUV422P 13 /* YUV 4:2:2 Planar */
15181 +#define VIDEO_PALETTE_YUV411P 14 /* YUV 4:1:1 Planar */
15182 +#define VIDEO_PALETTE_YUV420P 15 /* YUV 4:2:0 Planar */
15183 +#define VIDEO_PALETTE_YUV410P 16 /* YUV 4:1:0 Planar */
15184 +#define VIDEO_PALETTE_PLANAR 13 /* start of planar entries */
15185 +#define VIDEO_PALETTE_COMPONENT 7 /* start of component entries */
15186 +};
15187 +
15188 +extern int video_exclusive_open(struct inode *inode, struct file *file);
15189 +extern int video_exclusive_release(struct inode *inode, struct file *file);
15190 +extern int video_usercopy(struct inode *inode, struct file *file,
15191 + unsigned int cmd, unsigned long arg,
15192 + int (*func)(struct inode *inode, struct file *file,
15193 + unsigned int cmd, void *arg));
15194 +
15195 +
15196 +
15197 +
15198 +#define VID_TYPE_CAPTURE 1 /* Can capture */
15199 +#define VID_TYPE_CLIPPING 32 /* Can clip */
15200 +#define VID_TYPE_FRAMERAM 64 /* Uses the frame buffer memory */
15201 +#define VID_TYPE_SCALES 128 /* Scalable */
15202 +#define VID_TYPE_SUBCAPTURE 512 /* Can capture subareas of the image */
15203 +
15204 +
15205 +
15206 +#endif
15207 +//#endif
15208 +
15209 +#define VID_HARDWARE_SAMSUNG_FIMC 255
15210 +
15211 +/*
15212 + * Local variables:
15213 + * c-basic-offset: 8
15214 + * End:
15215 + */
15216 Index: linux-2.6.28/arch/arm/mach-s3c2440/camera/video-driver.c
15217 ===================================================================
15218 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
15219 +++ linux-2.6.28/arch/arm/mach-s3c2440/camera/video-driver.c 2009-01-02 00:01:56.000000000 +0100
15220 @@ -0,0 +1,624 @@
15221 +/*
15222 + Copyright (C) 2004 Samsung Electronics
15223 + SW.LEE <hitchcar@sec.samsung.com>
15224 + This program is free software; you can redistribute it and/or modify
15225 + it under the terms of the GNU General Public License as published by
15226 + the Free Software Foundation; either version 2 of the License, or
15227 + (at your option) any later version.
15228 +*/
15229 +
15230 +#include <linux/version.h>
15231 +#include <linux/module.h>
15232 +#include <linux/delay.h>
15233 +#include <linux/errno.h>
15234 +#include <linux/fs.h>
15235 +#include <linux/kernel.h>
15236 +#include <linux/major.h>
15237 +#include <linux/slab.h>
15238 +#include <linux/poll.h>
15239 +#include <linux/signal.h>
15240 +#include <linux/ioport.h>
15241 +#include <linux/sched.h>
15242 +#include <linux/types.h>
15243 +#include <linux/interrupt.h>
15244 +#include <linux/kmod.h>
15245 +#include <linux/vmalloc.h>
15246 +#include <linux/init.h>
15247 +#include <asm/io.h>
15248 +#include <asm/page.h>
15249 +#include <asm/irq.h>
15250 +#include <asm/semaphore.h>
15251 +#include <linux/miscdevice.h>
15252 +#include <asm/arch/irqs.h>
15253 +
15254 +//#define SW_DEBUG
15255 +#define CONFIG_VIDEO_V4L1_COMPAT
15256 +#include <linux/videodev.h>
15257 +#include "camif.h"
15258 +#include "miscdevice.h"
15259 +#include "cam_reg.h"
15260 +#include "sensor.h"
15261 +#include "userapp.h"
15262 +
15263 +#ifdef Z_API
15264 +#include "qt.h"
15265 +#endif
15266 +
15267 +/* Codec and Preview */
15268 +#define CAMIF_NUM 2
15269 +static camif_cfg_t fimc[CAMIF_NUM];
15270 +u32 *camregs;
15271 +
15272 +static const char *driver_version =
15273 + "$Id: video-driver.c,v 1.9 2004/06/02 03:10:36 swlee Exp $";
15274 +extern const char *fimc_version;
15275 +extern const char *fsm_version;
15276 +
15277 +extern void camif_start_c_with_p (camif_cfg_t *cfg, camif_cfg_t *other);
15278 +
15279 +camif_cfg_t * get_camif(int nr)
15280 +{
15281 + camif_cfg_t *ret = NULL;
15282 + switch(nr) {
15283 + case CODEC_MINOR:
15284 + ret = &fimc[0];
15285 + break;
15286 + case PREVIEW_MINOR:
15287 + ret = &fimc[1];
15288 + break;
15289 + default:
15290 + panic("Unknow Minor Number \n");
15291 + }
15292 + return ret;
15293 +}
15294 +
15295 +
15296 +static int camif_codec_start(camif_cfg_t *cfg)
15297 +{
15298 + int ret = 0;
15299 + ret =camif_check_preview(cfg);
15300 + switch(ret) {
15301 + case 0: /* Play alone */
15302 + DPRINTK("Start Alone \n");
15303 + camif_4fsm_start(cfg);
15304 + cfg->gc->status |= C_WORKING;
15305 + break;
15306 + case -ERESTARTSYS: /* Busy , retry */
15307 + //DPRINTK("Error \n");
15308 + printk("Error \n");
15309 + break;
15310 + case 1:
15311 + DPRINTK("need callback \n");
15312 + ret = camif_callback_start(cfg);
15313 + if(ret < 0 ) {
15314 + printk(KERN_INFO "Busy RESTART \n");
15315 + return ret; /* Busy, retry */
15316 + }
15317 + break;
15318 + }
15319 + return ret;
15320 +}
15321 +
15322 +
15323 +ssize_t camif_write (struct file *f, const char *b, size_t c,loff_t *offset)
15324 +{
15325 + camif_cfg_t *cfg;
15326 +
15327 + c = 0; /* return value */
15328 + DPRINTK("\n");
15329 + cfg = get_camif(MINOR(f->f_dentry->d_inode->i_rdev));
15330 + switch (*b) {
15331 + case 'O':
15332 + if (cfg->dma_type & CAMIF_PREVIEW) {
15333 + if (cfg->gc->status & C_WORKING) {
15334 + camif_start_c_with_p(cfg,get_camif(CODEC_MINOR));
15335 + }
15336 + else {
15337 + camif_4fsm_start(cfg);
15338 + }
15339 + }
15340 + else{
15341 + c = camif_codec_start(cfg);
15342 + if(c < 0) c = 1; /* Error and neet to retry */
15343 + }
15344 +
15345 + break;
15346 + case 'X':
15347 + camif_p_stop(cfg);
15348 + break;
15349 + default:
15350 + panic("CAMERA:camif_write: Unexpected Param\n");
15351 + }
15352 + DPRINTK("end\n");
15353 +
15354 + return c;
15355 +}
15356 +
15357 +
15358 +ssize_t camif_p_read(struct file *file, char *buf, size_t count, loff_t *pos)
15359 +{
15360 + camif_cfg_t *cfg = NULL;
15361 + size_t end;
15362 +
15363 + cfg = get_camif(MINOR(file->f_dentry->d_inode->i_rdev));
15364 + cfg->status = CAMIF_STARTED;
15365 +
15366 + if (wait_event_interruptible(cfg->waitq,cfg->status == CAMIF_INT_HAPPEN))
15367 + return -ERESTARTSYS;
15368 +
15369 + cfg->status = CAMIF_STOPPED;
15370 + end = min_t(size_t, cfg->pp_totalsize /cfg->pp_num, count);
15371 + if (copy_to_user(buf, camif_g_frame(cfg), end))
15372 + return -EFAULT;
15373 +
15374 + return end;
15375 +}
15376 +
15377 +
15378 +static ssize_t
15379 +camif_c_read(struct file *file, char *buf, size_t count, loff_t *pos)
15380 +{
15381 + camif_cfg_t *cfg = NULL;
15382 + size_t end;
15383 +
15384 + /* cfg = file->private_data; */
15385 + cfg = get_camif(MINOR(file->f_dentry->d_inode->i_rdev));
15386 +#if 0
15387 + if(file->f_flags & O_NONBLOCK) {
15388 + printk(KERN_ERR"Don't Support NON_BLOCK \n");
15389 + }
15390 +#endif
15391 +
15392 + /* Change the below wait_event_interruptible func */
15393 + if (wait_event_interruptible(cfg->waitq,cfg->status == CAMIF_INT_HAPPEN))
15394 + return -ERESTARTSYS;
15395 + cfg->status = CAMIF_STOPPED;
15396 + end = min_t(size_t, cfg->pp_totalsize /cfg->pp_num, count);
15397 + if (copy_to_user(buf, camif_g_frame(cfg), end))
15398 + return -EFAULT;
15399 + return end;
15400 +}
15401 +
15402 +
15403 +static irqreturn_t camif_c_irq(int irq, void *dev_id)
15404 +{
15405 + camif_cfg_t *cfg = (camif_cfg_t *)dev_id;
15406 +
15407 + DPRINTK("\n");
15408 + camif_g_fifo_status(cfg);
15409 + camif_g_frame_num(cfg);
15410 + if(camif_enter_c_4fsm(cfg) != INSTANT_SKIP)
15411 + wake_up_interruptible(&cfg->waitq);
15412 +
15413 + return IRQ_HANDLED;
15414 +}
15415 +
15416 +static irqreturn_t camif_p_irq(int irq, void *dev_id)
15417 +{
15418 + camif_cfg_t *cfg = (camif_cfg_t *)dev_id;
15419 +
15420 + DPRINTK("\n");
15421 + camif_g_fifo_status(cfg);
15422 + camif_g_frame_num(cfg);
15423 + if(camif_enter_p_4fsm(cfg) != INSTANT_SKIP)
15424 + wake_up_interruptible(&cfg->waitq);
15425 +#if 0
15426 + if( (cfg->perf.frames % 5) == 0)
15427 + DPRINTK("5\n");
15428 +#endif
15429 +
15430 + return IRQ_HANDLED;
15431 +}
15432 +
15433 +static void camif_release_irq(camif_cfg_t *cfg)
15434 +{
15435 + disable_irq(cfg->irq);
15436 + free_irq(cfg->irq, cfg);
15437 +}
15438 +
15439 +static int camif_irq_request(camif_cfg_t *cfg)
15440 +{
15441 + int ret = 0;
15442 +
15443 + if (cfg->dma_type & CAMIF_CODEC) {
15444 + if ((ret = request_irq(cfg->irq, camif_c_irq,
15445 + 0, cfg->shortname, cfg))) {
15446 + printk("request_irq(CAM_C) failed.\n");
15447 + }
15448 + }
15449 + if (cfg->dma_type & CAMIF_PREVIEW) {
15450 + if ((ret = request_irq(cfg->irq, camif_p_irq,
15451 + 0, cfg->shortname, cfg))) {
15452 + printk("request_irq(CAM_P) failed.\n");
15453 + }
15454 + }
15455 + return 0;
15456 +}
15457 +
15458 +static void camif_init_sensor(camif_cfg_t *cfg)
15459 +{
15460 + camif_gc_t *gc = cfg->gc;
15461 + if (!gc->sensor)
15462 + panic("CAMERA:I2C Client(Img Sensor)Not registered\n");
15463 + if(!gc->init_sensor) {
15464 + camif_reset(gc->reset_type, gc->reset_udelay);
15465 + gc->sensor->driver->command(gc->sensor,SENSOR_INIT,NULL);
15466 + gc->init_sensor = 1; /*sensor init done */
15467 + }
15468 + gc->sensor->driver->command(gc->sensor, USER_ADD, NULL);
15469 +}
15470 +
15471 +static int camif_open(struct inode *inode, struct file *file)
15472 +{
15473 + int err;
15474 + camif_cfg_t * cfg = get_camif(MINOR(inode->i_rdev));
15475 +
15476 + if(cfg->dma_type & CAMIF_PREVIEW) {
15477 + if(down_interruptible(&cfg->gc->lock))
15478 + return -ERESTARTSYS;
15479 + if (cfg->dma_type & CAMIF_PREVIEW) {
15480 + cfg->gc->status &= ~PNOTWORKING;
15481 + }
15482 + up(&cfg->gc->lock);
15483 + }
15484 + err = video_exclusive_open(inode,file);
15485 + cfg->gc->user++;
15486 + cfg->status = CAMIF_STOPPED;
15487 + if (err < 0) return err;
15488 + if (file->f_flags & O_NONCAP ) {
15489 + printk("Don't Support Non-capturing open \n");
15490 + return 0;
15491 + }
15492 + file->private_data = cfg;
15493 + camif_irq_request(cfg);
15494 + camif_init_sensor(cfg);
15495 + return 0;
15496 +}
15497 +
15498 +#if 0
15499 +static void print_pregs(void)
15500 +{
15501 + printk(" CISRCFMT 0x%08X \n", CISRCFMT);
15502 + printk(" CIWDOFST 0x%08X \n", CIWDOFST);
15503 + printk(" CIGCTRL 0x%08X \n", CIGCTRL);
15504 + printk(" CIPRTRGFMT 0x%08X \n", CIPRTRGFMT);
15505 + printk(" CIPRCTRL 0x%08X \n", CIPRCTRL);
15506 + printk(" CIPRSCPRERATIO 0x%08X \n", CIPRSCPRERATIO);
15507 + printk(" CIPRSCPREDST 0x%08X \n", CIPRSCPREDST);
15508 + printk(" CIPRSCCTRL 0x%08X \n", CIPRSCCTRL);
15509 + printk(" CIPRTAREA 0x%08X \n", CIPRTAREA);
15510 + printk(" CIPRSTATUS 0x%08X \n", CIPRSTATUS);
15511 + printk(" CIIMGCPT 0x%08X \n", CIIMGCPT);
15512 +}
15513 +
15514 +static void print_cregs(void)
15515 +{
15516 + printk(" CISRCFMT 0x%08X \n", CISRCFMT);
15517 + printk(" CIWDOFST 0x%08X \n", CIWDOFST);
15518 + printk(" CIGCTRL 0x%08X \n", CIGCTRL);
15519 + printk(" CICOCTRL 0x%8X \n", CICOCTRL);
15520 + printk(" CICOSCPRERATIO 0x%08X \n", CICOSCPRERATIO);
15521 + printk(" CICOSCPREDST 0x%08X \n", CICOSCPREDST);
15522 + printk(" CICOSCCTRL 0x%08X \n", CICOSCCTRL);
15523 + printk(" CICOTAREA 0x%08X \n", CICOTAREA);
15524 + printk(" CICOSTATUS 0x%8X \n", CICOSTATUS);
15525 + printk(" CIIMGCPT 0x%08X \n", CIIMGCPT);
15526 +}
15527 +#endif
15528 +
15529 +
15530 +static int camif_release(struct inode *inode, struct file *file)
15531 +{
15532 + camif_cfg_t * cfg = get_camif(MINOR(inode->i_rdev));
15533 +
15534 + //DPRINTK(" cfg->status 0x%0X cfg->gc->status 0x%0X \n", cfg->status,cfg->gc->status );
15535 + if (cfg->dma_type & CAMIF_PREVIEW) {
15536 + if(down_interruptible(&cfg->gc->lock))
15537 + return -ERESTARTSYS;
15538 + cfg->gc->status &= ~PWANT2START;
15539 + cfg->gc->status |= PNOTWORKING;
15540 + up(&cfg->gc->lock);
15541 + }
15542 + else {
15543 + cfg->gc->status &= ~CWANT2START; /* No need semaphore */
15544 + }
15545 + camif_dynamic_close(cfg);
15546 + camif_release_irq(cfg);
15547 + video_exclusive_release(inode,file);
15548 + camif_p_stop(cfg);
15549 + cfg->gc->sensor->driver->command(cfg->gc->sensor, USER_EXIT, NULL);
15550 + cfg->gc->user--;
15551 + cfg->status = CAMIF_STOPPED;
15552 + return 0;
15553 +}
15554 +
15555 +static void fimc_config(camif_cfg_t *cfg,u32 x, u32 y, int bpp)
15556 +{
15557 + cfg->target_x = x;
15558 + cfg->target_y = y;
15559 +
15560 + switch (bpp) {
15561 + case 16:
15562 + cfg->fmt = CAMIF_RGB16;
15563 + break;
15564 + case 24:
15565 + cfg->fmt = CAMIF_RGB24;
15566 + break;
15567 + case 420:
15568 + cfg->fmt = CAMIF_IN_YCBCR422|CAMIF_OUT_YCBCR420;
15569 + break;
15570 + case 422:
15571 + cfg->fmt = CAMIF_IN_YCBCR422|CAMIF_OUT_YCBCR422;
15572 + break;
15573 + default:
15574 + panic("Wrong BPP \n");
15575 + }
15576 +}
15577 +
15578 +
15579 +static int
15580 +camif_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
15581 +{
15582 + int ret = 0;
15583 + camif_cfg_t *cfg = file->private_data;
15584 + camif_param_t par;
15585 +
15586 + switch (cmd) {
15587 + case CMD_CAMERA_INIT:
15588 + if (copy_from_user(&par,(camif_param_t *)arg,
15589 + sizeof(camif_param_t)))
15590 + return -EFAULT;
15591 + fimc_config(cfg,par.dst_x, par.dst_y, par.bpp);
15592 + if (camif_dynamic_open(cfg)) {
15593 + printk(" Eror Happens \n");
15594 + ret = -1;
15595 + }
15596 +
15597 + switch (par.flip) {
15598 + case 3 :
15599 + cfg->flip = CAMIF_FLIP_MIRROR;
15600 + break;
15601 + case 1 :
15602 + cfg->flip = CAMIF_FLIP_X;
15603 + break;
15604 + case 2 :
15605 + cfg->flip = CAMIF_FLIP_Y;
15606 + break;
15607 + case 0 :
15608 + default:
15609 + cfg->flip = CAMIF_FLIP;
15610 + }
15611 + break;
15612 + /* Todo
15613 + case CMD_SENSOR_BRIGHTNESS:
15614 + cfg->gc->sensor->driver->command(cfg->gc->sensor, SENSOR_BRIGHTNESS, NULL);
15615 + break;
15616 + */
15617 + default:
15618 + ret = -EINVAL;
15619 + break;
15620 + }
15621 +
15622 + return ret;
15623 +}
15624 +
15625 +
15626 +#if 0
15627 +static int camif_ioctl(struct inode *inode, struct file *file,
15628 + unsigned int cmd, unsigned long arg)
15629 +{
15630 +// camif_cfg_t *cfg = file->private_data;
15631 +
15632 +
15633 + switch (cmd) {
15634 +/* case Some_other_action */
15635 + default:
15636 + return video_usercopy(inode, file, cmd, arg, camif_do_ioctl);
15637 + }
15638 +}
15639 +#endif
15640 +
15641 +static struct file_operations camif_c_fops =
15642 +{
15643 + .owner = THIS_MODULE,
15644 + .open = camif_open,
15645 + .release = camif_release,
15646 + .ioctl = camif_ioctl,
15647 + .read = camif_c_read,
15648 + .write = camif_write,
15649 +};
15650 +
15651 +static struct file_operations camif_p_fops =
15652 +{
15653 + .owner = THIS_MODULE,
15654 + .open = camif_open,
15655 + .release = camif_release,
15656 + .ioctl = camif_ioctl,
15657 +#ifdef Z_API
15658 + .read = z_read,
15659 + .write = z_write,
15660 +#else
15661 + .read = camif_p_read,
15662 + .write = camif_write,
15663 +#endif
15664 +};
15665 +
15666 +static struct video_device codec_template =
15667 +{
15668 + .name = "CODEC_IF",
15669 + .type = VID_TYPE_CAPTURE|VID_TYPE_CLIPPING|VID_TYPE_SCALES,
15670 +/* .hardware = VID_HARDWARE_SAMSUNG_FIMC20, */
15671 + .fops = &camif_c_fops,
15672 +// .release = camif_release
15673 + .minor = -1,
15674 +};
15675 +
15676 +static struct video_device preview_template =
15677 +{
15678 + .name = "PREVIEW_IF",
15679 + .type = VID_TYPE_CAPTURE|VID_TYPE_CLIPPING|VID_TYPE_SCALES,
15680 +/* .hardware = VID_HARDWARE_SAMSUNG_FIMC20, */
15681 + .fops = &camif_p_fops,
15682 + .minor = -1,
15683 +};
15684 +
15685 +static int preview_init(camif_cfg_t *cfg)
15686 +{
15687 + char name[16]="CAM_PREVIEW";
15688 +
15689 + memset(cfg, 0, sizeof(camif_cfg_t));
15690 + cfg->target_x = 640;
15691 + cfg->target_y = 480;
15692 + cfg->pp_num = 4;
15693 + cfg->dma_type = CAMIF_PREVIEW;
15694 + cfg->fmt = CAMIF_RGB16;
15695 + cfg->flip = CAMIF_FLIP_Y;
15696 + cfg->v = &preview_template;
15697 + mutex_init(&cfg->v->lock);
15698 + cfg->irq = IRQ_S3C2440_CAM_P;
15699 +
15700 + strcpy(cfg->shortname,name);
15701 + init_waitqueue_head(&cfg->waitq);
15702 + cfg->status = CAMIF_STOPPED;
15703 + return cfg->status;
15704 +}
15705 +
15706 +static int codec_init(camif_cfg_t *cfg)
15707 +{
15708 + char name[16]="CAM_CODEC";
15709 +
15710 + memset(cfg, 0, sizeof(camif_cfg_t));
15711 + cfg->target_x = 176;
15712 + cfg->target_y = 144;
15713 + cfg->pp_num = 4;
15714 + cfg->dma_type = CAMIF_CODEC;
15715 + cfg->fmt = CAMIF_IN_YCBCR422|CAMIF_OUT_YCBCR420;
15716 + cfg->flip = CAMIF_FLIP_X;
15717 + cfg->v = &codec_template;
15718 + mutex_init(&cfg->v->lock);
15719 + cfg->irq = IRQ_S3C2440_CAM_C;
15720 + strcpy(cfg->shortname,name);
15721 + init_waitqueue_head(&cfg->waitq);
15722 + cfg->status = CAMIF_STOPPED;
15723 + return cfg->status;
15724 +}
15725 +
15726 +static void camif_init(void)
15727 +{
15728 + camif_setup_sensor();
15729 +}
15730 +
15731 +
15732 +
15733 +static void print_version(void)
15734 +{
15735 + printk(KERN_INFO"FIMC built:"__DATE__ " "__TIME__"\n%s\n%s\n%s\n",
15736 + fimc_version, driver_version,fsm_version);
15737 +}
15738 +
15739 +
15740 +static int camif_m_in(void)
15741 +{
15742 + int ret = -EINVAL;
15743 + camif_cfg_t * cfg;
15744 +
15745 + printk(KERN_INFO"Starting S3C2440 Camera Driver\n");
15746 +
15747 + camregs = ioremap(CAM_BASE_ADD, 0x100);
15748 + if (!camregs) {
15749 + printk(KERN_ERR"Unable to map camera regs\n");
15750 + ret = -ENOMEM;
15751 + goto bail1;
15752 + }
15753 +
15754 + camif_init();
15755 + cfg = get_camif(CODEC_MINOR);
15756 + codec_init(cfg);
15757 +
15758 + ret = video_register_device(cfg->v,0,CODEC_MINOR);
15759 + if (ret) {
15760 + printk(KERN_ERR"Couldn't register codec driver.\n");
15761 + goto bail2;
15762 + }
15763 + cfg = get_camif(PREVIEW_MINOR);
15764 + preview_init(cfg);
15765 + ret = video_register_device(cfg->v,0,PREVIEW_MINOR);
15766 + if (ret) {
15767 + printk(KERN_ERR"Couldn't register preview driver.\n");
15768 + goto bail3; /* hm seems it us unregistered the once */
15769 + }
15770 +
15771 + print_version();
15772 + return 0;
15773 +
15774 +bail3:
15775 + video_unregister_device(cfg->v);
15776 +bail2:
15777 + iounmap(camregs);
15778 + camregs = NULL;
15779 +bail1:
15780 + return ret;
15781 +}
15782 +
15783 +static void unconfig_device(camif_cfg_t *cfg)
15784 +{
15785 + video_unregister_device(cfg->v);
15786 + camif_hw_close(cfg);
15787 + iounmap(camregs);
15788 + //memset(cfg, 0, sizeof(camif_cfg_t));
15789 + camregs = NULL;
15790 +}
15791 +
15792 +static void camif_m_out(void) /* module out */
15793 +{
15794 + camif_cfg_t *cfg;
15795 +
15796 + cfg = get_camif(CODEC_MINOR);
15797 + unconfig_device(cfg);
15798 + cfg = get_camif(PREVIEW_MINOR);
15799 + unconfig_device(cfg);
15800 +
15801 + return;
15802 +}
15803 +
15804 +void camif_register_decoder(struct i2c_client *ptr)
15805 +{
15806 + camif_cfg_t *cfg;
15807 + void * data = i2c_get_clientdata(ptr);
15808 +
15809 + cfg =get_camif(CODEC_MINOR);
15810 + cfg->gc = (camif_gc_t *)(data);
15811 +
15812 + cfg =get_camif(PREVIEW_MINOR);
15813 + cfg->gc = (camif_gc_t *)(data);
15814 +
15815 + sema_init(&cfg->gc->lock, 1); /* global lock for both Codec and Preview */
15816 + cfg->gc->status |= PNOTWORKING; /* Default Value */
15817 + camif_hw_open(cfg->gc);
15818 +}
15819 +
15820 +void camif_unregister_decoder(struct i2c_client *ptr)
15821 +{
15822 + camif_gc_t *gc;
15823 + void * data = i2c_get_clientdata(ptr);
15824 +
15825 + gc = (camif_gc_t *)(data);
15826 + gc->init_sensor = 0; /* need to modify */
15827 +}
15828 +
15829 +module_init(camif_m_in);
15830 +module_exit(camif_m_out);
15831 +
15832 +EXPORT_SYMBOL(camif_register_decoder);
15833 +EXPORT_SYMBOL(camif_unregister_decoder);
15834 +
15835 +MODULE_AUTHOR("SW.LEE <hitchcar@sec.samsung.com>");
15836 +MODULE_DESCRIPTION("Video-Driver For Fimc2.0 MISC Drivers");
15837 +MODULE_LICENSE("GPL");
15838 +
15839 +
15840 +/*
15841 + * Local variables:
15842 + * c-basic-offset: 8
15843 + * End:
15844 + */
15845 Index: linux-2.6.28/arch/arm/mach-s3c2440/dma.c
15846 ===================================================================
15847 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/dma.c 2008-12-25 00:26:37.000000000 +0100
15848 +++ linux-2.6.28/arch/arm/mach-s3c2440/dma.c 2009-01-02 00:01:56.000000000 +0100
15849 @@ -25,12 +25,12 @@
15850
15851 #include <plat/regs-serial.h>
15852 #include <mach/regs-gpio.h>
15853 -#include <asm/plat-s3c/regs-ac97.h>
15854 +#include <plat/regs-ac97.h>
15855 #include <mach/regs-mem.h>
15856 #include <mach/regs-lcd.h>
15857 #include <mach/regs-sdi.h>
15858 #include <asm/plat-s3c24xx/regs-iis.h>
15859 -#include <asm/plat-s3c24xx/regs-spi.h>
15860 +#include <plat/regs-spi.h>
15861
15862 static struct s3c24xx_dma_map __initdata s3c2440_dma_mappings[] = {
15863 [DMACH_XD0] = {
15864 Index: linux-2.6.28/arch/arm/mach-s3c2440/fiq_c_isr.c
15865 ===================================================================
15866 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
15867 +++ linux-2.6.28/arch/arm/mach-s3c2440/fiq_c_isr.c 2009-01-02 00:01:56.000000000 +0100
15868 @@ -0,0 +1,321 @@
15869 +/*
15870 + * Copyright 2007 Andy Green <andy@warmcat.com>
15871 + * S3C modfifications
15872 + * Copyright 2008 Andy Green <andy@openmoko.com>
15873 + */
15874 +
15875 +#include <linux/module.h>
15876 +#include <linux/kernel.h>
15877 +#include <mach/hardware.h>
15878 +#include <asm/fiq.h>
15879 +#include "fiq_c_isr.h"
15880 +#include <linux/sysfs.h>
15881 +#include <linux/device.h>
15882 +#include <linux/delay.h>
15883 +#include <linux/platform_device.h>
15884 +
15885 +#include <asm/io.h>
15886 +
15887 +#include <plat/cpu.h>
15888 +#include <plat/irq.h>
15889 +
15890 +#include <mach/pwm.h>
15891 +#include <plat/regs-timer.h>
15892 +
15893 +/*
15894 + * Major Caveats for using FIQ
15895 + * ---------------------------
15896 + *
15897 + * 1) it CANNOT touch any vmalloc()'d memory, only memory
15898 + * that was kmalloc()'d. Static allocations in the monolithic kernel
15899 + * are kmalloc()'d so they are okay. You can touch memory-mapped IO, but
15900 + * the pointer for it has to have been stored in kmalloc'd memory. The
15901 + * reason for this is simple: every now and then Linux turns off interrupts
15902 + * and reorders the paging tables. If a FIQ happens during this time, the
15903 + * virtual memory space can be partly or entirely disordered or missing.
15904 + *
15905 + * 2) Because vmalloc() is used when a module is inserted, THIS FIQ
15906 + * ISR HAS TO BE IN THE MONOLITHIC KERNEL, not a module. But the way
15907 + * it is set up, you can all to enable and disable it from your module
15908 + * and intercommunicate with it through struct fiq_ipc
15909 + * fiq_ipc which you can define in
15910 + * asm/archfiq_ipc_type.h. The reason is the same as above, a
15911 + * FIQ could happen while even the ISR is not present in virtual memory
15912 + * space due to pagetables being changed at the time.
15913 + *
15914 + * 3) You can't call any Linux API code except simple macros
15915 + * - understand that FIQ can come in at any time, no matter what
15916 + * state of undress the kernel may privately be in, thinking it
15917 + * locked the door by turning off interrupts... FIQ is an
15918 + * unstoppable monster force (which is its value)
15919 + * - they are not vmalloc()'d memory safe
15920 + * - they might do crazy stuff like sleep: FIQ pisses fire and
15921 + * is not interested in 'sleep' that the weak seem to need
15922 + * - calling APIs from FIQ can re-enter un-renterable things
15923 + * - summary: you cannot interoperate with linux APIs directly in the FIQ ISR
15924 + *
15925 + * If you follow these rules, it is fantastic, an extremely powerful, solid,
15926 + * genuine hard realtime feature.
15927 + *
15928 + */
15929 +
15930 +/* more than enough to cover our jump instruction to the isr */
15931 +#define SIZEOF_FIQ_JUMP 4
15932 +
15933 +#define FIQ_VECTOR 0xffff001c
15934 +
15935 +/* we put the stack at the area after the FIQ vector */
15936 +#define FIQ_STACK_SIZE 256
15937 +
15938 +/* only one FIQ ISR possible, okay to do these here */
15939 +u32 _fiq_ack_mask; /* used by isr exit define */
15940 +unsigned long _fiq_count_fiqs; /* used by isr exit define */
15941 +static int _fiq_irq; /* private ; irq index we were started with, or 0 */
15942 +struct s3c2410_pwm pwm_timer_fiq;
15943 +int _fiq_timer_index;
15944 +u16 _fiq_timer_divisor;
15945 +u8 fiq_ready;
15946 +
15947 +/* this function must live in the monolithic kernel somewhere! A module is
15948 + * NOT good enough!
15949 + */
15950 +extern void __attribute__ ((naked)) s3c2440_fiq_isr(void);
15951 +
15952 +static void fiq_set_vector_and_regs(void);
15953 +
15954 +
15955 +/* this is copied into the hard FIQ vector during init */
15956 +
15957 +static void __attribute__ ((naked)) s3c2440_FIQ_Branch(void)
15958 +{
15959 + asm __volatile__ (
15960 + "mov pc, r8 ; "
15961 + );
15962 +}
15963 +
15964 +/* sysfs */
15965 +
15966 +static ssize_t show_count(struct device *dev, struct device_attribute *attr,
15967 + char *buf)
15968 +{
15969 + return sprintf(buf, "%ld\n", _fiq_count_fiqs);
15970 +}
15971 +
15972 +static DEVICE_ATTR(count, 0444, show_count, NULL);
15973 +
15974 +static struct attribute *s3c2440_fiq_sysfs_entries[] = {
15975 + &dev_attr_count.attr,
15976 + NULL
15977 +};
15978 +
15979 +static struct attribute_group s3c2440_fiq_attr_group = {
15980 + .name = "fiq",
15981 + .attrs = s3c2440_fiq_sysfs_entries,
15982 +};
15983 +
15984 +/*
15985 + * call this from your kernel module to set up the FIQ ISR to service FIQs,
15986 + * You need to have configured your FIQ input pin before anything will happen
15987 + *
15988 + * call it with, eg, IRQ_TIMER3 from asm-arm/arch-s3c2410/irqs.h
15989 + *
15990 + * you still need to clear the source interrupt in S3C2410_INTMSK to get
15991 + * anything good happening
15992 + */
15993 +static int fiq_init_irq_source(int irq_index_fiq)
15994 +{
15995 + int rc = 0;
15996 +
15997 + if (!irq_index_fiq) /* no interrupt */
15998 + goto bail;
15999 +
16000 + local_fiq_disable();
16001 +
16002 + _fiq_irq = irq_index_fiq;
16003 + _fiq_ack_mask = 1 << (irq_index_fiq - S3C2410_CPUIRQ_OFFSET);
16004 + _fiq_timer_index = (irq_index_fiq - IRQ_TIMER0);
16005 +
16006 + /* set up the timer to operate as a pwm device */
16007 +
16008 + rc = s3c2410_pwm_init(&pwm_timer_fiq);
16009 + if (rc)
16010 + goto bail;
16011 +
16012 + pwm_timer_fiq.timerid = PWM0 + _fiq_timer_index;
16013 + pwm_timer_fiq.prescaler = (6 - 1) / 2;
16014 + pwm_timer_fiq.divider = S3C2410_TCFG1_MUX3_DIV2;
16015 + /* default rate == ~32us */
16016 + pwm_timer_fiq.counter = pwm_timer_fiq.comparer = 3000;
16017 +
16018 + rc = s3c2410_pwm_enable(&pwm_timer_fiq);
16019 + if (rc)
16020 + goto bail;
16021 +
16022 + s3c2410_pwm_start(&pwm_timer_fiq);
16023 +
16024 + _fiq_timer_divisor = 0xffff; /* so kick will work initially */
16025 +
16026 + /* let our selected interrupt be a magic FIQ interrupt */
16027 + __raw_writel(_fiq_ack_mask, S3C2410_INTMOD);
16028 +
16029 + /* it's ready to go as soon as we unmask the source in S3C2410_INTMSK */
16030 + local_fiq_enable();
16031 +bail:
16032 + return rc;
16033 +}
16034 +
16035 +
16036 +/* call this from your kernel module to disable generation of FIQ actions */
16037 +static void fiq_disable_irq_source(void)
16038 +{
16039 + /* nothing makes FIQ any more */
16040 + __raw_writel(0, S3C2410_INTMOD);
16041 + local_fiq_disable();
16042 + _fiq_irq = 0; /* no active source interrupt now either */
16043 +}
16044 +
16045 +/*
16046 + * fiq_kick() forces a FIQ event to happen shortly after leaving the routine
16047 + */
16048 +void fiq_kick(void)
16049 +{
16050 + unsigned long flags;
16051 + u32 tcon;
16052 +
16053 + if (!fiq_ready) {
16054 + printk(KERN_ERR "fiq_kick called before fiq probed\n");
16055 + return;
16056 + }
16057 +
16058 + /* we have to take care about FIQ because this modification is
16059 + * non-atomic, FIQ could come in after the read and before the
16060 + * writeback and its changes to the register would be lost
16061 + * (platform INTMSK mod code is taken care of already)
16062 + */
16063 + local_save_flags(flags);
16064 + local_fiq_disable();
16065 + /* allow FIQs to resume */
16066 + __raw_writel(__raw_readl(S3C2410_INTMSK) &
16067 + ~(1 << (_fiq_irq - S3C2410_CPUIRQ_OFFSET)),
16068 + S3C2410_INTMSK);
16069 + tcon = __raw_readl(S3C2410_TCON) & ~S3C2410_TCON_T3START;
16070 + /* fake the timer to a count of 1 */
16071 + __raw_writel(1, S3C2410_TCNTB(_fiq_timer_index));
16072 + __raw_writel(tcon | S3C2410_TCON_T3MANUALUPD, S3C2410_TCON);
16073 + __raw_writel(tcon | S3C2410_TCON_T3MANUALUPD | S3C2410_TCON_T3START,
16074 + S3C2410_TCON);
16075 + __raw_writel(tcon | S3C2410_TCON_T3START, S3C2410_TCON);
16076 + local_irq_restore(flags);
16077 +}
16078 +EXPORT_SYMBOL_GPL(fiq_kick);
16079 +
16080 +
16081 +
16082 +
16083 +static int __init sc32440_fiq_probe(struct platform_device *pdev)
16084 +{
16085 + struct resource *r = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
16086 + struct sc32440_fiq_platform_data *pdata = pdev->dev.platform_data;
16087 + int ret;
16088 +
16089 + if (!r)
16090 + return -EIO;
16091 +
16092 + /* configure for the interrupt we are meant to use */
16093 + printk(KERN_INFO "Enabling FIQ using irq %d\n", r->start);
16094 +
16095 + fiq_set_vector_and_regs();
16096 + fiq_init_irq_source(r->start);
16097 +
16098 + ret = sysfs_create_group(&pdev->dev.kobj, &s3c2440_fiq_attr_group);
16099 + if (ret)
16100 + return ret;
16101 +
16102 + fiq_ready = 1;
16103 +
16104 + /*
16105 + * if wanted, users can defer registration of devices
16106 + * that depend on FIQ until after we register, and can use our
16107 + * device as parent so suspend-resume ordering is correct
16108 + */
16109 + if (pdata->attach_child_devices)
16110 + (pdata->attach_child_devices)(&pdev->dev);
16111 +
16112 + return 0;
16113 +}
16114 +
16115 +static int sc32440_fiq_remove(struct platform_device *pdev)
16116 +{
16117 + fiq_disable_irq_source();
16118 + sysfs_remove_group(&pdev->dev.kobj, &s3c2440_fiq_attr_group);
16119 +
16120 + return 0;
16121 +}
16122 +
16123 +static void fiq_set_vector_and_regs(void)
16124 +{
16125 + struct pt_regs regs;
16126 +
16127 + /* prep the special FIQ mode regs */
16128 + memset(&regs, 0, sizeof(regs));
16129 + regs.ARM_r8 = (unsigned long)s3c2440_fiq_isr;
16130 + regs.ARM_r10 = FIQ_VECTOR + SIZEOF_FIQ_JUMP;
16131 + regs.ARM_sp = FIQ_VECTOR + SIZEOF_FIQ_JUMP + FIQ_STACK_SIZE - 4;
16132 +
16133 + /* copy our jump to the real ISR into the hard vector address */
16134 + set_fiq_handler(s3c2440_FIQ_Branch, SIZEOF_FIQ_JUMP);
16135 +
16136 + /* set up the special FIQ-mode-only registers from our regs */
16137 + set_fiq_regs(&regs);
16138 +}
16139 +
16140 +#ifdef CONFIG_PM
16141 +static int sc32440_fiq_suspend(struct platform_device *pdev, pm_message_t state)
16142 +{
16143 + /* nothing makes FIQ any more */
16144 + __raw_writel(0, S3C2410_INTMOD);
16145 + local_fiq_disable();
16146 +
16147 + return 0;
16148 +}
16149 +
16150 +static int sc32440_fiq_resume(struct platform_device *pdev)
16151 +{
16152 + fiq_set_vector_and_regs();
16153 + fiq_init_irq_source(_fiq_irq);
16154 + return 0;
16155 +}
16156 +#else
16157 +#define sc32440_fiq_suspend NULL
16158 +#define sc32440_fiq_resume NULL
16159 +#endif
16160 +
16161 +static struct platform_driver sc32440_fiq_driver = {
16162 + .driver = {
16163 + .name = "sc32440_fiq",
16164 + .owner = THIS_MODULE,
16165 + },
16166 +
16167 + .probe = sc32440_fiq_probe,
16168 + .remove = __devexit_p(sc32440_fiq_remove),
16169 + .suspend = sc32440_fiq_suspend,
16170 + .resume = sc32440_fiq_resume,
16171 +};
16172 +
16173 +static int __init sc32440_fiq_init(void)
16174 +{
16175 + fiq_set_vector_and_regs();
16176 +
16177 + return platform_driver_register(&sc32440_fiq_driver);
16178 +}
16179 +
16180 +static void __exit sc32440_fiq_exit(void)
16181 +{
16182 + fiq_disable_irq_source();
16183 +}
16184 +
16185 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
16186 +MODULE_LICENSE("GPL");
16187 +
16188 +module_init(sc32440_fiq_init);
16189 +module_exit(sc32440_fiq_exit);
16190 Index: linux-2.6.28/arch/arm/mach-s3c2440/fiq_c_isr.h
16191 ===================================================================
16192 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
16193 +++ linux-2.6.28/arch/arm/mach-s3c2440/fiq_c_isr.h 2009-01-02 00:01:56.000000000 +0100
16194 @@ -0,0 +1,76 @@
16195 +#ifndef _LINUX_FIQ_C_ISR_H
16196 +#define _LINUX_FIQ_C_ISR_H
16197 +
16198 +#include <mach/regs-irq.h>
16199 +#include <linux/platform_device.h>
16200 +
16201 +extern unsigned long _fiq_count_fiqs;
16202 +extern u32 _fiq_ack_mask;
16203 +extern int _fiq_timer_index;
16204 +extern u16 _fiq_timer_divisor;
16205 +
16206 +/* platform data */
16207 +
16208 +struct sc32440_fiq_platform_data {
16209 + /*
16210 + * give an opportunity to use us as parent for
16211 + * devices that depend on us
16212 + */
16213 + void (*attach_child_devices)(struct device *parent_device);
16214 +};
16215 +
16216 +/* This CANNOT be implemented in a module -- it has to be used in code
16217 + * included in the monolithic kernel
16218 + */
16219 +
16220 +#define FIQ_HANDLER_START() \
16221 +void __attribute__ ((naked)) s3c2440_fiq_isr(void) \
16222 +{\
16223 + /*\
16224 + * you can declare local vars here, take care to set the frame size\
16225 + * below accordingly if there are more than a few dozen bytes of them\
16226 + */\
16227 +
16228 +/* stick your locals here :-)
16229 + * Do NOT initialize them here! define them and initialize them after
16230 + * FIQ_HANDLER_ENTRY() is done.
16231 + */
16232 +
16233 +#define FIQ_HANDLER_ENTRY(LOCALS, FRAME) \
16234 + const int _FIQ_FRAME_SIZE = FRAME; \
16235 + /* entry takes care to store registers we will be treading on here */\
16236 + asm __volatile__ (\
16237 + /* stash FIQ and r0-r8 normal regs */\
16238 + "stmdb sp!, {r0-r12, lr};"\
16239 + /* allow SP to get some space */\
16240 + "sub sp, sp, %1 ;"\
16241 + /* !! THIS SETS THE FRAME, adjust to > sizeof locals */\
16242 + "sub fp, sp, %0 ;"\
16243 + :\
16244 + : "rI" (LOCALS), "rI" (FRAME)\
16245 + :"r9"\
16246 + );
16247 +
16248 +/* stick your ISR code here and then end with... */
16249 +
16250 +#define FIQ_HANDLER_END() \
16251 + _fiq_count_fiqs++;\
16252 + __raw_writel(_fiq_ack_mask, S3C2410_SRCPND);\
16253 +\
16254 + /* exit back to normal mode restoring everything */\
16255 + asm __volatile__ (\
16256 + /* pop our allocation */\
16257 + "add sp, sp, %0 ;"\
16258 + /* return FIQ regs back to pristine state\
16259 + * and get normal regs back\
16260 + */\
16261 + "ldmia sp!, {r0-r12, lr};"\
16262 +\
16263 + /* return */\
16264 + "subs pc, lr, #4;"\
16265 + : \
16266 + : "rI" (_FIQ_FRAME_SIZE) \
16267 + );\
16268 +}
16269 +
16270 +#endif /* _LINUX_FIQ_C_ISR_H */
16271 Index: linux-2.6.28/arch/arm/mach-s3c2440/Kconfig
16272 ===================================================================
16273 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/Kconfig 2008-12-25 00:26:37.000000000 +0100
16274 +++ linux-2.6.28/arch/arm/mach-s3c2440/Kconfig 2009-01-02 00:01:56.000000000 +0100
16275 @@ -22,12 +22,20 @@ config S3C2440_DMA
16276 help
16277 Support for S3C2440 specific DMA code5A
16278
16279 +config S3C2440_C_FIQ
16280 + bool "FIQ ISR support in C"
16281 + depends on ARCH_S3C2410
16282 + select FIQ
16283 + help
16284 + Support for S3C2440 FIQ support in C -- see
16285 + ./arch/arm/mach-s3c2440/fiq_c_isr.c
16286
16287 menu "S3C2440 Machines"
16288
16289 config MACH_ANUBIS
16290 bool "Simtec Electronics ANUBIS"
16291 select CPU_S3C2440
16292 + select S3C24XX_DCLK
16293 select PM_SIMTEC if PM
16294 select HAVE_PATA_PLATFORM
16295 help
16296 @@ -37,6 +45,7 @@ config MACH_ANUBIS
16297 config MACH_OSIRIS
16298 bool "Simtec IM2440D20 (OSIRIS) module"
16299 select CPU_S3C2440
16300 + select S3C24XX_DCLK
16301 select PM_SIMTEC if PM
16302 help
16303 Say Y here if you are using the Simtec IM2440D20 module, also
16304 @@ -74,5 +83,30 @@ config MACH_AT2440EVB
16305 help
16306 Say Y here if you are using the AT2440EVB development board
16307
16308 +config MACH_NEO1973_GTA02
16309 + bool "FIC Neo1973 GSM Phone (GTA02 Hardware)"
16310 + select CPU_S3C2442
16311 + select MFD_PCF50633
16312 + select INPUT_PCF50633_PMU
16313 + select PCF50633_ADC
16314 + select PCF50633_GPIO
16315 + select RTC_DRV_PCF50633
16316 + select REGULATOR_PCF50633
16317 + select CHARGER_PCF50633
16318 + select POWER_SUPPLY
16319 + select GTA02_HDQ
16320 + select MACH_NEO1973
16321 + help
16322 + Say Y here if you are using the FIC Neo1973 GSM Phone
16323 +
16324 +config NEO1973_GTA02_2440
16325 + bool "Old FIC Neo1973 GTA02 hardware using S3C2440 CPU"
16326 + depends on MACH_NEO1973_GTA02
16327 + select CPU_S3C2440
16328 + help
16329 + Say Y here if you are using an early hardware revision
16330 + of the FIC/Openmoko Neo1973 GTA02 GSM Phone.
16331 +
16332 endmenu
16333
16334 +#source "arch/arm/mach-s3c2440/camera/Kconfig"
16335 Index: linux-2.6.28/arch/arm/mach-s3c2440/mach-anubis.c
16336 ===================================================================
16337 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/mach-anubis.c 2008-12-25 00:26:37.000000000 +0100
16338 +++ linux-2.6.28/arch/arm/mach-s3c2440/mach-anubis.c 2009-01-02 00:01:56.000000000 +0100
16339 @@ -39,7 +39,8 @@
16340 #include <mach/regs-gpio.h>
16341 #include <mach/regs-mem.h>
16342 #include <mach/regs-lcd.h>
16343 -#include <asm/plat-s3c/nand.h>
16344 +#include <plat/nand.h>
16345 +#include <plat/iic.h>
16346
16347 #include <linux/mtd/mtd.h>
16348 #include <linux/mtd/nand.h>
16349 @@ -404,7 +405,7 @@ static struct platform_device *anubis_de
16350 &s3c_device_usb,
16351 &s3c_device_wdt,
16352 &s3c_device_adc,
16353 - &s3c_device_i2c,
16354 + &s3c_device_i2c0,
16355 &s3c_device_rtc,
16356 &s3c_device_nand,
16357 &anubis_device_ide0,
16358 @@ -468,6 +469,7 @@ static void __init anubis_map_io(void)
16359
16360 static void __init anubis_init(void)
16361 {
16362 + s3c_i2c0_set_platdata(NULL);
16363 platform_add_devices(anubis_devices, ARRAY_SIZE(anubis_devices));
16364
16365 i2c_register_board_info(0, anubis_i2c_devs,
16366 Index: linux-2.6.28/arch/arm/mach-s3c2440/mach-at2440evb.c
16367 ===================================================================
16368 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/mach-at2440evb.c 2008-12-25 00:26:37.000000000 +0100
16369 +++ linux-2.6.28/arch/arm/mach-s3c2440/mach-at2440evb.c 2009-01-02 00:01:56.000000000 +0100
16370 @@ -35,7 +35,8 @@
16371 #include <mach/regs-gpio.h>
16372 #include <mach/regs-mem.h>
16373 #include <mach/regs-lcd.h>
16374 -#include <asm/plat-s3c/nand.h>
16375 +#include <plat/nand.h>
16376 +#include <plat/iic.h>
16377
16378 #include <linux/mtd/mtd.h>
16379 #include <linux/mtd/nand.h>
16380 @@ -166,7 +167,7 @@ static struct platform_device *at2440evb
16381 &s3c_device_usb,
16382 &s3c_device_wdt,
16383 &s3c_device_adc,
16384 - &s3c_device_i2c,
16385 + &s3c_device_i2c0,
16386 &s3c_device_rtc,
16387 &s3c_device_nand,
16388 &at2440evb_device_eth,
16389 @@ -183,6 +184,7 @@ static void __init at2440evb_map_io(void
16390
16391 static void __init at2440evb_init(void)
16392 {
16393 + s3c_i2c0_set_platdata(NULL);
16394 platform_add_devices(at2440evb_devices, ARRAY_SIZE(at2440evb_devices));
16395 }
16396
16397 Index: linux-2.6.28/arch/arm/mach-s3c2440/mach-gta02.c
16398 ===================================================================
16399 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
16400 +++ linux-2.6.28/arch/arm/mach-s3c2440/mach-gta02.c 2009-01-02 00:01:56.000000000 +0100
16401 @@ -0,0 +1,1778 @@
16402 +/*
16403 + * linux/arch/arm/mach-s3c2440/mach-gta02.c
16404 + *
16405 + * S3C2440 Machine Support for the FIC GTA02 (Neo1973)
16406 + *
16407 + * Copyright (C) 2006-2007 by Openmoko, Inc.
16408 + * Author: Harald Welte <laforge@openmoko.org>
16409 + * All rights reserved.
16410 + *
16411 + * This program is free software; you can redistribute it and/or
16412 + * modify it under the terms of the GNU General Public License as
16413 + * published by the Free Software Foundation; either version 2 of
16414 + * the License, or (at your option) any later version.
16415 + *
16416 + * This program is distributed in the hope that it will be useful,
16417 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
16418 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16419 + * GNU General Public License for more details.
16420 + *
16421 + * You should have received a copy of the GNU General Public License
16422 + * along with this program; if not, write to the Free Software
16423 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
16424 + * MA 02111-1307 USA
16425 + *
16426 + */
16427 +
16428 +#include <linux/kernel.h>
16429 +#include <linux/types.h>
16430 +#include <linux/interrupt.h>
16431 +#include <linux/list.h>
16432 +#include <linux/delay.h>
16433 +#include <linux/timer.h>
16434 +#include <linux/init.h>
16435 +#include <linux/workqueue.h>
16436 +#include <linux/platform_device.h>
16437 +#include <linux/serial_core.h>
16438 +#include <linux/spi/spi.h>
16439 +#include <linux/spi/glamo.h>
16440 +#include <linux/spi/spi_bitbang.h>
16441 +#include <linux/mmc/host.h>
16442 +
16443 +#include <linux/mtd/mtd.h>
16444 +#include <linux/mtd/nand.h>
16445 +#include <linux/mtd/nand_ecc.h>
16446 +#include <linux/mtd/partitions.h>
16447 +#include <linux/mtd/physmap.h>
16448 +
16449 +#include <linux/i2c.h>
16450 +#include <linux/backlight.h>
16451 +#include <linux/regulator/machine.h>
16452 +
16453 +#include <linux/mfd/pcf50633/core.h>
16454 +#include <linux/mfd/pcf50633/mbc.h>
16455 +#include <linux/mfd/pcf50633/adc.h>
16456 +#include <linux/mfd/pcf50633/gpio.h>
16457 +#include <linux/mfd/pcf50633/led.h>
16458 +
16459 +#include <linux/lis302dl.h>
16460 +
16461 +#include <asm/mach/arch.h>
16462 +#include <asm/mach/map.h>
16463 +#include <asm/mach/irq.h>
16464 +
16465 +#include <mach/hardware.h>
16466 +#include <mach/io.h>
16467 +#include <asm/irq.h>
16468 +#include <asm/mach-types.h>
16469 +
16470 +#include <mach/regs-irq.h>
16471 +#include <mach/regs-gpio.h>
16472 +#include <mach/regs-gpioj.h>
16473 +#include <mach/fb.h>
16474 +#include <mach/mci.h>
16475 +#include <mach/ts.h>
16476 +#include <mach/spi.h>
16477 +#include <mach/spi-gpio.h>
16478 +#include <mach/usb-control.h>
16479 +#include <mach/regs-mem.h>
16480 +
16481 +#include <mach/gta02.h>
16482 +
16483 +#include <plat/regs-serial.h>
16484 +#include <plat/nand.h>
16485 +#include <plat/devs.h>
16486 +#include <plat/cpu.h>
16487 +#include <plat/pm.h>
16488 +#include <plat/udc.h>
16489 +#include <plat/iic.h>
16490 +#include <asm/plat-s3c24xx/neo1973.h>
16491 +#include <mach/neo1973-pm-gsm.h>
16492 +#include <mach/gta02-pm-wlan.h>
16493 +
16494 +#include <linux/jbt6k74.h>
16495 +
16496 +#include <linux/glamofb.h>
16497 +
16498 +#include <mach/fiq_ipc_gta02.h>
16499 +#include "fiq_c_isr.h"
16500 +#include <linux/gta02_hdq.h>
16501 +#include <linux/bq27000_battery.h>
16502 +
16503 +#include <linux/i2c.h>
16504 +
16505 +#include "../plat-s3c24xx/neo1973_pm_gps.h"
16506 +
16507 +#include <linux/ts_filter_linear.h>
16508 +#include <linux/ts_filter_mean.h>
16509 +#include <linux/ts_filter_median.h>
16510 +#include <linux/ts_filter_group.h>
16511 +
16512 +/* arbitrates which sensor IRQ owns the shared SPI bus */
16513 +static spinlock_t motion_irq_lock;
16514 +
16515 +/* define FIQ IPC struct */
16516 +/*
16517 + * contains stuff FIQ ISR modifies and normal kernel code can see and use
16518 + * this is defined in <arch/arm/mach-s3c2410/include/mach/fiq_ipc_gta02.h>, you should customize
16519 + * the definition in there and include the same definition in your kernel
16520 + * module that wants to interoperate with your FIQ code.
16521 + */
16522 +struct fiq_ipc fiq_ipc;
16523 +EXPORT_SYMBOL(fiq_ipc);
16524 +
16525 +#define DIVISOR_FROM_US(x) ((x) << 3)
16526 +
16527 +#define FIQ_DIVISOR_VIBRATOR DIVISOR_FROM_US(100)
16528 +
16529 +#ifdef CONFIG_GTA02_HDQ
16530 +/* HDQ specific */
16531 +#define HDQ_SAMPLE_PERIOD_US 20
16532 +/* private HDQ FSM state -- all other info interesting for caller in fiq_ipc */
16533 +static enum hdq_bitbang_states hdq_state;
16534 +static u8 hdq_ctr;
16535 +static u8 hdq_ctr2;
16536 +static u8 hdq_bit;
16537 +static u8 hdq_shifter;
16538 +static u8 hdq_tx_data_done;
16539 +
16540 +#define FIQ_DIVISOR_HDQ DIVISOR_FROM_US(HDQ_SAMPLE_PERIOD_US)
16541 +#endif
16542 +/* define FIQ ISR */
16543 +
16544 +FIQ_HANDLER_START()
16545 +/* define your locals here -- no initializers though */
16546 + u16 divisor;
16547 +FIQ_HANDLER_ENTRY(64, 64)
16548 +/* Your ISR here :-) */
16549 + divisor = 0xffff;
16550 +
16551 + /* Vibrator servicing */
16552 +
16553 + if (fiq_ipc.vib_pwm_latched || fiq_ipc.vib_pwm) { /* not idle */
16554 + if (((u8)_fiq_count_fiqs) == fiq_ipc.vib_pwm_latched)
16555 + neo1973_gpb_setpin(fiq_ipc.vib_gpio_pin, 0);
16556 + if (((u8)_fiq_count_fiqs) == 0) {
16557 + fiq_ipc.vib_pwm_latched = fiq_ipc.vib_pwm;
16558 + if (fiq_ipc.vib_pwm_latched)
16559 + neo1973_gpb_setpin(fiq_ipc.vib_gpio_pin, 1);
16560 + }
16561 + divisor = FIQ_DIVISOR_VIBRATOR;
16562 + }
16563 +
16564 +#ifdef CONFIG_GTA02_HDQ
16565 + /* HDQ servicing */
16566 +
16567 + switch (hdq_state) {
16568 + case HDQB_IDLE:
16569 + if (fiq_ipc.hdq_request_ctr == fiq_ipc.hdq_transaction_ctr)
16570 + break;
16571 + hdq_ctr = 210 / HDQ_SAMPLE_PERIOD_US;
16572 + s3c2410_gpio_setpin(fiq_ipc.hdq_gpio_pin, 0);
16573 + s3c2410_gpio_cfgpin(fiq_ipc.hdq_gpio_pin, S3C2410_GPIO_OUTPUT);
16574 + hdq_tx_data_done = 0;
16575 + hdq_state = HDQB_TX_BREAK;
16576 + break;
16577 +
16578 + case HDQB_TX_BREAK: /* issue low for > 190us */
16579 + if (--hdq_ctr == 0) {
16580 + hdq_ctr = 60 / HDQ_SAMPLE_PERIOD_US;
16581 + hdq_state = HDQB_TX_BREAK_RECOVERY;
16582 + s3c2410_gpio_setpin(fiq_ipc.hdq_gpio_pin, 1);
16583 + }
16584 + break;
16585 +
16586 + case HDQB_TX_BREAK_RECOVERY: /* issue low for > 40us */
16587 + if (--hdq_ctr)
16588 + break;
16589 + hdq_shifter = fiq_ipc.hdq_ads;
16590 + hdq_bit = 8; /* 8 bits of ads / rw */
16591 + hdq_tx_data_done = 0; /* doing ads */
16592 + /* fallthru on last one */
16593 + case HDQB_ADS_CALC:
16594 + if (hdq_shifter & 1)
16595 + hdq_ctr = 50 / HDQ_SAMPLE_PERIOD_US;
16596 + else
16597 + hdq_ctr = 120 / HDQ_SAMPLE_PERIOD_US;
16598 + /* carefully precompute the other phase length */
16599 + hdq_ctr2 = (210 - (hdq_ctr * HDQ_SAMPLE_PERIOD_US)) /
16600 + HDQ_SAMPLE_PERIOD_US;
16601 + hdq_state = HDQB_ADS_LOW;
16602 + hdq_shifter >>= 1;
16603 + hdq_bit--;
16604 + s3c2410_gpio_setpin(fiq_ipc.hdq_gpio_pin, 0);
16605 + break;
16606 +
16607 + case HDQB_ADS_LOW:
16608 + if (--hdq_ctr)
16609 + break;
16610 + s3c2410_gpio_setpin(fiq_ipc.hdq_gpio_pin, 1);
16611 + hdq_state = HDQB_ADS_HIGH;
16612 + break;
16613 +
16614 + case HDQB_ADS_HIGH:
16615 + if (--hdq_ctr2 > 1) /* account for HDQB_ADS_CALC */
16616 + break;
16617 + if (hdq_bit) { /* more bits to do */
16618 + hdq_state = HDQB_ADS_CALC;
16619 + break;
16620 + }
16621 + /* no more bits, wait it out until hdq_ctr2 exhausted */
16622 + if (hdq_ctr2)
16623 + break;
16624 + /* ok no more bits and very last state */
16625 + hdq_ctr = 60 / HDQ_SAMPLE_PERIOD_US;
16626 + /* FIXME 0 = read */
16627 + if (fiq_ipc.hdq_ads & 0x80) { /* write the byte out */
16628 + /* set delay before payload */
16629 + hdq_ctr = 300 / HDQ_SAMPLE_PERIOD_US;
16630 + /* already high, no need to write */
16631 + hdq_state = HDQB_WAIT_TX;
16632 + break;
16633 + }
16634 + /* read the next byte */
16635 + hdq_bit = 8; /* 8 bits of data */
16636 + hdq_ctr = 3000 / HDQ_SAMPLE_PERIOD_US;
16637 + hdq_state = HDQB_WAIT_RX;
16638 + s3c2410_gpio_cfgpin(fiq_ipc.hdq_gpio_pin, S3C2410_GPIO_INPUT);
16639 + break;
16640 +
16641 + case HDQB_WAIT_TX: /* issue low for > 40us */
16642 + if (--hdq_ctr)
16643 + break;
16644 + if (!hdq_tx_data_done) { /* was that the data sent? */
16645 + hdq_tx_data_done++;
16646 + hdq_shifter = fiq_ipc.hdq_tx_data;
16647 + hdq_bit = 8; /* 8 bits of data */
16648 + hdq_state = HDQB_ADS_CALC; /* start sending */
16649 + break;
16650 + }
16651 + fiq_ipc.hdq_error = 0;
16652 + fiq_ipc.hdq_transaction_ctr = fiq_ipc.hdq_request_ctr;
16653 + hdq_state = HDQB_IDLE; /* all tx is done */
16654 + /* idle in input mode, it's pulled up by 10K */
16655 + s3c2410_gpio_cfgpin(fiq_ipc.hdq_gpio_pin, S3C2410_GPIO_INPUT);
16656 + break;
16657 +
16658 + case HDQB_WAIT_RX: /* wait for battery to talk to us */
16659 + if (s3c2410_gpio_getpin(fiq_ipc.hdq_gpio_pin) == 0) {
16660 + /* it talks to us! */
16661 + hdq_ctr2 = 1;
16662 + hdq_bit = 8; /* 8 bits of data */
16663 + /* timeout */
16664 + hdq_ctr = 300 / HDQ_SAMPLE_PERIOD_US;
16665 + hdq_state = HDQB_DATA_RX_LOW;
16666 + break;
16667 + }
16668 + if (--hdq_ctr == 0) { /* timed out, error */
16669 + fiq_ipc.hdq_error = 1;
16670 + fiq_ipc.hdq_transaction_ctr = fiq_ipc.hdq_request_ctr;
16671 + hdq_state = HDQB_IDLE; /* abort */
16672 + }
16673 + break;
16674 +
16675 + /*
16676 + * HDQ basically works by measuring the low time of the bit cell
16677 + * 32-50us --> '1', 80 - 145us --> '0'
16678 + */
16679 +
16680 + case HDQB_DATA_RX_LOW:
16681 + if (s3c2410_gpio_getpin(fiq_ipc.hdq_gpio_pin)) {
16682 + fiq_ipc.hdq_rx_data >>= 1;
16683 + if (hdq_ctr2 <= (65 / HDQ_SAMPLE_PERIOD_US))
16684 + fiq_ipc.hdq_rx_data |= 0x80;
16685 +
16686 + if (--hdq_bit == 0) {
16687 + fiq_ipc.hdq_error = 0;
16688 + fiq_ipc.hdq_transaction_ctr =
16689 + fiq_ipc.hdq_request_ctr;
16690 +
16691 + hdq_state = HDQB_IDLE;
16692 + } else
16693 + hdq_state = HDQB_DATA_RX_HIGH;
16694 + /* timeout */
16695 + hdq_ctr = 1000 / HDQ_SAMPLE_PERIOD_US;
16696 + hdq_ctr2 = 1;
16697 + break;
16698 + }
16699 + hdq_ctr2++;
16700 + if (--hdq_ctr)
16701 + break;
16702 + /* timed out, error */
16703 + fiq_ipc.hdq_error = 2;
16704 + fiq_ipc.hdq_transaction_ctr = fiq_ipc.hdq_request_ctr;
16705 + hdq_state = HDQB_IDLE; /* abort */
16706 + break;
16707 +
16708 + case HDQB_DATA_RX_HIGH:
16709 + if (!s3c2410_gpio_getpin(fiq_ipc.hdq_gpio_pin)) {
16710 + /* it talks to us! */
16711 + hdq_ctr2 = 1;
16712 + /* timeout */
16713 + hdq_ctr = 400 / HDQ_SAMPLE_PERIOD_US;
16714 + hdq_state = HDQB_DATA_RX_LOW;
16715 + break;
16716 + }
16717 + if (--hdq_ctr)
16718 + break;
16719 + /* timed out, error */
16720 + fiq_ipc.hdq_error = 3;
16721 + fiq_ipc.hdq_transaction_ctr = fiq_ipc.hdq_request_ctr;
16722 +
16723 + /* we're in input mode already */
16724 + hdq_state = HDQB_IDLE; /* abort */
16725 + break;
16726 + }
16727 +
16728 + if (hdq_state != HDQB_IDLE) /* ie, not idle */
16729 + if (divisor > FIQ_DIVISOR_HDQ)
16730 + divisor = FIQ_DIVISOR_HDQ; /* keep us going */
16731 +#endif
16732 +
16733 + /* disable further timer interrupts if nobody has any work
16734 + * or adjust rate according to who still has work
16735 + *
16736 + * CAUTION: it means forground code must disable FIQ around
16737 + * its own non-atomic S3C2410_INTMSK changes... not common
16738 + * thankfully and taken care of by the fiq-basis patch
16739 + */
16740 + if (divisor == 0xffff) /* mask the fiq irq source */
16741 + __raw_writel(__raw_readl(S3C2410_INTMSK) | _fiq_ack_mask,
16742 + S3C2410_INTMSK);
16743 + else /* still working, maybe at a different rate */
16744 + __raw_writel(divisor, S3C2410_TCNTB(_fiq_timer_index));
16745 + _fiq_timer_divisor = divisor;
16746 +
16747 +FIQ_HANDLER_END()
16748 +
16749 +
16750 +/*
16751 + * this gets called every 1ms when we paniced.
16752 + */
16753 +
16754 +static long gta02_panic_blink(long count)
16755 +{
16756 + long delay = 0;
16757 + static long last_blink;
16758 + static char led;
16759 +
16760 + if (count - last_blink < 100) /* 200ms period, fast blink */
16761 + return 0;
16762 +
16763 + led ^= 1;
16764 + s3c2410_gpio_cfgpin(GTA02_GPIO_AUX_LED, S3C2410_GPIO_OUTPUT);
16765 + neo1973_gpb_setpin(GTA02_GPIO_AUX_LED, led);
16766 +
16767 + last_blink = count;
16768 + return delay;
16769 +}
16770 +
16771 +
16772 +/**
16773 + * returns PCB revision information in b9,b8 and b2,b1,b0
16774 + * Pre-GTA02 A6 returns 0x000
16775 + * GTA02 A6 returns 0x101
16776 + * ...
16777 + */
16778 +
16779 +int gta02_get_pcb_revision(void)
16780 +{
16781 + int n;
16782 + int u = 0;
16783 + static unsigned long pinlist[] = {
16784 + GTA02_PCB_ID1_0,
16785 + GTA02_PCB_ID1_1,
16786 + GTA02_PCB_ID1_2,
16787 + GTA02_PCB_ID2_0,
16788 + GTA02_PCB_ID2_1,
16789 + };
16790 + static int pin_offset[] = {
16791 + 0, 1, 2, 8, 9
16792 + };
16793 +
16794 + for (n = 0 ; n < ARRAY_SIZE(pinlist); n++) {
16795 + /*
16796 + * set the PCB version GPIO to be pulled-down input
16797 + * force low briefly first
16798 + */
16799 + s3c2410_gpio_cfgpin(pinlist[n], S3C2410_GPIO_OUTPUT);
16800 + s3c2410_gpio_setpin(pinlist[n], 0);
16801 + /* misnomer: it is a pullDOWN in 2442 */
16802 + s3c2410_gpio_pullup(pinlist[n], 1);
16803 + s3c2410_gpio_cfgpin(pinlist[n], S3C2410_GPIO_INPUT);
16804 +
16805 + udelay(10);
16806 +
16807 + if (s3c2410_gpio_getpin(pinlist[n]))
16808 + u |= 1 << pin_offset[n];
16809 +
16810 + /*
16811 + * when not being interrogated, all of the revision GPIO
16812 + * are set to output HIGH without pulldown so no current flows
16813 + * if they are NC or pulled up.
16814 + */
16815 + s3c2410_gpio_setpin(pinlist[n], 1);
16816 + s3c2410_gpio_cfgpin(pinlist[n], S3C2410_GPIO_OUTPUT);
16817 + /* misnomer: it is a pullDOWN in 2442 */
16818 + s3c2410_gpio_pullup(pinlist[n], 0);
16819 + }
16820 +
16821 + return u;
16822 +}
16823 +
16824 +struct platform_device gta02_version_device = {
16825 + .name = "neo1973-version",
16826 + .num_resources = 0,
16827 +};
16828 +
16829 +struct platform_device gta02_resume_reason_device = {
16830 + .name = "neo1973-resume",
16831 + .num_resources = 0,
16832 +};
16833 +
16834 +struct platform_device gta02_memconfig_device = {
16835 + .name = "neo1973-memconfig",
16836 + .num_resources = 0,
16837 +};
16838 +
16839 +static struct map_desc gta02_iodesc[] __initdata = {
16840 + {
16841 + .virtual = 0xe0000000,
16842 + .pfn = __phys_to_pfn(S3C2410_CS3+0x01000000),
16843 + .length = SZ_1M,
16844 + .type = MT_DEVICE
16845 + },
16846 +};
16847 +
16848 +#define UCON S3C2410_UCON_DEFAULT
16849 +#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
16850 +#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
16851 +
16852 +static struct s3c2410_uartcfg gta02_uartcfgs[] = {
16853 + [0] = {
16854 + .hwport = 0,
16855 + .flags = 0,
16856 + .ucon = UCON,
16857 + .ulcon = ULCON,
16858 + .ufcon = UFCON,
16859 + },
16860 + [1] = {
16861 + .hwport = 1,
16862 + .flags = 0,
16863 + .ucon = UCON,
16864 + .ulcon = ULCON,
16865 + .ufcon = UFCON,
16866 + },
16867 + [2] = {
16868 + .hwport = 2,
16869 + .flags = 0,
16870 + .ucon = UCON,
16871 + .ulcon = ULCON,
16872 + .ufcon = UFCON,
16873 + },
16874 +
16875 +};
16876 +
16877 +/* BQ27000 Battery */
16878 +
16879 +static int gta02_get_charger_online_status(void)
16880 +{
16881 + struct pcf50633 *pcf = gta02_pcf_pdata.pcf;
16882 +
16883 + return pcf->mbc.usb_online;
16884 +}
16885 +
16886 +static int gta02_get_charger_active_status(void)
16887 +{
16888 + struct pcf50633 *pcf = gta02_pcf_pdata.pcf;
16889 +
16890 + return pcf->mbc.usb_active;
16891 +}
16892 +
16893 +
16894 +struct bq27000_platform_data bq27000_pdata = {
16895 + .name = "battery",
16896 + .rsense_mohms = 20,
16897 + .hdq_read = gta02hdq_read,
16898 + .hdq_write = gta02hdq_write,
16899 + .hdq_initialized = gta02hdq_initialized,
16900 + .get_charger_online_status = gta02_get_charger_online_status,
16901 + .get_charger_active_status = gta02_get_charger_active_status
16902 +};
16903 +
16904 +struct platform_device bq27000_battery_device = {
16905 + .name = "bq27000-battery",
16906 + .dev = {
16907 + .platform_data = &bq27000_pdata,
16908 + },
16909 +};
16910 +
16911 +#define ADC_NOM_CHG_DETECT_1A 6
16912 +#define ADC_NOM_CHG_DETECT_USB 43
16913 +
16914 +static void
16915 +gta02_configure_pmu_for_charger(struct pcf50633 *pcf, void *unused, int res)
16916 +{
16917 + int ma;
16918 +
16919 + /* Interpret charger type */
16920 + if (res < ((ADC_NOM_CHG_DETECT_USB + ADC_NOM_CHG_DETECT_1A) / 2)) {
16921 +
16922 + /* Stop GPO driving out now that we have a IA charger */
16923 + pcf50633_gpio_set(pcf, PCF50633_GPO, 0);
16924 +
16925 + ma = 1000;
16926 + } else
16927 + ma = 100;
16928 +
16929 + pcf50633_mbc_usb_curlim_set(pcf, ma);
16930 +}
16931 +
16932 +static struct delayed_work gta02_charger_work;
16933 +static int gta02_usb_vbus_draw;
16934 +
16935 +static void gta02_charger_worker(struct work_struct *work)
16936 +{
16937 + struct pcf50633 *pcf = gta02_pcf_pdata.pcf;
16938 +
16939 + if (gta02_usb_vbus_draw) {
16940 + pcf50633_mbc_usb_curlim_set(pcf, gta02_usb_vbus_draw);
16941 + return;
16942 + } else {
16943 + pcf50633_adc_async_read(pcf,
16944 + PCF50633_ADCC1_MUX_ADCIN1,
16945 + PCF50633_ADCC1_AVERAGE_16,
16946 + gta02_configure_pmu_for_charger, NULL);
16947 + return;
16948 + }
16949 +}
16950 +
16951 +#define GTA02_CHARGER_CONFIGURE_TIMEOUT ((3000 * HZ) / 1000)
16952 +static void gta02_pmu_event_callback(struct pcf50633 *pcf, int irq)
16953 +{
16954 + if (irq == PCF50633_IRQ_USBINS) {
16955 + schedule_delayed_work(&gta02_charger_work,
16956 + GTA02_CHARGER_CONFIGURE_TIMEOUT);
16957 + return;
16958 + } else if (irq == PCF50633_IRQ_USBREM) {
16959 + cancel_delayed_work_sync(&gta02_charger_work);
16960 + gta02_usb_vbus_draw = 0;
16961 + }
16962 +}
16963 +
16964 +static struct platform_device gta01_pm_gps_dev = {
16965 + .name = "neo1973-pm-gps",
16966 +};
16967 +
16968 +static struct platform_device gta01_pm_bt_dev = {
16969 + .name = "neo1973-pm-bt",
16970 +};
16971 +
16972 +static struct platform_device gta02_pm_gsm_dev = {
16973 + .name = "neo1973-pm-gsm",
16974 +};
16975 +
16976 +/* this is called when pc50633 is probed, unfortunately quite late in the
16977 + * day since it is an I2C bus device. Here we can belatedly define some
16978 + * platform devices with the advantage that we can mark the pcf50633 as the
16979 + * parent. This makes them get suspended and resumed with their parent
16980 + * the pcf50633 still around.
16981 + */
16982 +
16983 +static struct platform_device gta02_glamo_dev;
16984 +static void mangle_glamo_res_by_system_rev(void);
16985 +
16986 +static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf);
16987 +static void gta02_pmu_regulator_registered(struct pcf50633 *pcf, int id);
16988 +
16989 +static struct platform_device gta02_pm_wlan_dev = {
16990 + .name = "gta02-pm-wlan",
16991 +};
16992 +
16993 +static struct regulator_consumer_supply ldo4_consumers[] = {
16994 + {
16995 + .dev = &gta01_pm_bt_dev.dev,
16996 + .supply = "BT_3V2",
16997 + },
16998 +};
16999 +
17000 +static struct regulator_consumer_supply ldo5_consumers[] = {
17001 + {
17002 + .dev = &gta01_pm_gps_dev.dev,
17003 + .supply = "RF_3V",
17004 + },
17005 +};
17006 +
17007 +/*
17008 + * We need this dummy thing to fill the regulator consumers
17009 + */
17010 +static struct platform_device gta02_mmc_dev = {
17011 + /* details filled in by glamo core */
17012 +};
17013 +
17014 +static struct regulator_consumer_supply hcldo_consumers[] = {
17015 + {
17016 + .dev = &gta02_mmc_dev.dev,
17017 + .supply = "SD_3V3",
17018 + },
17019 +};
17020 +
17021 +static char *gta02_batteries[] = {
17022 + "battery",
17023 +};
17024 +
17025 +struct pcf50633_platform_data gta02_pcf_pdata = {
17026 + .resumers = {
17027 + [0] = PCF50633_INT1_USBINS |
17028 + PCF50633_INT1_USBREM |
17029 + PCF50633_INT1_ALARM,
17030 + [1] = PCF50633_INT2_ONKEYF,
17031 + [2] = PCF50633_INT3_ONKEY1S,
17032 + [3] = PCF50633_INT4_LOWSYS |
17033 + PCF50633_INT4_LOWBAT |
17034 + PCF50633_INT4_HIGHTMP,
17035 + },
17036 +
17037 + .batteries = gta02_batteries,
17038 + .num_batteries = ARRAY_SIZE(gta02_batteries),
17039 +
17040 + .reg_init_data = {
17041 + [PCF50633_REGULATOR_AUTO] = {
17042 + .constraints = {
17043 + .min_uV = 3300000,
17044 + .max_uV = 3300000,
17045 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17046 + .boot_on = 1,
17047 + .apply_uV = 1,
17048 + .state_mem = {
17049 + .enabled = 1,
17050 + },
17051 + },
17052 + .num_consumer_supplies = 0,
17053 + },
17054 + [PCF50633_REGULATOR_DOWN1] = {
17055 + .constraints = {
17056 + .min_uV = 1300000,
17057 + .max_uV = 1600000,
17058 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17059 + .boot_on = 1,
17060 + .apply_uV = 1,
17061 + },
17062 + .num_consumer_supplies = 0,
17063 + },
17064 + [PCF50633_REGULATOR_DOWN2] = {
17065 + .constraints = {
17066 + .min_uV = 1800000,
17067 + .max_uV = 1800000,
17068 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17069 + .apply_uV = 1,
17070 + .boot_on = 1,
17071 + .state_mem = {
17072 + .enabled = 1,
17073 + },
17074 + },
17075 + .num_consumer_supplies = 0,
17076 + },
17077 + [PCF50633_REGULATOR_HCLDO] = {
17078 + .constraints = {
17079 + .min_uV = 2000000,
17080 + .max_uV = 3300000,
17081 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17082 + .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
17083 + .boot_on = 1,
17084 + },
17085 + .num_consumer_supplies = 1,
17086 + .consumer_supplies = hcldo_consumers,
17087 + },
17088 + [PCF50633_REGULATOR_LDO1] = {
17089 + .constraints = {
17090 + .min_uV = 1300000,
17091 + .max_uV = 1300000,
17092 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17093 + .apply_uV = 1,
17094 + },
17095 + .num_consumer_supplies = 0,
17096 + },
17097 + [PCF50633_REGULATOR_LDO2] = {
17098 + .constraints = {
17099 + .min_uV = 3300000,
17100 + .max_uV = 3300000,
17101 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17102 + .apply_uV = 1,
17103 + },
17104 + .num_consumer_supplies = 0,
17105 + },
17106 + [PCF50633_REGULATOR_LDO3] = {
17107 + .constraints = {
17108 + .min_uV = 3000000,
17109 + .max_uV = 3000000,
17110 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17111 + .apply_uV = 1,
17112 + },
17113 + .num_consumer_supplies = 0,
17114 + },
17115 + [PCF50633_REGULATOR_LDO4] = {
17116 + .constraints = {
17117 + .min_uV = 3200000,
17118 + .max_uV = 3200000,
17119 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17120 + .apply_uV = 1,
17121 + },
17122 + .num_consumer_supplies = 1,
17123 + .consumer_supplies = ldo4_consumers,
17124 + },
17125 + [PCF50633_REGULATOR_LDO5] = {
17126 + .constraints = {
17127 + .min_uV = 1500000,
17128 + .max_uV = 1500000,
17129 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17130 + .apply_uV = 1,
17131 + },
17132 + .num_consumer_supplies = 1,
17133 + .consumer_supplies = ldo5_consumers,
17134 + },
17135 + [PCF50633_REGULATOR_LDO6] = {
17136 + .constraints = {
17137 + .min_uV = 0,
17138 + .max_uV = 3300000,
17139 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17140 + },
17141 + .num_consumer_supplies = 0,
17142 + },
17143 + [PCF50633_REGULATOR_MEMLDO] = {
17144 + .constraints = {
17145 + .min_uV = 1800000,
17146 + .max_uV = 1800000,
17147 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
17148 + .state_mem = {
17149 + .enabled = 1,
17150 + },
17151 + },
17152 + .num_consumer_supplies = 0,
17153 + },
17154 +
17155 + },
17156 + .probe_done = gta02_pmu_attach_child_devices,
17157 + .regulator_registered = gta02_pmu_regulator_registered,
17158 + .mbc_event_callback = gta02_pmu_event_callback,
17159 +};
17160 +
17161 +static void mangle_pmu_pdata_by_system_rev(void)
17162 +{
17163 + struct regulator_init_data *reg_init_data;
17164 +
17165 + reg_init_data = gta02_pcf_pdata.reg_init_data;
17166 +
17167 + switch (system_rev) {
17168 + case GTA02v1_SYSTEM_REV:
17169 + /* FIXME: this is only in v1 due to wrong PMU variant */
17170 + reg_init_data[PCF50633_REGULATOR_DOWN2]
17171 + .constraints.state_mem.enabled = 1;
17172 + break;
17173 + case GTA02v2_SYSTEM_REV:
17174 + case GTA02v3_SYSTEM_REV:
17175 + case GTA02v4_SYSTEM_REV:
17176 + case GTA02v5_SYSTEM_REV:
17177 + case GTA02v6_SYSTEM_REV:
17178 + reg_init_data[PCF50633_REGULATOR_LDO1]
17179 + .constraints.min_uV = 3300000;
17180 + reg_init_data[PCF50633_REGULATOR_LDO1]
17181 + .constraints.min_uV = 3300000;
17182 + reg_init_data[PCF50633_REGULATOR_LDO1]
17183 + .constraints.state_mem.enabled = 0;
17184 +
17185 + reg_init_data[PCF50633_REGULATOR_LDO5]
17186 + .constraints.min_uV = 3000000;
17187 + reg_init_data[PCF50633_REGULATOR_LDO5]
17188 + .constraints.max_uV = 3000000;
17189 +
17190 + reg_init_data[PCF50633_REGULATOR_LDO6]
17191 + .constraints.min_uV = 3000000;
17192 + reg_init_data[PCF50633_REGULATOR_LDO6]
17193 + .constraints.max_uV = 3000000;
17194 + reg_init_data[PCF50633_REGULATOR_LDO6]
17195 + .constraints.apply_uV = 1;
17196 + break;
17197 + default:
17198 + break;
17199 + }
17200 +}
17201 +
17202 +#ifdef CONFIG_GTA02_HDQ
17203 +/* HDQ */
17204 +
17205 +static void gta02_hdq_attach_child_devices(struct device *parent_device)
17206 +{
17207 + switch (system_rev) {
17208 + case GTA02v5_SYSTEM_REV:
17209 + case GTA02v6_SYSTEM_REV:
17210 + bq27000_battery_device.dev.parent = parent_device;
17211 + platform_device_register(&bq27000_battery_device);
17212 + break;
17213 + default:
17214 + break;
17215 + }
17216 +}
17217 +
17218 +static struct resource gta02_hdq_resources[] = {
17219 + [0] = {
17220 + .start = GTA02v5_GPIO_HDQ,
17221 + .end = GTA02v5_GPIO_HDQ,
17222 + },
17223 +};
17224 +
17225 +struct gta02_hdq_platform_data gta02_hdq_platform_data = {
17226 + .attach_child_devices = gta02_hdq_attach_child_devices
17227 +};
17228 +
17229 +struct platform_device gta02_hdq_device = {
17230 + .name = "gta02-hdq",
17231 + .num_resources = 1,
17232 + .resource = gta02_hdq_resources,
17233 + .dev = {
17234 + .platform_data = &gta02_hdq_platform_data,
17235 + },
17236 +};
17237 +#endif
17238 +
17239 +/* vibrator (child of FIQ) */
17240 +
17241 +static struct resource gta02_vibrator_resources[] = {
17242 + [0] = {
17243 + .start = GTA02_GPIO_VIBRATOR_ON,
17244 + .end = GTA02_GPIO_VIBRATOR_ON,
17245 + },
17246 +};
17247 +
17248 +static struct platform_device gta02_vibrator_dev = {
17249 + .name = "neo1973-vibrator",
17250 + .num_resources = ARRAY_SIZE(gta02_vibrator_resources),
17251 + .resource = gta02_vibrator_resources,
17252 +};
17253 +
17254 +/* FIQ, used PWM regs, so not child of PWM */
17255 +
17256 +static void gta02_fiq_attach_child_devices(struct device *parent_device)
17257 +{
17258 +#ifdef CONFIG_GTA02_HDQ
17259 + switch (system_rev) {
17260 + case GTA02v5_SYSTEM_REV:
17261 + case GTA02v6_SYSTEM_REV:
17262 + gta02_hdq_device.dev.parent = parent_device;
17263 + platform_device_register(&gta02_hdq_device);
17264 + gta02_vibrator_dev.dev.parent = parent_device;
17265 + platform_device_register(&gta02_vibrator_dev);
17266 + break;
17267 + default:
17268 + break;
17269 + }
17270 +#endif
17271 +}
17272 +
17273 +
17274 +static struct resource sc32440_fiq_resources[] = {
17275 + [0] = {
17276 + .flags = IORESOURCE_IRQ,
17277 + .start = IRQ_TIMER3,
17278 + .end = IRQ_TIMER3,
17279 + },
17280 +};
17281 +
17282 +struct sc32440_fiq_platform_data gta02_sc32440_fiq_platform_data = {
17283 + .attach_child_devices = gta02_fiq_attach_child_devices
17284 +};
17285 +
17286 +struct platform_device sc32440_fiq_device = {
17287 + .name = "sc32440_fiq",
17288 + .num_resources = 1,
17289 + .resource = sc32440_fiq_resources,
17290 + .dev = {
17291 + .platform_data = &gta02_sc32440_fiq_platform_data,
17292 + },
17293 +};
17294 +
17295 +/* NOR Flash */
17296 +
17297 +#define GTA02_FLASH_BASE 0x18000000 /* GCS3 */
17298 +#define GTA02_FLASH_SIZE 0x200000 /* 2MBytes */
17299 +
17300 +static struct physmap_flash_data gta02_nor_flash_data = {
17301 + .width = 2,
17302 +};
17303 +
17304 +static struct resource gta02_nor_flash_resource = {
17305 + .start = GTA02_FLASH_BASE,
17306 + .end = GTA02_FLASH_BASE + GTA02_FLASH_SIZE - 1,
17307 + .flags = IORESOURCE_MEM,
17308 +};
17309 +
17310 +static struct platform_device gta02_nor_flash = {
17311 + .name = "physmap-flash",
17312 + .id = 0,
17313 + .dev = {
17314 + .platform_data = &gta02_nor_flash_data,
17315 + },
17316 + .resource = &gta02_nor_flash_resource,
17317 + .num_resources = 1,
17318 +};
17319 +
17320 +
17321 +struct platform_device s3c24xx_pwm_device = {
17322 + .name = "s3c24xx_pwm",
17323 + .num_resources = 0,
17324 +};
17325 +
17326 +static struct i2c_board_info gta02_i2c_devs[] __initdata = {
17327 + {
17328 + I2C_BOARD_INFO("pcf50633", 0x73),
17329 + .irq = GTA02_IRQ_PCF50633,
17330 + .platform_data = &gta02_pcf_pdata,
17331 + },
17332 +};
17333 +
17334 +static struct s3c2410_nand_set gta02_nand_sets[] = {
17335 + [0] = {
17336 + .name = "neo1973-nand",
17337 + .nr_chips = 1,
17338 + .flags = S3C2410_NAND_BBT,
17339 + },
17340 +};
17341 +
17342 +/* choose a set of timings derived from S3C@2442B MCP54
17343 + * data sheet (K5D2G13ACM-D075 MCP Memory)
17344 + */
17345 +
17346 +static struct s3c2410_platform_nand gta02_nand_info = {
17347 + .tacls = 0,
17348 + .twrph0 = 25,
17349 + .twrph1 = 15,
17350 + .nr_sets = ARRAY_SIZE(gta02_nand_sets),
17351 + .sets = gta02_nand_sets,
17352 + .software_ecc = 1,
17353 +};
17354 +
17355 +
17356 +static void gta02_s3c_mmc_set_power(unsigned char power_mode,
17357 + unsigned short vdd)
17358 +{
17359 + gta02_wlan_power(
17360 + power_mode == MMC_POWER_ON ||
17361 + power_mode == MMC_POWER_UP);
17362 +}
17363 +
17364 +
17365 +static struct s3c24xx_mci_pdata gta02_s3c_mmc_cfg = {
17366 + .set_power = gta02_s3c_mmc_set_power,
17367 +};
17368 +
17369 +static void gta02_udc_command(enum s3c2410_udc_cmd_e cmd)
17370 +{
17371 + switch (cmd) {
17372 + case S3C2410_UDC_P_ENABLE:
17373 + printk(KERN_DEBUG "%s S3C2410_UDC_P_ENABLE\n", __func__);
17374 + neo1973_gpb_setpin(GTA02_GPIO_USB_PULLUP, 1);
17375 + break;
17376 + case S3C2410_UDC_P_DISABLE:
17377 + printk(KERN_DEBUG "%s S3C2410_UDC_P_DISABLE\n", __func__);
17378 + neo1973_gpb_setpin(GTA02_GPIO_USB_PULLUP, 0);
17379 + break;
17380 + case S3C2410_UDC_P_RESET:
17381 + printk(KERN_DEBUG "%s S3C2410_UDC_P_RESET\n", __func__);
17382 + /* FIXME! */
17383 + break;
17384 + default:
17385 + break;
17386 + }
17387 +}
17388 +
17389 +/* get PMU to set USB current limit accordingly */
17390 +
17391 +static void gta02_udc_vbus_draw(unsigned int ma)
17392 +{
17393 + if (!gta02_pcf_pdata.pcf) {
17394 + printk(KERN_ERR "********** NULL gta02_pcf_pdata.pcf *****\n");
17395 + return;
17396 + }
17397 +
17398 + gta02_usb_vbus_draw = ma;
17399 +
17400 + schedule_delayed_work(&gta02_charger_work,
17401 + GTA02_CHARGER_CONFIGURE_TIMEOUT);
17402 +}
17403 +
17404 +static struct s3c2410_udc_mach_info gta02_udc_cfg = {
17405 + .vbus_draw = gta02_udc_vbus_draw,
17406 + .udc_command = gta02_udc_command,
17407 +
17408 +};
17409 +
17410 +
17411 +/* touchscreen configuration */
17412 +
17413 +static struct ts_filter_linear_configuration gta02_ts_linear_config = {
17414 + .constants = {1, 0, 0, 0, 1, 0, 1}, /* don't modify coords */
17415 + .coord0 = 0,
17416 + .coord1 = 1,
17417 +};
17418 +
17419 +static struct ts_filter_group_configuration gta02_ts_group_config = {
17420 + .extent = 12,
17421 + .close_enough = 10,
17422 + .threshold = 6, /* at least half of the points in a group */
17423 + .attempts = 10,
17424 +};
17425 +
17426 +static struct ts_filter_median_configuration gta02_ts_median_config = {
17427 + .extent = 20,
17428 + .decimation_below = 3,
17429 + .decimation_threshold = 8 * 3,
17430 + .decimation_above = 4,
17431 +};
17432 +
17433 +static struct ts_filter_mean_configuration gta02_ts_mean_config = {
17434 + .bits_filter_length = 2, /* 4 points */
17435 +};
17436 +
17437 +static struct s3c2410_ts_mach_info gta02_ts_cfg = {
17438 + .delay = 10000,
17439 + .presc = 0xff, /* slow as we can go */
17440 + .filter_sequence = {
17441 + [0] = &ts_filter_group_api,
17442 + [1] = &ts_filter_median_api,
17443 + [2] = &ts_filter_mean_api,
17444 + [3] = &ts_filter_linear_api,
17445 + },
17446 + .filter_config = {
17447 + [0] = &gta02_ts_group_config,
17448 + [1] = &gta02_ts_median_config,
17449 + [2] = &gta02_ts_mean_config,
17450 + [3] = &gta02_ts_linear_config,
17451 + },
17452 +};
17453 +
17454 +
17455 +static void gta02_bl_set_intensity(int intensity)
17456 +{
17457 + struct pcf50633 *pcf = gta02_pcf_pdata.pcf;
17458 + int old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT);
17459 + int ret;
17460 +
17461 + intensity >>= 2;
17462 +
17463 + if (intensity == old_intensity)
17464 + return;
17465 +
17466 + /* We can't do this anywhere else */
17467 + pcf50633_reg_write(pcf, PCF50633_REG_LEDDIM, 5);
17468 +
17469 + if (!(pcf50633_reg_read(pcf, PCF50633_REG_LEDENA) & 3))
17470 + old_intensity = 0;
17471 +
17472 + /*
17473 + * The PCF50633 cannot handle LEDOUT = 0 (datasheet p60)
17474 + * if seen, you have to re-enable the LED unit
17475 + */
17476 + if (!intensity || !old_intensity)
17477 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0);
17478 +
17479 + if (!intensity) /* illegal to set LEDOUT to 0 */
17480 + ret = pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f,
17481 + 2);
17482 + else
17483 + ret = pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f,
17484 + intensity);
17485 +
17486 + if (intensity)
17487 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 2);
17488 +
17489 +}
17490 +
17491 +static struct generic_bl_info gta02_bl_info = {
17492 + .name = "gta02-bl",
17493 + .max_intensity = 0xff,
17494 + .default_intensity = 0xff,
17495 + .set_bl_intensity = gta02_bl_set_intensity,
17496 +};
17497 +
17498 +static struct platform_device gta02_bl_dev = {
17499 + .name = "generic-bl",
17500 + .id = 1,
17501 + .dev = {
17502 + .platform_data = &gta02_bl_info,
17503 + },
17504 +};
17505 +
17506 +/* SPI: LCM control interface attached to Glamo3362 */
17507 +
17508 +static void gta02_jbt6k74_reset(int devidx, int level)
17509 +{
17510 + glamo_lcm_reset(level);
17511 +}
17512 +
17513 +static void gta02_jbt6k74_probe_completed(struct device *dev)
17514 +{
17515 + struct pcf50633 *pcf = gta02_pcf_pdata.pcf;
17516 +
17517 + /* Switch on backlight. Qi does not do it for us */
17518 + pcf50633_reg_write(pcf, PCF50633_REG_LEDOUT, 0x01);
17519 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0x00);
17520 + pcf50633_reg_write(pcf, PCF50633_REG_LEDDIM, 0x01);
17521 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0x01);
17522 +
17523 + gta02_bl_dev.dev.parent = dev;
17524 + platform_device_register(&gta02_bl_dev);
17525 +}
17526 +
17527 +const struct jbt6k74_platform_data jbt6k74_pdata = {
17528 + .reset = gta02_jbt6k74_reset,
17529 + .probe_completed = gta02_jbt6k74_probe_completed,
17530 +};
17531 +
17532 +static struct spi_board_info gta02_spi_board_info[] = {
17533 + {
17534 + .modalias = "jbt6k74",
17535 + /* platform_data */
17536 + .platform_data = &jbt6k74_pdata,
17537 + /* controller_data */
17538 + /* irq */
17539 + .max_speed_hz = 100 * 1000,
17540 + .bus_num = 2,
17541 + /* chip_select */
17542 + },
17543 +};
17544 +
17545 +#if 0 /* currently this is not used and we use gpio spi */
17546 +static struct glamo_spi_info glamo_spi_cfg = {
17547 + .board_size = ARRAY_SIZE(gta02_spi_board_info),
17548 + .board_info = gta02_spi_board_info,
17549 +};
17550 +#endif /* 0 */
17551 +
17552 +static struct glamo_spigpio_info glamo_spigpio_cfg = {
17553 + .pin_clk = GLAMO_GPIO10_OUTPUT,
17554 + .pin_mosi = GLAMO_GPIO11_OUTPUT,
17555 + .pin_cs = GLAMO_GPIO12_OUTPUT,
17556 + .pin_miso = 0,
17557 + .board_size = ARRAY_SIZE(gta02_spi_board_info),
17558 + .board_info = gta02_spi_board_info,
17559 +};
17560 +
17561 +/* SPI: Accelerometers attached to SPI of s3c244x */
17562 +
17563 +/*
17564 + * Situation is that Linux SPI can't work in an interrupt context, so we
17565 + * implement our own bitbang here. Arbitration is needed because not only
17566 + * can this interrupt happen at any time even if foreground wants to use
17567 + * the bitbang API from Linux, but multiple motion sensors can be on the
17568 + * same SPI bus, and multiple interrupts can happen.
17569 + *
17570 + * Foreground / interrupt arbitration is okay because the interrupts are
17571 + * disabled around all the foreground SPI code.
17572 + *
17573 + * Interrupt / Interrupt arbitration is evidently needed, otherwise we
17574 + * lose edge-triggered service after a while due to the two sensors sharing
17575 + * the SPI bus having irqs at the same time eventually.
17576 + *
17577 + * Servicing is typ 75 - 100us at 400MHz.
17578 + */
17579 +
17580 +/* #define DEBUG_SPEW_MS */
17581 +#define MG_PER_SAMPLE 18
17582 +
17583 +struct lis302dl_platform_data lis302_pdata_top;
17584 +struct lis302dl_platform_data lis302_pdata_bottom;
17585 +
17586 +/*
17587 + * generic SPI RX and TX bitbang
17588 + * only call with interrupts off!
17589 + */
17590 +
17591 +static void __gta02_lis302dl_bitbang(struct lis302dl_info *lis, u8 *tx,
17592 + int tx_bytes, u8 *rx, int rx_bytes)
17593 +{
17594 + struct lis302dl_platform_data *pdata = lis->pdata;
17595 + int n;
17596 + u8 shifter = 0;
17597 + unsigned long other_cs;
17598 +
17599 + /*
17600 + * Huh... "quirk"... CS on this device is not really "CS" like you can
17601 + * expect.
17602 + *
17603 + * When it is 0 it selects SPI interface mode.
17604 + * When it is 1 it selects I2C interface mode.
17605 + *
17606 + * Because we have 2 devices on one interface we have to make sure
17607 + * that the "disabled" device (actually in I2C mode) don't think we're
17608 + * talking to it.
17609 + *
17610 + * When we talk to the "enabled" device, the "disabled" device sees
17611 + * the clocks as I2C clocks, creating havoc.
17612 + *
17613 + * I2C sees MOSI going LOW while CLK HIGH as a START action, thus we
17614 + * must ensure this is never issued.
17615 + */
17616 +
17617 + if (&lis302_pdata_top == pdata)
17618 + other_cs = lis302_pdata_bottom.pin_chip_select;
17619 + else
17620 + other_cs = lis302_pdata_top.pin_chip_select;
17621 +
17622 + s3c2410_gpio_setpin(other_cs, 1);
17623 + s3c2410_gpio_setpin(pdata->pin_chip_select, 1);
17624 + s3c2410_gpio_setpin(pdata->pin_clk, 1);
17625 + s3c2410_gpio_setpin(pdata->pin_chip_select, 0);
17626 +
17627 + /* send the register index, r/w and autoinc bits */
17628 + for (n = 0; n < (tx_bytes << 3); n++) {
17629 + if (!(n & 7))
17630 + shifter = ~tx[n >> 3];
17631 + s3c2410_gpio_setpin(pdata->pin_clk, 0);
17632 + s3c2410_gpio_setpin(pdata->pin_mosi, !(shifter & 0x80));
17633 + s3c2410_gpio_setpin(pdata->pin_clk, 1);
17634 + shifter <<= 1;
17635 + }
17636 +
17637 + for (n = 0; n < (rx_bytes << 3); n++) { /* 8 bits each */
17638 + s3c2410_gpio_setpin(pdata->pin_clk, 0);
17639 + shifter <<= 1;
17640 + if (s3c2410_gpio_getpin(pdata->pin_miso))
17641 + shifter |= 1;
17642 + if ((n & 7) == 7)
17643 + rx[n >> 3] = shifter;
17644 + s3c2410_gpio_setpin(pdata->pin_clk, 1);
17645 + }
17646 + s3c2410_gpio_setpin(pdata->pin_chip_select, 1);
17647 + s3c2410_gpio_setpin(other_cs, 1);
17648 +}
17649 +
17650 +
17651 +static int gta02_lis302dl_bitbang_read_reg(struct lis302dl_info *lis, u8 reg)
17652 +{
17653 + u8 data = 0xc0 | reg; /* read, autoincrement */
17654 + unsigned long flags;
17655 +
17656 + local_irq_save(flags);
17657 +
17658 + __gta02_lis302dl_bitbang(lis, &data, 1, &data, 1);
17659 +
17660 + local_irq_restore(flags);
17661 +
17662 + return data;
17663 +}
17664 +
17665 +static void gta02_lis302dl_bitbang_write_reg(struct lis302dl_info *lis, u8 reg,
17666 + u8 val)
17667 +{
17668 + u8 data[2] = { 0x00 | reg, val }; /* write, no autoincrement */
17669 + unsigned long flags;
17670 +
17671 + local_irq_save(flags);
17672 +
17673 + __gta02_lis302dl_bitbang(lis, &data[0], 2, NULL, 0);
17674 +
17675 + local_irq_restore(flags);
17676 +
17677 +}
17678 +
17679 +
17680 +void gta02_lis302dl_suspend_io(struct lis302dl_info *lis, int resume)
17681 +{
17682 + struct lis302dl_platform_data *pdata = lis->pdata;
17683 +
17684 + if (!resume) {
17685 + /*
17686 + * we don't want to power them with a high level
17687 + * because GSENSOR_3V3 is not up during suspend
17688 + */
17689 + s3c2410_gpio_setpin(pdata->pin_chip_select, 0);
17690 + s3c2410_gpio_setpin(pdata->pin_clk, 0);
17691 + s3c2410_gpio_setpin(pdata->pin_mosi, 0);
17692 + /* misnomer: it is a pullDOWN in 2442 */
17693 + s3c2410_gpio_pullup(pdata->pin_miso, 1);
17694 + return;
17695 + }
17696 +
17697 + /* back to normal */
17698 + s3c2410_gpio_setpin(pdata->pin_chip_select, 1);
17699 + s3c2410_gpio_setpin(pdata->pin_clk, 1);
17700 + /* misnomer: it is a pullDOWN in 2442 */
17701 + s3c2410_gpio_pullup(pdata->pin_miso, 0);
17702 +
17703 + s3c2410_gpio_cfgpin(pdata->pin_chip_select, S3C2410_GPIO_OUTPUT);
17704 + s3c2410_gpio_cfgpin(pdata->pin_clk, S3C2410_GPIO_OUTPUT);
17705 + s3c2410_gpio_cfgpin(pdata->pin_mosi, S3C2410_GPIO_OUTPUT);
17706 + s3c2410_gpio_cfgpin(pdata->pin_miso, S3C2410_GPIO_INPUT);
17707 +
17708 +}
17709 +
17710 +
17711 +
17712 +struct lis302dl_platform_data lis302_pdata_top = {
17713 + .name = "lis302-1 (top)",
17714 + .pin_chip_select= S3C2410_GPD12,
17715 + .pin_clk = S3C2410_GPG7,
17716 + .pin_mosi = S3C2410_GPG6,
17717 + .pin_miso = S3C2410_GPG5,
17718 + .interrupt = GTA02_IRQ_GSENSOR_1,
17719 + .open_drain = 1, /* altered at runtime by PCB rev */
17720 + .lis302dl_bitbang = __gta02_lis302dl_bitbang,
17721 + .lis302dl_bitbang_reg_read = gta02_lis302dl_bitbang_read_reg,
17722 + .lis302dl_bitbang_reg_write = gta02_lis302dl_bitbang_write_reg,
17723 + .lis302dl_suspend_io = gta02_lis302dl_suspend_io,
17724 +};
17725 +
17726 +struct lis302dl_platform_data lis302_pdata_bottom = {
17727 + .name = "lis302-2 (bottom)",
17728 + .pin_chip_select= S3C2410_GPD13,
17729 + .pin_clk = S3C2410_GPG7,
17730 + .pin_mosi = S3C2410_GPG6,
17731 + .pin_miso = S3C2410_GPG5,
17732 + .interrupt = GTA02_IRQ_GSENSOR_2,
17733 + .open_drain = 1, /* altered at runtime by PCB rev */
17734 + .lis302dl_bitbang = __gta02_lis302dl_bitbang,
17735 + .lis302dl_bitbang_reg_read = gta02_lis302dl_bitbang_read_reg,
17736 + .lis302dl_bitbang_reg_write = gta02_lis302dl_bitbang_write_reg,
17737 + .lis302dl_suspend_io = gta02_lis302dl_suspend_io,
17738 +};
17739 +
17740 +
17741 +static struct platform_device s3c_device_spi_acc1 = {
17742 + .name = "lis302dl",
17743 + .id = 1,
17744 + .dev = {
17745 + .platform_data = &lis302_pdata_top,
17746 + },
17747 +};
17748 +
17749 +static struct platform_device s3c_device_spi_acc2 = {
17750 + .name = "lis302dl",
17751 + .id = 2,
17752 + .dev = {
17753 + .platform_data = &lis302_pdata_bottom,
17754 + },
17755 +};
17756 +
17757 +static struct resource gta02_led_resources[] = {
17758 + {
17759 + .name = "gta02-power:orange",
17760 + .start = GTA02_GPIO_PWR_LED1,
17761 + .end = GTA02_GPIO_PWR_LED1,
17762 + }, {
17763 + .name = "gta02-power:blue",
17764 + .start = GTA02_GPIO_PWR_LED2,
17765 + .end = GTA02_GPIO_PWR_LED2,
17766 + }, {
17767 + .name = "gta02-aux:red",
17768 + .start = GTA02_GPIO_AUX_LED,
17769 + .end = GTA02_GPIO_AUX_LED,
17770 + },
17771 +};
17772 +
17773 +struct platform_device gta02_led_dev = {
17774 + .name = "gta02-led",
17775 + .num_resources = ARRAY_SIZE(gta02_led_resources),
17776 + .resource = gta02_led_resources,
17777 +};
17778 +
17779 +static struct resource gta02_button_resources[] = {
17780 + [0] = {
17781 + .start = GTA02_GPIO_AUX_KEY,
17782 + .end = GTA02_GPIO_AUX_KEY,
17783 + },
17784 + [1] = {
17785 + .start = GTA02_GPIO_HOLD_KEY,
17786 + .end = GTA02_GPIO_HOLD_KEY,
17787 + },
17788 + [2] = {
17789 + .start = GTA02_GPIO_JACK_INSERT,
17790 + .end = GTA02_GPIO_JACK_INSERT,
17791 + },
17792 + [3] = {
17793 + .start = 0,
17794 + .end = 0,
17795 + },
17796 + [4] = {
17797 + .start = 0,
17798 + .end = 0,
17799 + },
17800 +};
17801 +
17802 +static struct platform_device gta02_button_dev = {
17803 + .name = "neo1973-button",
17804 + .num_resources = ARRAY_SIZE(gta02_button_resources),
17805 + .resource = gta02_button_resources,
17806 +};
17807 +
17808 +
17809 +static struct platform_device gta02_pm_usbhost_dev = {
17810 + .name = "neo1973-pm-host",
17811 +};
17812 +
17813 +
17814 +/* USB */
17815 +static struct s3c2410_hcd_info gta02_usb_info = {
17816 + .port[0] = {
17817 + .flags = S3C_HCDFLG_USED,
17818 + },
17819 + .port[1] = {
17820 + .flags = 0,
17821 + },
17822 +};
17823 +
17824 +static int glamo_irq_is_wired(void)
17825 +{
17826 + int rc;
17827 + int count = 0;
17828 +
17829 + /*
17830 + * GTA02 S-Media IRQs prior to A5 are broken due to a lack of
17831 + * a pullup on the INT# line. Check for the bad behaviour.
17832 + */
17833 + s3c2410_gpio_setpin(S3C2410_GPG4, 0);
17834 + s3c2410_gpio_cfgpin(S3C2410_GPG4, S3C2410_GPG4_OUTP);
17835 + s3c2410_gpio_cfgpin(S3C2410_GPG4, S3C2410_GPG4_INP);
17836 + /*
17837 + * we force it low ourselves for a moment and resume being input.
17838 + * If there is a pullup, it won't stay low for long. But if the
17839 + * level converter is there as on < A5 revision, the weak keeper
17840 + * on the input of the LC will hold the line low indefinitiely
17841 + */
17842 + do
17843 + rc = s3c2410_gpio_getpin(S3C2410_GPG4);
17844 + while ((!rc) && ((count++) < 10));
17845 + if (rc) { /* it got pulled back up, it's good */
17846 + printk(KERN_INFO "Detected S-Media IRQ# pullup, "
17847 + "enabling interrupt\n");
17848 + return 0;
17849 + } else /* Gah we can't work with this level converter */
17850 + printk(KERN_WARNING "** Detected bad IRQ# circuit found"
17851 + " on pre-A5 GTA02: S-Media interrupt disabled **\n");
17852 + return -ENODEV;
17853 +}
17854 +
17855 +static int gta02_glamo_can_set_mmc_power(void)
17856 +{
17857 + switch (system_rev) {
17858 + case GTA02v3_SYSTEM_REV:
17859 + case GTA02v4_SYSTEM_REV:
17860 + case GTA02v5_SYSTEM_REV:
17861 + case GTA02v6_SYSTEM_REV:
17862 + return 1;
17863 + }
17864 +
17865 + return 0;
17866 +}
17867 +
17868 +/* Smedia Glamo 3362 */
17869 +
17870 +/*
17871 + * we crank down SD Card clock dynamically when GPS is powered
17872 + */
17873 +
17874 +static int gta02_glamo_mci_use_slow(void)
17875 +{
17876 + return neo1973_pm_gps_is_on();
17877 +}
17878 +
17879 +static void gta02_glamo_external_reset(int level)
17880 +{
17881 + s3c2410_gpio_setpin(GTA02_GPIO_3D_RESET, level);
17882 + s3c2410_gpio_cfgpin(GTA02_GPIO_3D_RESET, S3C2410_GPIO_OUTPUT);
17883 +}
17884 +
17885 +static struct glamofb_platform_data gta02_glamo_pdata = {
17886 + .width = 43,
17887 + .height = 58,
17888 + /* 24.5MHz --> 40.816ns */
17889 + .pixclock = 40816,
17890 + .left_margin = 8,
17891 + .right_margin = 16,
17892 + .upper_margin = 2,
17893 + .lower_margin = 16,
17894 + .hsync_len = 8,
17895 + .vsync_len = 2,
17896 + .fb_mem_size = 0x400000, /* glamo has 8 megs of SRAM. we use 4 */
17897 + .xres = {
17898 + .min = 240,
17899 + .max = 640,
17900 + .defval = 480,
17901 + },
17902 + .yres = {
17903 + .min = 320,
17904 + .max = 640,
17905 + .defval = 640,
17906 + },
17907 + .bpp = {
17908 + .min = 16,
17909 + .max = 16,
17910 + .defval = 16,
17911 + },
17912 + //.spi_info = &glamo_spi_cfg,
17913 + .spigpio_info = &glamo_spigpio_cfg,
17914 +
17915 + /* glamo MMC function platform data */
17916 + .mmc_dev = &gta02_mmc_dev,
17917 + .glamo_can_set_mci_power = gta02_glamo_can_set_mmc_power,
17918 + .glamo_mci_use_slow = gta02_glamo_mci_use_slow,
17919 + .glamo_irq_is_wired = glamo_irq_is_wired,
17920 + .glamo_external_reset = gta02_glamo_external_reset
17921 +};
17922 +
17923 +static struct resource gta02_glamo_resources[] = {
17924 + [0] = {
17925 + .start = S3C2410_CS1,
17926 + .end = S3C2410_CS1 + 0x1000000 - 1,
17927 + .flags = IORESOURCE_MEM,
17928 + },
17929 + [1] = {
17930 + .start = GTA02_IRQ_3D,
17931 + .end = GTA02_IRQ_3D,
17932 + .flags = IORESOURCE_IRQ,
17933 + },
17934 + [2] = {
17935 + .start = GTA02v1_GPIO_3D_RESET,
17936 + .end = GTA02v1_GPIO_3D_RESET,
17937 + },
17938 +};
17939 +
17940 +static struct platform_device gta02_glamo_dev = {
17941 + .name = "glamo3362",
17942 + .num_resources = ARRAY_SIZE(gta02_glamo_resources),
17943 + .resource = gta02_glamo_resources,
17944 + .dev = {
17945 + .platform_data = &gta02_glamo_pdata,
17946 + },
17947 +};
17948 +
17949 +static void mangle_glamo_res_by_system_rev(void)
17950 +{
17951 + switch (system_rev) {
17952 + case GTA02v1_SYSTEM_REV:
17953 + break;
17954 + default:
17955 + gta02_glamo_resources[2].start = GTA02_GPIO_3D_RESET;
17956 + gta02_glamo_resources[2].end = GTA02_GPIO_3D_RESET;
17957 + break;
17958 + }
17959 +
17960 + switch (system_rev) {
17961 + case GTA02v1_SYSTEM_REV:
17962 + case GTA02v2_SYSTEM_REV:
17963 + case GTA02v3_SYSTEM_REV:
17964 + /* case GTA02v4_SYSTEM_REV: - FIXME: handle this later */
17965 + /* The hardware is missing a pull-up resistor and thus can't
17966 + * support the Smedia Glamo IRQ */
17967 + gta02_glamo_resources[1].start = 0;
17968 + gta02_glamo_resources[1].end = 0;
17969 + break;
17970 + }
17971 +}
17972 +
17973 +static void __init gta02_map_io(void)
17974 +{
17975 + s3c24xx_init_io(gta02_iodesc, ARRAY_SIZE(gta02_iodesc));
17976 + s3c24xx_init_clocks(12000000);
17977 + s3c24xx_init_uarts(gta02_uartcfgs, ARRAY_SIZE(gta02_uartcfgs));
17978 +}
17979 +
17980 +static irqreturn_t gta02_modem_irq(int irq, void *param)
17981 +{
17982 + printk(KERN_DEBUG "modem wakeup interrupt\n");
17983 + gta_gsm_interrupts++;
17984 + return IRQ_HANDLED;
17985 +}
17986 +
17987 +static irqreturn_t ar6000_wow_irq(int irq, void *param)
17988 +{
17989 + printk(KERN_DEBUG "ar6000_wow interrupt\n");
17990 + return IRQ_HANDLED;
17991 +}
17992 +
17993 +/*
17994 + * hardware_ecc=1|0
17995 + */
17996 +static char hardware_ecc_str[4] __initdata = "";
17997 +
17998 +static int __init hardware_ecc_setup(char *str)
17999 +{
18000 + if (str)
18001 + strlcpy(hardware_ecc_str, str, sizeof(hardware_ecc_str));
18002 + return 1;
18003 +}
18004 +
18005 +__setup("hardware_ecc=", hardware_ecc_setup);
18006 +
18007 +/* these are the guys that don't need to be children of PMU */
18008 +
18009 +static struct platform_device *gta02_devices[] __initdata = {
18010 + &gta02_version_device,
18011 + &s3c_device_usb,
18012 + &s3c_device_wdt,
18013 + &gta02_memconfig_device,
18014 + &s3c_device_sdi,
18015 + &s3c_device_usbgadget,
18016 + &s3c_device_nand,
18017 + &gta02_nor_flash,
18018 +
18019 + &sc32440_fiq_device,
18020 + &s3c24xx_pwm_device,
18021 + &gta02_led_dev,
18022 + &gta02_pm_wlan_dev, /* not dependent on PMU */
18023 +
18024 + &s3c_device_iis,
18025 + &s3c_device_i2c0,
18026 +};
18027 +
18028 +/* these guys DO need to be children of PMU */
18029 +
18030 +static struct platform_device *gta02_devices_pmu_children[] = {
18031 + &s3c_device_ts, /* input 1 */
18032 + &gta02_pm_gsm_dev,
18033 + &gta02_pm_usbhost_dev,
18034 + &s3c_device_spi_acc1, /* input 2 */
18035 + &s3c_device_spi_acc2, /* input 3 */
18036 + &gta02_button_dev, /* input 4 */
18037 + &gta02_resume_reason_device,
18038 +};
18039 +
18040 +static void gta02_pmu_regulator_registered(struct pcf50633 *pcf, int id)
18041 +{
18042 + struct platform_device *regulator, *pdev;
18043 +
18044 + regulator = pcf->pmic.pdev[id];
18045 +
18046 + switch(id) {
18047 + case PCF50633_REGULATOR_LDO4:
18048 + pdev = &gta01_pm_bt_dev;
18049 + break;
18050 + case PCF50633_REGULATOR_LDO5:
18051 + pdev = &gta01_pm_gps_dev;
18052 + break;
18053 + case PCF50633_REGULATOR_HCLDO:
18054 + pdev = &gta02_glamo_dev;
18055 + break;
18056 + default:
18057 + return;
18058 + }
18059 +
18060 + pdev->dev.parent = &regulator->dev;
18061 + platform_device_register(pdev);
18062 +}
18063 +
18064 +/* this is called when pc50633 is probed, unfortunately quite late in the
18065 + * day since it is an I2C bus device. Here we can belatedly define some
18066 + * platform devices with the advantage that we can mark the pcf50633 as the
18067 + * parent. This makes them get suspended and resumed with their parent
18068 + * the pcf50633 still around.
18069 + */
18070 +
18071 +static void gta02_pmu_attach_child_devices(struct pcf50633 *pcf)
18072 +{
18073 + int n;
18074 +
18075 + for (n = 0; n < ARRAY_SIZE(gta02_devices_pmu_children); n++)
18076 + gta02_devices_pmu_children[n]->dev.parent = pcf->dev;
18077 +
18078 + mangle_glamo_res_by_system_rev();
18079 + platform_add_devices(gta02_devices_pmu_children,
18080 + ARRAY_SIZE(gta02_devices_pmu_children));
18081 +}
18082 +
18083 +
18084 +static void __init gta02_machine_init(void)
18085 +{
18086 + int rc;
18087 +
18088 + /* set the panic callback to make AUX blink fast */
18089 + panic_blink = gta02_panic_blink;
18090 +
18091 + switch (system_rev) {
18092 + case GTA02v6_SYSTEM_REV:
18093 + /* we need push-pull interrupt from motion sensors */
18094 + lis302_pdata_top.open_drain = 0;
18095 + lis302_pdata_bottom.open_drain = 0;
18096 + break;
18097 + default:
18098 + break;
18099 + }
18100 +
18101 + spin_lock_init(&motion_irq_lock);
18102 + INIT_DELAYED_WORK(&gta02_charger_work, gta02_charger_worker);
18103 +
18104 + /* Glamo chip select optimization */
18105 +/* *((u32 *)(S3C2410_MEMREG(((1 + 1) << 2)))) = 0x1280; */
18106 +
18107 + /* do not force soft ecc if we are asked to use hardware_ecc */
18108 + if (hardware_ecc_str[0] == '1')
18109 + gta02_nand_info.software_ecc = 0;
18110 +
18111 + s3c_device_usb.dev.platform_data = &gta02_usb_info;
18112 + s3c_device_nand.dev.platform_data = &gta02_nand_info;
18113 + s3c_device_sdi.dev.platform_data = &gta02_s3c_mmc_cfg;
18114 +
18115 + /* acc sensor chip selects */
18116 + s3c2410_gpio_setpin(S3C2410_GPD12, 1);
18117 + s3c2410_gpio_cfgpin(S3C2410_GPD12, S3C2410_GPIO_OUTPUT);
18118 + s3c2410_gpio_setpin(S3C2410_GPD13, 1);
18119 + s3c2410_gpio_cfgpin(S3C2410_GPD13, S3C2410_GPIO_OUTPUT);
18120 +
18121 + s3c24xx_udc_set_platdata(&gta02_udc_cfg);
18122 + s3c_i2c0_set_platdata(NULL);
18123 + set_s3c2410ts_info(&gta02_ts_cfg);
18124 +
18125 + mangle_glamo_res_by_system_rev();
18126 +
18127 + i2c_register_board_info(0, gta02_i2c_devs, ARRAY_SIZE(gta02_i2c_devs));
18128 +
18129 + mangle_pmu_pdata_by_system_rev();
18130 +
18131 + platform_add_devices(gta02_devices, ARRAY_SIZE(gta02_devices));
18132 +
18133 + s3c_pm_init();
18134 +
18135 + /* Make sure the modem can wake us up */
18136 + set_irq_type(GTA02_IRQ_MODEM, IRQ_TYPE_EDGE_RISING);
18137 + rc = request_irq(GTA02_IRQ_MODEM, gta02_modem_irq, IRQF_DISABLED,
18138 + "modem", NULL);
18139 + if (rc < 0)
18140 + printk(KERN_ERR "GTA02: can't request GSM modem wakeup IRQ\n");
18141 + enable_irq_wake(GTA02_IRQ_MODEM);
18142 +
18143 + /* Make sure the wifi module can wake us up*/
18144 + set_irq_type(GTA02_IRQ_WLAN_GPIO1, IRQ_TYPE_EDGE_RISING);
18145 + rc = request_irq(GTA02_IRQ_WLAN_GPIO1, ar6000_wow_irq, IRQF_DISABLED,
18146 + "ar6000", NULL);
18147 +
18148 + if (rc < 0)
18149 + printk(KERN_ERR "GTA02: can't request ar6k wakeup IRQ\n");
18150 + enable_irq_wake(GTA02_IRQ_WLAN_GPIO1);
18151 +}
18152 +
18153 +void DEBUG_LED(int n)
18154 +{
18155 +// int *p = NULL;
18156 + switch (n) {
18157 + case 0:
18158 + neo1973_gpb_setpin(GTA02_GPIO_PWR_LED1, 1);
18159 + break;
18160 + case 1:
18161 + neo1973_gpb_setpin(GTA02_GPIO_PWR_LED2, 1);
18162 + break;
18163 + default:
18164 + neo1973_gpb_setpin(GTA02_GPIO_AUX_LED, 1);
18165 + break;
18166 + }
18167 +// printk(KERN_ERR"die %d\n", *p);
18168 +}
18169 +EXPORT_SYMBOL_GPL(DEBUG_LED);
18170 +
18171 +MACHINE_START(NEO1973_GTA02, "GTA02")
18172 + .phys_io = S3C2410_PA_UART,
18173 + .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
18174 + .boot_params = S3C2410_SDRAM_PA + 0x100,
18175 + .map_io = gta02_map_io,
18176 + .init_irq = s3c24xx_init_irq,
18177 + .init_machine = gta02_machine_init,
18178 + .timer = &s3c24xx_timer,
18179 +MACHINE_END
18180 Index: linux-2.6.28/arch/arm/mach-s3c2440/mach-nexcoder.c
18181 ===================================================================
18182 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/mach-nexcoder.c 2008-12-25 00:26:37.000000000 +0100
18183 +++ linux-2.6.28/arch/arm/mach-s3c2440/mach-nexcoder.c 2009-01-02 00:01:56.000000000 +0100
18184 @@ -37,6 +37,7 @@
18185 //#include <asm/debug-ll.h>
18186 #include <mach/regs-gpio.h>
18187 #include <plat/regs-serial.h>
18188 +#include <plat/iic.h>
18189
18190 #include <plat/s3c2410.h>
18191 #include <plat/s3c2440.h>
18192 @@ -107,7 +108,7 @@ static struct platform_device *nexcoder_
18193 &s3c_device_usb,
18194 &s3c_device_lcd,
18195 &s3c_device_wdt,
18196 - &s3c_device_i2c,
18197 + &s3c_device_i2c0,
18198 &s3c_device_iis,
18199 &s3c_device_rtc,
18200 &s3c_device_camif,
18201 @@ -142,6 +143,7 @@ static void __init nexcoder_map_io(void)
18202
18203 static void __init nexcoder_init(void)
18204 {
18205 + s3c_i2c0_set_platdata(NULL);
18206 platform_add_devices(nexcoder_devices, ARRAY_SIZE(nexcoder_devices));
18207 };
18208
18209 Index: linux-2.6.28/arch/arm/mach-s3c2440/mach-osiris.c
18210 ===================================================================
18211 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/mach-osiris.c 2008-12-25 00:26:37.000000000 +0100
18212 +++ linux-2.6.28/arch/arm/mach-s3c2440/mach-osiris.c 2009-01-02 00:01:56.000000000 +0100
18213 @@ -37,7 +37,8 @@
18214 #include <mach/regs-gpio.h>
18215 #include <mach/regs-mem.h>
18216 #include <mach/regs-lcd.h>
18217 -#include <asm/plat-s3c/nand.h>
18218 +#include <plat/nand.h>
18219 +#include <plat/iic.h>
18220
18221 #include <linux/mtd/mtd.h>
18222 #include <linux/mtd/nand.h>
18223 @@ -335,7 +336,7 @@ static struct i2c_board_info osiris_i2c_
18224 /* Standard Osiris devices */
18225
18226 static struct platform_device *osiris_devices[] __initdata = {
18227 - &s3c_device_i2c,
18228 + &s3c_device_i2c0,
18229 &s3c_device_wdt,
18230 &s3c_device_nand,
18231 &osiris_pcmcia,
18232 @@ -398,6 +399,8 @@ static void __init osiris_init(void)
18233 sysdev_class_register(&osiris_pm_sysclass);
18234 sysdev_register(&osiris_pm_sysdev);
18235
18236 + s3c_i2c0_set_platdata(NULL);
18237 +
18238 i2c_register_board_info(0, osiris_i2c_devs,
18239 ARRAY_SIZE(osiris_i2c_devs));
18240
18241 Index: linux-2.6.28/arch/arm/mach-s3c2440/mach-rx3715.c
18242 ===================================================================
18243 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/mach-rx3715.c 2008-12-25 00:26:37.000000000 +0100
18244 +++ linux-2.6.28/arch/arm/mach-s3c2440/mach-rx3715.c 2009-01-02 00:01:56.000000000 +0100
18245 @@ -42,7 +42,7 @@
18246 #include <mach/regs-lcd.h>
18247
18248 #include <mach/h1940.h>
18249 -#include <asm/plat-s3c/nand.h>
18250 +#include <plat/nand.h>
18251 #include <mach/fb.h>
18252
18253 #include <plat/clock.h>
18254 @@ -179,7 +179,7 @@ static struct platform_device *rx3715_de
18255 &s3c_device_usb,
18256 &s3c_device_lcd,
18257 &s3c_device_wdt,
18258 - &s3c_device_i2c,
18259 + &s3c_device_i2c0,
18260 &s3c_device_iis,
18261 &s3c_device_nand,
18262 };
18263 @@ -203,7 +203,7 @@ static void __init rx3715_init_machine(v
18264 #ifdef CONFIG_PM_H1940
18265 memcpy(phys_to_virt(H1940_SUSPEND_RESUMEAT), h1940_pm_return, 1024);
18266 #endif
18267 - s3c2410_pm_init();
18268 + s3c_pm_init();
18269
18270 s3c24xx_fb_set_platdata(&rx3715_fb_info);
18271 platform_add_devices(rx3715_devices, ARRAY_SIZE(rx3715_devices));
18272 Index: linux-2.6.28/arch/arm/mach-s3c2440/mach-smdk2440.c
18273 ===================================================================
18274 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/mach-smdk2440.c 2008-12-25 00:26:37.000000000 +0100
18275 +++ linux-2.6.28/arch/arm/mach-s3c2440/mach-smdk2440.c 2009-01-02 00:01:56.000000000 +0100
18276 @@ -37,6 +37,7 @@
18277
18278 #include <mach/idle.h>
18279 #include <mach/fb.h>
18280 +#include <plat/iic.h>
18281
18282 #include <plat/s3c2410.h>
18283 #include <plat/s3c2440.h>
18284 @@ -152,7 +153,7 @@ static struct platform_device *smdk2440_
18285 &s3c_device_usb,
18286 &s3c_device_lcd,
18287 &s3c_device_wdt,
18288 - &s3c_device_i2c,
18289 + &s3c_device_i2c0,
18290 &s3c_device_iis,
18291 };
18292
18293 @@ -166,6 +167,7 @@ static void __init smdk2440_map_io(void)
18294 static void __init smdk2440_machine_init(void)
18295 {
18296 s3c24xx_fb_set_platdata(&smdk2440_fb_info);
18297 + s3c_i2c0_set_platdata(NULL);
18298
18299 platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
18300 smdk_machine_init();
18301 Index: linux-2.6.28/arch/arm/mach-s3c2440/Makefile
18302 ===================================================================
18303 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/Makefile 2008-12-25 00:26:37.000000000 +0100
18304 +++ linux-2.6.28/arch/arm/mach-s3c2440/Makefile 2009-01-02 00:01:56.000000000 +0100
18305 @@ -13,6 +13,7 @@ obj-$(CONFIG_CPU_S3C2440) += s3c2440.o d
18306 obj-$(CONFIG_CPU_S3C2440) += irq.o
18307 obj-$(CONFIG_CPU_S3C2440) += clock.o
18308 obj-$(CONFIG_S3C2440_DMA) += dma.o
18309 +obj-$(CONFIG_S3C2440_C_FIQ) += fiq_c_isr.o
18310
18311 # Machine support
18312
18313 @@ -22,3 +23,6 @@ obj-$(CONFIG_MACH_RX3715) += mach-rx3715
18314 obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o
18315 obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
18316 obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o
18317 +obj-$(CONFIG_MACH_HXD8) += mach-hxd8.o
18318 +obj-$(CONFIG_MACH_NEO1973_GTA02) += mach-gta02.o
18319 +
18320 Index: linux-2.6.28/arch/arm/mach-s3c2440/s3c2440.c
18321 ===================================================================
18322 --- linux-2.6.28.orig/arch/arm/mach-s3c2440/s3c2440.c 2008-12-25 00:26:37.000000000 +0100
18323 +++ linux-2.6.28/arch/arm/mach-s3c2440/s3c2440.c 2009-01-02 00:01:56.000000000 +0100
18324 @@ -46,6 +46,9 @@ int __init s3c2440_init(void)
18325 s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT;
18326 s3c_device_wdt.resource[1].end = IRQ_S3C2440_WDT;
18327
18328 + /* make sure SD/MMC driver can distinguish 2440 from 2410 */
18329 + s3c_device_sdi.name = "s3c2440-sdi";
18330 +
18331 /* register our system device for everything else */
18332
18333 return sysdev_register(&s3c2440_sysdev);
18334 Index: linux-2.6.28/arch/arm/mach-s3c2442/Kconfig
18335 ===================================================================
18336 --- linux-2.6.28.orig/arch/arm/mach-s3c2442/Kconfig 2008-12-25 00:26:37.000000000 +0100
18337 +++ linux-2.6.28/arch/arm/mach-s3c2442/Kconfig 2009-01-02 00:01:56.000000000 +0100
18338 @@ -6,10 +6,11 @@
18339
18340 config CPU_S3C2442
18341 bool
18342 - depends on ARCH_S3C2410
18343 + depends on CPU_S3C2440
18344 select S3C2410_CLOCK
18345 select S3C2410_GPIO
18346 select S3C2410_PM if PM
18347 + select S3C2440_DMA if S3C2410_DMA
18348 select CPU_S3C244X
18349 select CPU_LLSERIAL_S3C2440
18350 help
18351 Index: linux-2.6.28/arch/arm/mach-s3c2442/s3c2442.c
18352 ===================================================================
18353 --- linux-2.6.28.orig/arch/arm/mach-s3c2442/s3c2442.c 2008-12-25 00:26:37.000000000 +0100
18354 +++ linux-2.6.28/arch/arm/mach-s3c2442/s3c2442.c 2009-01-02 00:01:56.000000000 +0100
18355 @@ -21,6 +21,7 @@
18356
18357 #include <plat/s3c2442.h>
18358 #include <plat/cpu.h>
18359 +#include <plat/devs.h>
18360
18361 static struct sys_device s3c2442_sysdev = {
18362 .cls = &s3c2442_sysclass,
18363 @@ -30,5 +31,8 @@ int __init s3c2442_init(void)
18364 {
18365 printk("S3C2442: Initialising architecture\n");
18366
18367 + /* make sure SD/MMC driver can distinguish 2440 from 2410 */
18368 + s3c_device_sdi.name = "s3c2440-sdi";
18369 +
18370 return sysdev_register(&s3c2442_sysdev);
18371 }
18372 Index: linux-2.6.28/arch/arm/mach-s3c2443/clock.c
18373 ===================================================================
18374 --- linux-2.6.28.orig/arch/arm/mach-s3c2443/clock.c 2008-12-25 00:26:37.000000000 +0100
18375 +++ linux-2.6.28/arch/arm/mach-s3c2443/clock.c 2009-01-02 00:01:56.000000000 +0100
18376 @@ -39,6 +39,8 @@
18377
18378 #include <mach/regs-s3c2443-clock.h>
18379
18380 +#include <plat/cpu-freq.h>
18381 +
18382 #include <plat/s3c2443.h>
18383 #include <plat/clock.h>
18384 #include <plat/cpu.h>
18385 @@ -145,12 +147,6 @@ static unsigned long s3c2443_roundrate_c
18386
18387 /* clock selections */
18388
18389 -/* CPU EXTCLK input */
18390 -static struct clk clk_ext = {
18391 - .name = "ext",
18392 - .id = -1,
18393 -};
18394 -
18395 static struct clk clk_mpllref = {
18396 .name = "mpllref",
18397 .parent = &clk_xtal,
18398 @@ -165,14 +161,6 @@ static struct clk clk_mpll = {
18399 };
18400 #endif
18401
18402 -static struct clk clk_epllref;
18403 -
18404 -static struct clk clk_epll = {
18405 - .name = "epll",
18406 - .parent = &clk_epllref,
18407 - .id = -1,
18408 -};
18409 -
18410 static struct clk clk_i2s_ext = {
18411 .name = "i2s-ext",
18412 .id = -1,
18413 @@ -1011,22 +999,20 @@ static struct clk *clks[] __initdata = {
18414 &clk_prediv,
18415 };
18416
18417 -void __init s3c2443_init_clocks(int xtal)
18418 +void __init_or_cpufreq s3c2443_setup_clocks(void)
18419 {
18420 - unsigned long epllcon = __raw_readl(S3C2443_EPLLCON);
18421 unsigned long mpllcon = __raw_readl(S3C2443_MPLLCON);
18422 unsigned long clkdiv0 = __raw_readl(S3C2443_CLKDIV0);
18423 + struct clk *xtal_clk;
18424 + unsigned long xtal;
18425 unsigned long pll;
18426 unsigned long fclk;
18427 unsigned long hclk;
18428 unsigned long pclk;
18429 - struct clk *clkp;
18430 - int ret;
18431 - int ptr;
18432
18433 - /* s3c2443 parents h and p clocks from prediv */
18434 - clk_h.parent = &clk_prediv;
18435 - clk_p.parent = &clk_prediv;
18436 + xtal_clk = clk_get(NULL, "xtal");
18437 + xtal = clk_get_rate(xtal_clk);
18438 + clk_put(xtal_clk);
18439
18440 pll = s3c2443_get_mpll(mpllcon, xtal);
18441 clk_msysclk.rate = pll;
18442 @@ -1036,13 +1022,29 @@ void __init s3c2443_init_clocks(int xtal
18443 hclk /= s3c2443_get_hdiv(clkdiv0);
18444 pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1);
18445
18446 - s3c24xx_setup_clocks(xtal, fclk, hclk, pclk);
18447 + s3c24xx_setup_clocks(fclk, hclk, pclk);
18448
18449 printk("S3C2443: mpll %s %ld.%03ld MHz, cpu %ld.%03ld MHz, mem %ld.%03ld MHz, pclk %ld.%03ld MHz\n",
18450 (mpllcon & S3C2443_PLLCON_OFF) ? "off":"on",
18451 print_mhz(pll), print_mhz(fclk),
18452 print_mhz(hclk), print_mhz(pclk));
18453
18454 + s3c24xx_setup_clocks(fclk, hclk, pclk);
18455 +}
18456 +
18457 +void __init s3c2443_init_clocks(int xtal)
18458 +{
18459 + struct clk *clkp;
18460 + unsigned long epllcon = __raw_readl(S3C2443_EPLLCON);
18461 + int ret;
18462 + int ptr;
18463 +
18464 + /* s3c2443 parents h and p clocks from prediv */
18465 + clk_h.parent = &clk_prediv;
18466 + clk_p.parent = &clk_prediv;
18467 +
18468 + s3c24xx_register_baseclocks(xtal);
18469 + s3c2443_setup_clocks();
18470 s3c2443_clk_initparents();
18471
18472 for (ptr = 0; ptr < ARRAY_SIZE(clks); ptr++) {
18473 @@ -1056,7 +1058,7 @@ void __init s3c2443_init_clocks(int xtal
18474 }
18475
18476 clk_epll.rate = s3c2443_get_epll(epllcon, xtal);
18477 -
18478 + clk_epll.parent = &clk_epllref;
18479 clk_usb_bus.parent = &clk_usb_bus_host;
18480
18481 /* ensure usb bus clock is within correct rate of 48MHz */
18482 @@ -1105,4 +1107,6 @@ void __init s3c2443_init_clocks(int xtal
18483
18484 (clkp->enable)(clkp, 0);
18485 }
18486 +
18487 + s3c_pwmclk_init();
18488 }
18489 Index: linux-2.6.28/arch/arm/mach-s3c2443/dma.c
18490 ===================================================================
18491 --- linux-2.6.28.orig/arch/arm/mach-s3c2443/dma.c 2008-12-25 00:26:37.000000000 +0100
18492 +++ linux-2.6.28/arch/arm/mach-s3c2443/dma.c 2009-01-02 00:01:56.000000000 +0100
18493 @@ -26,12 +26,12 @@
18494
18495 #include <plat/regs-serial.h>
18496 #include <mach/regs-gpio.h>
18497 -#include <asm/plat-s3c/regs-ac97.h>
18498 +#include <plat/regs-ac97.h>
18499 #include <mach/regs-mem.h>
18500 #include <mach/regs-lcd.h>
18501 #include <mach/regs-sdi.h>
18502 #include <asm/plat-s3c24xx/regs-iis.h>
18503 -#include <asm/plat-s3c24xx/regs-spi.h>
18504 +#include <plat/regs-spi.h>
18505
18506 #define MAP(x) { \
18507 [0] = (x) | DMA_CH_VALID, \
18508 Index: linux-2.6.28/arch/arm/mach-s3c2443/Kconfig
18509 ===================================================================
18510 --- linux-2.6.28.orig/arch/arm/mach-s3c2443/Kconfig 2008-12-25 00:26:37.000000000 +0100
18511 +++ linux-2.6.28/arch/arm/mach-s3c2443/Kconfig 2009-01-02 00:01:56.000000000 +0100
18512 @@ -24,6 +24,7 @@ config MACH_SMDK2443
18513 bool "SMDK2443"
18514 select CPU_S3C2443
18515 select MACH_SMDK
18516 + select S3C_DEV_HSMMC
18517 help
18518 Say Y here if you are using an SMDK2443
18519
18520 Index: linux-2.6.28/arch/arm/mach-s3c2443/mach-smdk2443.c
18521 ===================================================================
18522 --- linux-2.6.28.orig/arch/arm/mach-s3c2443/mach-smdk2443.c 2008-12-25 00:26:37.000000000 +0100
18523 +++ linux-2.6.28/arch/arm/mach-s3c2443/mach-smdk2443.c 2009-01-02 00:01:56.000000000 +0100
18524 @@ -37,6 +37,7 @@
18525
18526 #include <mach/idle.h>
18527 #include <mach/fb.h>
18528 +#include <plat/iic.h>
18529
18530 #include <plat/s3c2410.h>
18531 #include <plat/s3c2440.h>
18532 @@ -103,8 +104,8 @@ static struct s3c2410_uartcfg smdk2443_u
18533
18534 static struct platform_device *smdk2443_devices[] __initdata = {
18535 &s3c_device_wdt,
18536 - &s3c_device_i2c,
18537 - &s3c_device_hsmmc,
18538 + &s3c_device_i2c0,
18539 + &s3c_device_hsmmc0,
18540 };
18541
18542 static void __init smdk2443_map_io(void)
18543 @@ -116,6 +117,7 @@ static void __init smdk2443_map_io(void)
18544
18545 static void __init smdk2443_machine_init(void)
18546 {
18547 + s3c_i2c0_set_platdata(NULL);
18548 platform_add_devices(smdk2443_devices, ARRAY_SIZE(smdk2443_devices));
18549 smdk_machine_init();
18550 }
18551 Index: linux-2.6.28/arch/arm/mach-s3c2443/s3c2443.c
18552 ===================================================================
18553 --- linux-2.6.28.orig/arch/arm/mach-s3c2443/s3c2443.c 2008-12-25 00:26:37.000000000 +0100
18554 +++ linux-2.6.28/arch/arm/mach-s3c2443/s3c2443.c 2009-01-02 00:01:56.000000000 +0100
18555 @@ -81,10 +81,9 @@ void __init s3c2443_init_uarts(struct s3
18556 * machine specific initialisation.
18557 */
18558
18559 -void __init s3c2443_map_io(struct map_desc *mach_desc, int mach_size)
18560 +void __init s3c2443_map_io(void)
18561 {
18562 iotable_init(s3c2443_iodesc, ARRAY_SIZE(s3c2443_iodesc));
18563 - iotable_init(mach_desc, mach_size);
18564 }
18565
18566 /* need to register class before we actually register the device, and
18567 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/debug-macro.S
18568 ===================================================================
18569 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18570 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/debug-macro.S 2009-01-02 00:01:56.000000000 +0100
18571 @@ -0,0 +1,28 @@
18572 +/* arch/arm/mach-s3c2410/include/mach/debug-macro.S
18573 + *
18574 + * This program is free software; you can redistribute it and/or modify
18575 + * it under the terms of the GNU General Public License version 2 as
18576 + * published by the Free Software Foundation.
18577 +*/
18578 +
18579 +/* pull in the relevant register and map files. */
18580 +
18581 +#include <mach/map.h>
18582 +#include <plat/regs-serial.h>
18583 +
18584 + .macro addruart, rx
18585 + mrc p15, 0, \rx, c1, c0
18586 + tst \rx, #1
18587 + ldreq \rx, = S3C24XX_PA_UART
18588 + ldrne \rx, = S3C24XX_VA_UART
18589 +#if CONFIG_DEBUG_S3C_UART != 0
18590 + add \rx, \rx, #(S3C2410_UART1_OFF * CONFIG_DEBUG_S3C_UART)
18591 +#endif
18592 + .endm
18593 +
18594 +/* include the reset of the code which will do the work, we're only
18595 + * compiling for a single cpu processor type so the default of s3c2440
18596 + * will be fine with us.
18597 + */
18598 +
18599 +#include <plat/debug-macro.S>
18600 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/io.h
18601 ===================================================================
18602 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18603 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/io.h 2009-01-02 00:01:56.000000000 +0100
18604 @@ -0,0 +1,16 @@
18605 +/* arch/arm/mach-s3c24a0/include/mach/io.h
18606 + *
18607 + * Copyright 2008 Simtec Electronics
18608 + * Ben Dooks <ben-linux@fluff.org>
18609 + *
18610 + * IO access and mapping routines for the S3C24A0
18611 + */
18612 +
18613 +#ifndef __ASM_ARM_ARCH_IO_H
18614 +#define __ASM_ARM_ARCH_IO_H
18615 +
18616 +/* No current ISA/PCI bus support. */
18617 +#define __io(a) ((void __iomem *)(a))
18618 +#define __mem_pci(a) (a)
18619 +
18620 +#endif
18621 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/irqs.h
18622 ===================================================================
18623 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18624 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/irqs.h 2009-01-02 00:01:56.000000000 +0100
18625 @@ -0,0 +1,117 @@
18626 +/* linux/arch/arm/mach-s3c24a0/include/mach/irqs.h
18627 + *
18628 + * Copyright (c) 2003-2005 Simtec Electronics
18629 + * Ben Dooks <ben@simtec.co.uk>
18630 + *
18631 + * This program is free software; you can redistribute it and/or modify
18632 + * it under the terms of the GNU General Public License version 2 as
18633 + * published by the Free Software Foundation.
18634 +*/
18635 +
18636 +
18637 +#ifndef __ASM_ARCH_24A0_IRQS_H
18638 +#define __ASM_ARCH_24A0_IRQS_H __FILE__
18639 +
18640 +#define IRQ_EINT0t2 S3C2410_IRQ(0) /* 16 */
18641 +/* for generic entry-macro.S */
18642 +#define IRQ_EINT0 IRQ_EINT0t2
18643 +
18644 +#define IRQ_EINT3t6 S3C2410_IRQ(1)
18645 +#define IRQ_EINT7t10 S3C2410_IRQ(2)
18646 +#define IRQ_EINT11t14 S3C2410_IRQ(3)
18647 +#define IRQ_EINT15t18 S3C2410_IRQ(4) /* 20 */
18648 +#define IRQ_TICK S3C2410_IRQ(5)
18649 +#define IRQ_DCTQ S3C2410_IRQ(6)
18650 +#define IRQ_MC S3C2410_IRQ(7)
18651 +#define IRQ_ME S3C2410_IRQ(8) /* 24 */
18652 +#define IRQ_KEYPAD S3C2410_IRQ(9)
18653 +#define IRQ_TIMER0 S3C2410_IRQ(10)
18654 +#define IRQ_TIMER1 S3C2410_IRQ(11)
18655 +#define IRQ_TIMER2 S3C2410_IRQ(12)
18656 +#define IRQ_TIMER3_4 S3C2410_IRQ(13)
18657 +#define IRQ_OS_TIMER IRQ_TIMER3_4
18658 +#define IRQ_LCD S3C2410_IRQ(14)
18659 +#define IRQ_CAM_C S3C2410_IRQ(15)
18660 +#define IRQ_WDT_BATFLT S3C2410_IRQ(16) /* 32 */
18661 +#define IRQ_UART0 S3C2410_IRQ(17)
18662 +#define IRQ_CAM_P S3C2410_IRQ(18)
18663 +#define IRQ_MODEM S3C2410_IRQ(19)
18664 +#define IRQ_DMA S3C2410_IRQ(20)
18665 +#define IRQ_SDI S3C2410_IRQ(21)
18666 +#define IRQ_SPI0 S3C2410_IRQ(22)
18667 +#define IRQ_UART1 S3C2410_IRQ(23)
18668 +#define IRQ_AC97_NFLASH S3C2410_IRQ(24) /* 40 */
18669 +#define IRQ_USBD S3C2410_IRQ(25)
18670 +#define IRQ_USBH S3C2410_IRQ(26)
18671 +#define IRQ_IIC S3C2410_IRQ(27)
18672 +#define IRQ_IRDA_MSTICK S3C2410_IRQ(28) /* 44 */
18673 +#define IRQ_VLX_SPI1 S3C2410_IRQ(29)
18674 +#define IRQ_RTC S3C2410_IRQ(30) /* 46 */
18675 +#define IRQ_ADC_PEN S3C2410_IRQ(31)
18676 +
18677 +/* interrupts generated from the external interrupts sources */
18678 +#define IRQ_EINT00 S3C2410_IRQ(32) /* 48 */
18679 +#define IRQ_EINT1 S3C2410_IRQ(33)
18680 +#define IRQ_EINT2 S3C2410_IRQ(34)
18681 +#define IRQ_EINT3 S3C2410_IRQ(35)
18682 +#define IRQ_EINT4 S3C2410_IRQ(36)
18683 +#define IRQ_EINT5 S3C2410_IRQ(37)
18684 +#define IRQ_EINT6 S3C2410_IRQ(38)
18685 +#define IRQ_EINT7 S3C2410_IRQ(39)
18686 +#define IRQ_EINT8 S3C2410_IRQ(40)
18687 +#define IRQ_EINT9 S3C2410_IRQ(41)
18688 +#define IRQ_EINT10 S3C2410_IRQ(42)
18689 +#define IRQ_EINT11 S3C2410_IRQ(43)
18690 +#define IRQ_EINT12 S3C2410_IRQ(44)
18691 +#define IRQ_EINT13 S3C2410_IRQ(45)
18692 +#define IRQ_EINT14 S3C2410_IRQ(46)
18693 +#define IRQ_EINT15 S3C2410_IRQ(47)
18694 +#define IRQ_EINT16 S3C2410_IRQ(48)
18695 +#define IRQ_EINT17 S3C2410_IRQ(49)
18696 +#define IRQ_EINT18 S3C2410_IRQ(50)
18697 +
18698 +#define IRQ_EINT_BIT(x) ((x) - IRQ_EINT00)
18699 +
18700 +/* SUB IRQS */
18701 +#define IRQ_S3CUART_RX0 S3C2410_IRQ(51) /* 67 */
18702 +#define IRQ_S3CUART_TX0 S3C2410_IRQ(52)
18703 +#define IRQ_S3CUART_ERR0 S3C2410_IRQ(53)
18704 +
18705 +#define IRQ_S3CUART_RX1 S3C2410_IRQ(54)
18706 +#define IRQ_S3CUART_TX1 S3C2410_IRQ(55)
18707 +#define IRQ_S3CUART_ERR1 S3C2410_IRQ(56)
18708 +
18709 +#define IRQ_S3CUART_RX2 (0x0)
18710 +#define IRQ_S3CUART_TX2 (0x0)
18711 +#define IRQ_S3CUART_ERR2 (0x0)
18712 +
18713 +
18714 +#define IRQ_IRDA S3C2410_IRQ(57)
18715 +#define IRQ_MSTICK S3C2410_IRQ(58)
18716 +#define IRQ_RESERVED0 S3C2410_IRQ(59)
18717 +#define IRQ_RESERVED1 S3C2410_IRQ(60)
18718 +#define IRQ_RESERVED2 S3C2410_IRQ(61)
18719 +#define IRQ_TIMER3 S3C2410_IRQ(62)
18720 +#define IRQ_TIMER4 S3C2410_IRQ(63)
18721 +#define IRQ_WDT S3C2410_IRQ(64)
18722 +#define IRQ_BATFLT S3C2410_IRQ(65)
18723 +#define IRQ_POST S3C2410_IRQ(66)
18724 +#define IRQ_DISP_FIFO S3C2410_IRQ(67)
18725 +#define IRQ_PENUP S3C2410_IRQ(68)
18726 +#define IRQ_PENDN S3C2410_IRQ(69)
18727 +#define IRQ_ADC S3C2410_IRQ(70)
18728 +#define IRQ_DISP_FRAME S3C2410_IRQ(71)
18729 +#define IRQ_NFLASH S3C2410_IRQ(72)
18730 +#define IRQ_AC97 S3C2410_IRQ(73)
18731 +#define IRQ_SPI1 S3C2410_IRQ(74)
18732 +#define IRQ_VLX S3C2410_IRQ(75)
18733 +#define IRQ_DMA0 S3C2410_IRQ(76)
18734 +#define IRQ_DMA1 S3C2410_IRQ(77)
18735 +#define IRQ_DMA2 S3C2410_IRQ(78)
18736 +#define IRQ_DMA3 S3C2410_IRQ(79)
18737 +
18738 +#define IRQ_TC (0x0)
18739 +
18740 +#define NR_IRQS (IRQ_DMA3+1)
18741 +
18742 +#endif /* __ASM_ARCH_24A0_IRQS_H */
18743 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/map.h
18744 ===================================================================
18745 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18746 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/map.h 2009-01-02 00:01:56.000000000 +0100
18747 @@ -0,0 +1,85 @@
18748 +/* linux/arch/arm/mach-s3c24a0/include/mach/map.h
18749 + *
18750 + * Copyright 2003,2007 Simtec Electronics
18751 + * http://armlinux.simtec.co.uk/
18752 + * Ben Dooks <ben@simtec.co.uk>
18753 + *
18754 + * S3C24A0 - Memory map definitions
18755 + *
18756 + * This program is free software; you can redistribute it and/or modify
18757 + * it under the terms of the GNU General Public License version 2 as
18758 + * published by the Free Software Foundation.
18759 +*/
18760 +
18761 +#ifndef __ASM_ARCH_24A0_MAP_H
18762 +#define __ASM_ARCH_24A0_MAP_H __FILE__
18763 +
18764 +#include <plat/map-base.h>
18765 +#include <plat/map.h>
18766 +
18767 +#define S3C24A0_PA_IO_BASE (0x40000000)
18768 +#define S3C24A0_PA_CLKPWR (0x40000000)
18769 +#define S3C24A0_PA_IRQ (0x40200000)
18770 +#define S3C24A0_PA_DMA (0x40400000)
18771 +#define S3C24A0_PA_MEMCTRL (0x40C00000)
18772 +#define S3C24A0_PA_NAND (0x40C00000)
18773 +#define S3C24A0_PA_SROM (0x40C20000)
18774 +#define S3C24A0_PA_SDRAM (0x40C40000)
18775 +#define S3C24A0_PA_BUSM (0x40CE0000)
18776 +#define S3C24A0_PA_USBHOST (0x41000000)
18777 +#define S3C24A0_PA_MODEMIF (0x41180000)
18778 +#define S3C24A0_PA_IRDA (0x41800000)
18779 +#define S3C24A0_PA_TIMER (0x44000000)
18780 +#define S3C24A0_PA_WATCHDOG (0x44100000)
18781 +#define S3C24A0_PA_RTC (0x44200000)
18782 +#define S3C24A0_PA_UART (0x44400000)
18783 +#define S3C24A0_PA_UART0 (S3C24A0_PA_UART)
18784 +#define S3C24A0_PA_UART1 (S3C24A0_PA_UART + 0x4000)
18785 +#define S3C24A0_PA_SPI (0x44500000)
18786 +#define S3C24A0_PA_IIC (0x44600000)
18787 +#define S3C24A0_PA_IIS (0x44700000)
18788 +#define S3C24A0_PA_GPIO (0x44800000)
18789 +#define S3C24A0_PA_KEYIF (0x44900000)
18790 +#define S3C24A0_PA_USBDEV (0x44A00000)
18791 +#define S3C24A0_PA_AC97 (0x45000000)
18792 +#define S3C24A0_PA_ADC (0x45800000)
18793 +#define S3C24A0_PA_SDI (0x46000000)
18794 +#define S3C24A0_PA_MS (0x46100000)
18795 +#define S3C24A0_PA_LCD (0x4A000000)
18796 +#define S3C24A0_PA_VPOST (0x4A100000)
18797 +
18798 +/* physical addresses of all the chip-select areas */
18799 +
18800 +#define S3C24A0_CS0 (0x00000000)
18801 +#define S3C24A0_CS1 (0x04000000)
18802 +#define S3C24A0_CS2 (0x08000000)
18803 +#define S3C24A0_CS3 (0x0C000000)
18804 +#define S3C24A0_CS4 (0x10000000)
18805 +#define S3C24A0_CS5 (0x40000000)
18806 +
18807 +#define S3C24A0_SDRAM_PA (S3C24A0_CS4)
18808 +
18809 +/* Use a single interface for common resources between S3C24XX cpus */
18810 +
18811 +#define S3C24XX_PA_IRQ S3C24A0_PA_IRQ
18812 +#define S3C24XX_PA_MEMCTRL S3C24A0_PA_MEMCTRL
18813 +#define S3C24XX_PA_USBHOST S3C24A0_PA_USBHOST
18814 +#define S3C24XX_PA_DMA S3C24A0_PA_DMA
18815 +#define S3C24XX_PA_CLKPWR S3C24A0_PA_CLKPWR
18816 +#define S3C24XX_PA_LCD S3C24A0_PA_LCD
18817 +#define S3C24XX_PA_UART S3C24A0_PA_UART
18818 +#define S3C24XX_PA_TIMER S3C24A0_PA_TIMER
18819 +#define S3C24XX_PA_USBDEV S3C24A0_PA_USBDEV
18820 +#define S3C24XX_PA_WATCHDOG S3C24A0_PA_WATCHDOG
18821 +#define S3C24XX_PA_IIS S3C24A0_PA_IIS
18822 +#define S3C24XX_PA_GPIO S3C24A0_PA_GPIO
18823 +#define S3C24XX_PA_RTC S3C24A0_PA_RTC
18824 +#define S3C24XX_PA_ADC S3C24A0_PA_ADC
18825 +#define S3C24XX_PA_SPI S3C24A0_PA_SPI
18826 +#define S3C24XX_PA_SDI S3C24A0_PA_SDI
18827 +#define S3C24XX_PA_NAND S3C24A0_PA_NAND
18828 +
18829 +#define S3C_PA_UART S3C24A0_PA_UART
18830 +#define S3C_PA_IIC S3C24A0_PA_IIC
18831 +
18832 +#endif /* __ASM_ARCH_24A0_MAP_H */
18833 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/memory.h
18834 ===================================================================
18835 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18836 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/memory.h 2009-01-02 00:01:56.000000000 +0100
18837 @@ -0,0 +1,19 @@
18838 +/* linux/arch/arm/mach-s3c24a0/include/mach/memory.h
18839 + * from linux/include/asm-arm/arch-rpc/memory.h
18840 + *
18841 + * Copyright (C) 1996,1997,1998 Russell King.
18842 + *
18843 + * This program is free software; you can redistribute it and/or modify
18844 + * it under the terms of the GNU General Public License version 2 as
18845 + * published by the Free Software Foundation.
18846 +*/
18847 +
18848 +#ifndef __ASM_ARCH_24A0_MEMORY_H
18849 +#define __ASM_ARCH_24A0_MEMORY_H __FILE__
18850 +
18851 +#define PHYS_OFFSET UL(0x10000000)
18852 +
18853 +#define __virt_to_bus(x) __virt_to_phys(x)
18854 +#define __bus_to_virt(x) __phys_to_virt(x)
18855 +
18856 +#endif
18857 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/regs-clock.h
18858 ===================================================================
18859 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18860 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/regs-clock.h 2009-01-02 00:01:56.000000000 +0100
18861 @@ -0,0 +1,88 @@
18862 +/* linux/arch/arm/mach-s3c24a0/include/mach/regs-clock.h
18863 + *
18864 + * Copyright (c) 2003,2004,2005,2006 Simtec Electronics <linux@simtec.co.uk>
18865 + * http://armlinux.simtec.co.uk/
18866 + *
18867 + * This program is free software; you can redistribute it and/or modify
18868 + * it under the terms of the GNU General Public License version 2 as
18869 + * published by the Free Software Foundation.
18870 + *
18871 + * S3C24A0 clock register definitions
18872 +*/
18873 +
18874 +#ifndef __ASM_ARCH_24A0_REGS_CLOCK_H
18875 +#define __ASM_ARCH_24A0_REGS_CLOCK_H __FILE__
18876 +
18877 +#define S3C24A0_MPLLCON S3C2410_CLKREG(0x10)
18878 +#define S3C24A0_UPLLCON S3C2410_CLKREG(0x14)
18879 +#define S3C24A0_CLKCON S3C2410_CLKREG(0x20)
18880 +#define S3C24A0_CLKSRC S3C2410_CLKREG(0x24)
18881 +#define S3C24A0_CLKDIVN S3C2410_CLKREG(0x28)
18882 +
18883 +/* CLKCON register bits */
18884 +
18885 +#define S3C24A0_CLKCON_VLX (1<<29)
18886 +#define S3C24A0_CLKCON_VPOST (1<<28)
18887 +#define S3C24A0_CLKCON_WDT (1<<27) /* reserved */
18888 +#define S3C24A0_CLKCON_MPEGDCTQ (1<<26)
18889 +#define S3C24A0_CLKCON_VPOSTIF (1<<25)
18890 +#define S3C24A0_CLKCON_MPEG4IF (1<<24)
18891 +#define S3C24A0_CLKCON_CAM_UPLL (1<<23)
18892 +#define S3C24A0_CLKCON_LCDC (1<<22)
18893 +#define S3C24A0_CLKCON_CAM_HCLK (1<<21)
18894 +#define S3C24A0_CLKCON_MPEG4 (1<<20)
18895 +#define S3C24A0_CLKCON_KEYPAD (1<<19)
18896 +#define S3C24A0_CLKCON_ADC (1<<18)
18897 +#define S3C24A0_CLKCON_SDI (1<<17)
18898 +#define S3C24A0_CLKCON_MS (1<<16) /* memory stick */
18899 +#define S3C24A0_CLKCON_USBD (1<<15)
18900 +#define S3C24A0_CLKCON_GPIO (1<<14)
18901 +#define S3C24A0_CLKCON_IIS (1<<13)
18902 +#define S3C24A0_CLKCON_IIC (1<<12)
18903 +#define S3C24A0_CLKCON_SPI (1<<11)
18904 +#define S3C24A0_CLKCON_UART1 (1<<10)
18905 +#define S3C24A0_CLKCON_UART0 (1<<9)
18906 +#define S3C24A0_CLKCON_PWMT (1<<8)
18907 +#define S3C24A0_CLKCON_USBH (1<<7)
18908 +#define S3C24A0_CLKCON_AC97 (1<<6)
18909 +#define S3C24A0_CLKCON_IrDA (1<<4)
18910 +#define S3C24A0_CLKCON_IDLE (1<<2)
18911 +#define S3C24A0_CLKCON_MON (1<<1)
18912 +#define S3C24A0_CLKCON_STOP (1<<0)
18913 +
18914 +/* CLKSRC register bits */
18915 +
18916 +#define S3C24A0_CLKSRC_OSC (1<<8) /* CLKSRC */
18917 +#define S3C24A0_CLKSRC_UPLL (1<<7)
18918 +#define S3C24A0_CLKSRC_MPLL (1<<5)
18919 +#define S3C24A0_CLKSRC_EXT (1<<4)
18920 +
18921 +/* Use a single interface with the common code, for s3c24xx */
18922 +
18923 +#define S3C2410_MPLLCON S3C24A0_MPLLCON
18924 +#define S3C2410_UPLLCON S3C24A0_UPLLCON
18925 +#define S3C2410_CLKCON S3C24A0_CLKCON
18926 +#define S3C2410_CLKSLOW S3C24A0_CLKSRC
18927 +#define S3C2410_CLKDIVN S3C24A0_CLKDIVN
18928 +
18929 +#define S3C2410_CLKCON_IDLE S3C24A0_CLKCON_IDLE
18930 +#define S3C2410_CLKCON_POWER S3C24A0_CLKCON_STOP
18931 +#define S3C2410_CLKCON_LCDC S3C24A0_CLKCON_LCDC
18932 +#define S3C2410_CLKCON_USBH S3C24A0_CLKCON_USBH
18933 +#define S3C2410_CLKCON_USBD S3C24A0_CLKCON_USBD
18934 +#define S3C2410_CLKCON_PWMT S3C24A0_CLKCON_PWMT
18935 +#define S3C2410_CLKCON_SDI S3C24A0_CLKCON_SDI
18936 +#define S3C2410_CLKCON_UART0 S3C24A0_CLKCON_UART0
18937 +#define S3C2410_CLKCON_UART1 S3C24A0_CLKCON_UART1
18938 +#define S3C2410_CLKCON_GPIO S3C24A0_CLKCON_GPIO
18939 +#define S3C2410_CLKCON_ADC S3C24A0_CLKCON_ADC
18940 +#define S3C2410_CLKCON_IIC S3C24A0_CLKCON_IIC
18941 +#define S3C2410_CLKCON_IIS S3C24A0_CLKCON_IIS
18942 +#define S3C2410_CLKCON_SPI S3C24A0_CLKCON_SPI
18943 +
18944 +#define S3C2410_CLKSLOW_UCLK_OFF S3C24A0_CLKSRC_UPLL
18945 +#define S3C2410_CLKSLOW_MPLL_OFF S3C24A0_CLKSRC_MPLL
18946 +#define S3C2410_CLKSLOW_SLOW (0xFF)
18947 +#define S3C2410_CLKSLOW_GET_SLOWVAL(x) (0x1)
18948 +
18949 +#endif /* __ASM_ARCH_24A0_REGS_CLOCK_H */
18950 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/regs-irq.h
18951 ===================================================================
18952 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18953 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/regs-irq.h 2009-01-02 00:01:56.000000000 +0100
18954 @@ -0,0 +1,25 @@
18955 +/* linux/arch/arm/mach-s3c24a0/include/mach/regs-irq.h
18956 + *
18957 + * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
18958 + * http://www.simtec.co.uk/products/SWLINUX/
18959 + *
18960 + * This program is free software; you can redistribute it and/or modify
18961 + * it under the terms of the GNU General Public License version 2 as
18962 + * published by the Free Software Foundation.
18963 +*/
18964 +
18965 +
18966 +#ifndef ___ASM_ARCH_24A0_REGS_IRQ_H
18967 +#define ___ASM_ARCH_24A0_REGS_IRQ_H __FILE__
18968 +
18969 +
18970 +#define S3C2410_EINTMASK S3C2410_EINTREG(0x034)
18971 +#define S3C2410_EINTPEND S3C2410_EINTREG(0X038)
18972 +
18973 +#define S3C24XX_EINTMASK S3C24XX_EINTREG(0x034)
18974 +#define S3C24XX_EINTPEND S3C24XX_EINTREG(0X038)
18975 +
18976 +#endif /* __ASM_ARCH_24A0_REGS_IRQ_H */
18977 +
18978 +
18979 +
18980 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/system.h
18981 ===================================================================
18982 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18983 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/system.h 2009-01-02 00:01:56.000000000 +0100
18984 @@ -0,0 +1,25 @@
18985 +/* linux/arch/arm/mach-s3c24a0/include/mach/system.h
18986 + *
18987 + * Copyright 2008 Simtec Electronics
18988 + * Ben Dooks <ben@simtec.co.uk>
18989 + *
18990 + * S3C24A0 - System function defines and includes
18991 + *
18992 + * This program is free software; you can redistribute it and/or modify
18993 + * it under the terms of the GNU General Public License version 2 as
18994 + * published by the Free Software Foundation.
18995 +*/
18996 +
18997 +#include <mach/hardware.h>
18998 +#include <asm/io.h>
18999 +
19000 +#include <mach/map.h>
19001 +
19002 +static void arch_idle(void)
19003 +{
19004 + /* currently no specific idle support. */
19005 +}
19006 +
19007 +void (*s3c24xx_reset_hook)(void);
19008 +
19009 +#include <asm/plat-s3c24xx/system-reset.h>
19010 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/tick.h
19011 ===================================================================
19012 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19013 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/tick.h 2009-01-02 00:01:56.000000000 +0100
19014 @@ -0,0 +1,15 @@
19015 +/* linux/arch/arm/mach-s3c24a0/include/mach/tick.h
19016 + *
19017 + * Copyright 2008 Simtec Electronics
19018 + * Ben Dooks <ben@simtec.co.uk>
19019 + * http://armlinux.simtec.co.uk/
19020 + *
19021 + * S3C24A0 - timer tick support
19022 + */
19023 +
19024 +#define SUBSRC_TIMER4 (1 << (IRQ_TIMER4 - IRQ_S3CUART_RX0))
19025 +
19026 +static inline int s3c24xx_ostimer_pending(void)
19027 +{
19028 + return __raw_readl(S3C2410_SUBSRCPND) & SUBSRC_TIMER4;
19029 +}
19030 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/timex.h
19031 ===================================================================
19032 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19033 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/timex.h 2009-01-02 00:01:56.000000000 +0100
19034 @@ -0,0 +1,18 @@
19035 +/* linux/arch/arm/mach-s3c24a0/include/mach/timex.h
19036 + *
19037 + * Copyright (c) 2008 Simtec Electronics
19038 + * Ben Dooks <ben@simtec.co.uk>
19039 + *
19040 + * S3C2410 - time parameters
19041 + *
19042 + * This program is free software; you can redistribute it and/or modify
19043 + * it under the terms of the GNU General Public License version 2 as
19044 + * published by the Free Software Foundation.
19045 +*/
19046 +
19047 +#ifndef __ASM_ARCH_TIMEX_H
19048 +#define __ASM_ARCH_TIMEX_H
19049 +
19050 +#define CLOCK_TICK_RATE 12000000
19051 +
19052 +#endif /* __ASM_ARCH_TIMEX_H */
19053 Index: linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/vmalloc.h
19054 ===================================================================
19055 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19056 +++ linux-2.6.28/arch/arm/mach-s3c24a0/include/mach/vmalloc.h 2009-01-02 00:01:56.000000000 +0100
19057 @@ -0,0 +1,17 @@
19058 +/* linux/include/asm-arm/arch-s3c24ao/vmalloc.h
19059 + *
19060 + * Copyright 2008 Simtec Electronics <linux@simtec.co.uk>
19061 +
19062 + * This program is free software; you can redistribute it and/or modify
19063 + * it under the terms of the GNU General Public License version 2 as
19064 + * published by the Free Software Foundation.
19065 + *
19066 + * S3C24A0 vmalloc definition
19067 +*/
19068 +
19069 +#ifndef __ASM_ARCH_VMALLOC_H
19070 +#define __ASM_ARCH_VMALLOC_H
19071 +
19072 +#define VMALLOC_END (0xE0000000)
19073 +
19074 +#endif /* __ASM_ARCH_VMALLOC_H */
19075 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/debug-macro.S
19076 ===================================================================
19077 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19078 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/debug-macro.S 2009-01-02 00:01:56.000000000 +0100
19079 @@ -0,0 +1,39 @@
19080 +/* arch/arm/mach-s3c6400/include/mach/debug-macro.S
19081 + *
19082 + * Copyright 2008 Openmoko, Inc.
19083 + * Copyright 2008 Simtec Electronics
19084 + * http://armlinux.simtec.co.uk/
19085 + * Ben Dooks <ben@simtec.co.uk>
19086 + *
19087 + * This program is free software; you can redistribute it and/or modify
19088 + * it under the terms of the GNU General Public License version 2 as
19089 + * published by the Free Software Foundation.
19090 +*/
19091 +
19092 +/* pull in the relevant register and map files. */
19093 +
19094 +#include <mach/map.h>
19095 +#include <plat/regs-serial.h>
19096 +
19097 + /* note, for the boot process to work we have to keep the UART
19098 + * virtual address aligned to an 1MiB boundary for the L1
19099 + * mapping the head code makes. We keep the UART virtual address
19100 + * aligned and add in the offset when we load the value here.
19101 + */
19102 +
19103 + .macro addruart, rx
19104 + mrc p15, 0, \rx, c1, c0
19105 + tst \rx, #1
19106 + ldreq \rx, = S3C_PA_UART
19107 + ldrne \rx, = (S3C_VA_UART + S3C_PA_UART & 0xfffff)
19108 +#if CONFIG_DEBUG_S3C_UART != 0
19109 + add \rx, \rx, #(0x400 * CONFIG_DEBUG_S3C_UART)
19110 +#endif
19111 + .endm
19112 +
19113 +/* include the reset of the code which will do the work, we're only
19114 + * compiling for a single cpu processor type so the default of s3c2440
19115 + * will be fine with us.
19116 + */
19117 +
19118 +#include <plat/debug-macro.S>
19119 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/dma.h
19120 ===================================================================
19121 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19122 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/dma.h 2009-01-02 00:01:56.000000000 +0100
19123 @@ -0,0 +1,16 @@
19124 +/* linux/arch/arm/mach-s3c6400/include/mach/dma.h
19125 + *
19126 + * Copyright 2008 Openmoko, Inc.
19127 + * Copyright 2008 Simtec Electronics
19128 + * Ben Dooks <ben@simtec.co.uk>
19129 + * http://armlinux.simtec.co.uk/
19130 + *
19131 + * S3C6400 - DMA support
19132 + */
19133 +
19134 +#ifndef __ASM_ARCH_DMA_H
19135 +#define __ASM_ARCH_DMA_H __FILE__
19136 +
19137 +/* currently nothing here, placeholder */
19138 +
19139 +#endif /* __ASM_ARCH_IRQ_H */
19140 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/entry-macro.S
19141 ===================================================================
19142 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19143 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/entry-macro.S 2009-01-02 00:01:56.000000000 +0100
19144 @@ -0,0 +1,44 @@
19145 +/* arch/arm/mach-s3c6400/include/mach/entry-macro.S
19146 + *
19147 + * Copyright 2008 Openmoko, Inc.
19148 + * Copyright 2008 Simtec Electronics
19149 + * http://armlinux.simtec.co.uk/
19150 + * Ben Dooks <ben@simtec.co.uk>
19151 + *
19152 + * Low-level IRQ helper macros for the Samsung S3C64XX series
19153 + *
19154 + * This file is licensed under the terms of the GNU General Public
19155 + * License version 2. This program is licensed "as is" without any
19156 + * warranty of any kind, whether express or implied.
19157 +*/
19158 +
19159 +#include <asm/hardware/vic.h>
19160 +#include <mach/map.h>
19161 +#include <plat/irqs.h>
19162 +
19163 + .macro disable_fiq
19164 + .endm
19165 +
19166 + .macro get_irqnr_preamble, base, tmp
19167 + ldr \base, =S3C_VA_VIC0
19168 + .endm
19169 +
19170 + .macro arch_ret_to_user, tmp1, tmp2
19171 + .endm
19172 +
19173 + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
19174 +
19175 + @ check the vic0
19176 + mov \irqnr, # S3C_IRQ_OFFSET + 31
19177 + ldr \irqstat, [ \base, # VIC_IRQ_STATUS ]
19178 + teq \irqstat, #0
19179 +
19180 + @ otherwise try vic1
19181 + addeq \tmp, \base, #(S3C_VA_VIC1 - S3C_VA_VIC0)
19182 + addeq \irqnr, \irqnr, #32
19183 + ldreq \irqstat, [ \tmp, # VIC_IRQ_STATUS ]
19184 + teqeq \irqstat, #0
19185 +
19186 + clzne \irqstat, \irqstat
19187 + subne \irqnr, \irqnr, \irqstat
19188 + .endm
19189 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/gpio-core.h
19190 ===================================================================
19191 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19192 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/gpio-core.h 2009-01-02 00:01:56.000000000 +0100
19193 @@ -0,0 +1,21 @@
19194 +/* arch/arm/mach-s3c6400/include/mach/gpio-core.h
19195 + *
19196 + * Copyright 2008 Openmoko, Inc.
19197 + * Copyright 2008 Simtec Electronics
19198 + * Ben Dooks <ben@simtec.co.uk>
19199 + * http://armlinux.simtec.co.uk/
19200 + *
19201 + * S3C64XX - GPIO core support
19202 + *
19203 + * This program is free software; you can redistribute it and/or modify
19204 + * it under the terms of the GNU General Public License version 2 as
19205 + * published by the Free Software Foundation.
19206 +*/
19207 +
19208 +#ifndef __ASM_ARCH_GPIO_CORE_H
19209 +#define __ASM_ARCH_GPIO_CORE_H __FILE__
19210 +
19211 +/* currently we just include the platform support */
19212 +#include <plat/gpio-core.h>
19213 +
19214 +#endif /* __ASM_ARCH_GPIO_CORE_H */
19215 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/gpio.h
19216 ===================================================================
19217 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19218 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/gpio.h 2009-01-02 00:01:56.000000000 +0100
19219 @@ -0,0 +1,96 @@
19220 +/* arch/arm/mach-s3c6400/include/mach/gpio.h
19221 + *
19222 + * Copyright 2008 Openmoko, Inc.
19223 + * Copyright 2008 Simtec Electronics
19224 + * http://armlinux.simtec.co.uk/
19225 + * Ben Dooks <ben@simtec.co.uk>
19226 + *
19227 + * S3C6400 - GPIO lib support
19228 + *
19229 + * This program is free software; you can redistribute it and/or modify
19230 + * it under the terms of the GNU General Public License version 2 as
19231 + * published by the Free Software Foundation.
19232 +*/
19233 +
19234 +#define gpio_get_value __gpio_get_value
19235 +#define gpio_set_value __gpio_set_value
19236 +#define gpio_cansleep __gpio_cansleep
19237 +#define gpio_to_irq __gpio_to_irq
19238 +
19239 +/* GPIO bank sizes */
19240 +#define S3C64XX_GPIO_A_NR (8)
19241 +#define S3C64XX_GPIO_B_NR (7)
19242 +#define S3C64XX_GPIO_C_NR (8)
19243 +#define S3C64XX_GPIO_D_NR (5)
19244 +#define S3C64XX_GPIO_E_NR (5)
19245 +#define S3C64XX_GPIO_F_NR (16)
19246 +#define S3C64XX_GPIO_G_NR (7)
19247 +#define S3C64XX_GPIO_H_NR (10)
19248 +#define S3C64XX_GPIO_I_NR (16)
19249 +#define S3C64XX_GPIO_J_NR (12)
19250 +#define S3C64XX_GPIO_K_NR (16)
19251 +#define S3C64XX_GPIO_L_NR (15)
19252 +#define S3C64XX_GPIO_M_NR (6)
19253 +#define S3C64XX_GPIO_N_NR (16)
19254 +#define S3C64XX_GPIO_O_NR (16)
19255 +#define S3C64XX_GPIO_P_NR (15)
19256 +#define S3C64XX_GPIO_Q_NR (9)
19257 +
19258 +/* GPIO bank numbes */
19259 +
19260 +/* CONFIG_S3C_GPIO_SPACE allows the user to select extra
19261 + * space for debugging purposes so that any accidental
19262 + * change from one gpio bank to another can be caught.
19263 +*/
19264 +
19265 +#define S3C64XX_GPIO_NEXT(__gpio) \
19266 + ((__gpio##_START) + (__gpio##_NR) + CONFIG_S3C_GPIO_SPACE + 1)
19267 +
19268 +enum s3c_gpio_number {
19269 + S3C64XX_GPIO_A_START = 0,
19270 + S3C64XX_GPIO_B_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_A),
19271 + S3C64XX_GPIO_C_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_B),
19272 + S3C64XX_GPIO_D_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_C),
19273 + S3C64XX_GPIO_E_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_D),
19274 + S3C64XX_GPIO_F_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_E),
19275 + S3C64XX_GPIO_G_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_F),
19276 + S3C64XX_GPIO_H_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_G),
19277 + S3C64XX_GPIO_I_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_H),
19278 + S3C64XX_GPIO_J_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_I),
19279 + S3C64XX_GPIO_K_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_J),
19280 + S3C64XX_GPIO_L_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_K),
19281 + S3C64XX_GPIO_M_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_L),
19282 + S3C64XX_GPIO_N_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_M),
19283 + S3C64XX_GPIO_O_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_N),
19284 + S3C64XX_GPIO_P_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_O),
19285 + S3C64XX_GPIO_Q_START = S3C64XX_GPIO_NEXT(S3C64XX_GPIO_P),
19286 +};
19287 +
19288 +/* S3C64XX GPIO number definitions. */
19289 +
19290 +#define S3C64XX_GPA(_nr) (S3C64XX_GPIO_A_START + (_nr))
19291 +#define S3C64XX_GPB(_nr) (S3C64XX_GPIO_B_START + (_nr))
19292 +#define S3C64XX_GPC(_nr) (S3C64XX_GPIO_C_START + (_nr))
19293 +#define S3C64XX_GPD(_nr) (S3C64XX_GPIO_D_START + (_nr))
19294 +#define S3C64XX_GPE(_nr) (S3C64XX_GPIO_E_START + (_nr))
19295 +#define S3C64XX_GPF(_nr) (S3C64XX_GPIO_F_START + (_nr))
19296 +#define S3C64XX_GPG(_nr) (S3C64XX_GPIO_G_START + (_nr))
19297 +#define S3C64XX_GPH(_nr) (S3C64XX_GPIO_H_START + (_nr))
19298 +#define S3C64XX_GPI(_nr) (S3C64XX_GPIO_I_START + (_nr))
19299 +#define S3C64XX_GPJ(_nr) (S3C64XX_GPIO_J_START + (_nr))
19300 +#define S3C64XX_GPK(_nr) (S3C64XX_GPIO_K_START + (_nr))
19301 +#define S3C64XX_GPL(_nr) (S3C64XX_GPIO_L_START + (_nr))
19302 +#define S3C64XX_GPM(_nr) (S3C64XX_GPIO_M_START + (_nr))
19303 +#define S3C64XX_GPN(_nr) (S3C64XX_GPIO_N_START + (_nr))
19304 +#define S3C64XX_GPO(_nr) (S3C64XX_GPIO_O_START + (_nr))
19305 +#define S3C64XX_GPP(_nr) (S3C64XX_GPIO_P_START + (_nr))
19306 +#define S3C64XX_GPQ(_nr) (S3C64XX_GPIO_Q_START + (_nr))
19307 +
19308 +/* the end of the S3C64XX specific gpios */
19309 +#define S3C64XX_GPIO_END (S3C64XX_GPQ(S3C64XX_GPIO_Q_NR) + 1)
19310 +#define S3C_GPIO_END S3C64XX_GPIO_END
19311 +
19312 +/* define the number of gpios we need to the one after the GPQ() range */
19313 +#define ARCH_NR_GPIOS (S3C64XX_GPQ(S3C64XX_GPIO_Q_NR) + 1)
19314 +
19315 +#include <asm-generic/gpio.h>
19316 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/hardware.h
19317 ===================================================================
19318 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19319 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/hardware.h 2009-01-02 00:01:56.000000000 +0100
19320 @@ -0,0 +1,16 @@
19321 +/* linux/arch/arm/mach-s3c6400/include/mach/hardware.h
19322 + *
19323 + * Copyright 2008 Openmoko, Inc.
19324 + * Copyright 2008 Simtec Electronics
19325 + * Ben Dooks <ben@simtec.co.uk>
19326 + * http://armlinux.simtec.co.uk/
19327 + *
19328 + * S3C6400 - Hardware support
19329 + */
19330 +
19331 +#ifndef __ASM_ARCH_HARDWARE_H
19332 +#define __ASM_ARCH_HARDWARE_H __FILE__
19333 +
19334 +/* currently nothing here, placeholder */
19335 +
19336 +#endif /* __ASM_ARCH_IRQ_H */
19337 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/irqs.h
19338 ===================================================================
19339 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19340 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/irqs.h 2009-01-02 00:01:56.000000000 +0100
19341 @@ -0,0 +1,20 @@
19342 +/* linux/arch/arm/mach-s3c6400/include/mach/irqs.h
19343 + *
19344 + * Copyright 2008 Openmoko, Inc.
19345 + * Copyright 2008 Simtec Electronics
19346 + * Ben Dooks <ben@simtec.co.uk>
19347 + * http://armlinux.simtec.co.uk/
19348 + *
19349 + * S3C6400 - IRQ definitions
19350 + */
19351 +
19352 +#ifndef __ASM_ARCH_IRQS_H
19353 +#define __ASM_ARCH_IRQS_H __FILE__
19354 +
19355 +#ifndef __ASM_ARM_IRQ_H
19356 +#error "Do not include this directly, instead #include <asm/irq.h>"
19357 +#endif
19358 +
19359 +#include <plat/irqs.h>
19360 +
19361 +#endif /* __ASM_ARCH_IRQ_H */
19362 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/map.h
19363 ===================================================================
19364 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19365 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/map.h 2009-01-02 00:01:56.000000000 +0100
19366 @@ -0,0 +1,71 @@
19367 +/* linux/arch/arm/mach-s3c6400/include/mach/map.h
19368 + *
19369 + * Copyright 2008 Openmoko, Inc.
19370 + * Copyright 2008 Simtec Electronics
19371 + * http://armlinux.simtec.co.uk/
19372 + * Ben Dooks <ben@simtec.co.uk>
19373 + *
19374 + * S3C64XX - Memory map definitions
19375 + *
19376 + * This program is free software; you can redistribute it and/or modify
19377 + * it under the terms of the GNU General Public License version 2 as
19378 + * published by the Free Software Foundation.
19379 +*/
19380 +
19381 +#ifndef __ASM_ARCH_MAP_H
19382 +#define __ASM_ARCH_MAP_H __FILE__
19383 +
19384 +#include <plat/map-base.h>
19385 +
19386 +/* HSMMC units */
19387 +#define S3C64XX_PA_HSMMC(x) (0x7C200000 + ((x) * 0x100000))
19388 +#define S3C64XX_PA_HSMMC0 S3C64XX_PA_HSMMC(0)
19389 +#define S3C64XX_PA_HSMMC1 S3C64XX_PA_HSMMC(1)
19390 +#define S3C64XX_PA_HSMMC2 S3C64XX_PA_HSMMC(2)
19391 +
19392 +#define S3C_PA_UART (0x7F005000)
19393 +#define S3C_PA_UART0 (S3C_PA_UART + 0x00)
19394 +#define S3C_PA_UART1 (S3C_PA_UART + 0x400)
19395 +#define S3C_PA_UART2 (S3C_PA_UART + 0x800)
19396 +#define S3C_PA_UART3 (S3C_PA_UART + 0xC00)
19397 +#define S3C_UART_OFFSET (0x400)
19398 +
19399 +/* See notes on UART VA mapping in debug-macro.S */
19400 +#define S3C_VA_UARTx(x) (S3C_VA_UART + (S3C_PA_UART & 0xfffff) + ((x) * S3C_UART_OFFSET))
19401 +
19402 +#define S3C_VA_UART0 S3C_VA_UARTx(0)
19403 +#define S3C_VA_UART1 S3C_VA_UARTx(1)
19404 +#define S3C_VA_UART2 S3C_VA_UARTx(2)
19405 +#define S3C_VA_UART3 S3C_VA_UARTx(3)
19406 +
19407 +#define S3C64XX_PA_FB (0x77100000)
19408 +#define S3C64XX_PA_SYSCON (0x7E00F000)
19409 +#define S3C64XX_PA_TIMER (0x7F006000)
19410 +#define S3C64XX_PA_IIC0 (0x7F004000)
19411 +#define S3C64XX_PA_IIC1 (0x7F00F000)
19412 +
19413 +#define S3C64XX_PA_GPIO (0x7F008000)
19414 +#define S3C64XX_VA_GPIO S3C_ADDR(0x00500000)
19415 +#define S3C64XX_SZ_GPIO SZ_4K
19416 +
19417 +#define S3C64XX_PA_SDRAM (0x50000000)
19418 +#define S3C64XX_PA_VIC0 (0x71200000)
19419 +#define S3C64XX_PA_VIC1 (0x71300000)
19420 +
19421 +#define S3C64XX_PA_MODEM (0x74108000)
19422 +#define S3C64XX_VA_MODEM S3C_ADDR(0x00600000)
19423 +
19424 +/* place VICs close together */
19425 +#define S3C_VA_VIC0 (S3C_VA_IRQ + 0x00)
19426 +#define S3C_VA_VIC1 (S3C_VA_IRQ + 0x10000)
19427 +
19428 +/* compatibiltiy defines. */
19429 +#define S3C_PA_TIMER S3C64XX_PA_TIMER
19430 +#define S3C_PA_HSMMC0 S3C64XX_PA_HSMMC0
19431 +#define S3C_PA_HSMMC1 S3C64XX_PA_HSMMC1
19432 +#define S3C_PA_HSMMC2 S3C64XX_PA_HSMMC2
19433 +#define S3C_PA_IIC S3C64XX_PA_IIC0
19434 +#define S3C_PA_IIC1 S3C64XX_PA_IIC1
19435 +#define S3C_PA_FB S3C64XX_PA_FB
19436 +
19437 +#endif /* __ASM_ARCH_6400_MAP_H */
19438 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/memory.h
19439 ===================================================================
19440 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19441 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/memory.h 2009-01-02 00:01:56.000000000 +0100
19442 @@ -0,0 +1,21 @@
19443 +/* arch/arm/mach-s3c6400/include/mach/memory.h
19444 + *
19445 + * Copyright 2008 Openmoko, Inc.
19446 + * Copyright 2008 Simtec Electronics
19447 + * Ben Dooks <ben@simtec.co.uk>
19448 + * http://armlinux.simtec.co.uk/
19449 + *
19450 + * This program is free software; you can redistribute it and/or modify
19451 + * it under the terms of the GNU General Public License version 2 as
19452 + * published by the Free Software Foundation.
19453 +*/
19454 +
19455 +#ifndef __ASM_ARCH_MEMORY_H
19456 +#define __ASM_ARCH_MEMORY_H
19457 +
19458 +#define PHYS_OFFSET UL(0x50000000)
19459 +
19460 +#define __virt_to_bus(x) __virt_to_phys(x)
19461 +#define __bus_to_virt(x) __phys_to_virt(x)
19462 +
19463 +#endif
19464 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/pwm-clock.h
19465 ===================================================================
19466 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19467 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/pwm-clock.h 2009-01-02 00:01:56.000000000 +0100
19468 @@ -0,0 +1,56 @@
19469 +/* linux/arch/arm/mach-s3c6400/include/mach/pwm-clock.h
19470 + *
19471 + * Copyright 2008 Openmoko, Inc.
19472 + * Copyright 2008 Simtec Electronics
19473 + * Ben Dooks <ben@simtec.co.uk>
19474 + * http://armlinux.simtec.co.uk/
19475 + *
19476 + * S3C64xx - pwm clock and timer support
19477 + */
19478 +
19479 +/**
19480 + * pwm_cfg_src_is_tclk() - return whether the given mux config is a tclk
19481 + * @tcfg: The timer TCFG1 register bits shifted down to 0.
19482 + *
19483 + * Return true if the given configuration from TCFG1 is a TCLK instead
19484 + * any of the TDIV clocks.
19485 + */
19486 +static inline int pwm_cfg_src_is_tclk(unsigned long tcfg)
19487 +{
19488 + return tcfg >= S3C64XX_TCFG1_MUX_TCLK;
19489 +}
19490 +
19491 +/**
19492 + * tcfg_to_divisor() - convert tcfg1 setting to a divisor
19493 + * @tcfg1: The tcfg1 setting, shifted down.
19494 + *
19495 + * Get the divisor value for the given tcfg1 setting. We assume the
19496 + * caller has already checked to see if this is not a TCLK source.
19497 + */
19498 +static inline unsigned long tcfg_to_divisor(unsigned long tcfg1)
19499 +{
19500 + return 1 << tcfg1;
19501 +}
19502 +
19503 +/**
19504 + * pwm_tdiv_has_div1() - does the tdiv setting have a /1
19505 + *
19506 + * Return true if we have a /1 in the tdiv setting.
19507 + */
19508 +static inline unsigned int pwm_tdiv_has_div1(void)
19509 +{
19510 + return 1;
19511 +}
19512 +
19513 +/**
19514 + * pwm_tdiv_div_bits() - calculate TCFG1 divisor value.
19515 + * @div: The divisor to calculate the bit information for.
19516 + *
19517 + * Turn a divisor into the necessary bit field for TCFG1.
19518 + */
19519 +static inline unsigned long pwm_tdiv_div_bits(unsigned int div)
19520 +{
19521 + return ilog2(div);
19522 +}
19523 +
19524 +#define S3C_TCFG1_MUX_TCLK S3C64XX_TCFG1_MUX_TCLK
19525 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/regs-clock.h
19526 ===================================================================
19527 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19528 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/regs-clock.h 2009-01-02 00:01:56.000000000 +0100
19529 @@ -0,0 +1,16 @@
19530 +/* linux/arch/arm/mach-s3c6400/include/mach/regs-clock.h
19531 + *
19532 + * Copyright 2008 Openmoko, Inc.
19533 + * Copyright 2008 Simtec Electronics
19534 + * http://armlinux.simtec.co.uk/
19535 + * Ben Dooks <ben@simtec.co.uk>
19536 + *
19537 + * S3C64XX - clock register compatibility with s3c24xx
19538 + *
19539 + * This program is free software; you can redistribute it and/or modify
19540 + * it under the terms of the GNU General Public License version 2 as
19541 + * published by the Free Software Foundation.
19542 +*/
19543 +
19544 +#include <plat/regs-clock.h>
19545 +
19546 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/regs-fb.h
19547 ===================================================================
19548 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19549 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/regs-fb.h 2009-01-02 00:01:56.000000000 +0100
19550 @@ -0,0 +1,259 @@
19551 +/* arch/arm/mach-s3c6400/include/mach/regs-fb.h
19552 + *
19553 + * Copyright 2008 Openmoko, Inc.
19554 + * Copyright 2008 Simtec Electronics
19555 + * http://armlinux.simtec.co.uk/
19556 + * Ben Dooks <ben@simtec.co.uk>
19557 + *
19558 + * S3C64XX - new-style framebuffer register definitions
19559 + *
19560 + * This is the register set for the new style framebuffer interface
19561 + * found from the S3C2443 onwards and specifically the S3C64XX series
19562 + * S3C6400 and S3C6410.
19563 + *
19564 + * The file contains the cpu specific items which change between whichever
19565 + * architecture is selected. See <plat/regs-fb.h> for the core definitions
19566 + * that are the same.
19567 + *
19568 + * This program is free software; you can redistribute it and/or modify
19569 + * it under the terms of the GNU General Public License version 2 as
19570 + * published by the Free Software Foundation.
19571 +*/
19572 +
19573 +/* include the core definitions here, in case we really do need to
19574 + * override them at a later date.
19575 +*/
19576 +
19577 +#include <plat/regs-fb.h>
19578 +
19579 +#define S3C_FB_MAX_WIN (5) /* number of hardware windows available. */
19580 +#define VIDCON1_FSTATUS_EVEN (1 << 15)
19581 +
19582 +/* Video timing controls */
19583 +#define VIDTCON0 (0x10)
19584 +#define VIDTCON1 (0x14)
19585 +#define VIDTCON2 (0x18)
19586 +
19587 +/* Window position controls */
19588 +
19589 +#define WINCON(_win) (0x20 + ((_win) * 4))
19590 +
19591 +/* OSD1 and OSD4 do not have register D */
19592 +
19593 +#define VIDOSD_A(_win) (0x40 + ((_win) * 16))
19594 +#define VIDOSD_B(_win) (0x44 + ((_win) * 16))
19595 +#define VIDOSD_C(_win) (0x48 + ((_win) * 16))
19596 +#define VIDOSD_D(_win) (0x4C + ((_win) * 16))
19597 +
19598 +/* Video buffer addresses */
19599 +
19600 +#define VIDW_BUF_START(_buff) (0xA0 + ((_buff) * 8))
19601 +#define VIDW_BUF_START1(_buff) (0xA4 + ((_buff) * 8))
19602 +#define VIDW_BUF_END(_buff) (0xD0 + ((_buff) * 8))
19603 +#define VIDW_BUF_END1(_buff) (0xD4 + ((_buff) * 8))
19604 +#define VIDW_BUF_SIZE(_buff) (0x100 + ((_buff) * 4))
19605 +
19606 +#define VIDINTCON0 (0x130)
19607 +
19608 +#define WxKEYCONy(_win, _con) ((0x140 + ((_win) * 8)) + ((_con) * 4))
19609 +
19610 +/* WINCONx */
19611 +
19612 +#define WINCONx_CSCWIDTH_MASK (0x3 << 26)
19613 +#define WINCONx_CSCWIDTH_SHIFT (26)
19614 +#define WINCONx_CSCWIDTH_WIDE (0x0 << 26)
19615 +#define WINCONx_CSCWIDTH_NARROW (0x3 << 26)
19616 +
19617 +#define WINCONx_ENLOCAL (1 << 22)
19618 +#define WINCONx_BUFSTATUS (1 << 21)
19619 +#define WINCONx_BUFSEL (1 << 20)
19620 +#define WINCONx_BUFAUTOEN (1 << 19)
19621 +#define WINCONx_YCbCr (1 << 13)
19622 +
19623 +#define WINCON1_LOCALSEL_CAMIF (1 << 23)
19624 +
19625 +#define WINCON2_LOCALSEL_CAMIF (1 << 23)
19626 +#define WINCON2_BLD_PIX (1 << 6)
19627 +
19628 +#define WINCON2_ALPHA_SEL (1 << 1)
19629 +#define WINCON2_BPPMODE_MASK (0xf << 2)
19630 +#define WINCON2_BPPMODE_SHIFT (2)
19631 +#define WINCON2_BPPMODE_1BPP (0x0 << 2)
19632 +#define WINCON2_BPPMODE_2BPP (0x1 << 2)
19633 +#define WINCON2_BPPMODE_4BPP (0x2 << 2)
19634 +#define WINCON2_BPPMODE_8BPP_1232 (0x4 << 2)
19635 +#define WINCON2_BPPMODE_16BPP_565 (0x5 << 2)
19636 +#define WINCON2_BPPMODE_16BPP_A1555 (0x6 << 2)
19637 +#define WINCON2_BPPMODE_16BPP_I1555 (0x7 << 2)
19638 +#define WINCON2_BPPMODE_18BPP_666 (0x8 << 2)
19639 +#define WINCON2_BPPMODE_18BPP_A1665 (0x9 << 2)
19640 +#define WINCON2_BPPMODE_19BPP_A1666 (0xa << 2)
19641 +#define WINCON2_BPPMODE_24BPP_888 (0xb << 2)
19642 +#define WINCON2_BPPMODE_24BPP_A1887 (0xc << 2)
19643 +#define WINCON2_BPPMODE_25BPP_A1888 (0xd << 2)
19644 +#define WINCON2_BPPMODE_28BPP_A4888 (0xd << 2)
19645 +
19646 +#define WINCON3_BLD_PIX (1 << 6)
19647 +
19648 +#define WINCON3_ALPHA_SEL (1 << 1)
19649 +#define WINCON3_BPPMODE_MASK (0xf << 2)
19650 +#define WINCON3_BPPMODE_SHIFT (2)
19651 +#define WINCON3_BPPMODE_1BPP (0x0 << 2)
19652 +#define WINCON3_BPPMODE_2BPP (0x1 << 2)
19653 +#define WINCON3_BPPMODE_4BPP (0x2 << 2)
19654 +#define WINCON3_BPPMODE_16BPP_565 (0x5 << 2)
19655 +#define WINCON3_BPPMODE_16BPP_A1555 (0x6 << 2)
19656 +#define WINCON3_BPPMODE_16BPP_I1555 (0x7 << 2)
19657 +#define WINCON3_BPPMODE_18BPP_666 (0x8 << 2)
19658 +#define WINCON3_BPPMODE_18BPP_A1665 (0x9 << 2)
19659 +#define WINCON3_BPPMODE_19BPP_A1666 (0xa << 2)
19660 +#define WINCON3_BPPMODE_24BPP_888 (0xb << 2)
19661 +#define WINCON3_BPPMODE_24BPP_A1887 (0xc << 2)
19662 +#define WINCON3_BPPMODE_25BPP_A1888 (0xd << 2)
19663 +#define WINCON3_BPPMODE_28BPP_A4888 (0xd << 2)
19664 +
19665 +#define VIDINTCON0_FIFIOSEL_WINDOW2 (0x10 << 5)
19666 +#define VIDINTCON0_FIFIOSEL_WINDOW3 (0x20 << 5)
19667 +#define VIDINTCON0_FIFIOSEL_WINDOW4 (0x40 << 5)
19668 +
19669 +#define DITHMODE (0x170)
19670 +#define WINxMAP(_win) (0x180 + ((_win) * 4))
19671 +
19672 +
19673 +#define DITHMODE_R_POS_MASK (0x3 << 5)
19674 +#define DITHMODE_R_POS_SHIFT (5)
19675 +#define DITHMODE_R_POS_8BIT (0x0 << 5)
19676 +#define DITHMODE_R_POS_6BIT (0x1 << 5)
19677 +#define DITHMODE_R_POS_5BIT (0x2 << 5)
19678 +
19679 +#define DITHMODE_G_POS_MASK (0x3 << 3)
19680 +#define DITHMODE_G_POS_SHIFT (3)
19681 +#define DITHMODE_G_POS_8BIT (0x0 << 3)
19682 +#define DITHMODE_G_POS_6BIT (0x1 << 3)
19683 +#define DITHMODE_G_POS_5BIT (0x2 << 3)
19684 +
19685 +#define DITHMODE_B_POS_MASK (0x3 << 1)
19686 +#define DITHMODE_B_POS_SHIFT (1)
19687 +#define DITHMODE_B_POS_8BIT (0x0 << 1)
19688 +#define DITHMODE_B_POS_6BIT (0x1 << 1)
19689 +#define DITHMODE_B_POS_5BIT (0x2 << 1)
19690 +
19691 +#define DITHMODE_DITH_EN (1 << 0)
19692 +
19693 +#define WPALCON (0x1A0)
19694 +
19695 +#define WPALCON_W4PAL_16BPP_A555 (1 << 8)
19696 +#define WPALCON_W3PAL_16BPP_A555 (1 << 7)
19697 +#define WPALCON_W2PAL_16BPP_A555 (1 << 6)
19698 +
19699 +/* Palette registers */
19700 +
19701 +#define WIN2_PAL(_entry) (0x300 + ((_entry) * 2))
19702 +#define WIN3_PAL(_entry) (0x320 + ((_entry) * 2))
19703 +#define WIN4_PAL(_entry) (0x340 + ((_entry) * 2))
19704 +#define WIN0_PAL(_entry) (0x400 + ((_entry) * 4))
19705 +#define WIN1_PAL(_entry) (0x800 + ((_entry) * 4))
19706 +
19707 +/* system specific implementation code for palette sizes, and other
19708 + * information that changes depending on which architecture is being
19709 + * compiled.
19710 +*/
19711 +
19712 +/* return true if window _win has OSD register D */
19713 +#define s3c_fb_has_osd_d(_win) ((_win) != 4 && (_win) != 0)
19714 +
19715 +static inline unsigned int s3c_fb_win_pal_size(unsigned int win)
19716 +{
19717 + if (win < 2)
19718 + return 256;
19719 + if (win < 4)
19720 + return 16;
19721 + if (win == 4)
19722 + return 4;
19723 +
19724 + BUG(); /* shouldn't get here */
19725 +}
19726 +
19727 +static inline int s3c_fb_validate_win_bpp(unsigned int win, unsigned int bpp)
19728 +{
19729 + /* all windows can do 1/2 bpp */
19730 +
19731 + if ((bpp == 25 || bpp == 19) && win == 0)
19732 + return 0; /* win 0 does not have 19 or 25bpp modes */
19733 +
19734 + if (bpp == 4 && win == 4)
19735 + return 0;
19736 +
19737 + if (bpp == 8 && (win >= 3))
19738 + return 0; /* win 3/4 cannot do 8bpp in any mode */
19739 +
19740 + return 1;
19741 +}
19742 +
19743 +static inline unsigned int s3c_fb_pal_reg(unsigned int window, int reg)
19744 +{
19745 + switch (window) {
19746 + case 0: return WIN0_PAL(reg);
19747 + case 1: return WIN1_PAL(reg);
19748 + case 2: return WIN2_PAL(reg);
19749 + case 3: return WIN3_PAL(reg);
19750 + case 4: return WIN4_PAL(reg);
19751 + }
19752 +
19753 + BUG();
19754 +}
19755 +
19756 +static inline int s3c_fb_pal_is16(unsigned int window)
19757 +{
19758 + return window > 1;
19759 +}
19760 +
19761 +struct s3c_fb_palette {
19762 + struct fb_bitfield r;
19763 + struct fb_bitfield g;
19764 + struct fb_bitfield b;
19765 + struct fb_bitfield a;
19766 +};
19767 +
19768 +static inline void s3c_fb_init_palette(unsigned int window,
19769 + struct s3c_fb_palette *palette)
19770 +{
19771 + if (window < 2) {
19772 + /* Windows 0/1 are 8/8/8 or A/8/8/8 */
19773 + palette->r.offset = 16;
19774 + palette->r.length = 8;
19775 + palette->g.offset = 8;
19776 + palette->g.length = 8;
19777 + palette->b.offset = 0;
19778 + palette->b.length = 8;
19779 + } else {
19780 + /* currently we assume RGB 5/6/5 */
19781 + palette->r.offset = 11;
19782 + palette->r.length = 5;
19783 + palette->g.offset = 5;
19784 + palette->g.length = 6;
19785 + palette->b.offset = 0;
19786 + palette->b.length = 5;
19787 + }
19788 +}
19789 +
19790 +/* Notes on per-window bpp settings
19791 + *
19792 + * Value Win0 Win1 Win2 Win3 Win 4
19793 + * 0000 1(P) 1(P) 1(P) 1(P) 1(P)
19794 + * 0001 2(P) 2(P) 2(P) 2(P) 2(P)
19795 + * 0010 4(P) 4(P) 4(P) 4(P) -none-
19796 + * 0011 8(P) 8(P) -none- -none- -none-
19797 + * 0100 -none- 8(A232) 8(A232) -none- -none-
19798 + * 0101 16(565) 16(565) 16(565) 16(565) 16(565)
19799 + * 0110 -none- 16(A555) 16(A555) 16(A555) 16(A555)
19800 + * 0111 16(I555) 16(I565) 16(I555) 16(I555) 16(I555)
19801 + * 1000 18(666) 18(666) 18(666) 18(666) 18(666)
19802 + * 1001 -none- 18(A665) 18(A665) 18(A665) 16(A665)
19803 + * 1010 -none- 19(A666) 19(A666) 19(A666) 19(A666)
19804 + * 1011 24(888) 24(888) 24(888) 24(888) 24(888)
19805 + * 1100 -none- 24(A887) 24(A887) 24(A887) 24(A887)
19806 + * 1101 -none- 25(A888) 25(A888) 25(A888) 25(A888)
19807 + * 1110 -none- -none- -none- -none- -none-
19808 + * 1111 -none- -none- -none- -none- -none-
19809 +*/
19810 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/regs-irq.h
19811 ===================================================================
19812 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19813 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/regs-irq.h 2009-01-02 00:01:56.000000000 +0100
19814 @@ -0,0 +1,20 @@
19815 +/* linux/arch/arm/mach-s3c6400/include/mach/regs-irq.h
19816 + *
19817 + * Copyright 2008 Openmoko, Inc.
19818 + * Copyright 2008 Simtec Electronics
19819 + * http://armlinux.simtec.co.uk/
19820 + * Ben Dooks <ben@simtec.co.uk>
19821 + *
19822 + * S3C64XX - IRQ register definitions
19823 + *
19824 + * This program is free software; you can redistribute it and/or modify
19825 + * it under the terms of the GNU General Public License version 2 as
19826 + * published by the Free Software Foundation.
19827 +*/
19828 +
19829 +#ifndef __ASM_ARCH_REGS_IRQ_H
19830 +#define __ASM_ARCH_REGS_IRQ_H __FILE__
19831 +
19832 +#include <asm/hardware/vic.h>
19833 +
19834 +#endif /* __ASM_ARCH_6400_REGS_IRQ_H */
19835 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/system.h
19836 ===================================================================
19837 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19838 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/system.h 2009-01-02 00:01:56.000000000 +0100
19839 @@ -0,0 +1,44 @@
19840 +/* linux/arch/arm/mach-s3c6400/include/mach/system.h
19841 + *
19842 + * Copyright 2008 Openmoko, Inc.
19843 + * Copyright 2008 Simtec Electronics
19844 + * Ben Dooks <ben@simtec.co.uk>
19845 + * http://armlinux.simtec.co.uk/
19846 + *
19847 + * S3C6400 - system implementation
19848 + */
19849 +
19850 +#ifndef __ASM_ARCH_SYSTEM_H
19851 +#define __ASM_ARCH_SYSTEM_H __FILE__
19852 +
19853 +#include <linux/io.h>
19854 +#include <mach/map.h>
19855 +
19856 +#include <plat/regs-sys.h>
19857 +#include <plat/regs-syscon-power.h>
19858 +
19859 +static void arch_idle(void)
19860 +{
19861 + unsigned long flags;
19862 + u32 mode;
19863 +
19864 + /* ensure that if we execute the cpu idle sequence that we
19865 + * go into idle mode instead of powering off. */
19866 +
19867 + local_irq_save(flags);
19868 + mode = __raw_readl(S3C64XX_PWR_CFG);
19869 + mode &= ~S3C64XX_PWRCFG_CFG_WFI_MASK;
19870 + mode |= S3C64XX_PWRCFG_CFG_WFI_IDLE;
19871 + __raw_writel(mode, S3C64XX_PWR_CFG);
19872 +
19873 + local_irq_restore(flags);
19874 +
19875 + cpu_do_idle();
19876 +}
19877 +
19878 +static void arch_reset(char mode)
19879 +{
19880 + /* nothing here yet */
19881 +}
19882 +
19883 +#endif /* __ASM_ARCH_IRQ_H */
19884 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/tick.h
19885 ===================================================================
19886 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19887 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/tick.h 2009-01-02 00:01:56.000000000 +0100
19888 @@ -0,0 +1,29 @@
19889 +/* linux/arch/arm/mach-s3c6400/include/mach/tick.h
19890 + *
19891 + * Copyright 2008 Openmoko, Inc.
19892 + * Copyright 2008 Simtec Electronics
19893 + * http://armlinux.simtec.co.uk/
19894 + * Ben Dooks <ben@simtec.co.uk>
19895 + *
19896 + * S3C64XX - Timer tick support definitions
19897 + *
19898 + * This program is free software; you can redistribute it and/or modify
19899 + * it under the terms of the GNU General Public License version 2 as
19900 + * published by the Free Software Foundation.
19901 +*/
19902 +
19903 +#ifndef __ASM_ARCH_TICK_H
19904 +#define __ASM_ARCH_TICK_H __FILE__
19905 +
19906 +/* note, the timer interrutps turn up in 2 places, the vic and then
19907 + * the timer block. We take the VIC as the base at the moment.
19908 + */
19909 +static inline u32 s3c24xx_ostimer_pending(void)
19910 +{
19911 + u32 pend = __raw_readl(S3C_VA_VIC0 + VIC_RAW_STATUS);
19912 + return pend & 1 << (IRQ_TIMER4_VIC - S3C64XX_IRQ_VIC0(0));
19913 +}
19914 +
19915 +#define TICK_MAX (0xffffffff)
19916 +
19917 +#endif /* __ASM_ARCH_6400_TICK_H */
19918 Index: linux-2.6.28/arch/arm/mach-s3c6400/include/mach/uncompress.h
19919 ===================================================================
19920 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19921 +++ linux-2.6.28/arch/arm/mach-s3c6400/include/mach/uncompress.h 2009-01-02 00:01:56.000000000 +0100
19922 @@ -0,0 +1,28 @@
19923 +/* arch/arm/mach-s3c6400/include/mach/uncompress.h
19924 + *
19925 + * Copyright 2008 Openmoko, Inc.
19926 + * Copyright 2008 Simtec Electronics
19927 + * http://armlinux.simtec.co.uk/
19928 + * Ben Dooks <ben@simtec.co.uk>
19929 + *
19930 + * S3C6400 - uncompress code
19931 + *
19932 + * This program is free software; you can redistribute it and/or modify
19933 + * it under the terms of the GNU General Public License version 2 as
19934 + * published by the Free Software Foundation.
19935 +*/
19936 +
19937 +#ifndef __ASM_ARCH_UNCOMPRESS_H
19938 +#define __ASM_ARCH_UNCOMPRESS_H
19939 +
19940 +#include <mach/map.h>
19941 +#include <plat/uncompress.h>
19942 +
19943 +static void arch_detect_cpu(void)
19944 +{
19945 + /* we do not need to do any cpu detection here at the moment. */
19946 + fifo_mask = S3C2440_UFSTAT_TXMASK;
19947 + fifo_max = 63 << S3C2440_UFSTAT_TXSHIFT;
19948 +}
19949 +
19950 +#endif /* __ASM_ARCH_UNCOMPRESS_H */
19951 Index: linux-2.6.28/arch/arm/mach-s3c6400/Kconfig
19952 ===================================================================
19953 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19954 +++ linux-2.6.28/arch/arm/mach-s3c6400/Kconfig 2009-01-02 00:01:56.000000000 +0100
19955 @@ -0,0 +1,8 @@
19956 +# arch/arm/mach-s3c6400/Kconfig
19957 +#
19958 +# Copyright 2008 Openmoko, Inc.
19959 +# Simtec Electronics, Ben Dooks <ben@simtec.co.uk>
19960 +#
19961 +# Licensed under GPLv2
19962 +
19963 +# Currently nothing here, this will be added later
19964 Index: linux-2.6.28/arch/arm/mach-s3c6400/Makefile
19965 ===================================================================
19966 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19967 +++ linux-2.6.28/arch/arm/mach-s3c6400/Makefile 2009-01-02 00:01:56.000000000 +0100
19968 @@ -0,0 +1,15 @@
19969 +# arch/arm/mach-s3c6400/Makefile
19970 +#
19971 +# Copyright 2008 Openmoko, Inc.
19972 +# Copyright 2008 Simtec Electronics
19973 +#
19974 +# Licensed under GPLv2
19975 +
19976 +obj-y :=
19977 +obj-m :=
19978 +obj-n :=
19979 +obj- :=
19980 +
19981 +# Core support for S3C6400 system
19982 +
19983 +obj-n += blank.o
19984 Index: linux-2.6.28/arch/arm/mach-s3c6400/Makefile.boot
19985 ===================================================================
19986 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19987 +++ linux-2.6.28/arch/arm/mach-s3c6400/Makefile.boot 2009-01-02 00:01:56.000000000 +0100
19988 @@ -0,0 +1,2 @@
19989 + zreladdr-y := 0x50008000
19990 +params_phys-y := 0x50000100
19991 Index: linux-2.6.28/arch/arm/mach-s3c6410/cpu.c
19992 ===================================================================
19993 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
19994 +++ linux-2.6.28/arch/arm/mach-s3c6410/cpu.c 2009-01-02 00:01:56.000000000 +0100
19995 @@ -0,0 +1,101 @@
19996 +/* linux/arch/arm/mach-s3c6410/cpu.c
19997 + *
19998 + * Copyright 2008 Simtec Electronics
19999 + * Copyright 2008 Simtec Electronics
20000 + * Ben Dooks <ben@simtec.co.uk>
20001 + * http://armlinux.simtec.co.uk/
20002 + *
20003 + * This program is free software; you can redistribute it and/or modify
20004 + * it under the terms of the GNU General Public License version 2 as
20005 + * published by the Free Software Foundation.
20006 +*/
20007 +
20008 +#include <linux/kernel.h>
20009 +#include <linux/types.h>
20010 +#include <linux/interrupt.h>
20011 +#include <linux/list.h>
20012 +#include <linux/timer.h>
20013 +#include <linux/init.h>
20014 +#include <linux/clk.h>
20015 +#include <linux/io.h>
20016 +#include <linux/sysdev.h>
20017 +#include <linux/serial_core.h>
20018 +#include <linux/platform_device.h>
20019 +
20020 +#include <asm/mach/arch.h>
20021 +#include <asm/mach/map.h>
20022 +#include <asm/mach/irq.h>
20023 +
20024 +#include <mach/hardware.h>
20025 +#include <asm/irq.h>
20026 +
20027 +#include <plat/cpu-freq.h>
20028 +#include <plat/regs-serial.h>
20029 +
20030 +#include <plat/cpu.h>
20031 +#include <plat/devs.h>
20032 +#include <plat/clock.h>
20033 +#include <plat/sdhci.h>
20034 +#include <plat/iic-core.h>
20035 +#include <plat/s3c6400.h>
20036 +#include <plat/s3c6410.h>
20037 +
20038 +/* Initial IO mappings */
20039 +
20040 +static struct map_desc s3c6410_iodesc[] __initdata = {
20041 +};
20042 +
20043 +/* s3c6410_map_io
20044 + *
20045 + * register the standard cpu IO areas
20046 +*/
20047 +
20048 +void __init s3c6410_map_io(void)
20049 +{
20050 + iotable_init(s3c6410_iodesc, ARRAY_SIZE(s3c6410_iodesc));
20051 +
20052 + /* initialise device information early */
20053 + s3c6410_default_sdhci0();
20054 + s3c6410_default_sdhci1();
20055 +
20056 + /* the i2c devices are directly compatible with s3c2440 */
20057 + s3c_i2c0_setname("s3c2440-i2c");
20058 + s3c_i2c1_setname("s3c2440-i2c");
20059 +}
20060 +
20061 +void __init s3c6410_init_clocks(int xtal)
20062 +{
20063 + printk(KERN_DEBUG "%s: initialising clocks\n", __func__);
20064 + s3c24xx_register_baseclocks(xtal);
20065 + s3c64xx_register_clocks();
20066 + s3c6400_register_clocks();
20067 + s3c6400_setup_clocks();
20068 +}
20069 +
20070 +void __init s3c6410_init_irq(void)
20071 +{
20072 + /* VIC0 is missing IRQ7, VIC1 is fully populated. */
20073 + s3c64xx_init_irq(~0 & ~(1 << 7), ~0);
20074 +}
20075 +
20076 +struct sysdev_class s3c6410_sysclass = {
20077 + .name = "s3c6410-core",
20078 +};
20079 +
20080 +static struct sys_device s3c6410_sysdev = {
20081 + .cls = &s3c6410_sysclass,
20082 +};
20083 +
20084 +static int __init s3c6410_core_init(void)
20085 +{
20086 + return sysdev_class_register(&s3c6410_sysclass);
20087 +}
20088 +
20089 +core_initcall(s3c6410_core_init);
20090 +
20091 +int __init s3c6410_init(void)
20092 +{
20093 + printk("S3C6410: Initialising architecture\n");
20094 +
20095 + return sysdev_register(&s3c6410_sysdev);
20096 +}
20097 Index: linux-2.6.28/arch/arm/mach-s3c6410/include/mach/om-gta03.h
20098 ===================================================================
20099 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
20100 +++ linux-2.6.28/arch/arm/mach-s3c6410/include/mach/om-gta03.h 2009-01-02 00:01:56.000000000 +0100
20101 @@ -0,0 +1,91 @@
20102 +/*
20103 + * GTA03 GPIO Mappings
20104 + *
20105 + * (C) 2008 by Openmoko Inc.
20106 + * Author: Andy Green <andy@openmoko.com>
20107 + * All rights reserved.
20108 + *
20109 + * This program is free software; you can redistribute it and/or modify
20110 + * it under the terms of the GNU General Public License version 2 as
20111 + * published by the Free Software Foundation
20112 + *
20113 + */
20114 +
20115 +#ifndef _OM_GTA03_H
20116 +#define _OM_GTA03_H
20117 +
20118 +#include <mach/gpio.h>
20119 +#include <mach/irqs.h>
20120 +#include <linux/mfd/pcf50633/core.h>
20121 +
20122 +extern struct pcf50633_platform_data om_gta03_pcf_pdata;
20123 +
20124 +/* ATAG_REVISION from bootloader */
20125 +#define GTA03v1_SYSTEM_REV 0x00000001
20126 +
20127 +#define GTA03_GPIO_VIBRATOR_ON S3C64XX_GPF(13)
20128 +#define GTA03_GPIO_CLKOUT S3C64XX_GPF(14)
20129 +
20130 +#define GTA03_GPIO_ACCEL_MISO S3C64XX_GPC(0)
20131 +#define GTA03_GPIO_ACCEL_CLK S3C64XX_GPC(1)
20132 +#define GTA03_GPIO_ACCEL_MOSI S3C64XX_GPC(2)
20133 +
20134 +#define GTA03_GPIO_LCM_MISO S3C64XX_GPC(4)
20135 +#define GTA03_GPIO_LCM_CLK S3C64XX_GPC(5)
20136 +#define GTA03_GPIO_LCM_MOSI S3C64XX_GPC(6)
20137 +#define GTA03_GPIO_LCM_CS S3C64XX_GPC(7)
20138 +
20139 +#define GTA03_GPIO_BTPCM_SHARED_SCLK S3C64XX_GPE(0)
20140 +#define GTA03_GPIO_BTPCM_SHARED_EXTCLK S3C64XX_GPE(1)
20141 +#define GTA03_GPIO_BTPCM_SHARED_FSYNC S3C64XX_GPE(2)
20142 +#define GTA03_GPIO_BTPCM_SHARED_SIN S3C64XX_GPE(3)
20143 +#define GTA03_GPIO_BTPCM_SHARED_SOUT S3C64XX_GPE(4)
20144 +
20145 +#define GTA03_GPIO_WLAN_RESET S3C64XX_GPH(6)
20146 +#define GTA03_GPIO_HDQ S3C64XX_GPH(7)
20147 +#define GTA03_GPIO_WLAN_PWRDN S3C64XX_GPH(8)
20148 +
20149 +#define GTA03_GPIO_VERSION2 S3C64XX_GPI(0)
20150 +#define GTA03_GPIO_VERSION1 S3C64XX_GPI(1)
20151 +#define GTA03_GPIO_VERSION0 S3C64XX_GPI(8)
20152 +
20153 +#define GTA03_GPIO_NWLAN_POWER S3C64XX_GPK(0)
20154 +#define GTA03_GPIO_MODEN_ON S3C64XX_GPK(2)
20155 +
20156 +#define GTA03_GPIO_TP_RESET S3C64XX_GPM(0)
20157 +#define GTA03_GPIO_GPS_LNA_EN S3C64XX_GPM(2)
20158 +
20159 +#define GTA03_GPIO_USB_FLT S3C64XX_GPM(4)
20160 +#define GTA03_GPIO_USB_OC S3C64XX_GPM(5)
20161 +
20162 +#define GTA03_GPIO_ACCEL_INT1 S3C64XX_GPN(0)
20163 +#define GTA03_GPIO_KEY_MINUS S3C64XX_GPN(1)
20164 +#define GTA03_GPIO_KEY_PLUS S3C64XX_GPN(2)
20165 +#define GTA03_GPIO_PWR_IND S3C64XX_GPN(3)
20166 +#define GTA03_GPIO_PWR_IRQ S3C64XX_GPN(4)
20167 +#define GTA03_GPIO_TOUCH S3C64XX_GPN(5)
20168 +#define GTA03_GPIO_JACK_INSERT S3C64XX_GPN(6)
20169 +#define GTA03_GPIO_GPS_INT S3C64XX_GPN(7)
20170 +#define GTA03_GPIO_HOLD S3C64XX_GPN(8)
20171 +#define GTA03_GPIO_WLAN_WAKEUP S3C64XX_GPN(9)
20172 +#define GTA03_GPIO_ACCEL_INT2 S3C64XX_GPN(10)
20173 +#define GTA03_GPIO_IO1 S3C64XX_GPN(11)
20174 +#define GTA03_GPIO_NONKEYWAKE S3C64XX_GPN(12)
20175 +
20176 +#define GTA03_GPIO_N_MODEM_RESET S3C64XX_GPO(1)
20177 +
20178 +#define GTA03_IRQ_GSENSOR_1 S3C_EINT(0)
20179 +#define GTA03_IRQ_KEY_MINUS S3C_EINT(1)
20180 +#define GTA03_IRQ_KEY_PLUS S3C_EINT(2)
20181 +#define GTA03_IRQ_PWR_IND S3C_EINT(3)
20182 +#define GTA03_IRQ_PMU S3C_EINT(4)
20183 +#define GTA03_IRQ_TOUCH S3C_EINT(5)
20184 +#define GTA03_IRQ_JACK_INSERT S3C_EINT(6)
20185 +#define GTA03_IRQ_GPS_INT S3C_EINT(7)
20186 +#define GTA03_IRQ_NHOLD S3C_EINT(8)
20187 +#define GTA03_IRQ_WLAN_WAKEUP S3C_EINT(9)
20188 +#define GTA03_IRQ_GSENSOR_2 S3C_EINT(10)
20189 +#define GTA03_IRQ_IO1 S3C_EINT(11)
20190 +#define GTA03_IRQ_NONKEYWAKE S3C_EINT(12)
20191 +
20192 +#endif /* _OM_GTA03_H */
20193 Index: linux-2.6.28/arch/arm/mach-s3c6410/Kconfig
20194 ===================================================================
20195 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
20196 +++ linux-2.6.28/arch/arm/mach-s3c6410/Kconfig 2009-01-02 00:01:56.000000000 +0100
20197 @@ -0,0 +1,80 @@
20198 +# arch/arm/mach-s3c6410/Kconfig
20199 +#
20200 +# Copyright 2008 Openmoko, Inc.
20201 +# Copyright 2008 Simtec Electronics
20202 +#
20203 +# Licensed under GPLv2
20204 +
20205 +# Configuration options for the S3C6410 CPU
20206 +
20207 +config CPU_S3C6410
20208 + bool
20209 + select CPU_S3C6400_INIT
20210 + select CPU_S3C6400_CLOCK
20211 + help
20212 + Enable S3C6410 CPU support
20213 +
20214 +config S3C6410_SETUP_SDHCI
20215 + bool
20216 + help
20217 + Internal helper functions for S3C6410 based SDHCI systems
20218 +
20219 +config MACH_SMDK6410
20220 + bool "SMDK6410"
20221 + select CPU_S3C6410
20222 + select S3C_DEV_HSMMC
20223 + select S3C_DEV_HSMMC1
20224 + select S3C_DEV_I2C1
20225 + select S3C_DEV_FB
20226 + select S3C6410_SETUP_SDHCI
20227 + select S3C64XX_SETUP_I2C1
20228 + select S3C64XX_SETUP_FB_24BPP
20229 + help
20230 + Machine support for the Samsung SMDK6410
20231 +
20232 +# At least some of the SMDK6410s were shipped with the card detect
20233 +# for the MMC/SD slots connected to the same input. This means that
20234 +# either the boards need to be altered to have channel0 to an alternate
20235 +# configuration or that only one slot can be used.
20236 +
20237 +choice
20238 + prompt "SMDK6410 MMC/SD slot setup"
20239 + depends on MACH_SMDK6410
20240 +
20241 +config SMDK6410_SD_CH0
20242 + bool "Use channel 0 only"
20243 + depends on MACH_SMDK6410
20244 + help
20245 + Select CON7 (channel 0) as the MMC/SD slot, as
20246 + at least some SMDK6410 boards come with the
20247 + resistors fitted so that the card detects for
20248 + channels 0 and 1 are the same.
20249 +
20250 +config SMDK6410_SD_CH1
20251 + bool "Use channel 1 only"
20252 + depends on MACH_SMDK6410
20253 + help
20254 + Select CON6 (channel 1) as the MMC/SD slot, as
20255 + at least some SMDK6410 boards come with the
20256 + resistors fitted so that the card detects for
20257 + channels 0 and 1 are the same.
20258 +
20259 +endchoice
20260 +
20261 +config MACH_OPENMOKO_GTA03
20262 + bool "Openmoko GTA03 Phone"
20263 + select CPU_S3C6410
20264 + select S3C_DEV_HSMMC
20265 + select S3C_DEV_HSMMC1
20266 + select S3C_DEV_I2C1
20267 + select S3C6410_SETUP_SDHCI
20268 + select S3C64XX_SETUP_I2C1
20269 + select S3C_DEV_FB
20270 + select S3C64XX_SETUP_FB_24BPP
20271 +# select SENSORS_PCF50633
20272 + select POWER_SUPPLY
20273 +# select GTA02_HDQ
20274 + select MACH_NEO1973
20275 + help
20276 + Machine support for the Openmoko GTA03 Phone
20277 +
20278 Index: linux-2.6.28/arch/arm/mach-s3c6410/mach-om-gta03.c
20279 ===================================================================
20280 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
20281 +++ linux-2.6.28/arch/arm/mach-s3c6410/mach-om-gta03.c 2009-01-02 00:01:56.000000000 +0100
20282 @@ -0,0 +1,654 @@
20283 +/* linux/arch/arm/mach-s3c6410/mach-om_gta03.c
20284 + *
20285 + * Copyright 2008 Openmoko, Inc.
20286 + * Andy Green <andy@openmoko.org>
20287 + *
20288 + * based on mach_om_gta03.c which is
20289 + *
20290 + * Copyright 2008 Openmoko, Inc.
20291 + * Copyright 2008 Simtec Electronics
20292 + * Ben Dooks <ben@simtec.co.uk>
20293 + * http://armlinux.simtec.co.uk/
20294 + *
20295 + * This program is free software; you can redistribute it and/or modify
20296 + * it under the terms of the GNU General Public License version 2 as
20297 + * published by the Free Software Foundation.
20298 + *
20299 +*/
20300 +
20301 +#include <linux/kernel.h>
20302 +#include <linux/types.h>
20303 +#include <linux/interrupt.h>
20304 +#include <linux/list.h>
20305 +#include <linux/timer.h>
20306 +#include <linux/init.h>
20307 +#include <linux/serial_core.h>
20308 +#include <linux/platform_device.h>
20309 +#include <linux/io.h>
20310 +#include <linux/i2c.h>
20311 +#include <linux/fb.h>
20312 +#include <linux/delay.h>
20313 +#include <linux/lis302dl.h>
20314 +
20315 +#include <video/platform_lcd.h>
20316 +
20317 +#include <asm/mach/arch.h>
20318 +#include <asm/mach/map.h>
20319 +#include <asm/mach/irq.h>
20320 +
20321 +#include <mach/hardware.h>
20322 +#include <mach/map.h>
20323 +#include <mach/regs-fb.h>
20324 +
20325 +#include <asm/irq.h>
20326 +#include <asm/mach-types.h>
20327 +
20328 +#include <plat/regs-serial.h>
20329 +#include <plat/iic.h>
20330 +#include <plat/fb.h>
20331 +#include <plat/gpio-cfg.h>
20332 +#include <plat/pm.h>
20333 +
20334 +#include <plat/s3c6410.h>
20335 +#include <plat/clock.h>
20336 +#include <plat/devs.h>
20337 +#include <plat/cpu.h>
20338 +
20339 +/* #include <plat/udc.h> */
20340 +#include <linux/i2c.h>
20341 +#include <linux/backlight.h>
20342 +#include <linux/regulator/machine.h>
20343 +
20344 +#include <mach/om-gta03.h>
20345 +
20346 +#include <linux/mfd/pcf50633/core.h>
20347 +#include <linux/mfd/pcf50633/mbc.h>
20348 +#include <linux/mfd/pcf50633/adc.h>
20349 +#include <linux/mfd/pcf50633/gpio.h>
20350 +#include <linux/mfd/pcf50633/led.h>
20351 +
20352 +#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
20353 +#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
20354 +#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
20355 +
20356 +static struct s3c2410_uartcfg om_gta03_uartcfgs[] __initdata = {
20357 + [0] = {
20358 + .hwport = 0,
20359 + .flags = 0,
20360 + .ucon = 0x3c5,
20361 + .ulcon = 0x03,
20362 + .ufcon = 0x51,
20363 + },
20364 + [1] = {
20365 + .hwport = 1,
20366 + .flags = 0,
20367 + .ucon = 0x3c5,
20368 + .ulcon = 0x03,
20369 + .ufcon = 0x51,
20370 + },
20371 + [2] = {
20372 + .hwport = 2,
20373 + .flags = 0,
20374 + .ucon = 0x3c5,
20375 + .ulcon = 0x03,
20376 + .ufcon = 0x51,
20377 + },
20378 + [3] = {
20379 + .hwport = 3,
20380 + .flags = 0,
20381 + .ucon = 0x3c5,
20382 + .ulcon = 0x03,
20383 + .ufcon = 0x51,
20384 + },
20385 +};
20386 +
20387 +
20388 +/*
20389 + * Situation is that Linux SPI can't work in an interrupt context, so we
20390 + * implement our own bitbang here. Arbitration is needed because not only
20391 + * can this interrupt happen at any time even if foreground wants to use
20392 + * the bitbang API from Linux, but multiple motion sensors can be on the
20393 + * same SPI bus, and multiple interrupts can happen.
20394 + *
20395 + * Foreground / interrupt arbitration is okay because the interrupts are
20396 + * disabled around all the foreground SPI code.
20397 + *
20398 + * Interrupt / Interrupt arbitration is evidently needed, otherwise we
20399 + * lose edge-triggered service after a while due to the two sensors sharing
20400 + * the SPI bus having irqs at the same time eventually.
20401 + *
20402 + * Servicing is typ 75 - 100us at 400MHz.
20403 + */
20404 +
20405 +/* #define DEBUG_SPEW_MS */
20406 +#define MG_PER_SAMPLE 18
20407 +
20408 +struct lis302dl_platform_data lis302_pdata;
20409 +
20410 +/*
20411 + * generic SPI RX and TX bitbang
20412 + * only call with interrupts off!
20413 + */
20414 +
20415 +static void __gta03_lis302dl_bitbang(struct lis302dl_info *lis, u8 *tx,
20416 + int tx_bytes, u8 *rx, int rx_bytes)
20417 +{
20418 + struct lis302dl_platform_data *pdata = lis->pdata;
20419 + int n;
20420 + u8 shifter = 0;
20421 +
20422 + gpio_direction_output(pdata->pin_chip_select, 1);
20423 + gpio_direction_output(pdata->pin_clk, 1);
20424 + gpio_direction_output(pdata->pin_chip_select, 0);
20425 +
20426 + /* send the register index, r/w and autoinc bits */
20427 + for (n = 0; n < (tx_bytes << 3); n++) {
20428 + if (!(n & 7))
20429 + shifter = ~tx[n >> 3];
20430 + gpio_direction_output(pdata->pin_clk, 0);
20431 + gpio_direction_output(pdata->pin_mosi, !(shifter & 0x80));
20432 + gpio_direction_output(pdata->pin_clk, 1);
20433 + shifter <<= 1;
20434 + }
20435 +
20436 + for (n = 0; n < (rx_bytes << 3); n++) { /* 8 bits each */
20437 + gpio_direction_output(pdata->pin_clk, 0);
20438 + shifter <<= 1;
20439 + if (gpio_direction_input(pdata->pin_miso))
20440 + shifter |= 1;
20441 + if ((n & 7) == 7)
20442 + rx[n >> 3] = shifter;
20443 + gpio_direction_output(pdata->pin_clk, 1);
20444 + }
20445 + gpio_direction_output(pdata->pin_chip_select, 1);
20446 +}
20447 +
20448 +
20449 +static int gta03_lis302dl_bitbang_read_reg(struct lis302dl_info *lis, u8 reg)
20450 +{
20451 + u8 data = 0xc0 | reg; /* read, autoincrement */
20452 + unsigned long flags;
20453 +
20454 + local_irq_save(flags);
20455 +
20456 + __gta03_lis302dl_bitbang(lis, &data, 1, &data, 1);
20457 +
20458 + local_irq_restore(flags);
20459 +
20460 + return data;
20461 +}
20462 +
20463 +static void gta03_lis302dl_bitbang_write_reg(struct lis302dl_info *lis, u8 reg,
20464 + u8 val)
20465 +{
20466 + u8 data[2] = { 0x00 | reg, val }; /* write, no autoincrement */
20467 + unsigned long flags;
20468 +
20469 + local_irq_save(flags);
20470 +
20471 + __gta03_lis302dl_bitbang(lis, &data[0], 2, NULL, 0);
20472 +
20473 + local_irq_restore(flags);
20474 +
20475 +}
20476 +
20477 +
20478 +void gta03_lis302dl_suspend_io(struct lis302dl_info *lis, int resume)
20479 +{
20480 + struct lis302dl_platform_data *pdata = lis->pdata;
20481 +
20482 + if (!resume) {
20483 + /*
20484 + * we don't want to power them with a high level
20485 + * because GSENSOR_3V3 is not up during suspend
20486 + */
20487 + gpio_direction_output(pdata->pin_chip_select, 0);
20488 + gpio_direction_output(pdata->pin_clk, 0);
20489 + gpio_direction_output(pdata->pin_mosi, 0);
20490 + s3c_gpio_setpull(pdata->pin_miso, S3C_GPIO_PULL_DOWN);
20491 +
20492 + return;
20493 + }
20494 +
20495 + /* back to normal */
20496 + gpio_direction_output(pdata->pin_chip_select, 1);
20497 + gpio_direction_output(pdata->pin_clk, 1);
20498 + s3c_gpio_setpull(pdata->pin_miso, S3C_GPIO_PULL_NONE);
20499 +
20500 + s3c_gpio_cfgpin(pdata->pin_chip_select, S3C_GPIO_SFN(1));
20501 + s3c_gpio_cfgpin(pdata->pin_clk, S3C_GPIO_SFN(1));
20502 + s3c_gpio_cfgpin(pdata->pin_mosi, S3C_GPIO_SFN(1));
20503 + s3c_gpio_cfgpin(pdata->pin_miso, S3C_GPIO_SFN(0));
20504 +
20505 +}
20506 +
20507 +struct lis302dl_platform_data lis302_pdata = {
20508 + .name = "lis302",
20509 + .pin_chip_select= S3C64XX_GPC(3), /* NC */
20510 + .pin_clk = GTA03_GPIO_ACCEL_CLK,
20511 + .pin_mosi = GTA03_GPIO_ACCEL_MOSI,
20512 + .pin_miso = GTA03_GPIO_ACCEL_MISO,
20513 + .interrupt = GTA03_IRQ_GSENSOR_1,
20514 + .open_drain = 0,
20515 + .lis302dl_bitbang = __gta03_lis302dl_bitbang,
20516 + .lis302dl_bitbang_reg_read = gta03_lis302dl_bitbang_read_reg,
20517 + .lis302dl_bitbang_reg_write = gta03_lis302dl_bitbang_write_reg,
20518 + .lis302dl_suspend_io = gta03_lis302dl_suspend_io,
20519 +};
20520 +
20521 +static struct platform_device s3c_device_spi_acc1 = {
20522 + .name = "lis302dl",
20523 + .id = 1,
20524 + .dev = {
20525 + .platform_data = &lis302_pdata,
20526 + },
20527 +};
20528 +
20529 +
20530 +
20531 +/* framebuffer and LCD setup. */
20532 +
20533 +/* GPF15 = LCD backlight control
20534 + * GPF13 => Panel power
20535 + * GPN5 = LCD nRESET signal
20536 + * PWM_TOUT1 => backlight brightness
20537 + */
20538 +
20539 +static void om_gta03_lcd_power_set(struct plat_lcd_data *pd,
20540 + unsigned int power)
20541 +{
20542 +
20543 +}
20544 +
20545 +static struct plat_lcd_data om_gta03_lcd_power_data = {
20546 + .set_power = om_gta03_lcd_power_set,
20547 +};
20548 +
20549 +static struct platform_device om_gta03_lcd_powerdev = {
20550 + .name = "platform-lcd",
20551 + .dev.parent = &s3c_device_fb.dev,
20552 + .dev.platform_data = &om_gta03_lcd_power_data,
20553 +};
20554 +
20555 +static struct s3c_fb_pd_win om_gta03_fb_win0 = {
20556 + /* this is to ensure we use win0 */
20557 + .win_mode = {
20558 + .pixclock = 40816,
20559 + .left_margin = 8,
20560 + .right_margin = 16,
20561 + .upper_margin = 2,
20562 + .lower_margin = 16,
20563 + .hsync_len = 8,
20564 + .vsync_len = 2,
20565 + .xres = 640,
20566 + .yres = 480,
20567 + },
20568 + .max_bpp = 32,
20569 + .default_bpp = 16,
20570 +};
20571 +
20572 +static struct s3c_fb_platdata om_gta03_lcd_pdata __initdata = {
20573 + .setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
20574 + .win[0] = &om_gta03_fb_win0,
20575 + .vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
20576 + .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
20577 +};
20578 +
20579 +
20580 +struct map_desc om_gta03_6410_iodesc[] = {};
20581 +
20582 +static struct resource om_gta03_button_resources[] = {
20583 + [0] = {
20584 + .start = 0,
20585 + .end = 0,
20586 + },
20587 + [1] = {
20588 + .start = GTA03_GPIO_HOLD,
20589 + .end = GTA03_GPIO_HOLD,
20590 + },
20591 + [2] = {
20592 + .start = GTA03_GPIO_JACK_INSERT,
20593 + .end = GTA03_GPIO_JACK_INSERT,
20594 + },
20595 + [3] = {
20596 + .start = GTA03_GPIO_KEY_PLUS,
20597 + .end = GTA03_GPIO_KEY_PLUS,
20598 + },
20599 + [4] = {
20600 + .start = GTA03_GPIO_KEY_MINUS,
20601 + .end = GTA03_GPIO_KEY_MINUS,
20602 + },
20603 +};
20604 +
20605 +static struct platform_device om_gta03_button_dev = {
20606 + .name = "neo1973-button",
20607 + .num_resources = ARRAY_SIZE(om_gta03_button_resources),
20608 + .resource = om_gta03_button_resources,
20609 +};
20610 +
20611 +
20612 +/********************** PMU ***************************/
20613 +/*
20614 + * GTA03 PMU Mapping info
20615 + *
20616 + * name maxcurr default Nom consumers
20617 + *
20618 + * AUTO 1100mA ON 3.3V 3.3V Main 3.3V rail
20619 + * DOWN1 500mA ON 1.2V 1.2V CPU VddARM, VddINT, VddMPLL, VddOTGI
20620 + * DOWN2 500mA ON 1.8V 1.8V CPU VddAlive via LDO, Memories, WLAN
20621 + * LED 25mA OFF 18V Backlight
20622 + * HCLDO 200mA OFF 2.8V Camera 2V8
20623 + * LDO1 50mA ON 3.3V 3.3V Accel
20624 + * LDO2 50mA OFF 1.5V Camera 1V5
20625 + * LDO3 50mA OFF 3.3V CODEC 3.3V
20626 + * LDO4 150mA ON 2.8V 2.7V uSD power
20627 + * LDO5 150mA OFF 3.0V GPS 3V
20628 + * LDO6 50mA ON 3.0V 3.0V LCM 3V
20629 + *
20630 + */
20631 +
20632 +
20633 +/* PMU driver info */
20634 +
20635 +
20636 +static struct regulator_consumer_supply ldo4_consumers[] = {
20637 + {
20638 + .dev = &s3c_device_hsmmc0.dev,
20639 + .supply = "SD_3V",
20640 + },
20641 +};
20642 +
20643 +static struct platform_device om_gta03_features_dev = {
20644 + .name = "om-gta03",
20645 +};
20646 +
20647 +static struct regulator_consumer_supply ldo5_consumers[] = {
20648 + {
20649 + .dev = &om_gta03_features_dev.dev,
20650 + .supply = "RF_3V",
20651 + },
20652 +};
20653 +
20654 +
20655 +static void om_gta03_pmu_event_callback(struct pcf50633 *pcf, int irq)
20656 +{
20657 +#if 0
20658 + if (irq == PCF50633_IRQ_USBINS) {
20659 + schedule_delayed_work(&gta02_charger_work,
20660 + GTA02_CHARGER_CONFIGURE_TIMEOUT);
20661 + return;
20662 + } else if (irq == PCF50633_IRQ_USBREM) {
20663 + cancel_delayed_work_sync(&gta02_charger_work);
20664 + pcf50633_mbc_usb_curlim_set(pcf, 0);
20665 + gta02_usb_vbus_draw = 0;
20666 + }
20667 +
20668 + bq27000_charging_state_change(&bq27000_battery_device);
20669 +#endif
20670 +}
20671 +
20672 +
20673 +static void om_gta03_pcf50633_attach_child_devices(struct pcf50633 *pcf);
20674 +static void om_gta03_pmu_regulator_registered(struct pcf50633 *pcf, int id);
20675 +
20676 +struct pcf50633_platform_data om_gta03_pcf_pdata = {
20677 +
20678 + .resumers = {
20679 + [0] = PCF50633_INT1_USBINS |
20680 + PCF50633_INT1_USBREM |
20681 + PCF50633_INT1_ALARM,
20682 + [1] = PCF50633_INT2_ONKEYF,
20683 + [2] = PCF50633_INT3_ONKEY1S
20684 + },
20685 +
20686 + .reg_init_data = {
20687 + /* GTA03: Main 3.3V rail */
20688 + [PCF50633_REGULATOR_AUTO] = {
20689 + .constraints = {
20690 + .min_uV = 3300000,
20691 + .max_uV = 3300000,
20692 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20693 + .apply_uV = 1,
20694 + .state_mem = {
20695 + .enabled = 1,
20696 + },
20697 + },
20698 + .num_consumer_supplies = 0,
20699 + },
20700 + /* GTA03: CPU core power */
20701 + [PCF50633_REGULATOR_DOWN1] = {
20702 + .constraints = {
20703 + .min_uV = 900000,
20704 + .max_uV = 1200000,
20705 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20706 + .apply_uV = 1,
20707 + },
20708 + .num_consumer_supplies = 0,
20709 + },
20710 + /* GTA03: Memories */
20711 + [PCF50633_REGULATOR_DOWN2] = {
20712 + .constraints = {
20713 + .min_uV = 1800000,
20714 + .max_uV = 1800000,
20715 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20716 + .apply_uV = 1,
20717 + .state_mem = {
20718 + .enabled = 1,
20719 + },
20720 + },
20721 + .num_consumer_supplies = 0,
20722 + },
20723 + /* GTA03: Camera 2V8 */
20724 + [PCF50633_REGULATOR_HCLDO] = {
20725 + .constraints = {
20726 + .min_uV = 2800000,
20727 + .max_uV = 2800000,
20728 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20729 + },
20730 + .num_consumer_supplies = 0,
20731 +/* .consumer_supplies = hcldo_consumers, */
20732 + },
20733 +
20734 + /* GTA03: Accel 3V3 */
20735 + [PCF50633_REGULATOR_LDO1] = {
20736 + .constraints = {
20737 + .min_uV = 3300000,
20738 + .max_uV = 3300000,
20739 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20740 + .apply_uV = 1,
20741 + },
20742 + .num_consumer_supplies = 0,
20743 + },
20744 + /* GTA03: Camera 1V5 */
20745 + [PCF50633_REGULATOR_LDO2] = {
20746 + .constraints = {
20747 + .min_uV = 1500000,
20748 + .max_uV = 1500000,
20749 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20750 + .apply_uV = 1,
20751 + },
20752 + .num_consumer_supplies = 0,
20753 + },
20754 + /* GTA03: Codec 3.3V */
20755 + [PCF50633_REGULATOR_LDO3] = {
20756 + .constraints = {
20757 + .min_uV = 3300000,
20758 + .max_uV = 3300000,
20759 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20760 + .apply_uV = 1,
20761 + },
20762 + .num_consumer_supplies = 0,
20763 + },
20764 + /* GTA03: uSD Power */
20765 + [PCF50633_REGULATOR_LDO4] = {
20766 + .constraints = {
20767 + .min_uV = 3000000,
20768 + .max_uV = 3000000,
20769 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20770 + .apply_uV = 1,
20771 + },
20772 + .num_consumer_supplies = 1,
20773 + .consumer_supplies = ldo4_consumers,
20774 + },
20775 + /* GTA03: GPS 3V */
20776 + [PCF50633_REGULATOR_LDO5] = {
20777 + .constraints = {
20778 + .min_uV = 3000000,
20779 + .max_uV = 3000000,
20780 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20781 + .apply_uV = 1,
20782 + },
20783 + .num_consumer_supplies = 1,
20784 + .consumer_supplies = ldo5_consumers,
20785 + },
20786 + /* GTA03: LCM 3V */
20787 + [PCF50633_REGULATOR_LDO6] = {
20788 + .constraints = {
20789 + .min_uV = 3000000,
20790 + .max_uV = 3000000,
20791 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20792 + .state_mem = {
20793 + .enabled = 1,
20794 + },
20795 + },
20796 + .num_consumer_supplies = 0,
20797 + },
20798 + /* power for memories in suspend */
20799 + [PCF50633_REGULATOR_MEMLDO] = {
20800 + .constraints = {
20801 + .min_uV = 1800000,
20802 + .max_uV = 1800000,
20803 + .valid_modes_mask = REGULATOR_MODE_NORMAL,
20804 + .state_mem = {
20805 + .enabled = 1,
20806 + },
20807 + },
20808 + .num_consumer_supplies = 0,
20809 + },
20810 +
20811 + },
20812 + .probe_done = om_gta03_pcf50633_attach_child_devices,
20813 + .regulator_registered = om_gta03_pmu_regulator_registered,
20814 + .mbc_event_callback = om_gta03_pmu_event_callback,
20815 +};
20816 +
20817 +
20818 +static struct i2c_board_info om_gta03_i2c_devs[] __initdata = {
20819 + {
20820 + I2C_BOARD_INFO("pcf50633", 0x73),
20821 + .irq = GTA03_IRQ_PMU,
20822 + .platform_data = &om_gta03_pcf_pdata,
20823 + },
20824 + {
20825 + I2C_BOARD_INFO("pcap7200", 0x0a),
20826 + .irq = GTA03_IRQ_TOUCH,
20827 + },
20828 +
20829 +};
20830 +
20831 +
20832 +static struct platform_device *om_gta03_devices[] __initdata = {
20833 + &s3c_device_fb,
20834 + &s3c_device_i2c0,
20835 + &s3c_device_hsmmc1, /* SDIO to WLAN */
20836 +};
20837 +
20838 +
20839 +static void om_gta03_pmu_regulator_registered(struct pcf50633 *pcf, int id)
20840 +{
20841 + struct platform_device *regulator, *pdev;
20842 +
20843 + regulator = pcf->pmic.pdev[id];
20844 +
20845 + switch(id) {
20846 + case PCF50633_REGULATOR_LDO4:
20847 + pdev = &s3c_device_hsmmc0;
20848 + break;
20849 + case PCF50633_REGULATOR_LDO5: /* GPS regulator */
20850 + pdev = &om_gta03_features_dev;
20851 + break;
20852 + case PCF50633_REGULATOR_LDO6:
20853 + pdev = &om_gta03_lcd_powerdev;
20854 + break;
20855 + default:
20856 + return;
20857 + }
20858 +
20859 + pdev->dev.parent = &regulator->dev;
20860 + platform_device_register(pdev);
20861 +}
20862 +
20863 +static struct platform_device *om_gta03_devices_pmu_children[] = {
20864 + &om_gta03_button_dev,
20865 + &s3c_device_spi_acc1, /* relies on PMU reg for power */
20866 +};
20867 +
20868 +/* this is called when pc50633 is probed, unfortunately quite late in the
20869 + * day since it is an I2C bus device. Here we can belatedly define some
20870 + * platform devices with the advantage that we can mark the pcf50633 as the
20871 + * parent. This makes them get suspended and resumed with their parent
20872 + * the pcf50633 still around.
20873 + */
20874 +
20875 +static void om_gta03_pcf50633_attach_child_devices(struct pcf50633 *pcf)
20876 +{
20877 + int n;
20878 +
20879 + for (n = 0; n < ARRAY_SIZE(om_gta03_devices_pmu_children); n++)
20880 + om_gta03_devices_pmu_children[n]->dev.parent = pcf->dev;
20881 +
20882 + platform_add_devices(om_gta03_devices_pmu_children,
20883 + ARRAY_SIZE(om_gta03_devices_pmu_children));
20884 +
20885 + /* Switch on backlight. Qi does not do it for us */
20886 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0x00);
20887 + pcf50633_reg_write(pcf, PCF50633_REG_LEDDIM, 0x01);
20888 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0x01);
20889 + pcf50633_reg_write(pcf, PCF50633_REG_LEDOUT, 0x3f);
20890 +
20891 +}
20892 +
20893 +
20894 +
20895 +extern void s3c64xx_init_io(struct map_desc *, int);
20896 +
20897 +static void __init om_gta03_map_io(void)
20898 +{
20899 + s3c64xx_init_io(om_gta03_6410_iodesc, ARRAY_SIZE(om_gta03_6410_iodesc));
20900 + s3c24xx_init_clocks(12000000);
20901 + s3c24xx_init_uarts(om_gta03_uartcfgs, ARRAY_SIZE(om_gta03_uartcfgs));
20902 +}
20903 +
20904 +static void __init om_gta03_machine_init(void)
20905 +{
20906 + s3c_pm_init();
20907 +
20908 + s3c_i2c0_set_platdata(NULL);
20909 + s3c_fb_set_platdata(&om_gta03_lcd_pdata);
20910 +
20911 + s3c_gpio_setpull(S3C64XX_GPH(0), S3C_GPIO_PULL_UP);
20912 + s3c_gpio_setpull(S3C64XX_GPH(1), S3C_GPIO_PULL_UP);
20913 + s3c_gpio_setpull(S3C64XX_GPH(2), S3C_GPIO_PULL_UP);
20914 + s3c_gpio_setpull(S3C64XX_GPH(3), S3C_GPIO_PULL_UP);
20915 + s3c_gpio_setpull(S3C64XX_GPH(4), S3C_GPIO_PULL_UP);
20916 + s3c_gpio_setpull(S3C64XX_GPH(5), S3C_GPIO_PULL_UP);
20917 +
20918 +
20919 + i2c_register_board_info(0, om_gta03_i2c_devs,
20920 + ARRAY_SIZE(om_gta03_i2c_devs));
20921 +
20922 + platform_add_devices(om_gta03_devices, ARRAY_SIZE(om_gta03_devices));
20923 +}
20924 +
20925 +MACHINE_START(OPENMOKO_GTA03, "OM-GTA03")
20926 + /* Maintainer: Andy Green <andy@openmoko.com> */
20927 + .phys_io = S3C_PA_UART & 0xfff00000,
20928 + .io_pg_offst = (((u32)S3C_VA_UART) >> 18) & 0xfffc,
20929 + .boot_params = S3C64XX_PA_SDRAM + 0x100,
20930 +
20931 + .init_irq = s3c6410_init_irq,
20932 + .map_io = om_gta03_map_io,
20933 + .init_machine = om_gta03_machine_init,
20934 + .timer = &s3c24xx_timer,
20935 +MACHINE_END
20936 +
20937 Index: linux-2.6.28/arch/arm/mach-s3c6410/mach-smdk6410.c
20938 ===================================================================
20939 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
20940 +++ linux-2.6.28/arch/arm/mach-s3c6410/mach-smdk6410.c 2009-01-02 00:01:56.000000000 +0100
20941 @@ -0,0 +1,205 @@
20942 +/* linux/arch/arm/mach-s3c6410/mach-smdk6410.c
20943 + *
20944 + * Copyright 2008 Openmoko, Inc.
20945 + * Copyright 2008 Simtec Electronics
20946 + * Ben Dooks <ben@simtec.co.uk>
20947 + * http://armlinux.simtec.co.uk/
20948 + *
20949 + * This program is free software; you can redistribute it and/or modify
20950 + * it under the terms of the GNU General Public License version 2 as
20951 + * published by the Free Software Foundation.
20952 + *
20953 +*/
20954 +
20955 +#include <linux/kernel.h>
20956 +#include <linux/types.h>
20957 +#include <linux/interrupt.h>
20958 +#include <linux/list.h>
20959 +#include <linux/timer.h>
20960 +#include <linux/init.h>
20961 +#include <linux/serial_core.h>
20962 +#include <linux/platform_device.h>
20963 +#include <linux/io.h>
20964 +#include <linux/i2c.h>
20965 +#include <linux/fb.h>
20966 +#include <linux/gpio.h>
20967 +#include <linux/delay.h>
20968 +
20969 +#include <video/platform_lcd.h>
20970 +
20971 +#include <asm/mach/arch.h>
20972 +#include <asm/mach/map.h>
20973 +#include <asm/mach/irq.h>
20974 +
20975 +#include <mach/hardware.h>
20976 +#include <mach/regs-fb.h>
20977 +#include <mach/map.h>
20978 +
20979 +#include <asm/irq.h>
20980 +#include <asm/mach-types.h>
20981 +
20982 +#include <plat/regs-serial.h>
20983 +#include <plat/regs-modem.h>
20984 +#include <plat/regs-gpio.h>
20985 +#include <plat/regs-sys.h>
20986 +#include <plat/iic.h>
20987 +#include <plat/fb.h>
20988 +#include <plat/pm.h>
20989 +
20990 +#include <plat/s3c6410.h>
20991 +#include <plat/clock.h>
20992 +#include <plat/devs.h>
20993 +#include <plat/cpu.h>
20994 +
20995 +#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
20996 +#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
20997 +#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
20998 +
20999 +static struct s3c2410_uartcfg smdk6410_uartcfgs[] __initdata = {
21000 + [0] = {
21001 + .hwport = 0,
21002 + .flags = 0,
21003 + .ucon = 0x3c5,
21004 + .ulcon = 0x03,
21005 + .ufcon = 0x51,
21006 + },
21007 + [1] = {
21008 + .hwport = 1,
21009 + .flags = 0,
21010 + .ucon = 0x3c5,
21011 + .ulcon = 0x03,
21012 + .ufcon = 0x51,
21013 + },
21014 +};
21015 +
21016 +/* framebuffer and LCD setup. */
21017 +
21018 +/* GPF15 = LCD backlight control
21019 + * GPF13 => Panel power
21020 + * GPN5 = LCD nRESET signal
21021 + * PWM_TOUT1 => backlight brightness
21022 + */
21023 +
21024 +static void smdk6410_lcd_power_set(struct plat_lcd_data *pd,
21025 + unsigned int power)
21026 +{
21027 + if (power) {
21028 + gpio_direction_output(S3C64XX_GPF(13), 1);
21029 + gpio_direction_output(S3C64XX_GPF(15), 1);
21030 +
21031 + /* fire nRESET on power up */
21032 + gpio_direction_output(S3C64XX_GPN(5), 0);
21033 + msleep(10);
21034 + gpio_direction_output(S3C64XX_GPN(5), 1);
21035 + msleep(1);
21036 + } else {
21037 + gpio_direction_output(S3C64XX_GPF(15), 0);
21038 + gpio_direction_output(S3C64XX_GPF(13), 0);
21039 + }
21040 +}
21041 +
21042 +static struct plat_lcd_data smdk6410_lcd_power_data = {
21043 + .set_power = smdk6410_lcd_power_set,
21044 +};
21045 +
21046 +static struct platform_device smdk6410_lcd_powerdev = {
21047 + .name = "platform-lcd",
21048 + .dev.parent = &s3c_device_fb.dev,
21049 + .dev.platform_data = &smdk6410_lcd_power_data,
21050 +};
21051 +
21052 +static struct s3c_fb_pd_win smdk6410_fb_win0 = {
21053 + /* this is to ensure we use win0 */
21054 + .win_mode = {
21055 + .pixclock = 41094,
21056 + .left_margin = 8,
21057 + .right_margin = 13,
21058 + .upper_margin = 7,
21059 + .lower_margin = 5,
21060 + .hsync_len = 3,
21061 + .vsync_len = 1,
21062 + .xres = 800,
21063 + .yres = 480,
21064 + },
21065 + .max_bpp = 32,
21066 + .default_bpp = 16,
21067 +};
21068 +
21069 +/* 405566 clocks per frame => 60Hz refresh requires 24333960Hz clock */
21070 +static struct s3c_fb_platdata smdk6410_lcd_pdata __initdata = {
21071 + .setup_gpio = s3c64xx_fb_gpio_setup_24bpp,
21072 + .win[0] = &smdk6410_fb_win0,
21073 + .vidcon0 = VIDCON0_VIDOUT_RGB | VIDCON0_PNRMODE_RGB,
21074 + .vidcon1 = VIDCON1_INV_HSYNC | VIDCON1_INV_VSYNC,
21075 +};
21076 +
21077 +struct map_desc smdk6410_iodesc[] = {};
21078 +
21079 +static struct platform_device *smdk6410_devices[] __initdata = {
21080 +#ifdef CONFIG_SMDK6410_SD_CH0
21081 + &s3c_device_hsmmc0,
21082 +#endif
21083 +#ifdef CONFIG_SMDK6410_SD_CH1
21084 + &s3c_device_hsmmc1,
21085 +#endif
21086 + &s3c_device_i2c0,
21087 + &s3c_device_i2c1,
21088 + &s3c_device_fb,
21089 + &smdk6410_lcd_powerdev,
21090 +};
21091 +
21092 +static struct i2c_board_info i2c_devs0[] __initdata = {
21093 + { I2C_BOARD_INFO("24c08", 0x50), },
21094 + { I2C_BOARD_INFO("WM8580", 0X1b), },
21095 +};
21096 +
21097 +static struct i2c_board_info i2c_devs1[] __initdata = {
21098 + { I2C_BOARD_INFO("24c128", 0x57), }, /* Samsung S524AD0XD1 */
21099 +};
21100 +
21101 +static void __init smdk6410_map_io(void)
21102 +{
21103 + u32 tmp;
21104 +
21105 + s3c64xx_init_io(smdk6410_iodesc, ARRAY_SIZE(smdk6410_iodesc));
21106 + s3c24xx_init_clocks(12000000);
21107 + s3c24xx_init_uarts(smdk6410_uartcfgs, ARRAY_SIZE(smdk6410_uartcfgs));
21108 +
21109 + /* set the LCD type */
21110 +
21111 + tmp = __raw_readl(S3C64XX_SPCON);
21112 + tmp &= ~S3C64XX_SPCON_LCD_SEL_MASK;
21113 + tmp |= S3C64XX_SPCON_LCD_SEL_RGB;
21114 + __raw_writel(tmp, S3C64XX_SPCON);
21115 +
21116 + /* remove the lcd bypass */
21117 + tmp = __raw_readl(S3C64XX_MODEM_MIFPCON);
21118 + tmp &= ~MIFPCON_LCD_BYPASS;
21119 + __raw_writel(tmp, S3C64XX_MODEM_MIFPCON);
21120 +}
21121 +
21122 +static void __init smdk6410_machine_init(void)
21123 +{
21124 + s3c_pm_init();
21125 +
21126 + s3c_i2c0_set_platdata(NULL);
21127 + s3c_i2c1_set_platdata(NULL);
21128 + s3c_fb_set_platdata(&smdk6410_lcd_pdata);
21129 +
21130 + i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
21131 + i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
21132 +
21133 + platform_add_devices(smdk6410_devices, ARRAY_SIZE(smdk6410_devices));
21134 +}
21135 +
21136 +MACHINE_START(SMDK6410, "SMDK6410")
21137 + /* Maintainer: Ben Dooks <ben@fluff.org> */
21138 + .phys_io = S3C_PA_UART & 0xfff00000,
21139 + .io_pg_offst = (((u32)S3C_VA_UART) >> 18) & 0xfffc,
21140 + .boot_params = S3C64XX_PA_SDRAM + 0x100,
21141 +
21142 + .init_irq = s3c6410_init_irq,
21143 + .map_io = smdk6410_map_io,
21144 + .init_machine = smdk6410_machine_init,
21145 + .timer = &s3c24xx_timer,
21146 +MACHINE_END
21147 Index: linux-2.6.28/arch/arm/mach-s3c6410/Makefile
21148 ===================================================================
21149 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
21150 +++ linux-2.6.28/arch/arm/mach-s3c6410/Makefile 2009-01-02 00:01:56.000000000 +0100
21151 @@ -0,0 +1,26 @@
21152 +# arch/arm/plat-s3c6410/Makefile
21153 +#
21154 +# Copyright 2008 Openmoko, Inc.
21155 +# Copyright 2008 Simtec Electronics
21156 +#
21157 +# Licensed under GPLv2
21158 +
21159 +obj-y :=
21160 +obj-m :=
21161 +obj-n :=
21162 +obj- :=
21163 +
21164 +# Core support for S3C6410 system
21165 +
21166 +obj-$(CONFIG_CPU_S3C6410) += cpu.o
21167 +
21168 +# Helper and device support
21169 +
21170 +obj-$(CONFIG_S3C6410_SETUP_SDHCI) += setup-sdhci.o
21171 +
21172 +# machine support
21173 +
21174 +obj-$(CONFIG_MACH_SMDK6410) += mach-smdk6410.o
21175 +obj-$(CONFIG_MACH_OPENMOKO_GTA03) += mach-om-gta03.o \
21176 + om-gta03-features.o
21177 +
21178 Index: linux-2.6.28/arch/arm/mach-s3c6410/om-gta03-features.c
21179 ===================================================================
21180 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
21181 +++ linux-2.6.28/arch/arm/mach-s3c6410/om-gta03-features.c 2009-01-02 00:01:56.000000000 +0100
21182 @@ -0,0 +1,344 @@
21183 +/*
21184 + * Support for features of Openmoko GTA03
21185 + *
21186 + * (C) 2008 by Openmoko Inc.
21187 + * Author: Andy Green <andy@openmoko.com>
21188 + * All rights reserved.
21189 + *
21190 + * Somewhat based on the GTA01 / 02 neo1973_pm_ stuff mainly by Harald Welte
21191 + *
21192 + * This program is free software; you can redistribute it and/or modify
21193 + * it under the terms of the GNU General Public License version 2 as
21194 + * published by the Free Software Foundation
21195 + *
21196 + */
21197 +
21198 +#include <linux/module.h>
21199 +#include <linux/init.h>
21200 +#include <linux/kernel.h>
21201 +#include <linux/delay.h>
21202 +#include <linux/platform_device.h>
21203 +
21204 +#include <mach/hardware.h>
21205 +#include <mach/om-gta03.h>
21206 +#include <asm/mach-types.h>
21207 +
21208 +#include <linux/regulator/consumer.h>
21209 +#include <linux/mfd/pcf50633/core.h>
21210 +#include <linux/mfd/pcf50633/gpio.h>
21211 +#include <linux/mmc/host.h>
21212 +
21213 +#include <plat/sdhci.h>
21214 +#include <plat/devs.h>
21215 +
21216 +#include <plat/gpio-cfg.h>
21217 +
21218 +enum feature {
21219 + OM_GTA03_GPS, /* power to GPS section and LNA */
21220 + OM_GTA03_WLAN_BT, /* WLAN and BT Module */
21221 + OM_GTA03_GSM, /* GSM module */
21222 + OM_GTA03_USBHOST, /* USB Host power generation */
21223 + OM_GTA03_VIB, /* Vibrator */
21224 +
21225 + OM_GTA03_FEATURE_COUNT /* always last */
21226 +};
21227 +
21228 +
21229 +struct om_gta03_feature_info {
21230 + const char * name;
21231 + int depower_on_suspend;
21232 + int on;
21233 +};
21234 +
21235 +static struct om_gta03_feature_info feature_info[OM_GTA03_FEATURE_COUNT] = {
21236 + [OM_GTA03_GPS] = { "gps_power", 1, 0 },
21237 + [OM_GTA03_WLAN_BT] = { "wlan_bt_power", 1, 0 },
21238 + [OM_GTA03_GSM] = { "gsm_power", 0, 0 },
21239 + [OM_GTA03_USBHOST] = { "usbhost_power", 1, 0 },
21240 + [OM_GTA03_VIB] = { "vibrator_power", 1, 0 },
21241 +};
21242 +
21243 +static struct regulator *gps_regulator;
21244 +
21245 +
21246 +
21247 +static void om_gta03_features_pwron_set_on(enum feature feature)
21248 +{
21249 + int gpio;
21250 +
21251 + switch (feature) {
21252 + case OM_GTA03_GPS:
21253 + regulator_enable(gps_regulator);
21254 + /* enable LNA */
21255 + gpio_direction_output(GTA03_GPIO_GPS_LNA_EN, 1);
21256 + break;
21257 + case OM_GTA03_WLAN_BT:
21258 +
21259 + for (gpio = S3C64XX_GPH(0); gpio < S3C64XX_GPH(6); gpio++) {
21260 + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)); /* sdio */
21261 + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
21262 + }
21263 + /* assert reset */
21264 + s3c_gpio_setpull(GTA03_GPIO_WLAN_RESET, S3C_GPIO_PULL_NONE);
21265 + s3c_gpio_cfgpin(GTA03_GPIO_WLAN_RESET, S3C_GPIO_SFN(1));
21266 + gpio_direction_output(GTA03_GPIO_WLAN_RESET, 0);
21267 +
21268 + /* "full power down (active low)" -- deassert it*/
21269 + gpio_direction_output(GTA03_GPIO_WLAN_PWRDN, 1);
21270 + s3c_gpio_setpull(GTA03_GPIO_WLAN_PWRDN, S3C_GPIO_PULL_NONE);
21271 + s3c_gpio_cfgpin(GTA03_GPIO_WLAN_PWRDN, S3C_GPIO_SFN(1));
21272 +
21273 + /* enable P-Channel mosfet switch for power */
21274 + gpio_direction_output(GTA03_GPIO_NWLAN_POWER, 0);
21275 + s3c_gpio_setpull(GTA03_GPIO_NWLAN_POWER, S3C_GPIO_PULL_NONE);
21276 + s3c_gpio_cfgpin(GTA03_GPIO_NWLAN_POWER, S3C_GPIO_SFN(1));
21277 + msleep(50);
21278 + /* deassert reset */
21279 + gpio_direction_output(GTA03_GPIO_WLAN_RESET, 1);
21280 + msleep(1500);
21281 + sdhci_s3c_force_presence_change(&s3c_device_hsmmc1);
21282 + break;
21283 + case OM_GTA03_GSM:
21284 + /* give power to GSM module */
21285 + s3c_gpio_setpull(GTA03_GPIO_N_MODEM_RESET, S3C_GPIO_PULL_NONE);
21286 + s3c_gpio_cfgpin(GTA03_GPIO_N_MODEM_RESET, S3C_GPIO_SFN(1));
21287 + gpio_direction_output(GTA03_GPIO_N_MODEM_RESET, 0);
21288 +
21289 + gpio_direction_output(GTA03_GPIO_MODEN_ON, 0);
21290 + s3c_gpio_setpull(GTA03_GPIO_MODEN_ON, S3C_GPIO_PULL_NONE);
21291 + s3c_gpio_cfgpin(GTA03_GPIO_MODEN_ON, S3C_GPIO_SFN(1));
21292 + msleep(1);
21293 + gpio_direction_output(GTA03_GPIO_N_MODEM_RESET, 1);
21294 + break;
21295 + case OM_GTA03_USBHOST:
21296 + pcf50633_gpio_set(om_gta03_pcf_pdata.pcf, PCF50633_GPO, 1);
21297 + break;
21298 + case OM_GTA03_VIB:
21299 + gpio_direction_output(GTA03_GPIO_VIBRATOR_ON, 1);
21300 + break;
21301 + default:
21302 + break;
21303 + }
21304 +}
21305 +
21306 +static void om_gta03_features_pwron_set_off(enum feature feature)
21307 +{
21308 + int gpio;
21309 +
21310 + switch (feature) {
21311 + case OM_GTA03_GPS:
21312 + /* disable LNA */
21313 + gpio_direction_output(GTA03_GPIO_GPS_LNA_EN, 0);
21314 + regulator_disable(gps_regulator);
21315 + break;
21316 + case OM_GTA03_WLAN_BT:
21317 + gpio_direction_output(GTA03_GPIO_WLAN_RESET, 0);
21318 + s3c_gpio_setpull(GTA03_GPIO_WLAN_RESET, S3C_GPIO_PULL_NONE);
21319 + s3c_gpio_cfgpin(GTA03_GPIO_WLAN_RESET, S3C_GPIO_SFN(1));
21320 +
21321 + gpio_direction_output(GTA03_GPIO_WLAN_PWRDN, 0);
21322 + s3c_gpio_setpull(GTA03_GPIO_WLAN_PWRDN, S3C_GPIO_PULL_NONE);
21323 + s3c_gpio_cfgpin(GTA03_GPIO_WLAN_PWRDN, S3C_GPIO_SFN(1));
21324 + msleep(500);
21325 + /* remove power from WLAN / BT module */
21326 + gpio_direction_output(GTA03_GPIO_NWLAN_POWER, 1);
21327 + s3c_gpio_setpull(GTA03_GPIO_NWLAN_POWER, S3C_GPIO_PULL_NONE);
21328 + s3c_gpio_cfgpin(GTA03_GPIO_NWLAN_POWER, S3C_GPIO_SFN(1));
21329 +
21330 + sdhci_s3c_force_presence_change(&s3c_device_hsmmc1);
21331 + for (gpio = S3C64XX_GPH(0); gpio < S3C64XX_GPH(6); gpio++) {
21332 + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(0)); /* input */
21333 + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_DOWN);
21334 + }
21335 + break;
21336 + case OM_GTA03_GSM:
21337 + /* remove power from WLAN / BT module */
21338 + gpio_direction_output(GTA03_GPIO_MODEN_ON, 1);
21339 + s3c_gpio_setpull(GTA03_GPIO_MODEN_ON, S3C_GPIO_PULL_NONE);
21340 + s3c_gpio_cfgpin(GTA03_GPIO_MODEN_ON, S3C_GPIO_SFN(1));
21341 + break;
21342 + case OM_GTA03_USBHOST:
21343 + pcf50633_gpio_set(om_gta03_pcf_pdata.pcf, PCF50633_GPO, 0);
21344 + break;
21345 + case OM_GTA03_VIB:
21346 + gpio_direction_output(GTA03_GPIO_VIBRATOR_ON, 0);
21347 + break;
21348 + default:
21349 + break;
21350 + }
21351 +}
21352 +
21353 +static void om_gta03_features_pwron_set(enum feature feature, int on)
21354 +{
21355 + if ((on) && (!feature_info[feature].on))
21356 + om_gta03_features_pwron_set_on(feature);
21357 + else
21358 + if ((!on) && (feature_info[feature].on))
21359 + om_gta03_features_pwron_set_off(feature);
21360 +}
21361 +
21362 +static ssize_t om_gta03_feature_read(struct device *dev,
21363 + struct device_attribute *attr, char *buf)
21364 +{
21365 + int on;
21366 + int feature = 0;
21367 + int hit = 0;
21368 +
21369 + while (!hit && feature < OM_GTA03_FEATURE_COUNT) {
21370 + if (!strcmp(attr->attr.name, feature_info[feature].name))
21371 + hit = 1;
21372 + else
21373 + feature++;
21374 + }
21375 +
21376 + if (!hit)
21377 + return -EINVAL;
21378 +
21379 + switch (feature) {
21380 + case OM_GTA03_GPS:
21381 + on = regulator_is_enabled(gps_regulator);
21382 + break;
21383 + case OM_GTA03_USBHOST:
21384 + on = pcf50633_gpio_get(om_gta03_pcf_pdata.pcf, PCF50633_GPO);
21385 + break;
21386 + default:
21387 + on = feature_info[feature].on;
21388 + }
21389 +
21390 + *buf++ = '0' + on;
21391 + *buf++='\n';
21392 + *buf = '\0';
21393 +
21394 + return 3;
21395 +}
21396 +
21397 +static ssize_t om_gta03_feature_write(struct device *dev,
21398 + struct device_attribute *attr,
21399 + const char *buf, size_t count)
21400 +{
21401 + int on = !!simple_strtoul(buf, NULL, 10);
21402 + int feature = 0;
21403 + int hit = 0;
21404 +
21405 + while (!hit && feature < OM_GTA03_FEATURE_COUNT) {
21406 + if (!strcmp(attr->attr.name, feature_info[feature].name))
21407 + hit = 1;
21408 + else
21409 + feature++;
21410 + }
21411 +
21412 + if (!hit)
21413 + return -EINVAL;
21414 +
21415 + om_gta03_features_pwron_set(feature, on);
21416 + feature_info[feature].on = on;
21417 +
21418 + return count;
21419 +}
21420 +
21421 +
21422 +static DEVICE_ATTR(gps_power, 0644, om_gta03_feature_read,
21423 + om_gta03_feature_write);
21424 +
21425 +static DEVICE_ATTR(wlan_bt_power, 0644, om_gta03_feature_read,
21426 + om_gta03_feature_write);
21427 +
21428 +static DEVICE_ATTR(gsm_power, 0644, om_gta03_feature_read,
21429 + om_gta03_feature_write);
21430 +
21431 +static DEVICE_ATTR(usbhost_power, 0644, om_gta03_feature_read,
21432 + om_gta03_feature_write);
21433 +
21434 +static DEVICE_ATTR(vibrator_power, 0644, om_gta03_feature_read,
21435 + om_gta03_feature_write);
21436 +
21437 +
21438 +static struct attribute *om_gta03_features_sysfs_entries[] = {
21439 + &dev_attr_gps_power.attr,
21440 + &dev_attr_wlan_bt_power.attr,
21441 + &dev_attr_gsm_power.attr,
21442 + &dev_attr_usbhost_power.attr,
21443 + &dev_attr_vibrator_power.attr,
21444 + NULL
21445 +};
21446 +
21447 +
21448 +static struct attribute_group om_gta03_features_attr_group = {
21449 + .name = NULL,
21450 + .attrs = om_gta03_features_sysfs_entries,
21451 +};
21452 +
21453 +static int __init om_gta03_features_probe(struct platform_device *pdev)
21454 +{
21455 + gps_regulator = regulator_get(&pdev->dev, "RF_3V");
21456 + dev_info(&pdev->dev, "starting\n");
21457 +
21458 + return sysfs_create_group(&pdev->dev.kobj,
21459 + &om_gta03_features_attr_group);
21460 +}
21461 +
21462 +static int om_gta03_features_remove(struct platform_device *pdev)
21463 +{
21464 +
21465 + regulator_put(gps_regulator);
21466 + sysfs_remove_group(&pdev->dev.kobj, &om_gta03_features_attr_group);
21467 +
21468 + return 0;
21469 +}
21470 +
21471 +
21472 +#ifdef CONFIG_PM
21473 +static int om_gta03_features_suspend(struct platform_device *pdev,
21474 + pm_message_t state)
21475 +{
21476 + int feature;
21477 +
21478 + for (feature = 0; feature < OM_GTA03_FEATURE_COUNT; feature++)
21479 + if (feature_info[feature].depower_on_suspend)
21480 + om_gta03_features_pwron_set_off(feature);
21481 +
21482 + return 0;
21483 +}
21484 +
21485 +static int om_gta03_features_resume(struct platform_device *pdev)
21486 +{
21487 + int feature;
21488 +
21489 + for (feature = 0; feature < OM_GTA03_FEATURE_COUNT; feature++)
21490 + if (feature_info[feature].depower_on_suspend)
21491 + if (feature_info[feature].on)
21492 + om_gta03_features_pwron_set_on(feature);
21493 +
21494 + return 0;
21495 +}
21496 +#else
21497 +#define om_gta03_features_suspend NULL
21498 +#define om_gta03_features_resume NULL
21499 +#endif
21500 +
21501 +static struct platform_driver om_gta03_features_driver = {
21502 + .probe = om_gta03_features_probe,
21503 + .remove = om_gta03_features_remove,
21504 + .suspend = om_gta03_features_suspend,
21505 + .resume = om_gta03_features_resume,
21506 + .driver = {
21507 + .name = "om-gta03",
21508 + },
21509 +};
21510 +
21511 +static int __devinit om_gta03_features_init(void)
21512 +{
21513 + return platform_driver_register(&om_gta03_features_driver);
21514 +}
21515 +
21516 +static void om_gta03_features_exit(void)
21517 +{
21518 + platform_driver_unregister(&om_gta03_features_driver);
21519 +}
21520 +
21521 +module_init(om_gta03_features_init);
21522 +module_exit(om_gta03_features_exit);
21523 +
21524 +MODULE_LICENSE("GPL");
21525 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
21526 +MODULE_DESCRIPTION("Openmoko GTA03 Feature Driver");
21527 Index: linux-2.6.28/arch/arm/mach-s3c6410/setup-sdhci.c
21528 ===================================================================
21529 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
21530 +++ linux-2.6.28/arch/arm/mach-s3c6410/setup-sdhci.c 2009-01-02 00:01:56.000000000 +0100
21531 @@ -0,0 +1,103 @@
21532 +/* linux/arch/arm/mach-s3c6410/setup-sdhci.c
21533 + *
21534 + * Copyright 2008 Simtec Electronics
21535 + * Copyright 2008 Simtec Electronics
21536 + * Ben Dooks <ben@simtec.co.uk>
21537 + * http://armlinux.simtec.co.uk/
21538 + *
21539 + * S3C6410 - Helper functions for settign up SDHCI device(s) (HSMMC)
21540 + *
21541 + * This program is free software; you can redistribute it and/or modify
21542 + * it under the terms of the GNU General Public License version 2 as
21543 + * published by the Free Software Foundation.
21544 +*/
21545 +
21546 +#include <linux/kernel.h>
21547 +#include <linux/types.h>
21548 +#include <linux/interrupt.h>
21549 +#include <linux/platform_device.h>
21550 +#include <linux/io.h>
21551 +
21552 +#include <linux/mmc/card.h>
21553 +#include <linux/mmc/host.h>
21554 +
21555 +#include <mach/gpio.h>
21556 +#include <plat/gpio-cfg.h>
21557 +#include <plat/regs-sdhci.h>
21558 +#include <plat/sdhci.h>
21559 +
21560 +/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */
21561 +
21562 +char *s3c6410_hsmmc_clksrcs[4] = {
21563 + [0] = "hsmmc",
21564 + [1] = "hsmmc",
21565 + [2] = "mmc_bus",
21566 + /* [3] = "48m", - note not succesfully used yet */
21567 +};
21568 +
21569 +void s3c6410_setup_sdhci0_cfg_gpio(struct platform_device *dev, int width)
21570 +{
21571 + unsigned int gpio;
21572 + unsigned int end;
21573 +
21574 + end = S3C64XX_GPG(2 + width);
21575 +
21576 + /* Set all the necessary GPG pins to special-function 0 */
21577 + for (gpio = S3C64XX_GPG(0); gpio < end; gpio++) {
21578 + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
21579 + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
21580 + }
21581 +
21582 + /* FIXME this needs defining in machine as to if we even have CD */
21583 + s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_DOWN);
21584 + s3c_gpio_cfgpin(S3C64XX_GPG(6), S3C_GPIO_SFN(2));
21585 +}
21586 +
21587 +void s3c6410_setup_sdhci0_cfg_card(struct platform_device *dev,
21588 + void __iomem *r,
21589 + struct mmc_ios *ios,
21590 + struct mmc_card *card)
21591 +{
21592 + u32 ctrl2, ctrl3;
21593 +
21594 + /* don't need to alter anything acording to card-type */
21595 +
21596 + writel(S3C64XX_SDHCI_CONTROL4_DRIVE_9mA, r + S3C64XX_SDHCI_CONTROL4);
21597 +
21598 + ctrl2 = readl(r + S3C_SDHCI_CONTROL2);
21599 + ctrl2 &= S3C_SDHCI_CTRL2_SELBASECLK_MASK;
21600 + ctrl2 |= (S3C64XX_SDHCI_CTRL2_ENSTAASYNCCLR |
21601 + S3C64XX_SDHCI_CTRL2_ENCMDCNFMSK |
21602 + S3C_SDHCI_CTRL2_ENFBCLKRX |
21603 + S3C_SDHCI_CTRL2_DFCNT_NONE |
21604 + S3C_SDHCI_CTRL2_ENCLKOUTHOLD);
21605 +
21606 + if (ios->clock < 25 * 1000000)
21607 + ctrl3 = (S3C_SDHCI_CTRL3_FCSEL3 |
21608 + S3C_SDHCI_CTRL3_FCSEL2 |
21609 + S3C_SDHCI_CTRL3_FCSEL1 |
21610 + S3C_SDHCI_CTRL3_FCSEL0);
21611 + else
21612 + ctrl3 = (S3C_SDHCI_CTRL3_FCSEL1 | S3C_SDHCI_CTRL3_FCSEL0);
21613 +
21614 + printk(KERN_INFO "%s: %p CTRL 2=%08x, 3=%08x\n", __func__, r, ctrl2, ctrl3);
21615 + writel(ctrl2, r + S3C_SDHCI_CONTROL2);
21616 + writel(ctrl3, r + S3C_SDHCI_CONTROL3);
21617 +}
21618 +
21619 +void s3c6410_setup_sdhci1_cfg_gpio(struct platform_device *dev, int width)
21620 +{
21621 + unsigned int gpio;
21622 + unsigned int end;
21623 +
21624 + end = S3C64XX_GPH(2 + width);
21625 +
21626 + /* Set all the necessary GPG pins to special-function 0 */
21627 + for (gpio = S3C64XX_GPH(0); gpio < end; gpio++) {
21628 + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
21629 + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP);
21630 + }
21631 +
21632 +// s3c_gpio_setpull(S3C64XX_GPG(6), S3C_GPIO_PULL_UP);
21633 +// s3c_gpio_cfgpin(S3C64XX_GPG(6), S3C_GPIO_SFN(3));
21634 +}
21635 Index: linux-2.6.28/arch/arm/Makefile
21636 ===================================================================
21637 --- linux-2.6.28.orig/arch/arm/Makefile 2008-12-25 00:26:37.000000000 +0100
21638 +++ linux-2.6.28/arch/arm/Makefile 2009-01-02 00:01:56.000000000 +0100
21639 @@ -121,7 +121,10 @@ endif
21640 machine-$(CONFIG_ARCH_OMAP3) := omap2
21641 plat-$(CONFIG_ARCH_OMAP) := omap
21642 machine-$(CONFIG_ARCH_S3C2410) := s3c2410 s3c2400 s3c2412 s3c2440 s3c2442 s3c2443
21643 + machine-$(CONFIG_ARCH_S3C24A0) := s3c24a0
21644 plat-$(CONFIG_PLAT_S3C24XX) := s3c24xx s3c
21645 + machine-$(CONFIG_ARCH_S3C64XX) := s3c6400 s3c6410
21646 + plat-$(CONFIG_PLAT_S3C64XX) := s3c64xx s3c
21647 machine-$(CONFIG_ARCH_LH7A40X) := lh7a40x
21648 machine-$(CONFIG_ARCH_VERSATILE) := versatile
21649 machine-$(CONFIG_ARCH_IMX) := imx
21650 Index: linux-2.6.28/arch/arm/mm/Kconfig
21651 ===================================================================
21652 --- linux-2.6.28.orig/arch/arm/mm/Kconfig 2008-12-25 00:26:37.000000000 +0100
21653 +++ linux-2.6.28/arch/arm/mm/Kconfig 2009-01-02 00:01:56.000000000 +0100
21654 @@ -183,14 +183,14 @@ config CPU_ARM926T
21655 depends on ARCH_INTEGRATOR || ARCH_VERSATILE_PB || \
21656 MACH_VERSATILE_AB || ARCH_OMAP730 || \
21657 ARCH_OMAP16XX || MACH_REALVIEW_EB || \
21658 - ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || \
21659 + ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_S3C24A0 || \
21660 ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || \
21661 ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || \
21662 ARCH_AT91SAM9G20 || ARCH_AT91CAP9 || \
21663 ARCH_NS9XXX || ARCH_DAVINCI || ARCH_MX2
21664 default y if ARCH_VERSATILE_PB || MACH_VERSATILE_AB || \
21665 ARCH_OMAP730 || ARCH_OMAP16XX || \
21666 - ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || \
21667 + ARCH_PNX4008 || ARCH_NETX || CPU_S3C2412 || ARCH_S3C24A0 || \
21668 ARCH_AT91SAM9260 || ARCH_AT91SAM9261 || \
21669 ARCH_AT91SAM9263 || ARCH_AT91SAM9RL || \
21670 ARCH_AT91SAM9G20 || ARCH_AT91CAP9 || \
21671 @@ -400,9 +400,10 @@ config CPU_FEROCEON_OLD_ID
21672 # ARMv6
21673 config CPU_V6
21674 bool "Support ARM V6 processor"
21675 - depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_MSM || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176
21676 + depends on ARCH_INTEGRATOR || MACH_REALVIEW_EB || ARCH_OMAP2 || ARCH_MX3 || ARCH_MSM || MACH_REALVIEW_PB11MP || MACH_REALVIEW_PB1176 || ARCH_S3C64XX
21677 default y if ARCH_MX3
21678 default y if ARCH_MSM
21679 + default y if ARCH_S3C64XX
21680 select CPU_32v6
21681 select CPU_ABRT_EV6
21682 select CPU_PABRT_NOIFAR
21683 Index: linux-2.6.28/arch/arm/plat-s3c/clock.c
21684 ===================================================================
21685 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
21686 +++ linux-2.6.28/arch/arm/plat-s3c/clock.c 2009-01-02 00:01:56.000000000 +0100
21687 @@ -0,0 +1,369 @@
21688 +/* linux/arch/arm/plat-s3c24xx/clock.c
21689 + *
21690 + * Copyright (c) 2004-2005 Simtec Electronics
21691 + * Ben Dooks <ben@simtec.co.uk>
21692 + *
21693 + * S3C24XX Core clock control support
21694 + *
21695 + * Based on, and code from linux/arch/arm/mach-versatile/clock.c
21696 + **
21697 + ** Copyright (C) 2004 ARM Limited.
21698 + ** Written by Deep Blue Solutions Limited.
21699 + *
21700 + *
21701 + * This program is free software; you can redistribute it and/or modify
21702 + * it under the terms of the GNU General Public License as published by
21703 + * the Free Software Foundation; either version 2 of the License, or
21704 + * (at your option) any later version.
21705 + *
21706 + * This program is distributed in the hope that it will be useful,
21707 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
21708 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21709 + * GNU General Public License for more details.
21710 + *
21711 + * You should have received a copy of the GNU General Public License
21712 + * along with this program; if not, write to the Free Software
21713 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21714 +*/
21715 +
21716 +#include <linux/init.h>
21717 +#include <linux/module.h>
21718 +#include <linux/kernel.h>
21719 +#include <linux/list.h>
21720 +#include <linux/errno.h>
21721 +#include <linux/err.h>
21722 +#include <linux/platform_device.h>
21723 +#include <linux/sysdev.h>
21724 +#include <linux/interrupt.h>
21725 +#include <linux/ioport.h>
21726 +#include <linux/clk.h>
21727 +#include <linux/spinlock.h>
21728 +#include <linux/delay.h>
21729 +#include <linux/io.h>
21730 +
21731 +#include <mach/hardware.h>
21732 +#include <asm/irq.h>
21733 +
21734 +#include <plat/cpu-freq.h>
21735 +
21736 +#include <plat/clock.h>
21737 +#include <plat/cpu.h>
21738 +
21739 +/* clock information */
21740 +
21741 +static LIST_HEAD(clocks);
21742 +
21743 +/* We originally used an mutex here, but some contexts (see resume)
21744 + * are calling functions such as clk_set_parent() with IRQs disabled
21745 + * causing an BUG to be triggered.
21746 + */
21747 +DEFINE_SPINLOCK(clocks_lock);
21748 +
21749 +/* enable and disable calls for use with the clk struct */
21750 +
21751 +static int clk_null_enable(struct clk *clk, int enable)
21752 +{
21753 + return 0;
21754 +}
21755 +
21756 +/* Clock API calls */
21757 +
21758 +struct clk *clk_get(struct device *dev, const char *id)
21759 +{
21760 + struct clk *p;
21761 + struct clk *clk = ERR_PTR(-ENOENT);
21762 + int idno;
21763 +
21764 + if (dev == NULL || dev->bus != &platform_bus_type)
21765 + idno = -1;
21766 + else
21767 + idno = to_platform_device(dev)->id;
21768 +
21769 + spin_lock(&clocks_lock);
21770 +
21771 + list_for_each_entry(p, &clocks, list) {
21772 + if (p->id == idno &&
21773 + strcmp(id, p->name) == 0 &&
21774 + try_module_get(p->owner)) {
21775 + clk = p;
21776 + break;
21777 + }
21778 + }
21779 +
21780 + /* check for the case where a device was supplied, but the
21781 + * clock that was being searched for is not device specific */
21782 +
21783 + if (IS_ERR(clk)) {
21784 + list_for_each_entry(p, &clocks, list) {
21785 + if (p->id == -1 && strcmp(id, p->name) == 0 &&
21786 + try_module_get(p->owner)) {
21787 + clk = p;
21788 + break;
21789 + }
21790 + }
21791 + }
21792 +
21793 + spin_unlock(&clocks_lock);
21794 + return clk;
21795 +}
21796 +
21797 +void clk_put(struct clk *clk)
21798 +{
21799 + module_put(clk->owner);
21800 +}
21801 +
21802 +int clk_enable(struct clk *clk)
21803 +{
21804 + if (IS_ERR(clk) || clk == NULL)
21805 + return -EINVAL;
21806 +
21807 + clk_enable(clk->parent);
21808 +
21809 + spin_lock(&clocks_lock);
21810 +
21811 + if ((clk->usage++) == 0)
21812 + (clk->enable)(clk, 1);
21813 +
21814 + spin_unlock(&clocks_lock);
21815 + return 0;
21816 +}
21817 +
21818 +void clk_disable(struct clk *clk)
21819 +{
21820 + if (IS_ERR(clk) || clk == NULL)
21821 + return;
21822 +
21823 + spin_lock(&clocks_lock);
21824 +
21825 + if ((--clk->usage) == 0)
21826 + (clk->enable)(clk, 0);
21827 +
21828 + spin_unlock(&clocks_lock);
21829 + clk_disable(clk->parent);
21830 +}
21831 +
21832 +
21833 +unsigned long clk_get_rate(struct clk *clk)
21834 +{
21835 + if (IS_ERR(clk))
21836 + return 0;
21837 +
21838 + if (clk->rate != 0)
21839 + return clk->rate;
21840 +
21841 + if (clk->get_rate != NULL)
21842 + return (clk->get_rate)(clk);
21843 +
21844 + if (clk->parent != NULL)
21845 + return clk_get_rate(clk->parent);
21846 +
21847 + return clk->rate;
21848 +}
21849 +
21850 +long clk_round_rate(struct clk *clk, unsigned long rate)
21851 +{
21852 + if (!IS_ERR(clk) && clk->round_rate)
21853 + return (clk->round_rate)(clk, rate);
21854 +
21855 + return rate;
21856 +}
21857 +
21858 +int clk_set_rate(struct clk *clk, unsigned long rate)
21859 +{
21860 + int ret;
21861 +
21862 + if (IS_ERR(clk))
21863 + return -EINVAL;
21864 +
21865 + /* We do not default just do a clk->rate = rate as
21866 + * the clock may have been made this way by choice.
21867 + */
21868 +
21869 + WARN_ON(clk->set_rate == NULL);
21870 +
21871 + if (clk->set_rate == NULL)
21872 + return -EINVAL;
21873 +
21874 + spin_lock(&clocks_lock);
21875 + ret = (clk->set_rate)(clk, rate);
21876 + spin_unlock(&clocks_lock);
21877 +
21878 + return ret;
21879 +}
21880 +
21881 +struct clk *clk_get_parent(struct clk *clk)
21882 +{
21883 + return clk->parent;
21884 +}
21885 +
21886 +int clk_set_parent(struct clk *clk, struct clk *parent)
21887 +{
21888 + int ret = 0;
21889 +
21890 + if (IS_ERR(clk))
21891 + return -EINVAL;
21892 +
21893 + spin_lock(&clocks_lock);
21894 +
21895 + if (clk->set_parent)
21896 + ret = (clk->set_parent)(clk, parent);
21897 +
21898 + spin_unlock(&clocks_lock);
21899 +
21900 + return ret;
21901 +}
21902 +
21903 +EXPORT_SYMBOL(clk_get);
21904 +EXPORT_SYMBOL(clk_put);
21905 +EXPORT_SYMBOL(clk_enable);
21906 +EXPORT_SYMBOL(clk_disable);
21907 +EXPORT_SYMBOL(clk_get_rate);
21908 +EXPORT_SYMBOL(clk_round_rate);
21909 +EXPORT_SYMBOL(clk_set_rate);
21910 +EXPORT_SYMBOL(clk_get_parent);
21911 +EXPORT_SYMBOL(clk_set_parent);
21912 +
21913 +/* base clocks */
21914 +
21915 +static int clk_default_setrate(struct clk *clk, unsigned long rate)
21916 +{
21917 + clk->rate = rate;
21918 + return 0;
21919 +}
21920 +
21921 +struct clk clk_xtal = {
21922 + .name = "xtal",
21923 + .id = -1,
21924 + .rate = 0,
21925 + .parent = NULL,
21926 + .ctrlbit = 0,
21927 +};
21928 +
21929 +struct clk clk_ext = {
21930 + .name = "ext",
21931 + .id = -1,
21932 +};
21933 +
21934 +struct clk clk_epll = {
21935 + .name = "epll",
21936 + .id = -1,
21937 +};
21938 +
21939 +struct clk clk_mpll = {
21940 + .name = "mpll",
21941 + .id = -1,
21942 + .set_rate = clk_default_setrate,
21943 +};
21944 +
21945 +struct clk clk_upll = {
21946 + .name = "upll",
21947 + .id = -1,
21948 + .parent = NULL,
21949 + .ctrlbit = 0,
21950 +};
21951 +
21952 +struct clk clk_f = {
21953 + .name = "fclk",
21954 + .id = -1,
21955 + .rate = 0,
21956 + .parent = &clk_mpll,
21957 + .ctrlbit = 0,
21958 + .set_rate = clk_default_setrate,
21959 +};
21960 +
21961 +struct clk clk_h = {
21962 + .name = "hclk",
21963 + .id = -1,
21964 + .rate = 0,
21965 + .parent = NULL,
21966 + .ctrlbit = 0,
21967 + .set_rate = clk_default_setrate,
21968 +};
21969 +
21970 +struct clk clk_p = {
21971 + .name = "pclk",
21972 + .id = -1,
21973 + .rate = 0,
21974 + .parent = NULL,
21975 + .ctrlbit = 0,
21976 + .set_rate = clk_default_setrate,
21977 +};
21978 +
21979 +struct clk clk_usb_bus = {
21980 + .name = "usb-bus",
21981 + .id = -1,
21982 + .rate = 0,
21983 + .parent = &clk_upll,
21984 +};
21985 +
21986 +
21987 +
21988 +struct clk s3c24xx_uclk = {
21989 + .name = "uclk",
21990 + .id = -1,
21991 +};
21992 +
21993 +/* initialise the clock system */
21994 +
21995 +int s3c24xx_register_clock(struct clk *clk)
21996 +{
21997 + clk->owner = THIS_MODULE;
21998 +
21999 + if (clk->enable == NULL)
22000 + clk->enable = clk_null_enable;
22001 +
22002 + /* add to the list of available clocks */
22003 +
22004 + /* Quick check to see if this clock has already been registered. */
22005 + BUG_ON(clk->list.prev != clk->list.next);
22006 +
22007 + spin_lock(&clocks_lock);
22008 + list_add(&clk->list, &clocks);
22009 + spin_unlock(&clocks_lock);
22010 +
22011 + return 0;
22012 +}
22013 +
22014 +int s3c24xx_register_clocks(struct clk **clks, int nr_clks)
22015 +{
22016 + int fails = 0;
22017 +
22018 + for (; nr_clks > 0; nr_clks--, clks++) {
22019 + if (s3c24xx_register_clock(*clks) < 0)
22020 + fails++;
22021 + }
22022 +
22023 + return fails;
22024 +}
22025 +
22026 +/* initalise all the clocks */
22027 +
22028 +int __init s3c24xx_register_baseclocks(unsigned long xtal)
22029 +{
22030 + printk(KERN_INFO "S3C24XX Clocks, (c) 2004 Simtec Electronics\n");
22031 +
22032 + clk_xtal.rate = xtal;
22033 +
22034 + /* register our clocks */
22035 +
22036 + if (s3c24xx_register_clock(&clk_xtal) < 0)
22037 + printk(KERN_ERR "failed to register master xtal\n");
22038 +
22039 + if (s3c24xx_register_clock(&clk_mpll) < 0)
22040 + printk(KERN_ERR "failed to register mpll clock\n");
22041 +
22042 + if (s3c24xx_register_clock(&clk_upll) < 0)
22043 + printk(KERN_ERR "failed to register upll clock\n");
22044 +
22045 + if (s3c24xx_register_clock(&clk_f) < 0)
22046 + printk(KERN_ERR "failed to register cpu fclk\n");
22047 +
22048 + if (s3c24xx_register_clock(&clk_h) < 0)
22049 + printk(KERN_ERR "failed to register cpu hclk\n");
22050 +
22051 + if (s3c24xx_register_clock(&clk_p) < 0)
22052 + printk(KERN_ERR "failed to register cpu pclk\n");
22053 +
22054 + return 0;
22055 +}
22056 +
22057 Index: linux-2.6.28/arch/arm/plat-s3c/dev-fb.c
22058 ===================================================================
22059 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22060 +++ linux-2.6.28/arch/arm/plat-s3c/dev-fb.c 2009-01-02 00:01:56.000000000 +0100
22061 @@ -0,0 +1,72 @@
22062 +/* linux/arch/arm/plat-s3c/dev-fb.c
22063 + *
22064 + * Copyright 2008 Simtec Electronics
22065 + * Ben Dooks <ben@simtec.co.uk>
22066 + * http://armlinux.simtec.co.uk/
22067 + *
22068 + * S3C series device definition for framebuffer device
22069 + *
22070 + * This program is free software; you can redistribute it and/or modify
22071 + * it under the terms of the GNU General Public License version 2 as
22072 + * published by the Free Software Foundation.
22073 +*/
22074 +
22075 +#include <linux/kernel.h>
22076 +#include <linux/string.h>
22077 +#include <linux/platform_device.h>
22078 +#include <linux/fb.h>
22079 +
22080 +#include <mach/map.h>
22081 +#include <mach/regs-fb.h>
22082 +
22083 +#include <plat/fb.h>
22084 +#include <plat/devs.h>
22085 +#include <plat/cpu.h>
22086 +
22087 +static struct resource s3c_fb_resource[] = {
22088 + [0] = {
22089 + .start = S3C_PA_FB,
22090 + .end = S3C_PA_FB + SZ_16K - 1,
22091 + .flags = IORESOURCE_MEM,
22092 + },
22093 + [1] = {
22094 + .start = IRQ_LCD_VSYNC,
22095 + .end = IRQ_LCD_VSYNC,
22096 + .flags = IORESOURCE_IRQ,
22097 + },
22098 + [2] = {
22099 + .start = IRQ_LCD_FIFO,
22100 + .end = IRQ_LCD_FIFO,
22101 + .flags = IORESOURCE_IRQ,
22102 + },
22103 + [3] = {
22104 + .start = IRQ_LCD_SYSTEM,
22105 + .end = IRQ_LCD_SYSTEM,
22106 + .flags = IORESOURCE_IRQ,
22107 + },
22108 +};
22109 +
22110 +struct platform_device s3c_device_fb = {
22111 + .name = "s3c-fb",
22112 + .id = -1,
22113 + .num_resources = ARRAY_SIZE(s3c_fb_resource),
22114 + .resource = s3c_fb_resource,
22115 + .dev.dma_mask = &s3c_device_fb.dev.coherent_dma_mask,
22116 + .dev.coherent_dma_mask = 0xffffffffUL,
22117 +};
22118 +
22119 +void __init s3c_fb_set_platdata(struct s3c_fb_platdata *pd)
22120 +{
22121 + struct s3c_fb_platdata *npd;
22122 +
22123 + if (!pd) {
22124 + printk(KERN_ERR "%s: no platform data\n", __func__);
22125 + return;
22126 + }
22127 +
22128 + npd = kmemdup(pd, sizeof(struct s3c_fb_platdata), GFP_KERNEL);
22129 + if (!npd)
22130 + printk(KERN_ERR "%s: no memory for platform data\n", __func__);
22131 +
22132 + s3c_device_fb.dev.platform_data = npd;
22133 +}
22134 Index: linux-2.6.28/arch/arm/plat-s3c/dev-hsmmc1.c
22135 ===================================================================
22136 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22137 +++ linux-2.6.28/arch/arm/plat-s3c/dev-hsmmc1.c 2009-01-02 00:01:56.000000000 +0100
22138 @@ -0,0 +1,68 @@
22139 +/* linux/arch/arm/plat-s3c/dev-hsmmc1.c
22140 + *
22141 + * Copyright (c) 2008 Simtec Electronics
22142 + * Ben Dooks <ben@simtec.co.uk>
22143 + * http://armlinux.simtec.co.uk/
22144 + *
22145 + * S3C series device definition for hsmmc device 1
22146 + *
22147 + * This program is free software; you can redistribute it and/or modify
22148 + * it under the terms of the GNU General Public License version 2 as
22149 + * published by the Free Software Foundation.
22150 +*/
22151 +
22152 +#include <linux/kernel.h>
22153 +#include <linux/platform_device.h>
22154 +#include <linux/mmc/host.h>
22155 +
22156 +#include <mach/map.h>
22157 +#include <plat/sdhci.h>
22158 +#include <plat/devs.h>
22159 +#include <plat/cpu.h>
22160 +
22161 +#define S3C_SZ_HSMMC (0x1000)
22162 +
22163 +static struct resource s3c_hsmmc1_resource[] = {
22164 + [0] = {
22165 + .start = S3C_PA_HSMMC1,
22166 + .end = S3C_PA_HSMMC1 + S3C_SZ_HSMMC - 1,
22167 + .flags = IORESOURCE_MEM,
22168 + },
22169 + [1] = {
22170 + .start = IRQ_HSMMC1,
22171 + .end = IRQ_HSMMC1,
22172 + .flags = IORESOURCE_IRQ,
22173 + }
22174 +};
22175 +
22176 +static u64 s3c_device_hsmmc1_dmamask = 0xffffffffUL;
22177 +
22178 +struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata = {
22179 + .max_width = 4,
22180 + .host_caps = (MMC_CAP_4_BIT_DATA |
22181 + MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
22182 +};
22183 +
22184 +struct platform_device s3c_device_hsmmc1 = {
22185 + .name = "s3c-sdhci",
22186 + .id = 1,
22187 + .num_resources = ARRAY_SIZE(s3c_hsmmc1_resource),
22188 + .resource = s3c_hsmmc1_resource,
22189 + .dev = {
22190 + .dma_mask = &s3c_device_hsmmc1_dmamask,
22191 + .coherent_dma_mask = 0xffffffffUL,
22192 + .platform_data = &s3c_hsmmc1_def_platdata,
22193 + },
22194 +};
22195 +
22196 +void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd)
22197 +{
22198 + struct s3c_sdhci_platdata *set = &s3c_hsmmc1_def_platdata;
22199 +
22200 + set->max_width = pd->max_width;
22201 +
22202 + if (pd->cfg_gpio)
22203 + set->cfg_gpio = pd->cfg_gpio;
22204 + if (pd->cfg_card)
22205 + set->cfg_card = pd->cfg_card;
22206 +}
22207 Index: linux-2.6.28/arch/arm/plat-s3c/dev-hsmmc.c
22208 ===================================================================
22209 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22210 +++ linux-2.6.28/arch/arm/plat-s3c/dev-hsmmc.c 2009-01-02 00:01:56.000000000 +0100
22211 @@ -0,0 +1,68 @@
22212 +/* linux/arch/arm/plat-s3c/dev-hsmmc.c
22213 + *
22214 + * Copyright (c) 2008 Simtec Electronics
22215 + * Ben Dooks <ben@simtec.co.uk>
22216 + * http://armlinux.simtec.co.uk/
22217 + *
22218 + * S3C series device definition for hsmmc devices
22219 + *
22220 + * This program is free software; you can redistribute it and/or modify
22221 + * it under the terms of the GNU General Public License version 2 as
22222 + * published by the Free Software Foundation.
22223 +*/
22224 +
22225 +#include <linux/kernel.h>
22226 +#include <linux/platform_device.h>
22227 +#include <linux/mmc/host.h>
22228 +
22229 +#include <mach/map.h>
22230 +#include <plat/sdhci.h>
22231 +#include <plat/devs.h>
22232 +#include <plat/cpu.h>
22233 +
22234 +#define S3C_SZ_HSMMC (0x1000)
22235 +
22236 +static struct resource s3c_hsmmc_resource[] = {
22237 + [0] = {
22238 + .start = S3C_PA_HSMMC0,
22239 + .end = S3C_PA_HSMMC0 + S3C_SZ_HSMMC - 1,
22240 + .flags = IORESOURCE_MEM,
22241 + },
22242 + [1] = {
22243 + .start = IRQ_HSMMC0,
22244 + .end = IRQ_HSMMC0,
22245 + .flags = IORESOURCE_IRQ,
22246 + }
22247 +};
22248 +
22249 +static u64 s3c_device_hsmmc_dmamask = 0xffffffffUL;
22250 +
22251 +struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata = {
22252 + .max_width = 4,
22253 + .host_caps = (MMC_CAP_4_BIT_DATA |
22254 + MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
22255 +};
22256 +
22257 +struct platform_device s3c_device_hsmmc0 = {
22258 + .name = "s3c-sdhci",
22259 + .id = 0,
22260 + .num_resources = ARRAY_SIZE(s3c_hsmmc_resource),
22261 + .resource = s3c_hsmmc_resource,
22262 + .dev = {
22263 + .dma_mask = &s3c_device_hsmmc_dmamask,
22264 + .coherent_dma_mask = 0xffffffffUL,
22265 + .platform_data = &s3c_hsmmc0_def_platdata,
22266 + },
22267 +};
22268 +
22269 +void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd)
22270 +{
22271 + struct s3c_sdhci_platdata *set = &s3c_hsmmc0_def_platdata;
22272 +
22273 + set->max_width = pd->max_width;
22274 +
22275 + if (pd->cfg_gpio)
22276 + set->cfg_gpio = pd->cfg_gpio;
22277 + if (pd->cfg_card)
22278 + set->cfg_card = pd->cfg_card;
22279 +}
22280 Index: linux-2.6.28/arch/arm/plat-s3c/dev-i2c0.c
22281 ===================================================================
22282 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22283 +++ linux-2.6.28/arch/arm/plat-s3c/dev-i2c0.c 2009-01-02 00:01:56.000000000 +0100
22284 @@ -0,0 +1,71 @@
22285 +/* linux/arch/arm/plat-s3c/dev-i2c0.c
22286 + *
22287 + * Copyright 2008 Simtec Electronics
22288 + * Ben Dooks <ben@simtec.co.uk>
22289 + * http://armlinux.simtec.co.uk/
22290 + *
22291 + * S3C series device definition for i2c device 0
22292 + *
22293 + * This program is free software; you can redistribute it and/or modify
22294 + * it under the terms of the GNU General Public License version 2 as
22295 + * published by the Free Software Foundation.
22296 +*/
22297 +
22298 +#include <linux/kernel.h>
22299 +#include <linux/string.h>
22300 +#include <linux/platform_device.h>
22301 +
22302 +#include <mach/map.h>
22303 +
22304 +#include <plat/regs-iic.h>
22305 +#include <plat/iic.h>
22306 +#include <plat/devs.h>
22307 +#include <plat/cpu.h>
22308 +
22309 +static struct resource s3c_i2c_resource[] = {
22310 + [0] = {
22311 + .start = S3C_PA_IIC,
22312 + .end = S3C_PA_IIC + SZ_4K - 1,
22313 + .flags = IORESOURCE_MEM,
22314 + },
22315 + [1] = {
22316 + .start = IRQ_IIC,
22317 + .end = IRQ_IIC,
22318 + .flags = IORESOURCE_IRQ,
22319 + },
22320 +};
22321 +
22322 +struct platform_device s3c_device_i2c0 = {
22323 + .name = "s3c2410-i2c",
22324 +#ifdef CONFIG_S3C_DEV_I2C1
22325 + .id = 0,
22326 +#else
22327 + .id = -1,
22328 +#endif
22329 + .num_resources = ARRAY_SIZE(s3c_i2c_resource),
22330 + .resource = s3c_i2c_resource,
22331 +};
22332 +
22333 +static struct s3c2410_platform_i2c default_i2c_data0 __initdata = {
22334 + .flags = 0,
22335 + .slave_addr = 0x10,
22336 + .bus_freq = 100*1000,
22337 + .max_freq = 400*1000,
22338 + .sda_delay = S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
22339 +};
22340 +
22341 +void __init s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *pd)
22342 +{
22343 + struct s3c2410_platform_i2c *npd;
22344 +
22345 + if (!pd)
22346 + pd = &default_i2c_data0;
22347 +
22348 + npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL);
22349 + if (!npd)
22350 + printk(KERN_ERR "%s: no memory for platform data\n", __func__);
22351 + else if (!npd->cfg_gpio)
22352 + npd->cfg_gpio = s3c_i2c0_cfg_gpio;
22353 +
22354 + s3c_device_i2c0.dev.platform_data = npd;
22355 +}
22356 Index: linux-2.6.28/arch/arm/plat-s3c/dev-i2c1.c
22357 ===================================================================
22358 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22359 +++ linux-2.6.28/arch/arm/plat-s3c/dev-i2c1.c 2009-01-02 00:01:56.000000000 +0100
22360 @@ -0,0 +1,68 @@
22361 +/* linux/arch/arm/plat-s3c/dev-i2c1.c
22362 + *
22363 + * Copyright 2008 Simtec Electronics
22364 + * Ben Dooks <ben@simtec.co.uk>
22365 + * http://armlinux.simtec.co.uk/
22366 + *
22367 + * S3C series device definition for i2c device 1
22368 + *
22369 + * This program is free software; you can redistribute it and/or modify
22370 + * it under the terms of the GNU General Public License version 2 as
22371 + * published by the Free Software Foundation.
22372 +*/
22373 +
22374 +#include <linux/kernel.h>
22375 +#include <linux/string.h>
22376 +#include <linux/platform_device.h>
22377 +
22378 +#include <mach/map.h>
22379 +
22380 +#include <plat/regs-iic.h>
22381 +#include <plat/iic.h>
22382 +#include <plat/devs.h>
22383 +#include <plat/cpu.h>
22384 +
22385 +static struct resource s3c_i2c_resource[] = {
22386 + [0] = {
22387 + .start = S3C_PA_IIC1,
22388 + .end = S3C_PA_IIC1 + SZ_4K - 1,
22389 + .flags = IORESOURCE_MEM,
22390 + },
22391 + [1] = {
22392 + .start = IRQ_IIC1,
22393 + .end = IRQ_IIC1,
22394 + .flags = IORESOURCE_IRQ,
22395 + },
22396 +};
22397 +
22398 +struct platform_device s3c_device_i2c1 = {
22399 + .name = "s3c2410-i2c",
22400 + .id = 1,
22401 + .num_resources = ARRAY_SIZE(s3c_i2c_resource),
22402 + .resource = s3c_i2c_resource,
22403 +};
22404 +
22405 +static struct s3c2410_platform_i2c default_i2c_data1 __initdata = {
22406 + .flags = 0,
22407 + .bus_num = 1,
22408 + .slave_addr = 0x10,
22409 + .bus_freq = 100*1000,
22410 + .max_freq = 400*1000,
22411 + .sda_delay = S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
22412 +};
22413 +
22414 +void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd)
22415 +{
22416 + struct s3c2410_platform_i2c *npd;
22417 +
22418 + if (!pd)
22419 + pd = &default_i2c_data1;
22420 +
22421 + npd = kmemdup(pd, sizeof(struct s3c2410_platform_i2c), GFP_KERNEL);
22422 + if (!npd)
22423 + printk(KERN_ERR "%s: no memory for platform data\n", __func__);
22424 + else if (!npd->cfg_gpio)
22425 + npd->cfg_gpio = s3c_i2c1_cfg_gpio;
22426 +
22427 + s3c_device_i2c1.dev.platform_data = npd;
22428 +}
22429 Index: linux-2.6.28/arch/arm/plat-s3c/gpio.c
22430 ===================================================================
22431 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22432 +++ linux-2.6.28/arch/arm/plat-s3c/gpio.c 2009-01-02 00:01:56.000000000 +0100
22433 @@ -0,0 +1,156 @@
22434 +/* linux/arch/arm/plat-s3c/gpio.c
22435 + *
22436 + * Copyright 2008 Simtec Electronics
22437 + * Ben Dooks <ben@simtec.co.uk>
22438 + * http://armlinux.simtec.co.uk/
22439 + *
22440 + * S3C series GPIO core
22441 + *
22442 + * This program is free software; you can redistribute it and/or modify
22443 + * it under the terms of the GNU General Public License version 2 as
22444 + * published by the Free Software Foundation.
22445 +*/
22446 +
22447 +#include <linux/kernel.h>
22448 +#include <linux/init.h>
22449 +#include <linux/io.h>
22450 +#include <linux/gpio.h>
22451 +
22452 +#include <mach/gpio-core.h>
22453 +
22454 +#ifdef CONFIG_S3C_GPIO_TRACK
22455 +struct s3c_gpio_chip *s3c_gpios[S3C_GPIO_END];
22456 +
22457 +static __init void s3c_gpiolib_track(struct s3c_gpio_chip *chip)
22458 +{
22459 + unsigned int gpn;
22460 + int i;
22461 +
22462 + gpn = chip->chip.base;
22463 + for (i = 0; i < chip->chip.ngpio; i++, gpn++) {
22464 + BUG_ON(gpn > ARRAY_SIZE(s3c_gpios));
22465 + s3c_gpios[gpn] = chip;
22466 + }
22467 +}
22468 +#endif /* CONFIG_S3C_GPIO_TRACK */
22469 +
22470 +/* Default routines for controlling GPIO, based on the original S3C24XX
22471 + * GPIO functions which deal with the case where each gpio bank of the
22472 + * chip is as following:
22473 + *
22474 + * base + 0x00: Control register, 2 bits per gpio
22475 + * gpio n: 2 bits starting at (2*n)
22476 + * 00 = input, 01 = output, others mean special-function
22477 + * base + 0x04: Data register, 1 bit per gpio
22478 + * bit n: data bit n
22479 +*/
22480 +
22481 +static int s3c_gpiolib_input(struct gpio_chip *chip, unsigned offset)
22482 +{
22483 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
22484 + void __iomem *base = ourchip->base;
22485 + unsigned long flags;
22486 + unsigned long con;
22487 +
22488 + local_irq_save(flags);
22489 +
22490 + con = __raw_readl(base + 0x00);
22491 + con &= ~(3 << (offset * 2));
22492 +
22493 + __raw_writel(con, base + 0x00);
22494 +
22495 + local_irq_restore(flags);
22496 + return 0;
22497 +}
22498 +
22499 +static int s3c_gpiolib_output(struct gpio_chip *chip,
22500 + unsigned offset, int value)
22501 +{
22502 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
22503 + void __iomem *base = ourchip->base;
22504 + unsigned long flags;
22505 + unsigned long dat;
22506 + unsigned long con;
22507 +
22508 + local_irq_save(flags);
22509 +
22510 + dat = __raw_readl(base + 0x04);
22511 + dat &= ~(1 << offset);
22512 + if (value)
22513 + dat |= 1 << offset;
22514 + __raw_writel(dat, base + 0x04);
22515 +
22516 + con = __raw_readl(base + 0x00);
22517 + con &= ~(3 << (offset * 2));
22518 + con |= 1 << (offset * 2);
22519 +
22520 + __raw_writel(con, base + 0x00);
22521 + __raw_writel(dat, base + 0x04);
22522 +
22523 + local_irq_restore(flags);
22524 + return 0;
22525 +}
22526 +
22527 +static void s3c_gpiolib_set(struct gpio_chip *chip,
22528 + unsigned offset, int value)
22529 +{
22530 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
22531 + void __iomem *base = ourchip->base;
22532 + unsigned long flags;
22533 + unsigned long dat;
22534 +
22535 + local_irq_save(flags);
22536 +
22537 + dat = __raw_readl(base + 0x04);
22538 + dat &= ~(1 << offset);
22539 + if (value)
22540 + dat |= 1 << offset;
22541 + __raw_writel(dat, base + 0x04);
22542 +
22543 + local_irq_restore(flags);
22544 +}
22545 +
22546 +static int s3c_gpiolib_get(struct gpio_chip *chip, unsigned offset)
22547 +{
22548 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
22549 + unsigned long val;
22550 +
22551 + val = __raw_readl(ourchip->base + 0x04);
22552 + val >>= offset;
22553 + val &= 1;
22554 +
22555 + return val;
22556 +}
22557 +
22558 +__init void s3c_gpiolib_add(struct s3c_gpio_chip *chip)
22559 +{
22560 + struct gpio_chip *gc = &chip->chip;
22561 + int ret;
22562 +
22563 + BUG_ON(!chip->base);
22564 + BUG_ON(!gc->label);
22565 + BUG_ON(!gc->ngpio);
22566 +
22567 + if (!gc->direction_input)
22568 + gc->direction_input = s3c_gpiolib_input;
22569 + if (!gc->direction_output)
22570 + gc->direction_output = s3c_gpiolib_output;
22571 + if (!gc->set)
22572 + gc->set = s3c_gpiolib_set;
22573 + if (!gc->get)
22574 + gc->get = s3c_gpiolib_get;
22575 +
22576 +#ifdef CONFIG_PM
22577 + if (chip->pm != NULL) {
22578 + if (!chip->pm->save || !chip->pm->resume)
22579 + printk(KERN_ERR "gpio: %s has missing PM functions\n",
22580 + gc->label);
22581 + } else
22582 + printk(KERN_ERR "gpio: %s has no PM function\n", gc->label);
22583 +#endif
22584 +
22585 + /* gpiochip_add() prints own failure message on error. */
22586 + ret = gpiochip_add(gc);
22587 + if (ret >= 0)
22588 + s3c_gpiolib_track(chip);
22589 +}
22590 Index: linux-2.6.28/arch/arm/plat-s3c/gpio-config.c
22591 ===================================================================
22592 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22593 +++ linux-2.6.28/arch/arm/plat-s3c/gpio-config.c 2009-01-02 00:01:56.000000000 +0100
22594 @@ -0,0 +1,163 @@
22595 +/* linux/arch/arm/plat-s3c/gpio-config.c
22596 + *
22597 + * Copyright 2008 Openmoko, Inc.
22598 + * Copyright 2008 Simtec Electronics
22599 + * Ben Dooks <ben@simtec.co.uk>
22600 + * http://armlinux.simtec.co.uk/
22601 + *
22602 + * S3C series GPIO configuration core
22603 + *
22604 + * This program is free software; you can redistribute it and/or modify
22605 + * it under the terms of the GNU General Public License version 2 as
22606 + * published by the Free Software Foundation.
22607 +*/
22608 +
22609 +#include <linux/kernel.h>
22610 +#include <linux/gpio.h>
22611 +#include <linux/io.h>
22612 +
22613 +#include <mach/gpio-core.h>
22614 +#include <plat/gpio-cfg.h>
22615 +#include <plat/gpio-cfg-helpers.h>
22616 +
22617 +int s3c_gpio_cfgpin(unsigned int pin, unsigned int config)
22618 +{
22619 + struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin);
22620 + unsigned long flags;
22621 + int offset;
22622 + int ret;
22623 +
22624 + if (!chip)
22625 + return -EINVAL;
22626 +
22627 + offset = pin - chip->chip.base;
22628 +
22629 + local_irq_save(flags);
22630 + ret = s3c_gpio_do_setcfg(chip, offset, config);
22631 + local_irq_restore(flags);
22632 +
22633 + return ret;
22634 +}
22635 +
22636 +int s3c_gpio_setpull(unsigned int pin, s3c_gpio_pull_t pull)
22637 +{
22638 + struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin);
22639 + unsigned long flags;
22640 + int offset, ret;
22641 +
22642 + if (!chip)
22643 + return -EINVAL;
22644 +
22645 + offset = pin - chip->chip.base;
22646 +
22647 + local_irq_save(flags);
22648 + ret = s3c_gpio_do_setpull(chip, offset, pull);
22649 + local_irq_restore(flags);
22650 +
22651 + return ret;
22652 +}
22653 +
22654 +#ifdef CONFIG_S3C_GPIO_CFG_S3C24XX
22655 +int s3c_gpio_setcfg_s3c24xx_banka(struct s3c_gpio_chip *chip,
22656 + unsigned int off, unsigned int cfg)
22657 +{
22658 + void __iomem *reg = chip->base;
22659 + unsigned int shift = off;
22660 + u32 con;
22661 +
22662 + if (s3c_gpio_is_cfg_special(cfg)) {
22663 + cfg &= 0xf;
22664 +
22665 + /* Map output to 0, and SFN2 to 1 */
22666 + cfg -= 1;
22667 + if (cfg > 1)
22668 + return -EINVAL;
22669 +
22670 + cfg <<= shift;
22671 + }
22672 +
22673 + con = __raw_readl(reg);
22674 + con &= ~(0x1 << shift);
22675 + con |= cfg;
22676 + __raw_writel(con, reg);
22677 +
22678 + return 0;
22679 +}
22680 +
22681 +int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip,
22682 + unsigned int off, unsigned int cfg)
22683 +{
22684 + void __iomem *reg = chip->base;
22685 + unsigned int shift = off * 2;
22686 + u32 con;
22687 +
22688 + if (s3c_gpio_is_cfg_special(cfg)) {
22689 + cfg &= 0xf;
22690 + if (cfg > 3)
22691 + return -EINVAL;
22692 +
22693 + cfg <<= shift;
22694 + }
22695 +
22696 + con = __raw_readl(reg);
22697 + con &= ~(0x3 << shift);
22698 + con |= cfg;
22699 + __raw_writel(con, reg);
22700 +
22701 + return 0;
22702 +}
22703 +#endif
22704 +
22705 +#ifdef CONFIG_S3C_GPIO_CFG_S3C64XX
22706 +int s3c_gpio_setcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip,
22707 + unsigned int off, unsigned int cfg)
22708 +{
22709 + void __iomem *reg = chip->base;
22710 + unsigned int shift = (off & 7) * 4;
22711 + u32 con;
22712 +
22713 + if (off < 8 && chip->chip.ngpio >= 8)
22714 + reg -= 4;
22715 +
22716 + if (s3c_gpio_is_cfg_special(cfg)) {
22717 + cfg &= 0xf;
22718 + cfg <<= shift;
22719 + }
22720 +
22721 + con = __raw_readl(reg);
22722 + con &= ~(0xf << shift);
22723 + con |= cfg;
22724 + __raw_writel(con, reg);
22725 +
22726 + return 0;
22727 +}
22728 +#endif /* CONFIG_S3C_GPIO_CFG_S3C64XX */
22729 +
22730 +#ifdef CONFIG_S3C_GPIO_PULL_UPDOWN
22731 +int s3c_gpio_setpull_updown(struct s3c_gpio_chip *chip,
22732 + unsigned int off, s3c_gpio_pull_t pull)
22733 +{
22734 + void __iomem *reg = chip->base + 0x08;
22735 + int shift = off * 2;
22736 + u32 pup;
22737 +
22738 + pup = __raw_readl(reg);
22739 + pup &= ~(3 << shift);
22740 + pup |= pull << shift;
22741 + __raw_writel(pup, reg);
22742 +
22743 + return 0;
22744 +}
22745 +
22746 +s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip,
22747 + unsigned int off)
22748 +{
22749 + void __iomem *reg = chip->base + 0x08;
22750 + int shift = off * 2;
22751 + u32 pup = __raw_readl(reg);
22752 +
22753 + pup >>= shift;
22754 + pup &= 0x3;
22755 + return (__force s3c_gpio_pull_t)pup;
22756 +}
22757 +#endif
22758 Index: linux-2.6.28/arch/arm/plat-s3c/include/mach/io.h
22759 ===================================================================
22760 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22761 +++ linux-2.6.28/arch/arm/plat-s3c/include/mach/io.h 2009-01-02 00:01:56.000000000 +0100
22762 @@ -0,0 +1,18 @@
22763 +/* arch/arm/plat-s3c/include/mach/io.h
22764 + *
22765 + * Copyright 2008 Simtec Electronics
22766 + * Ben Dooks <ben-linux@fluff.org>
22767 + *
22768 + * Default IO routines for plat-s3c based systems, such as S3C24A0
22769 + */
22770 +
22771 +#ifndef __ASM_ARM_ARCH_IO_H
22772 +#define __ASM_ARM_ARCH_IO_H
22773 +
22774 +/* No current ISA/PCI bus support. */
22775 +#define __io(a) ((void __iomem *)(a))
22776 +#define __mem_pci(a) (a)
22777 +
22778 +#define IO_SPACE_LIMIT (0xFFFFFFFF)
22779 +
22780 +#endif
22781 Index: linux-2.6.28/arch/arm/plat-s3c/include/mach/timex.h
22782 ===================================================================
22783 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22784 +++ linux-2.6.28/arch/arm/plat-s3c/include/mach/timex.h 2009-01-02 00:01:56.000000000 +0100
22785 @@ -0,0 +1,26 @@
22786 +/* arch/arm/mach-s3c2410/include/mach/timex.h
22787 + *
22788 + * Copyright (c) 2003-2005 Simtec Electronics
22789 + * Ben Dooks <ben@simtec.co.uk>
22790 + *
22791 + * S3C2410 - time parameters
22792 + *
22793 + * This program is free software; you can redistribute it and/or modify
22794 + * it under the terms of the GNU General Public License version 2 as
22795 + * published by the Free Software Foundation.
22796 +*/
22797 +
22798 +#ifndef __ASM_ARCH_TIMEX_H
22799 +#define __ASM_ARCH_TIMEX_H
22800 +
22801 +/* CLOCK_TICK_RATE needs to be evaluatable by the cpp, so making it
22802 + * a variable is useless. It seems as long as we make our timers an
22803 + * exact multiple of HZ, any value that makes a 1->1 correspondence
22804 + * for the time conversion functions to/from jiffies is acceptable.
22805 +*/
22806 +
22807 +
22808 +#define CLOCK_TICK_RATE 12000000
22809 +
22810 +
22811 +#endif /* __ASM_ARCH_TIMEX_H */
22812 Index: linux-2.6.28/arch/arm/plat-s3c/include/mach/vmalloc.h
22813 ===================================================================
22814 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22815 +++ linux-2.6.28/arch/arm/plat-s3c/include/mach/vmalloc.h 2009-01-02 00:01:56.000000000 +0100
22816 @@ -0,0 +1,20 @@
22817 +/* arch/arm/plat-s3c/include/mach/vmalloc.h
22818 + *
22819 + * from arch/arm/mach-iop3xx/include/mach/vmalloc.h
22820 + *
22821 + * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
22822 + * http://www.simtec.co.uk/products/SWLINUX/
22823 + *
22824 + * This program is free software; you can redistribute it and/or modify
22825 + * it under the terms of the GNU General Public License version 2 as
22826 + * published by the Free Software Foundation.
22827 + *
22828 + * S3C2410 vmalloc definition
22829 +*/
22830 +
22831 +#ifndef __ASM_ARCH_VMALLOC_H
22832 +#define __ASM_ARCH_VMALLOC_H
22833 +
22834 +#define VMALLOC_END (0xE0000000)
22835 +
22836 +#endif /* __ASM_ARCH_VMALLOC_H */
22837 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/clock.h
22838 ===================================================================
22839 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22840 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/clock.h 2009-01-02 00:01:56.000000000 +0100
22841 @@ -0,0 +1,88 @@
22842 +/* linux/arch/arm/plat-s3c/include/plat/clock.h
22843 + *
22844 + * Copyright (c) 2004-2005 Simtec Electronics
22845 + * http://www.simtec.co.uk/products/SWLINUX/
22846 + * Written by Ben Dooks, <ben@simtec.co.uk>
22847 + *
22848 + * This program is free software; you can redistribute it and/or modify
22849 + * it under the terms of the GNU General Public License version 2 as
22850 + * published by the Free Software Foundation.
22851 +*/
22852 +
22853 +#include <linux/spinlock.h>
22854 +
22855 +struct clk {
22856 + struct list_head list;
22857 + struct module *owner;
22858 + struct clk *parent;
22859 + const char *name;
22860 + int id;
22861 + int usage;
22862 + unsigned long rate;
22863 + unsigned long ctrlbit;
22864 +
22865 + int (*enable)(struct clk *, int enable);
22866 + int (*set_rate)(struct clk *c, unsigned long rate);
22867 + unsigned long (*get_rate)(struct clk *c);
22868 + unsigned long (*round_rate)(struct clk *c, unsigned long rate);
22869 + int (*set_parent)(struct clk *c, struct clk *parent);
22870 +};
22871 +
22872 +/* other clocks which may be registered by board support */
22873 +
22874 +extern struct clk s3c24xx_dclk0;
22875 +extern struct clk s3c24xx_dclk1;
22876 +extern struct clk s3c24xx_clkout0;
22877 +extern struct clk s3c24xx_clkout1;
22878 +extern struct clk s3c24xx_uclk;
22879 +
22880 +extern struct clk clk_usb_bus;
22881 +
22882 +/* core clock support */
22883 +
22884 +extern struct clk clk_f;
22885 +extern struct clk clk_h;
22886 +extern struct clk clk_p;
22887 +extern struct clk clk_mpll;
22888 +extern struct clk clk_upll;
22889 +extern struct clk clk_epll;
22890 +extern struct clk clk_xtal;
22891 +extern struct clk clk_ext;
22892 +
22893 +/* S3C64XX specific clocks */
22894 +extern struct clk clk_27m;
22895 +extern struct clk clk_48m;
22896 +
22897 +/* exports for arch/arm/mach-s3c2410
22898 + *
22899 + * Please DO NOT use these outside of arch/arm/mach-s3c2410
22900 +*/
22901 +
22902 +extern spinlock_t clocks_lock;
22903 +
22904 +extern int s3c2410_clkcon_enable(struct clk *clk, int enable);
22905 +
22906 +extern int s3c24xx_register_clock(struct clk *clk);
22907 +extern int s3c24xx_register_clocks(struct clk **clk, int nr_clks);
22908 +
22909 +extern int s3c24xx_register_baseclocks(unsigned long xtal);
22910 +
22911 +extern void s3c64xx_register_clocks(void);
22912 +
22913 +extern void s3c24xx_setup_clocks(unsigned long fclk,
22914 + unsigned long hclk,
22915 + unsigned long pclk);
22916 +
22917 +extern void s3c2410_setup_clocks(void);
22918 +extern void s3c2412_setup_clocks(void);
22919 +extern void s3c244x_setup_clocks(void);
22920 +extern void s3c2443_setup_clocks(void);
22921 +
22922 +/* S3C64XX specific functions and clocks */
22923 +
22924 +extern int s3c64xx_sclk_ctrl(struct clk *clk, int enable);
22925 +
22926 +/* Init for pwm clock code */
22927 +
22928 +extern void s3c_pwmclk_init(void);
22929 +
22930 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/cpu-freq.h
22931 ===================================================================
22932 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
22933 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/cpu-freq.h 2009-01-02 00:01:56.000000000 +0100
22934 @@ -0,0 +1,94 @@
22935 +/* arch/arm/plat-s3c/include/plat/cpu-freq.h
22936 + *
22937 + * Copyright (c) 2006,2007 Simtec Electronics
22938 + * http://armlinux.simtec.co.uk/
22939 + * Ben Dooks <ben@simtec.co.uk>
22940 + *
22941 + * S3C CPU frequency scaling support - driver and board
22942 + *
22943 + * This program is free software; you can redistribute it and/or modify
22944 + * it under the terms of the GNU General Public License version 2 as
22945 + * published by the Free Software Foundation.
22946 +*/
22947 +
22948 +#include <linux/cpufreq.h>
22949 +
22950 +struct s3c_cpufreq_info;
22951 +struct s3c_cpufreq_board;
22952 +struct s3c_iotimings;
22953 +
22954 +struct s3c_freq {
22955 + unsigned long fclk;
22956 + unsigned long armclk;
22957 + unsigned long hclk_tns; /* in 10ths of ns */
22958 + unsigned long hclk;
22959 + unsigned long pclk;
22960 +};
22961 +
22962 +/* wrapper 'struct cpufreq_freqs' so that any drivers receiving the
22963 + * notification can use this information that is not provided by just
22964 + * having the core frequency alone.
22965 + */
22966 +
22967 +struct s3c_cpufreq_freqs {
22968 + struct cpufreq_freqs freqs;
22969 + struct s3c_freq old;
22970 + struct s3c_freq new;
22971 +};
22972 +
22973 +#define to_s3c_cpufreq(_cf) container_of(_cf, struct s3c_cpufreq_freqs, freqs)
22974 +
22975 +struct s3c_clkdivs {
22976 + int p_divisor; /* fclk / pclk */
22977 + int h_divisor; /* fclk / hclk */
22978 + int arm_divisor; /* not all cpus have this. */
22979 + unsigned char dvs; /* using dvs mode to arm. */
22980 +};
22981 +
22982 +#define PLLVAL(_m, _p, _s) (((_m) << 12) | ((_p) << 4) | (_s))
22983 +
22984 +struct s3c_pllval {
22985 + unsigned long freq;
22986 + unsigned long pll_reg;
22987 +};
22988 +
22989 +struct s3c_cpufreq_config {
22990 + struct s3c_freq freq;
22991 + struct s3c_pllval pll;
22992 + struct s3c_clkdivs divs;
22993 + struct s3c_cpufreq_info *info; /* for core, not drivers */
22994 + struct s3c_cpufreq_board *board;
22995 +};
22996 +
22997 +/* s3c_cpufreq_board
22998 + *
22999 + * per-board configuraton information, such as memory refresh and
23000 + * how to initialise IO timings.
23001 + */
23002 +struct s3c_cpufreq_board {
23003 + unsigned int refresh; /* refresh period in ns */
23004 + unsigned int auto_io:1; /* automatically init io timings. */
23005 + unsigned int need_io:1; /* set if needs io timing support. */
23006 +
23007 + /* any non-zero field in here is taken as an upper limit. */
23008 + struct s3c_freq max; /* frequency limits */
23009 +};
23010 +
23011 +/* Things depending on frequency scaling. */
23012 +#ifdef CONFIG_CPU_FREQ_S3C
23013 +#define __init_or_cpufreq
23014 +#else
23015 +#define __init_or_cpufreq __init
23016 +#endif
23017 +
23018 +/* Board functions */
23019 +
23020 +#ifdef CONFIG_CPU_FREQ_S3C
23021 +extern int s3c_cpufreq_setboard(struct s3c_cpufreq_board *board);
23022 +#else
23023 +
23024 +static inline int s3c_cpufreq_setboard(struct s3c_cpufreq_board *board)
23025 +{
23026 + return 0;
23027 +}
23028 +#endif /* CONFIG_CPU_FREQ_S3C */
23029 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/cpu.h
23030 ===================================================================
23031 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23032 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/cpu.h 2009-01-02 00:01:56.000000000 +0100
23033 @@ -0,0 +1,74 @@
23034 +/* linux/arch/arm/plat-s3c/include/plat/cpu.h
23035 + *
23036 + * Copyright (c) 2004-2005 Simtec Electronics
23037 + * Ben Dooks <ben@simtec.co.uk>
23038 + *
23039 + * Header file for S3C24XX CPU support
23040 + *
23041 + * This program is free software; you can redistribute it and/or modify
23042 + * it under the terms of the GNU General Public License version 2 as
23043 + * published by the Free Software Foundation.
23044 +*/
23045 +
23046 +/* todo - fix when rmk changes iodescs to use `void __iomem *` */
23047 +
23048 +#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }
23049 +
23050 +#ifndef MHZ
23051 +#define MHZ (1000*1000)
23052 +#endif
23053 +
23054 +#define print_mhz(m) ((m) / MHZ), (((m) / 1000) % 1000)
23055 +
23056 +/* forward declaration */
23057 +struct s3c24xx_uart_resources;
23058 +struct platform_device;
23059 +struct s3c2410_uartcfg;
23060 +struct map_desc;
23061 +
23062 +/* per-cpu initialisation function table. */
23063 +
23064 +struct cpu_table {
23065 + unsigned long idcode;
23066 + unsigned long idmask;
23067 + void (*map_io)(void);
23068 + void (*init_uarts)(struct s3c2410_uartcfg *cfg, int no);
23069 + void (*init_clocks)(int xtal);
23070 + int (*init)(void);
23071 + const char *name;
23072 +};
23073 +
23074 +extern void s3c_init_cpu(unsigned long idcode,
23075 + struct cpu_table *cpus, unsigned int cputab_size);
23076 +
23077 +/* core initialisation functions */
23078 +
23079 +extern void s3c24xx_init_irq(void);
23080 +extern void s3c64xx_init_irq(u32 vic0, u32 vic1);
23081 +
23082 +extern void s3c24xx_init_io(struct map_desc *mach_desc, int size);
23083 +extern void s3c64xx_init_io(struct map_desc *mach_desc, int size);
23084 +
23085 +extern void s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no);
23086 +
23087 +extern void s3c24xx_init_clocks(int xtal);
23088 +
23089 +extern void s3c24xx_init_uartdevs(char *name,
23090 + struct s3c24xx_uart_resources *res,
23091 + struct s3c2410_uartcfg *cfg, int no);
23092 +
23093 +/* timer for 2410/2440 */
23094 +
23095 +struct sys_timer;
23096 +extern struct sys_timer s3c24xx_timer;
23097 +
23098 +/* system device classes */
23099 +
23100 +extern struct sysdev_class s3c2410_sysclass;
23101 +extern struct sysdev_class s3c2412_sysclass;
23102 +extern struct sysdev_class s3c2440_sysclass;
23103 +extern struct sysdev_class s3c2442_sysclass;
23104 +extern struct sysdev_class s3c2443_sysclass;
23105 +extern struct sysdev_class s3c6410_sysclass;
23106 +extern struct sysdev_class s3c64xx_sysclass;
23107 +
23108 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/debug-macro.S
23109 ===================================================================
23110 --- linux-2.6.28.orig/arch/arm/plat-s3c/include/plat/debug-macro.S 2008-12-25 00:26:37.000000000 +0100
23111 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/debug-macro.S 2009-01-02 00:01:56.000000000 +0100
23112 @@ -20,7 +20,7 @@
23113 .endm
23114
23115 #ifndef fifo_level
23116 -#define fifo_level fifo_level_s3c2410
23117 +#define fifo_level fifo_level_s3c2440
23118 #endif
23119
23120 .macro fifo_full_s3c2440 rd, rx
23121 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/devs.h
23122 ===================================================================
23123 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23124 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/devs.h 2009-01-02 00:01:56.000000000 +0100
23125 @@ -0,0 +1,55 @@
23126 +/* linux/include/asm-arm/plat-s3c24xx/devs.h
23127 + *
23128 + * Copyright (c) 2004 Simtec Electronics
23129 + * Ben Dooks <ben@simtec.co.uk>
23130 + *
23131 + * Header file for s3c2410 standard platform devices
23132 + *
23133 + * This program is free software; you can redistribute it and/or modify
23134 + * it under the terms of the GNU General Public License version 2 as
23135 + * published by the Free Software Foundation.
23136 +*/
23137 +#include <linux/platform_device.h>
23138 +
23139 +struct s3c24xx_uart_resources {
23140 + struct resource *resources;
23141 + unsigned long nr_resources;
23142 +};
23143 +
23144 +extern struct s3c24xx_uart_resources s3c2410_uart_resources[];
23145 +extern struct s3c24xx_uart_resources s3c64xx_uart_resources[];
23146 +
23147 +extern struct platform_device *s3c24xx_uart_devs[];
23148 +extern struct platform_device *s3c24xx_uart_src[];
23149 +
23150 +extern struct platform_device s3c_device_timer[];
23151 +
23152 +extern struct platform_device s3c_device_fb;
23153 +extern struct platform_device s3c_device_usb;
23154 +extern struct platform_device s3c_device_lcd;
23155 +extern struct platform_device s3c_device_wdt;
23156 +extern struct platform_device s3c_device_i2c0;
23157 +extern struct platform_device s3c_device_i2c1;
23158 +extern struct platform_device s3c_device_iis;
23159 +extern struct platform_device s3c_device_rtc;
23160 +extern struct platform_device s3c_device_adc;
23161 +extern struct platform_device s3c_device_sdi;
23162 +extern struct platform_device s3c_device_hsmmc0;
23163 +extern struct platform_device s3c_device_hsmmc1;
23164 +extern struct platform_device s3c_device_hsmmc2;
23165 +
23166 +extern struct platform_device s3c_device_spi0;
23167 +extern struct platform_device s3c_device_spi1;
23168 +
23169 +extern struct platform_device s3c_device_nand;
23170 +
23171 +extern struct platform_device s3c_device_usbgadget;
23172 +
23173 +extern struct platform_device s3c_device_ts;
23174 +
23175 +/* s3c2440 specific devices */
23176 +
23177 +#ifdef CONFIG_CPU_S3C2440
23178 +
23179 +extern struct platform_device s3c_device_camif;
23180 +#endif
23181 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/fb.h
23182 ===================================================================
23183 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23184 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/fb.h 2009-01-02 00:01:56.000000000 +0100
23185 @@ -0,0 +1,73 @@
23186 +/* linux/arch/arm/plat-s3c/include/plat/fb.h
23187 + *
23188 + * Copyright 2008 Openmoko, Inc.
23189 + * Copyright 2008 Simtec Electronics
23190 + * http://armlinux.simtec.co.uk/
23191 + * Ben Dooks <ben@simtec.co.uk>
23192 + *
23193 + * S3C - FB platform data definitions
23194 + *
23195 + * This program is free software; you can redistribute it and/or modify
23196 + * it under the terms of the GNU General Public License version 2 as
23197 + * published by the Free Software Foundation.
23198 +*/
23199 +
23200 +#ifndef __PLAT_S3C_FB_H
23201 +#define __PLAT_S3C_FB_H __FILE__
23202 +
23203 +/**
23204 + * struct s3c_fb_pd_win - per window setup data
23205 + * @win_mode: The display parameters to initialise (not for window 0)
23206 + * @virtual_x: The virtual X size.
23207 + * @virtual_y: The virtual Y size.
23208 + */
23209 +struct s3c_fb_pd_win {
23210 + struct fb_videomode win_mode;
23211 +
23212 + unsigned short default_bpp;
23213 + unsigned short max_bpp;
23214 + unsigned short virtual_x;
23215 + unsigned short virtual_y;
23216 +};
23217 +
23218 +/**
23219 + * struct s3c_fb_platdata - S3C driver platform specific information
23220 + * @setup_gpio: Setup the external GPIO pins to the right state to transfer
23221 + * the data from the display system to the connected display
23222 + * device.
23223 + * @vidcon0: The base vidcon0 values to control the panel data format.
23224 + * @vidcon1: The base vidcon1 values to control the panel data output.
23225 + * @win: The setup data for each hardware window, or NULL for unused.
23226 + * @display_mode: The LCD output display mode.
23227 + *
23228 + * The platform data supplies the video driver with all the information
23229 + * it requires to work with the display(s) attached to the machine. It
23230 + * controls the initial mode, the number of display windows (0 is always
23231 + * the base framebuffer) that are initialised etc.
23232 + *
23233 + */
23234 +struct s3c_fb_platdata {
23235 + void (*setup_gpio)(void);
23236 +
23237 + struct s3c_fb_pd_win *win[S3C_FB_MAX_WIN];
23238 +
23239 + u32 vidcon0;
23240 + u32 vidcon1;
23241 +};
23242 +
23243 +/**
23244 + * s3c_fb_set_platdata() - Setup the FB device with platform data.
23245 + * @pd: The platform data to set. The data is copied from the passed structure
23246 + * so the machine data can mark the data __initdata so that any unused
23247 + * machines will end up dumping their data at runtime.
23248 + */
23249 +extern void s3c_fb_set_platdata(struct s3c_fb_platdata *pd);
23250 +
23251 +/**
23252 + * s3c64xx_fb_gpio_setup_24bpp() - S3C64XX setup function for 24bpp LCD
23253 + *
23254 + * Initialise the GPIO for an 24bpp LCD display on the RGB interface.
23255 + */
23256 +extern void s3c64xx_fb_gpio_setup_24bpp(void);
23257 +
23258 +#endif /* __PLAT_S3C_FB_H */
23259 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/gpio-cfg.h
23260 ===================================================================
23261 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23262 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/gpio-cfg.h 2009-01-02 00:01:56.000000000 +0100
23263 @@ -0,0 +1,110 @@
23264 +/* linux/arch/arm/plat-s3c/include/plat/gpio-cfg.h
23265 + *
23266 + * Copyright 2008 Openmoko, Inc.
23267 + * Copyright 2008 Simtec Electronics
23268 + * http://armlinux.simtec.co.uk/
23269 + * Ben Dooks <ben@simtec.co.uk>
23270 + *
23271 + * S3C Platform - GPIO pin configuration
23272 + *
23273 + * This program is free software; you can redistribute it and/or modify
23274 + * it under the terms of the GNU General Public License version 2 as
23275 + * published by the Free Software Foundation.
23276 +*/
23277 +
23278 +/* This file contains the necessary definitions to get the basic gpio
23279 + * pin configuration done such as setting a pin to input or output or
23280 + * changing the pull-{up,down} configurations.
23281 + */
23282 +
23283 +/* Note, this interface is being added to the s3c64xx arch first and will
23284 + * be added to the s3c24xx systems later.
23285 + */
23286 +
23287 +#ifndef __PLAT_GPIO_CFG_H
23288 +#define __PLAT_GPIO_CFG_H __FILE__
23289 +
23290 +typedef unsigned int __bitwise__ s3c_gpio_pull_t;
23291 +
23292 +/* forward declaration if gpio-core.h hasn't been included */
23293 +struct s3c_gpio_chip;
23294 +
23295 +/**
23296 + * struct s3c_gpio_cfg GPIO configuration
23297 + * @cfg_eint: Configuration setting when used for external interrupt source
23298 + * @get_pull: Read the current pull configuration for the GPIO
23299 + * @set_pull: Set the current pull configuraiton for the GPIO
23300 + * @set_config: Set the current configuration for the GPIO
23301 + * @get_config: Read the current configuration for the GPIO
23302 + *
23303 + * Each chip can have more than one type of GPIO bank available and some
23304 + * have different capabilites even when they have the same control register
23305 + * layouts. Provide an point to vector control routine and provide any
23306 + * per-bank configuration information that other systems such as the
23307 + * external interrupt code will need.
23308 + */
23309 +struct s3c_gpio_cfg {
23310 + unsigned int cfg_eint;
23311 +
23312 + s3c_gpio_pull_t (*get_pull)(struct s3c_gpio_chip *chip, unsigned offs);
23313 + int (*set_pull)(struct s3c_gpio_chip *chip, unsigned offs,
23314 + s3c_gpio_pull_t pull);
23315 +
23316 + unsigned (*get_config)(struct s3c_gpio_chip *chip, unsigned offs);
23317 + int (*set_config)(struct s3c_gpio_chip *chip, unsigned offs,
23318 + unsigned config);
23319 +};
23320 +
23321 +#define S3C_GPIO_SPECIAL_MARK (0xfffffff0)
23322 +#define S3C_GPIO_SPECIAL(x) (S3C_GPIO_SPECIAL_MARK | (x))
23323 +
23324 +/* Defines for generic pin configurations */
23325 +#define S3C_GPIO_INPUT (S3C_GPIO_SPECIAL(0))
23326 +#define S3C_GPIO_OUTPUT (S3C_GPIO_SPECIAL(1))
23327 +#define S3C_GPIO_SFN(x) (S3C_GPIO_SPECIAL(x))
23328 +
23329 +#define s3c_gpio_is_cfg_special(_cfg) \
23330 + (((_cfg) & S3C_GPIO_SPECIAL_MARK) == S3C_GPIO_SPECIAL_MARK)
23331 +
23332 +/**
23333 + * s3c_gpio_cfgpin() - Change the GPIO function of a pin.
23334 + * @pin pin The pin number to configure.
23335 + * @pin to The configuration for the pin's function.
23336 + *
23337 + * Configure which function is actually connected to the external
23338 + * pin, such as an gpio input, output or some form of special function
23339 + * connected to an internal peripheral block.
23340 + */
23341 +extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to);
23342 +
23343 +/* Define values for the pull-{up,down} available for each gpio pin.
23344 + *
23345 + * These values control the state of the weak pull-{up,down} resistors
23346 + * available on most pins on the S3C series. Not all chips support both
23347 + * up or down settings, and it may be dependant on the chip that is being
23348 + * used to whether the particular mode is available.
23349 + */
23350 +#define S3C_GPIO_PULL_NONE ((__force s3c_gpio_pull_t)0x00)
23351 +#define S3C_GPIO_PULL_DOWN ((__force s3c_gpio_pull_t)0x01)
23352 +#define S3C_GPIO_PULL_UP ((__force s3c_gpio_pull_t)0x02)
23353 +
23354 +/**
23355 + * s3c_gpio_setpull() - set the state of a gpio pin pull resistor
23356 + * @pin: The pin number to configure the pull resistor.
23357 + * @pull: The configuration for the pull resistor.
23358 + *
23359 + * This function sets the state of the pull-{up,down} resistor for the
23360 + * specified pin. It will return 0 if successfull, or a negative error
23361 + * code if the pin cannot support the requested pull setting.
23362 +*/
23363 +extern int s3c_gpio_setpull(unsigned int pin, s3c_gpio_pull_t pull);
23364 +
23365 +/**
23366 + * s3c_gpio_getpull() - get the pull resistor state of a gpio pin
23367 + * @pin: The pin number to get the settings for
23368 + *
23369 + * Read the pull resistor value for the specified pin.
23370 +*/
23371 +extern s3c_gpio_pull_t s3c_gpio_getpull(unsigned int pin);
23372 +
23373 +#endif /* __PLAT_GPIO_CFG_H */
23374 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/gpio-cfg-helpers.h
23375 ===================================================================
23376 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23377 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/gpio-cfg-helpers.h 2009-01-02 00:01:56.000000000 +0100
23378 @@ -0,0 +1,176 @@
23379 +/* linux/arch/arm/plat-s3c/include/plat/gpio-cfg-helper.h
23380 + *
23381 + * Copyright 2008 Openmoko, Inc.
23382 + * Copyright 2008 Simtec Electronics
23383 + * http://armlinux.simtec.co.uk/
23384 + * Ben Dooks <ben@simtec.co.uk>
23385 + *
23386 + * S3C Platform - GPIO pin configuration helper definitions
23387 + *
23388 + * This program is free software; you can redistribute it and/or modify
23389 + * it under the terms of the GNU General Public License version 2 as
23390 + * published by the Free Software Foundation.
23391 +*/
23392 +
23393 +/* This is meant for core cpu support, machine or other driver files
23394 + * should not be including this header.
23395 + */
23396 +
23397 +#ifndef __PLAT_GPIO_CFG_HELPERS_H
23398 +#define __PLAT_GPIO_CFG_HELPERS_H __FILE__
23399 +
23400 +/* As a note, all gpio configuration functions are entered exclusively, either
23401 + * with the relevant lock held or the system prevented from doing anything else
23402 + * by disabling interrupts.
23403 +*/
23404 +
23405 +static inline int s3c_gpio_do_setcfg(struct s3c_gpio_chip *chip,
23406 + unsigned int off, unsigned int config)
23407 +{
23408 + return (chip->config->set_config)(chip, off, config);
23409 +}
23410 +
23411 +static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip,
23412 + unsigned int off, s3c_gpio_pull_t pull)
23413 +{
23414 + return (chip->config->set_pull)(chip, off, pull);
23415 +}
23416 +
23417 +/**
23418 + * s3c_gpio_setcfg_s3c24xx - S3C24XX style GPIO configuration.
23419 + * @chip: The gpio chip that is being configured.
23420 + * @off: The offset for the GPIO being configured.
23421 + * @cfg: The configuration value to set.
23422 + *
23423 + * This helper deal with the GPIO cases where the control register
23424 + * has two bits of configuration per gpio, which have the following
23425 + * functions:
23426 + * 00 = input
23427 + * 01 = output
23428 + * 1x = special function
23429 +*/
23430 +extern int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip,
23431 + unsigned int off, unsigned int cfg);
23432 +
23433 +/**
23434 + * s3c_gpio_setcfg_s3c24xx_a - S3C24XX style GPIO configuration (Bank A)
23435 + * @chip: The gpio chip that is being configured.
23436 + * @off: The offset for the GPIO being configured.
23437 + * @cfg: The configuration value to set.
23438 + *
23439 + * This helper deal with the GPIO cases where the control register
23440 + * has one bit of configuration for the gpio, where setting the bit
23441 + * means the pin is in special function mode and unset means output.
23442 +*/
23443 +extern int s3c_gpio_setcfg_s3c24xx_a(struct s3c_gpio_chip *chip,
23444 + unsigned int off, unsigned int cfg);
23445 +
23446 +/**
23447 + * s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config.
23448 + * @chip: The gpio chip that is being configured.
23449 + * @off: The offset for the GPIO being configured.
23450 + * @cfg: The configuration value to set.
23451 + *
23452 + * This helper deal with the GPIO cases where the control register has 4 bits
23453 + * of control per GPIO, generally in the form of:
23454 + * 0000 = Input
23455 + * 0001 = Output
23456 + * others = Special functions (dependant on bank)
23457 + *
23458 + * Note, since the code to deal with the case where there are two control
23459 + * registers instead of one, we do not have a seperate set of functions for
23460 + * each case.
23461 +*/
23462 +extern int s3c_gpio_setcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip,
23463 + unsigned int off, unsigned int cfg);
23464 +
23465 +
23466 +/* Pull-{up,down} resistor controls.
23467 + *
23468 + * S3C2410,S3C2440,S3C24A0 = Pull-UP,
23469 + * S3C2412,S3C2413 = Pull-Down
23470 + * S3C6400,S3C6410 = Pull-Both [None,Down,Up,Undef]
23471 + * S3C2443 = Pull-Both [not same as S3C6400]
23472 + */
23473 +
23474 +/**
23475 + * s3c_gpio_setpull_1up() - Pull configuration for choice of up or none.
23476 + * @chip: The gpio chip that is being configured.
23477 + * @off: The offset for the GPIO being configured.
23478 + * @param: pull: The pull mode being requested.
23479 + *
23480 + * This is a helper function for the case where we have GPIOs with one
23481 + * bit configuring the presence of a pull-up resistor.
23482 + */
23483 +extern int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip,
23484 + unsigned int off, s3c_gpio_pull_t pull);
23485 +
23486 +/**
23487 + * s3c_gpio_setpull_1down() - Pull configuration for choice of down or none
23488 + * @chip: The gpio chip that is being configured
23489 + * @off: The offset for the GPIO being configured
23490 + * @param: pull: The pull mode being requested
23491 + *
23492 + * This is a helper function for the case where we have GPIOs with one
23493 + * bit configuring the presence of a pull-down resistor.
23494 + */
23495 +extern int s3c_gpio_setpull_1down(struct s3c_gpio_chip *chip,
23496 + unsigned int off, s3c_gpio_pull_t pull);
23497 +
23498 +/**
23499 + * s3c_gpio_setpull_upown() - Pull configuration for choice of up, down or none
23500 + * @chip: The gpio chip that is being configured.
23501 + * @off: The offset for the GPIO being configured.
23502 + * @param: pull: The pull mode being requested.
23503 + *
23504 + * This is a helper function for the case where we have GPIOs with two
23505 + * bits configuring the presence of a pull resistor, in the following
23506 + * order:
23507 + * 00 = No pull resistor connected
23508 + * 01 = Pull-up resistor connected
23509 + * 10 = Pull-down resistor connected
23510 + */
23511 +extern int s3c_gpio_setpull_updown(struct s3c_gpio_chip *chip,
23512 + unsigned int off, s3c_gpio_pull_t pull);
23513 +
23514 +
23515 +/**
23516 + * s3c_gpio_getpull_updown() - Get configuration for choice of up, down or none
23517 + * @chip: The gpio chip that the GPIO pin belongs to
23518 + * @off: The offset to the pin to get the configuration of.
23519 + *
23520 + * This helper function reads the state of the pull-{up,down} resistor for the
23521 + * given GPIO in the same case as s3c_gpio_setpull_upown.
23522 +*/
23523 +extern s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip,
23524 + unsigned int off);
23525 +
23526 +/**
23527 + * s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443.
23528 + * @chip: The gpio chip that is being configured.
23529 + * @off: The offset for the GPIO being configured.
23530 + * @param: pull: The pull mode being requested.
23531 + *
23532 + * This is a helper function for the case where we have GPIOs with two
23533 + * bits configuring the presence of a pull resistor, in the following
23534 + * order:
23535 + * 00 = Pull-up resistor connected
23536 + * 10 = Pull-down resistor connected
23537 + * x1 = No pull up resistor
23538 + */
23539 +extern int s3c_gpio_setpull_s3c2443(struct s3c_gpio_chip *chip,
23540 + unsigned int off, s3c_gpio_pull_t pull);
23541 +
23542 +/**
23543 + * s3c_gpio_getpull_s3c2443() - Get configuration for s3c2443 pull resistors
23544 + * @chip: The gpio chip that the GPIO pin belongs to.
23545 + * @off: The offset to the pin to get the configuration of.
23546 + *
23547 + * This helper function reads the state of the pull-{up,down} resistor for the
23548 + * given GPIO in the same case as s3c_gpio_setpull_upown.
23549 +*/
23550 +extern s3c_gpio_pull_t s3c_gpio_getpull_s3c24xx(struct s3c_gpio_chip *chip,
23551 + unsigned int off);
23552 +
23553 +#endif /* __PLAT_GPIO_CFG_HELPERS_H */
23554 +
23555 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/gpio-core.h
23556 ===================================================================
23557 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23558 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/gpio-core.h 2009-01-02 00:01:56.000000000 +0100
23559 @@ -0,0 +1,107 @@
23560 +/* linux/arch/arm/plat-s3c/include/plat/gpio-core.h
23561 + *
23562 + * Copyright 2008 Simtec Electronics
23563 + * http://armlinux.simtec.co.uk/
23564 + * Ben Dooks <ben@simtec.co.uk>
23565 + *
23566 + * S3C Platform - GPIO core
23567 + *
23568 + * This program is free software; you can redistribute it and/or modify
23569 + * it under the terms of the GNU General Public License version 2 as
23570 + * published by the Free Software Foundation.
23571 +*/
23572 +
23573 +/* Define the core gpiolib support functions that the s3c platforms may
23574 + * need to extend or change depending on the hardware and the s3c chip
23575 + * selected at build or found at run time.
23576 + *
23577 + * These definitions are not intended for driver inclusion, there is
23578 + * nothing here that should not live outside the platform and core
23579 + * specific code.
23580 +*/
23581 +
23582 +struct s3c_gpio_chip;
23583 +
23584 +/**
23585 + * struct s3c_gpio_pm - power management (suspend/resume) information
23586 + * @save: Routine to save the state of the GPIO block
23587 + * @resume: Routine to resume the GPIO block.
23588 + */
23589 +struct s3c_gpio_pm {
23590 + void (*save)(struct s3c_gpio_chip *chip);
23591 + void (*resume)(struct s3c_gpio_chip *chip);
23592 +};
23593 +
23594 +struct s3c_gpio_cfg;
23595 +
23596 +/**
23597 + * struct s3c_gpio_chip - wrapper for specific implementation of gpio
23598 + * @chip: The chip structure to be exported via gpiolib.
23599 + * @base: The base pointer to the gpio configuration registers.
23600 + * @config: special function and pull-resistor control information.
23601 + * @pm_save: Save information for suspend/resume support.
23602 + *
23603 + * This wrapper provides the necessary information for the Samsung
23604 + * specific gpios being registered with gpiolib.
23605 + */
23606 +struct s3c_gpio_chip {
23607 + struct gpio_chip chip;
23608 + struct s3c_gpio_cfg *config;
23609 + struct s3c_gpio_pm *pm;
23610 + void __iomem *base;
23611 +#ifdef CONFIG_PM
23612 + u32 pm_save[4];
23613 +#endif
23614 +};
23615 +
23616 +static inline struct s3c_gpio_chip *to_s3c_gpio(struct gpio_chip *gpc)
23617 +{
23618 + return container_of(gpc, struct s3c_gpio_chip, chip);
23619 +}
23620 +
23621 +/** s3c_gpiolib_add() - add the s3c specific version of a gpio_chip.
23622 + * @chip: The chip to register
23623 + *
23624 + * This is a wrapper to gpiochip_add() that takes our specific gpio chip
23625 + * information and makes the necessary alterations for the platform and
23626 + * notes the information for use with the configuration systems and any
23627 + * other parts of the system.
23628 + */
23629 +extern void s3c_gpiolib_add(struct s3c_gpio_chip *chip);
23630 +
23631 +/* CONFIG_S3C_GPIO_TRACK enables the tracking of the s3c specific gpios
23632 + * for use with the configuration calls, and other parts of the s3c gpiolib
23633 + * support code.
23634 + *
23635 + * Not all s3c support code will need this, as some configurations of cpu
23636 + * may only support one or two different configuration options and have an
23637 + * easy gpio to s3c_gpio_chip mapping function. If this is the case, then
23638 + * the machine support file should provide its own s3c_gpiolib_getchip()
23639 + * and any other necessary functions.
23640 + */
23641 +
23642 +#ifdef CONFIG_S3C_GPIO_TRACK
23643 +extern struct s3c_gpio_chip *s3c_gpios[S3C_GPIO_END];
23644 +
23645 +static inline struct s3c_gpio_chip *s3c_gpiolib_getchip(unsigned int chip)
23646 +{
23647 + return (chip < S3C_GPIO_END) ? s3c_gpios[chip] : NULL;
23648 +}
23649 +#else
23650 +/* machine specific code should provide s3c_gpiolib_getchip */
23651 +
23652 +static inline void s3c_gpiolib_track(struct s3c_gpio_chip *chip) { }
23653 +#endif
23654 +
23655 +#ifdef CONFIG_PM
23656 +extern struct s3c_gpio_pm s3c_gpio_pm_1bit;
23657 +extern struct s3c_gpio_pm s3c_gpio_pm_2bit;
23658 +extern struct s3c_gpio_pm s3c_gpio_pm_4bit;
23659 +#define __gpio_pm(x) x
23660 +#else
23661 +#define s3c_gpio_pm_1bit NULL
23662 +#define s3c_gpio_pm_2bit NULL
23663 +#define s3c_gpio_pm_4bit NULL
23664 +#define __gpio_pm(x) NULL
23665 +
23666 +#endif /* CONFIG_PM */
23667 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/iic-core.h
23668 ===================================================================
23669 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23670 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/iic-core.h 2009-01-02 00:01:56.000000000 +0100
23671 @@ -0,0 +1,35 @@
23672 +/* arch/arm/mach-s3c2410/include/mach/iic-core.h
23673 + *
23674 + * Copyright 2008 Openmoko, Inc.
23675 + * Copyright 2008 Simtec Electronics
23676 + * Ben Dooks <ben@simtec.co.uk>
23677 + *
23678 + * S3C - I2C Controller core functions
23679 + *
23680 + * This program is free software; you can redistribute it and/or modify
23681 + * it under the terms of the GNU General Public License version 2 as
23682 + * published by the Free Software Foundation.
23683 +*/
23684 +
23685 +#ifndef __ASM_ARCH_IIC_CORE_H
23686 +#define __ASM_ARCH_IIC_CORE_H __FILE__
23687 +
23688 +/* These functions are only for use with the core support code, such as
23689 + * the cpu specific initialisation code
23690 + */
23691 +
23692 +/* re-define device name depending on support. */
23693 +static inline void s3c_i2c0_setname(char *name)
23694 +{
23695 + /* currently this device is always compiled in */
23696 + s3c_device_i2c0.name = name;
23697 +}
23698 +
23699 +static inline void s3c_i2c1_setname(char *name)
23700 +{
23701 +#ifdef CONFIG_S3C_DEV_I2C1
23702 + s3c_device_i2c1.name = name;
23703 +#endif
23704 +}
23705 +
23706 +#endif /* __ASM_ARCH_IIC_H */
23707 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/iic.h
23708 ===================================================================
23709 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23710 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/iic.h 2009-01-02 00:01:56.000000000 +0100
23711 @@ -0,0 +1,57 @@
23712 +/* arch/arm/mach-s3c2410/include/mach/iic.h
23713 + *
23714 + * Copyright (c) 2004 Simtec Electronics
23715 + * Ben Dooks <ben@simtec.co.uk>
23716 + *
23717 + * S3C2410 - I2C Controller platfrom_device info
23718 + *
23719 + * This program is free software; you can redistribute it and/or modify
23720 + * it under the terms of the GNU General Public License version 2 as
23721 + * published by the Free Software Foundation.
23722 +*/
23723 +
23724 +#ifndef __ASM_ARCH_IIC_H
23725 +#define __ASM_ARCH_IIC_H __FILE__
23726 +
23727 +#define S3C_IICFLG_FILTER (1<<0) /* enable s3c2440 filter */
23728 +
23729 +/* Notes:
23730 + * 1) All frequencies are expressed in Hz
23731 + * 2) A value of zero is `do not care`
23732 +*/
23733 +
23734 +struct s3c2410_platform_i2c {
23735 + int bus_num; /* bus number to use */
23736 + unsigned int flags;
23737 + unsigned int slave_addr; /* slave address for controller */
23738 + unsigned long bus_freq; /* standard bus frequency */
23739 + unsigned long max_freq; /* max frequency for the bus */
23740 + unsigned long min_freq; /* min frequency for the bus */
23741 + unsigned int sda_delay; /* pclks (s3c2440 only) */
23742 +
23743 + void (*cfg_gpio)(struct platform_device *dev);
23744 +};
23745 +
23746 +/**
23747 + * s3c_i2c0_set_platdata - set platform data for i2c0 device
23748 + * @i2c: The platform data to set, or NULL for default data.
23749 + *
23750 + * Register the given platform data for use with the i2c0 device. This
23751 + * call copies the platform data, so the caller can use __initdata for
23752 + * their copy.
23753 + *
23754 + * This call will set cfg_gpio if is null to the default platform
23755 + * implementation.
23756 + *
23757 + * Any user of s3c_device_i2c0 should call this, even if it is with
23758 + * NULL to ensure that the device is given the default platform data
23759 + * as the driver will no longer carry defaults.
23760 + */
23761 +extern void s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *i2c);
23762 +extern void s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *i2c);
23763 +
23764 +/* defined by architecture to configure gpio */
23765 +extern void s3c_i2c0_cfg_gpio(struct platform_device *dev);
23766 +extern void s3c_i2c1_cfg_gpio(struct platform_device *dev);
23767 +
23768 +#endif /* __ASM_ARCH_IIC_H */
23769 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/map-base.h
23770 ===================================================================
23771 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23772 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/map-base.h 2009-01-02 00:01:56.000000000 +0100
23773 @@ -0,0 +1,40 @@
23774 +/* linux/include/asm-arm/plat-s3c/map.h
23775 + *
23776 + * Copyright 2003, 2007 Simtec Electronics
23777 + * http://armlinux.simtec.co.uk/
23778 + * Ben Dooks <ben@simtec.co.uk>
23779 + *
23780 + * S3C - Memory map definitions (virtual addresses)
23781 + *
23782 + * This program is free software; you can redistribute it and/or modify
23783 + * it under the terms of the GNU General Public License version 2 as
23784 + * published by the Free Software Foundation.
23785 +*/
23786 +
23787 +#ifndef __ASM_PLAT_MAP_H
23788 +#define __ASM_PLAT_MAP_H __FILE__
23789 +
23790 +/* Fit all our registers in at 0xF4000000 upwards, trying to use as
23791 + * little of the VA space as possible so vmalloc and friends have a
23792 + * better chance of getting memory.
23793 + *
23794 + * we try to ensure stuff like the IRQ registers are available for
23795 + * an single MOVS instruction (ie, only 8 bits of set data)
23796 + */
23797 +
23798 +#define S3C_ADDR_BASE (0xF4000000)
23799 +
23800 +#ifndef __ASSEMBLY__
23801 +#define S3C_ADDR(x) ((void __iomem __force *)S3C_ADDR_BASE + (x))
23802 +#else
23803 +#define S3C_ADDR(x) (S3C_ADDR_BASE + (x))
23804 +#endif
23805 +
23806 +#define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */
23807 +#define S3C_VA_SYS S3C_ADDR(0x00100000) /* system control */
23808 +#define S3C_VA_MEM S3C_ADDR(0x00200000) /* system control */
23809 +#define S3C_VA_TIMER S3C_ADDR(0x00300000) /* timer block */
23810 +#define S3C_VA_WATCHDOG S3C_ADDR(0x00400000) /* watchdog */
23811 +#define S3C_VA_UART S3C_ADDR(0x01000000) /* UART */
23812 +
23813 +#endif /* __ASM_PLAT_MAP_H */
23814 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/map.h
23815 ===================================================================
23816 --- linux-2.6.28.orig/arch/arm/plat-s3c/include/plat/map.h 2008-12-25 00:26:37.000000000 +0100
23817 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
23818 @@ -1,40 +0,0 @@
23819 -/* linux/include/asm-arm/plat-s3c/map.h
23820 - *
23821 - * Copyright 2003, 2007 Simtec Electronics
23822 - * http://armlinux.simtec.co.uk/
23823 - * Ben Dooks <ben@simtec.co.uk>
23824 - *
23825 - * S3C - Memory map definitions (virtual addresses)
23826 - *
23827 - * This program is free software; you can redistribute it and/or modify
23828 - * it under the terms of the GNU General Public License version 2 as
23829 - * published by the Free Software Foundation.
23830 -*/
23831 -
23832 -#ifndef __ASM_PLAT_MAP_H
23833 -#define __ASM_PLAT_MAP_H __FILE__
23834 -
23835 -/* Fit all our registers in at 0xF4000000 upwards, trying to use as
23836 - * little of the VA space as possible so vmalloc and friends have a
23837 - * better chance of getting memory.
23838 - *
23839 - * we try to ensure stuff like the IRQ registers are available for
23840 - * an single MOVS instruction (ie, only 8 bits of set data)
23841 - */
23842 -
23843 -#define S3C_ADDR_BASE (0xF4000000)
23844 -
23845 -#ifndef __ASSEMBLY__
23846 -#define S3C_ADDR(x) ((void __iomem __force *)S3C_ADDR_BASE + (x))
23847 -#else
23848 -#define S3C_ADDR(x) (S3C_ADDR_BASE + (x))
23849 -#endif
23850 -
23851 -#define S3C_VA_IRQ S3C_ADDR(0x00000000) /* irq controller(s) */
23852 -#define S3C_VA_SYS S3C_ADDR(0x00100000) /* system control */
23853 -#define S3C_VA_MEM S3C_ADDR(0x00200000) /* system control */
23854 -#define S3C_VA_TIMER S3C_ADDR(0x00300000) /* timer block */
23855 -#define S3C_VA_WATCHDOG S3C_ADDR(0x00400000) /* watchdog */
23856 -#define S3C_VA_UART S3C_ADDR(0x01000000) /* UART */
23857 -
23858 -#endif /* __ASM_PLAT_MAP_H */
23859 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/nand.h
23860 ===================================================================
23861 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23862 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/nand.h 2009-01-02 00:01:56.000000000 +0100
23863 @@ -0,0 +1,56 @@
23864 +/* arch/arm/mach-s3c2410/include/mach/nand.h
23865 + *
23866 + * Copyright (c) 2004 Simtec Electronics
23867 + * Ben Dooks <ben@simtec.co.uk>
23868 + *
23869 + * S3C2410 - NAND device controller platfrom_device info
23870 + *
23871 + * This program is free software; you can redistribute it and/or modify
23872 + * it under the terms of the GNU General Public License version 2 as
23873 + * published by the Free Software Foundation.
23874 +*/
23875 +
23876 +/* struct s3c2410_nand_set
23877 + *
23878 + * define an set of one or more nand chips registered with an unique mtd
23879 + *
23880 + * nr_chips = number of chips in this set
23881 + * nr_partitions = number of partitions pointed to be partitoons (or zero)
23882 + * name = name of set (optional)
23883 + * nr_map = map for low-layer logical to physical chip numbers (option)
23884 + * partitions = mtd partition list
23885 +*/
23886 +
23887 +#define S3C2410_NAND_BBT 0x0001
23888 +
23889 +struct s3c2410_nand_set {
23890 + unsigned int disable_ecc : 1;
23891 +
23892 + int nr_chips;
23893 + int nr_partitions;
23894 + unsigned int flags;
23895 + char *name;
23896 + int *nr_map;
23897 + struct mtd_partition *partitions;
23898 + struct nand_ecclayout *ecc_layout;
23899 +};
23900 +
23901 +struct s3c2410_platform_nand {
23902 + /* timing information for controller, all times in nanoseconds */
23903 +
23904 + int tacls; /* time for active CLE/ALE to nWE/nOE */
23905 + int twrph0; /* active time for nWE/nOE */
23906 + int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */
23907 +
23908 + unsigned int ignore_unset_ecc : 1;
23909 +
23910 + int nr_sets;
23911 + struct s3c2410_nand_set *sets;
23912 +
23913 + /* force software_ecc at runtime */
23914 + int software_ecc;
23915 +
23916 + void (*select_chip)(struct s3c2410_nand_set *,
23917 + int chip);
23918 +};
23919 +
23920 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/pm.h
23921 ===================================================================
23922 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
23923 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/pm.h 2009-01-02 00:01:56.000000000 +0100
23924 @@ -0,0 +1,184 @@
23925 +/* linux/include/asm-arm/plat-s3c24xx/pm.h
23926 + *
23927 + * Copyright (c) 2004 Simtec Electronics
23928 + * http://armlinux.simtec.co.uk/
23929 + * Written by Ben Dooks, <ben@simtec.co.uk>
23930 + *
23931 + * This program is free software; you can redistribute it and/or modify
23932 + * it under the terms of the GNU General Public License version 2 as
23933 + * published by the Free Software Foundation.
23934 +*/
23935 +
23936 +#include <linux/sysdev.h>
23937 +
23938 +/* s3c_pm_init
23939 + *
23940 + * called from board at initialisation time to setup the power
23941 + * management
23942 +*/
23943 +
23944 +#ifdef CONFIG_PM
23945 +
23946 +extern __init int s3c_pm_init(void);
23947 +
23948 +#else
23949 +
23950 +static inline int s3c_pm_init(void)
23951 +{
23952 + return 0;
23953 +}
23954 +#endif
23955 +
23956 +/* configuration for the IRQ mask over sleep */
23957 +extern unsigned long s3c_irqwake_intmask;
23958 +extern unsigned long s3c_irqwake_eintmask;
23959 +
23960 +/* IRQ masks for IRQs allowed to go to sleep (see irq.c) */
23961 +extern unsigned long s3c_irqwake_intallow;
23962 +extern unsigned long s3c_irqwake_eintallow;
23963 +
23964 +/* per-cpu sleep functions */
23965 +
23966 +extern void (*pm_cpu_prep)(void);
23967 +extern void (*pm_cpu_sleep)(void);
23968 +
23969 +/* Flags for PM Control */
23970 +
23971 +extern unsigned long s3c_pm_flags;
23972 +
23973 +extern unsigned char pm_uart_udivslot; /* true to save UART UDIVSLOT */
23974 +
23975 +/* from sleep.S */
23976 +
23977 +extern int s3c_cpu_save(unsigned long *saveblk);
23978 +extern void s3c_cpu_resume(void);
23979 +
23980 +extern void s3c2410_cpu_suspend(void);
23981 +
23982 +extern unsigned long s3c_sleep_save_phys;
23983 +
23984 +/* sleep save info */
23985 +
23986 +/**
23987 + * struct sleep_save - save information for shared peripherals.
23988 + * @reg: Pointer to the register to save.
23989 + * @val: Holder for the value saved from reg.
23990 + *
23991 + * This describes a list of registers which is used by the pm core and
23992 + * other subsystem to save and restore register values over suspend.
23993 + */
23994 +struct sleep_save {
23995 + void __iomem *reg;
23996 + unsigned long val;
23997 +};
23998 +
23999 +#define SAVE_ITEM(x) \
24000 + { .reg = (x) }
24001 +
24002 +/**
24003 + * struct pm_uart_save - save block for core UART
24004 + * @ulcon: Save value for S3C2410_ULCON
24005 + * @ucon: Save value for S3C2410_UCON
24006 + * @ufcon: Save value for S3C2410_UFCON
24007 + * @umcon: Save value for S3C2410_UMCON
24008 + * @ubrdiv: Save value for S3C2410_UBRDIV
24009 + *
24010 + * Save block for UART registers to be held over sleep and restored if they
24011 + * are needed (say by debug).
24012 +*/
24013 +struct pm_uart_save {
24014 + u32 ulcon;
24015 + u32 ucon;
24016 + u32 ufcon;
24017 + u32 umcon;
24018 + u32 ubrdiv;
24019 + u32 udivslot;
24020 +};
24021 +
24022 +/* helper functions to save/restore lists of registers. */
24023 +
24024 +extern void s3c_pm_do_save(struct sleep_save *ptr, int count);
24025 +extern void s3c_pm_do_restore(struct sleep_save *ptr, int count);
24026 +extern void s3c_pm_do_restore_core(struct sleep_save *ptr, int count);
24027 +
24028 +#ifdef CONFIG_PM
24029 +extern int s3c_irqext_wake(unsigned int irqno, unsigned int state);
24030 +extern int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t state);
24031 +extern int s3c24xx_irq_resume(struct sys_device *dev);
24032 +#else
24033 +#define s3c_irqext_wake NULL
24034 +#define s3c24xx_irq_suspend NULL
24035 +#define s3c24xx_irq_resume NULL
24036 +#endif
24037 +
24038 +/* PM debug functions */
24039 +
24040 +#ifdef CONFIG_S3C2410_PM_DEBUG
24041 +/**
24042 + * s3c_pm_dbg() - low level debug function for use in suspend/resume.
24043 + * @msg: The message to print.
24044 + *
24045 + * This function is used mainly to debug the resume process before the system
24046 + * can rely on printk/console output. It uses the low-level debugging output
24047 + * routine printascii() to do its work.
24048 + */
24049 +extern void s3c_pm_dbg(const char *msg, ...);
24050 +
24051 +#define S3C_PMDBG(fmt...) s3c_pm_dbg(fmt)
24052 +#else
24053 +#define S3C_PMDBG(fmt...) printk(KERN_DEBUG fmt)
24054 +#endif
24055 +
24056 +#ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK
24057 +/**
24058 + * s3c_pm_debug_smdkled() - Debug PM suspend/resume via SMDK Board LEDs
24059 + * @set: set bits for the state of the LEDs
24060 + * @clear: clear bits for the state of the LEDs.
24061 + */
24062 +extern void s3c_pm_debug_smdkled(u32 set, u32 clear);
24063 +
24064 +#else
24065 +static inline void s3c_pm_debug_smdkled(u32 set, u32 clear) { }
24066 +#endif /* CONFIG_S3C_PM_DEBUG_LED_SMDK */
24067 +
24068 +/* suspend memory checking */
24069 +
24070 +#ifdef CONFIG_S3C2410_PM_CHECK
24071 +extern void s3c_pm_check_prepare(void);
24072 +extern void s3c_pm_check_restore(void);
24073 +extern void s3c_pm_check_cleanup(void);
24074 +extern void s3c_pm_check_store(void);
24075 +#else
24076 +#define s3c_pm_check_prepare() do { } while(0)
24077 +#define s3c_pm_check_restore() do { } while(0)
24078 +#define s3c_pm_check_cleanup() do { } while(0)
24079 +#define s3c_pm_check_store() do { } while(0)
24080 +#endif
24081 +
24082 +/**
24083 + * s3c_pm_configure_extint() - ensure pins are correctly set for IRQ
24084 + *
24085 + * Setup all the necessary GPIO pins for waking the system on external
24086 + * interrupt.
24087 + */
24088 +extern void s3c_pm_configure_extint(void);
24089 +
24090 +/**
24091 + * s3c_pm_restore_gpios() - restore the state of the gpios after sleep.
24092 + *
24093 + * Restore the state of the GPIO pins after sleep, which may involve ensuring
24094 + * that we do not glitch the state of the pins from that the bootloader's
24095 + * resume code has done.
24096 +*/
24097 +extern void s3c_pm_restore_gpios(void);
24098 +
24099 +/**
24100 + * s3c_pm_save_gpios() - save the state of the GPIOs for restoring after sleep.
24101 + *
24102 + * Save the GPIO states for resotration on resume. See s3c_pm_restore_gpios().
24103 + */
24104 +extern void s3c_pm_save_gpios(void);
24105 +
24106 +extern void s3c_pm_save_core(void);
24107 +extern void s3c_pm_restore_core(void);
24108 +
24109 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-ac97.h
24110 ===================================================================
24111 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
24112 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-ac97.h 2009-01-02 00:01:56.000000000 +0100
24113 @@ -0,0 +1,67 @@
24114 +/* arch/arm/mach-s3c2410/include/mach/regs-ac97.h
24115 + *
24116 + * Copyright (c) 2006 Simtec Electronics <linux@simtec.co.uk>
24117 + * http://www.simtec.co.uk/products/SWLINUX/
24118 + *
24119 + * This program is free software; you can redistribute it and/or modify
24120 + * it under the terms of the GNU General Public License version 2 as
24121 + * published by the Free Software Foundation.
24122 + *
24123 + * S3C2440 AC97 Controller
24124 +*/
24125 +
24126 +#ifndef __ASM_ARCH_REGS_AC97_H
24127 +#define __ASM_ARCH_REGS_AC97_H __FILE__
24128 +
24129 +#define S3C_AC97_GLBCTRL (0x00)
24130 +
24131 +#define S3C_AC97_GLBCTRL_CODECREADYIE (1<<22)
24132 +#define S3C_AC97_GLBCTRL_PCMOUTURIE (1<<21)
24133 +#define S3C_AC97_GLBCTRL_PCMINORIE (1<<20)
24134 +#define S3C_AC97_GLBCTRL_MICINORIE (1<<19)
24135 +#define S3C_AC97_GLBCTRL_PCMOUTTIE (1<<18)
24136 +#define S3C_AC97_GLBCTRL_PCMINTIE (1<<17)
24137 +#define S3C_AC97_GLBCTRL_MICINTIE (1<<16)
24138 +#define S3C_AC97_GLBCTRL_PCMOUTTM_OFF (0<<12)
24139 +#define S3C_AC97_GLBCTRL_PCMOUTTM_PIO (1<<12)
24140 +#define S3C_AC97_GLBCTRL_PCMOUTTM_DMA (2<<12)
24141 +#define S3C_AC97_GLBCTRL_PCMOUTTM_MASK (3<<12)
24142 +#define S3C_AC97_GLBCTRL_PCMINTM_OFF (0<<10)
24143 +#define S3C_AC97_GLBCTRL_PCMINTM_PIO (1<<10)
24144 +#define S3C_AC97_GLBCTRL_PCMINTM_DMA (2<<10)
24145 +#define S3C_AC97_GLBCTRL_PCMINTM_MASK (3<<10)
24146 +#define S3C_AC97_GLBCTRL_MICINTM_OFF (0<<8)
24147 +#define S3C_AC97_GLBCTRL_MICINTM_PIO (1<<8)
24148 +#define S3C_AC97_GLBCTRL_MICINTM_DMA (2<<8)
24149 +#define S3C_AC97_GLBCTRL_MICINTM_MASK (3<<8)
24150 +#define S3C_AC97_GLBCTRL_TRANSFERDATAENABLE (1<<3)
24151 +#define S3C_AC97_GLBCTRL_ACLINKON (1<<2)
24152 +#define S3C_AC97_GLBCTRL_WARMRESET (1<<1)
24153 +#define S3C_AC97_GLBCTRL_COLDRESET (1<<0)
24154 +
24155 +#define S3C_AC97_GLBSTAT (0x04)
24156 +
24157 +#define S3C_AC97_GLBSTAT_CODECREADY (1<<22)
24158 +#define S3C_AC97_GLBSTAT_PCMOUTUR (1<<21)
24159 +#define S3C_AC97_GLBSTAT_PCMINORI (1<<20)
24160 +#define S3C_AC97_GLBSTAT_MICINORI (1<<19)
24161 +#define S3C_AC97_GLBSTAT_PCMOUTTI (1<<18)
24162 +#define S3C_AC97_GLBSTAT_PCMINTI (1<<17)
24163 +#define S3C_AC97_GLBSTAT_MICINTI (1<<16)
24164 +#define S3C_AC97_GLBSTAT_MAINSTATE_IDLE (0<<0)
24165 +#define S3C_AC97_GLBSTAT_MAINSTATE_INIT (1<<0)
24166 +#define S3C_AC97_GLBSTAT_MAINSTATE_READY (2<<0)
24167 +#define S3C_AC97_GLBSTAT_MAINSTATE_ACTIVE (3<<0)
24168 +#define S3C_AC97_GLBSTAT_MAINSTATE_LP (4<<0)
24169 +#define S3C_AC97_GLBSTAT_MAINSTATE_WARM (5<<0)
24170 +
24171 +#define S3C_AC97_CODEC_CMD (0x08)
24172 +
24173 +#define S3C_AC97_CODEC_CMD_READ (1<<23)
24174 +
24175 +#define S3C_AC97_STAT (0x0c)
24176 +#define S3C_AC97_PCM_ADDR (0x10)
24177 +#define S3C_AC97_PCM_DATA (0x18)
24178 +#define S3C_AC97_MIC_DATA (0x1C)
24179 +
24180 +#endif /* __ASM_ARCH_REGS_AC97_H */
24181 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-fb.h
24182 ===================================================================
24183 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
24184 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-fb.h 2009-01-02 00:01:56.000000000 +0100
24185 @@ -0,0 +1,366 @@
24186 +/* arch/arm/plat-s3c/include/plat/regs-fb.h
24187 + *
24188 + * Copyright 2008 Openmoko, Inc.
24189 + * Copyright 2008 Simtec Electronics
24190 + * http://armlinux.simtec.co.uk/
24191 + * Ben Dooks <ben@simtec.co.uk>
24192 + *
24193 + * S3C Platform - new-style framebuffer register definitions
24194 + *
24195 + * This is the register set for the new style framebuffer interface
24196 + * found from the S3C2443 onwards into the S3C2416, S3C2450 and the
24197 + * S3C64XX series such as the S3C6400 and S3C6410.
24198 + *
24199 + * The file does not contain the cpu specific items which are based on
24200 + * whichever architecture is selected, it only contains the core of the
24201 + * register set. See <mach/regs-fb.h> to get the specifics.
24202 + *
24203 + * Note, we changed to using regs-fb.h as it avoids any clashes with
24204 + * the original regs-lcd.h so out of the way of regs-lcd.h as well as
24205 + * indicating the newer block is much more than just an LCD interface.
24206 + *
24207 + * This program is free software; you can redistribute it and/or modify
24208 + * it under the terms of the GNU General Public License version 2 as
24209 + * published by the Free Software Foundation.
24210 +*/
24211 +
24212 +/* Please do not include this file directly, use <mach/regs-fb.h> to
24213 + * ensure all the localised SoC support is included as necessary.
24214 +*/
24215 +
24216 +/* VIDCON0 */
24217 +
24218 +#define VIDCON0 (0x00)
24219 +#define VIDCON0_INTERLACE (1 << 29)
24220 +#define VIDCON0_VIDOUT_MASK (0x3 << 26)
24221 +#define VIDCON0_VIDOUT_SHIFT (26)
24222 +#define VIDCON0_VIDOUT_RGB (0x0 << 26)
24223 +#define VIDCON0_VIDOUT_TV (0x1 << 26)
24224 +#define VIDCON0_VIDOUT_I80_LDI0 (0x2 << 26)
24225 +#define VIDCON0_VIDOUT_I80_LDI1 (0x3 << 26)
24226 +
24227 +#define VIDCON0_L1_DATA_MASK (0x7 << 23)
24228 +#define VIDCON0_L1_DATA_SHIFT (23)
24229 +#define VIDCON0_L1_DATA_16BPP (0x0 << 23)
24230 +#define VIDCON0_L1_DATA_18BPP16 (0x1 << 23)
24231 +#define VIDCON0_L1_DATA_18BPP9 (0x2 << 23)
24232 +#define VIDCON0_L1_DATA_24BPP (0x3 << 23)
24233 +#define VIDCON0_L1_DATA_18BPP (0x4 << 23)
24234 +#define VIDCON0_L1_DATA_16BPP8 (0x5 << 23)
24235 +
24236 +#define VIDCON0_L0_DATA_MASK (0x7 << 20)
24237 +#define VIDCON0_L0_DATA_SHIFT (20)
24238 +#define VIDCON0_L0_DATA_16BPP (0x0 << 20)
24239 +#define VIDCON0_L0_DATA_18BPP16 (0x1 << 20)
24240 +#define VIDCON0_L0_DATA_18BPP9 (0x2 << 20)
24241 +#define VIDCON0_L0_DATA_24BPP (0x3 << 20)
24242 +#define VIDCON0_L0_DATA_18BPP (0x4 << 20)
24243 +#define VIDCON0_L0_DATA_16BPP8 (0x5 << 20)
24244 +
24245 +#define VIDCON0_PNRMODE_MASK (0x3 << 17)
24246 +#define VIDCON0_PNRMODE_SHIFT (17)
24247 +#define VIDCON0_PNRMODE_RGB (0x0 << 17)
24248 +#define VIDCON0_PNRMODE_BGR (0x1 << 17)
24249 +#define VIDCON0_PNRMODE_SERIAL_RGB (0x2 << 17)
24250 +#define VIDCON0_PNRMODE_SERIAL_BGR (0x3 << 17)
24251 +
24252 +#define VIDCON0_CLKVALUP (1 << 16)
24253 +#define VIDCON0_CLKVAL_F_MASK (0xff << 6)
24254 +#define VIDCON0_CLKVAL_F_SHIFT (6)
24255 +#define VIDCON0_CLKVAL_F_LIMIT (0xff)
24256 +#define VIDCON0_CLKVAL_F(_x) ((_x) << 6)
24257 +#define VIDCON0_VLCKFREE (1 << 5)
24258 +#define VIDCON0_CLKDIR (1 << 4)
24259 +
24260 +#define VIDCON0_CLKSEL_MASK (0x3 << 2)
24261 +#define VIDCON0_CLKSEL_SHIFT (2)
24262 +#define VIDCON0_CLKSEL_HCLK (0x0 << 2)
24263 +#define VIDCON0_CLKSEL_LCD (0x1 << 2)
24264 +#define VIDCON0_CLKSEL_27M (0x3 << 2)
24265 +
24266 +#define VIDCON0_ENVID (1 << 1)
24267 +#define VIDCON0_ENVID_F (1 << 0)
24268 +
24269 +#define VIDCON1 (0x04)
24270 +#define VIDCON1_LINECNT_MASK (0x7ff << 16)
24271 +#define VIDCON1_LINECNT_SHIFT (16)
24272 +#define VIDCON1_LINECNT_GET(_v) (((_v) >> 16) & 0x7ff)
24273 +#define VIDCON1_VSTATUS_MASK (0x3 << 13)
24274 +#define VIDCON1_VSTATUS_SHIFT (13)
24275 +#define VIDCON1_VSTATUS_VSYNC (0x0 << 13)
24276 +#define VIDCON1_VSTATUS_BACKPORCH (0x1 << 13)
24277 +#define VIDCON1_VSTATUS_ACTIVE (0x2 << 13)
24278 +#define VIDCON1_VSTATUS_FRONTPORCH (0x0 << 13)
24279 +
24280 +#define VIDCON1_INV_VCLK (1 << 7)
24281 +#define VIDCON1_INV_HSYNC (1 << 6)
24282 +#define VIDCON1_INV_VSYNC (1 << 5)
24283 +#define VIDCON1_INV_VDEN (1 << 4)
24284 +
24285 +/* VIDCON2 */
24286 +
24287 +#define VIDCON2 (0x08)
24288 +#define VIDCON2_EN601 (1 << 23)
24289 +#define VIDCON2_TVFMTSEL_SW (1 << 14)
24290 +
24291 +#define VIDCON2_TVFMTSEL1_MASK (0x3 << 12)
24292 +#define VIDCON2_TVFMTSEL1_SHIFT (12)
24293 +#define VIDCON2_TVFMTSEL1_RGB (0x0 << 12)
24294 +#define VIDCON2_TVFMTSEL1_YUV422 (0x1 << 12)
24295 +#define VIDCON2_TVFMTSEL1_YUV444 (0x2 << 12)
24296 +
24297 +#define VIDCON2_ORGYCbCr (1 << 8)
24298 +#define VIDCON2_YUVORDCrCb (1 << 7)
24299 +
24300 +/* VIDTCON0 */
24301 +
24302 +#define VIDTCON0_VBPDE_MASK (0xff << 24)
24303 +#define VIDTCON0_VBPDE_SHIFT (24)
24304 +#define VIDTCON0_VBPDE_LIMIT (0xff)
24305 +#define VIDTCON0_VBPDE(_x) ((_x) << 24)
24306 +
24307 +#define VIDTCON0_VBPD_MASK (0xff << 16)
24308 +#define VIDTCON0_VBPD_SHIFT (16)
24309 +#define VIDTCON0_VBPD_LIMIT (0xff)
24310 +#define VIDTCON0_VBPD(_x) ((_x) << 16)
24311 +
24312 +#define VIDTCON0_VFPD_MASK (0xff << 8)
24313 +#define VIDTCON0_VFPD_SHIFT (8)
24314 +#define VIDTCON0_VFPD_LIMIT (0xff)
24315 +#define VIDTCON0_VFPD(_x) ((_x) << 8)
24316 +
24317 +#define VIDTCON0_VSPW_MASK (0xff << 0)
24318 +#define VIDTCON0_VSPW_SHIFT (0)
24319 +#define VIDTCON0_VSPW_LIMIT (0xff)
24320 +#define VIDTCON0_VSPW(_x) ((_x) << 0)
24321 +
24322 +/* VIDTCON1 */
24323 +
24324 +#define VIDTCON1_VFPDE_MASK (0xff << 24)
24325 +#define VIDTCON1_VFPDE_SHIFT (24)
24326 +#define VIDTCON1_VFPDE_LIMIT (0xff)
24327 +#define VIDTCON1_VFPDE(_x) ((_x) << 24)
24328 +
24329 +#define VIDTCON1_HBPD_MASK (0xff << 16)
24330 +#define VIDTCON1_HBPD_SHIFT (16)
24331 +#define VIDTCON1_HBPD_LIMIT (0xff)
24332 +#define VIDTCON1_HBPD(_x) ((_x) << 16)
24333 +
24334 +#define VIDTCON1_HFPD_MASK (0xff << 8)
24335 +#define VIDTCON1_HFPD_SHIFT (8)
24336 +#define VIDTCON1_HFPD_LIMIT (0xff)
24337 +#define VIDTCON1_HFPD(_x) ((_x) << 8)
24338 +
24339 +#define VIDTCON1_HSPW_MASK (0xff << 0)
24340 +#define VIDTCON1_HSPW_SHIFT (0)
24341 +#define VIDTCON1_HSPW_LIMIT (0xff)
24342 +#define VIDTCON1_HSPW(_x) ((_x) << 0)
24343 +
24344 +#define VIDTCON2 (0x18)
24345 +#define VIDTCON2_LINEVAL_MASK (0x7ff << 11)
24346 +#define VIDTCON2_LINEVAL_SHIFT (11)
24347 +#define VIDTCON2_LINEVAL_LIMIT (0x7ff)
24348 +#define VIDTCON2_LINEVAL(_x) ((_x) << 11)
24349 +
24350 +#define VIDTCON2_HOZVAL_MASK (0x7ff << 0)
24351 +#define VIDTCON2_HOZVAL_SHIFT (0)
24352 +#define VIDTCON2_HOZVAL_LIMIT (0x7ff)
24353 +#define VIDTCON2_HOZVAL(_x) ((_x) << 0)
24354 +
24355 +/* WINCONx */
24356 +
24357 +
24358 +#define WINCONx_BITSWP (1 << 18)
24359 +#define WINCONx_BYTSWP (1 << 17)
24360 +#define WINCONx_HAWSWP (1 << 16)
24361 +#define WINCONx_BURSTLEN_MASK (0x3 << 9)
24362 +#define WINCONx_BURSTLEN_SHIFT (9)
24363 +#define WINCONx_BURSTLEN_16WORD (0x0 << 9)
24364 +#define WINCONx_BURSTLEN_8WORD (0x1 << 9)
24365 +#define WINCONx_BURSTLEN_4WORD (0x2 << 9)
24366 +
24367 +#define WINCONx_ENWIN (1 << 0)
24368 +#define WINCON0_BPPMODE_MASK (0xf << 2)
24369 +#define WINCON0_BPPMODE_SHIFT (2)
24370 +#define WINCON0_BPPMODE_1BPP (0x0 << 2)
24371 +#define WINCON0_BPPMODE_2BPP (0x1 << 2)
24372 +#define WINCON0_BPPMODE_4BPP (0x2 << 2)
24373 +#define WINCON0_BPPMODE_8BPP_PALETTE (0x3 << 2)
24374 +#define WINCON0_BPPMODE_16BPP_565 (0x5 << 2)
24375 +#define WINCON0_BPPMODE_16BPP_1555 (0x7 << 2)
24376 +#define WINCON0_BPPMODE_18BPP_666 (0x8 << 2)
24377 +#define WINCON0_BPPMODE_24BPP_888 (0xb << 2)
24378 +
24379 +#define WINCON1_BLD_PIX (1 << 6)
24380 +
24381 +#define WINCON1_ALPHA_SEL (1 << 1)
24382 +#define WINCON1_BPPMODE_MASK (0xf << 2)
24383 +#define WINCON1_BPPMODE_SHIFT (2)
24384 +#define WINCON1_BPPMODE_1BPP (0x0 << 2)
24385 +#define WINCON1_BPPMODE_2BPP (0x1 << 2)
24386 +#define WINCON1_BPPMODE_4BPP (0x2 << 2)
24387 +#define WINCON1_BPPMODE_8BPP_PALETTE (0x3 << 2)
24388 +#define WINCON1_BPPMODE_8BPP_1232 (0x4 << 2)
24389 +#define WINCON1_BPPMODE_16BPP_565 (0x5 << 2)
24390 +#define WINCON1_BPPMODE_16BPP_A1555 (0x6 << 2)
24391 +#define WINCON1_BPPMODE_16BPP_I1555 (0x7 << 2)
24392 +#define WINCON1_BPPMODE_18BPP_666 (0x8 << 2)
24393 +#define WINCON1_BPPMODE_18BPP_A1665 (0x9 << 2)
24394 +#define WINCON1_BPPMODE_19BPP_A1666 (0xa << 2)
24395 +#define WINCON1_BPPMODE_24BPP_888 (0xb << 2)
24396 +#define WINCON1_BPPMODE_24BPP_A1887 (0xc << 2)
24397 +#define WINCON1_BPPMODE_25BPP_A1888 (0xd << 2)
24398 +#define WINCON1_BPPMODE_28BPP_A4888 (0xd << 2)
24399 +
24400 +
24401 +#define VIDOSDxA_TOPLEFT_X_MASK (0x7ff << 11)
24402 +#define VIDOSDxA_TOPLEFT_X_SHIFT (11)
24403 +#define VIDOSDxA_TOPLEFT_X_LIMIT (0x7ff)
24404 +#define VIDOSDxA_TOPLEFT_X(_x) ((_x) << 11)
24405 +
24406 +#define VIDOSDxA_TOPLEFT_Y_MASK (0x7ff << 0)
24407 +#define VIDOSDxA_TOPLEFT_Y_SHIFT (0)
24408 +#define VIDOSDxA_TOPLEFT_Y_LIMIT (0x7ff)
24409 +#define VIDOSDxA_TOPLEFT_Y(_x) ((_x) << 0)
24410 +
24411 +#define VIDOSDxB_BOTRIGHT_X_MASK (0x7ff << 11)
24412 +#define VIDOSDxB_BOTRIGHT_X_SHIFT (11)
24413 +#define VIDOSDxB_BOTRIGHT_X_LIMIT (0x7ff)
24414 +#define VIDOSDxB_BOTRIGHT_X(_x) ((_x) << 11)
24415 +
24416 +#define VIDOSDxB_BOTRIGHT_Y_MASK (0x7ff << 0)
24417 +#define VIDOSDxB_BOTRIGHT_Y_SHIFT (0)
24418 +#define VIDOSDxB_BOTRIGHT_Y_LIMIT (0x7ff)
24419 +#define VIDOSDxB_BOTRIGHT_Y(_x) ((_x) << 0)
24420 +
24421 +/* For VIDOSD[1..4]C */
24422 +#define VIDISD14C_ALPHA0_R(_x) ((_x) << 20)
24423 +#define VIDISD14C_ALPHA0_G_MASK (0xf << 16)
24424 +#define VIDISD14C_ALPHA0_G_SHIFT (16)
24425 +#define VIDISD14C_ALPHA0_G_LIMIT (0xf)
24426 +#define VIDISD14C_ALPHA0_G(_x) ((_x) << 16)
24427 +#define VIDISD14C_ALPHA0_B_MASK (0xf << 12)
24428 +#define VIDISD14C_ALPHA0_B_SHIFT (12)
24429 +#define VIDISD14C_ALPHA0_B_LIMIT (0xf)
24430 +#define VIDISD14C_ALPHA0_B(_x) ((_x) << 12)
24431 +#define VIDISD14C_ALPHA1_R_MASK (0xf << 8)
24432 +#define VIDISD14C_ALPHA1_R_SHIFT (8)
24433 +#define VIDISD14C_ALPHA1_R_LIMIT (0xf)
24434 +#define VIDISD14C_ALPHA1_R(_x) ((_x) << 8)
24435 +#define VIDISD14C_ALPHA1_G_MASK (0xf << 4)
24436 +#define VIDISD14C_ALPHA1_G_SHIFT (4)
24437 +#define VIDISD14C_ALPHA1_G_LIMIT (0xf)
24438 +#define VIDISD14C_ALPHA1_G(_x) ((_x) << 4)
24439 +#define VIDISD14C_ALPHA1_B_MASK (0xf << 0)
24440 +#define VIDISD14C_ALPHA1_B_SHIFT (0)
24441 +#define VIDISD14C_ALPHA1_B_LIMIT (0xf)
24442 +#define VIDISD14C_ALPHA1_B(_x) ((_x) << 0)
24443 +
24444 +/* Video buffer addresses */
24445 +#define VIDW_BUF_START(_buff) (0xA0 + ((_buff) * 8))
24446 +#define VIDW_BUF_START1(_buff) (0xA4 + ((_buff) * 8))
24447 +#define VIDW_BUF_END(_buff) (0xD0 + ((_buff) * 8))
24448 +#define VIDW_BUF_END1(_buff) (0xD4 + ((_buff) * 8))
24449 +#define VIDW_BUF_SIZE(_buff) (0x100 + ((_buff) * 4))
24450 +
24451 +#define VIDW_BUF_SIZE_OFFSET_MASK (0x1fff << 13)
24452 +#define VIDW_BUF_SIZE_OFFSET_SHIFT (13)
24453 +#define VIDW_BUF_SIZE_OFFSET_LIMIT (0x1fff)
24454 +#define VIDW_BUF_SIZE_OFFSET(_x) ((_x) << 13)
24455 +
24456 +#define VIDW_BUF_SIZE_PAGEWIDTH_MASK (0x1fff << 0)
24457 +#define VIDW_BUF_SIZE_PAGEWIDTH_SHIFT (0)
24458 +#define VIDW_BUF_SIZE_PAGEWIDTH_LIMIT (0x1fff)
24459 +#define VIDW_BUF_SIZE_PAGEWIDTH(_x) ((_x) << 0)
24460 +
24461 +/* Interrupt controls and status */
24462 +
24463 +#define VIDINTCON0_FIFOINTERVAL_MASK (0x3f << 20)
24464 +#define VIDINTCON0_FIFOINTERVAL_SHIFT (20)
24465 +#define VIDINTCON0_FIFOINTERVAL_LIMIT (0x3f)
24466 +#define VIDINTCON0_FIFOINTERVAL(_x) ((_x) << 20)
24467 +
24468 +#define VIDINTCON0_INT_SYSMAINCON (1 << 19)
24469 +#define VIDINTCON0_INT_SYSSUBCON (1 << 18)
24470 +#define VIDINTCON0_INT_I80IFDONE (1 << 17)
24471 +
24472 +#define VIDINTCON0_FRAMESEL0_MASK (0x3 << 15)
24473 +#define VIDINTCON0_FRAMESEL0_SHIFT (15)
24474 +#define VIDINTCON0_FRAMESEL0_BACKPORCH (0x0 << 15)
24475 +#define VIDINTCON0_FRAMESEL0_VSYNC (0x1 << 15)
24476 +#define VIDINTCON0_FRAMESEL0_ACTIVE (0x2 << 15)
24477 +#define VIDINTCON0_FRAMESEL0_FRONTPORCH (0x3 << 15)
24478 +
24479 +#define VIDINTCON0_FRAMESEL1 (1 << 14)
24480 +#define VIDINTCON0_FRAMESEL1_NONE (0x0 << 14)
24481 +#define VIDINTCON0_FRAMESEL1_BACKPORCH (0x1 << 14)
24482 +#define VIDINTCON0_FRAMESEL1_VSYNC (0x2 << 14)
24483 +#define VIDINTCON0_FRAMESEL1_FRONTPORCH (0x3 << 14)
24484 +
24485 +#define VIDINTCON0_INT_FRAME (1 << 12)
24486 +#define VIDINTCON0_FIFIOSEL_MASK (0x7f << 5)
24487 +#define VIDINTCON0_FIFIOSEL_SHIFT (5)
24488 +#define VIDINTCON0_FIFIOSEL_WINDOW0 (0x1 << 5)
24489 +#define VIDINTCON0_FIFIOSEL_WINDOW1 (0x2 << 5)
24490 +
24491 +#define VIDINTCON0_FIFOLEVEL_MASK (0x7 << 2)
24492 +#define VIDINTCON0_FIFOLEVEL_SHIFT (2)
24493 +#define VIDINTCON0_FIFOLEVEL_TO25PC (0x0 << 2)
24494 +#define VIDINTCON0_FIFOLEVEL_TO50PC (0x1 << 2)
24495 +#define VIDINTCON0_FIFOLEVEL_TO75PC (0x2 << 2)
24496 +#define VIDINTCON0_FIFOLEVEL_EMPTY (0x3 << 2)
24497 +#define VIDINTCON0_FIFOLEVEL_FULL (0x4 << 2)
24498 +
24499 +#define VIDINTCON0_INT_FIFO_MASK (0x3 << 0)
24500 +#define VIDINTCON0_INT_FIFO_SHIFT (0)
24501 +#define VIDINTCON0_INT_ENABLE (1 << 0)
24502 +
24503 +#define VIDINTCON1 (0x134)
24504 +#define VIDINTCON1_INT_I180 (1 << 2)
24505 +#define VIDINTCON1_INT_FRAME (1 << 1)
24506 +#define VIDINTCON1_INT_FIFO (1 << 0)
24507 +
24508 +/* Window colour-key control registers */
24509 +
24510 +#define WxKEYCON0_KEYBL_EN (1 << 26)
24511 +#define WxKEYCON0_KEYEN_F (1 << 25)
24512 +#define WxKEYCON0_DIRCON (1 << 24)
24513 +#define WxKEYCON0_COMPKEY_MASK (0xffffff << 0)
24514 +#define WxKEYCON0_COMPKEY_SHIFT (0)
24515 +#define WxKEYCON0_COMPKEY_LIMIT (0xffffff)
24516 +#define WxKEYCON0_COMPKEY(_x) ((_x) << 0)
24517 +#define WxKEYCON1_COLVAL_MASK (0xffffff << 0)
24518 +#define WxKEYCON1_COLVAL_SHIFT (0)
24519 +#define WxKEYCON1_COLVAL_LIMIT (0xffffff)
24520 +#define WxKEYCON1_COLVAL(_x) ((_x) << 0)
24521 +
24522 +
24523 +/* Window blanking (MAP) */
24524 +
24525 +#define WINxMAP_MAP (1 << 24)
24526 +#define WINxMAP_MAP_COLOUR_MASK (0xffffff << 0)
24527 +#define WINxMAP_MAP_COLOUR_SHIFT (0)
24528 +#define WINxMAP_MAP_COLOUR_LIMIT (0xffffff)
24529 +#define WINxMAP_MAP_COLOUR(_x) ((_x) << 0)
24530 +
24531 +#define WPALCON_PAL_UPDATE (1 << 9)
24532 +#define WPALCON_W1PAL_MASK (0x7 << 3)
24533 +#define WPALCON_W1PAL_SHIFT (3)
24534 +#define WPALCON_W1PAL_25BPP_A888 (0x0 << 3)
24535 +#define WPALCON_W1PAL_24BPP (0x1 << 3)
24536 +#define WPALCON_W1PAL_19BPP_A666 (0x2 << 3)
24537 +#define WPALCON_W1PAL_18BPP_A665 (0x3 << 3)
24538 +#define WPALCON_W1PAL_18BPP (0x4 << 3)
24539 +#define WPALCON_W1PAL_16BPP_A555 (0x5 << 3)
24540 +#define WPALCON_W1PAL_16BPP_565 (0x6 << 3)
24541 +
24542 +#define WPALCON_W0PAL_MASK (0x7 << 0)
24543 +#define WPALCON_W0PAL_SHIFT (0)
24544 +#define WPALCON_W0PAL_25BPP_A888 (0x0 << 0)
24545 +#define WPALCON_W0PAL_24BPP (0x1 << 0)
24546 +#define WPALCON_W0PAL_19BPP_A666 (0x2 << 0)
24547 +#define WPALCON_W0PAL_18BPP_A665 (0x3 << 0)
24548 +#define WPALCON_W0PAL_18BPP (0x4 << 0)
24549 +#define WPALCON_W0PAL_16BPP_A555 (0x5 << 0)
24550 +#define WPALCON_W0PAL_16BPP_565 (0x6 << 0)
24551 +
24552 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-iic.h
24553 ===================================================================
24554 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
24555 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-iic.h 2009-01-02 00:01:56.000000000 +0100
24556 @@ -0,0 +1,56 @@
24557 +/* arch/arm/mach-s3c2410/include/mach/regs-iic.h
24558 + *
24559 + * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk>
24560 + * http://www.simtec.co.uk/products/SWLINUX/
24561 + *
24562 + * This program is free software; you can redistribute it and/or modify
24563 + * it under the terms of the GNU General Public License version 2 as
24564 + * published by the Free Software Foundation.
24565 + *
24566 + * S3C2410 I2C Controller
24567 +*/
24568 +
24569 +#ifndef __ASM_ARCH_REGS_IIC_H
24570 +#define __ASM_ARCH_REGS_IIC_H __FILE__
24571 +
24572 +/* see s3c2410x user guide, v1.1, section 9 (p447) for more info */
24573 +
24574 +#define S3C2410_IICREG(x) (x)
24575 +
24576 +#define S3C2410_IICCON S3C2410_IICREG(0x00)
24577 +#define S3C2410_IICSTAT S3C2410_IICREG(0x04)
24578 +#define S3C2410_IICADD S3C2410_IICREG(0x08)
24579 +#define S3C2410_IICDS S3C2410_IICREG(0x0C)
24580 +#define S3C2440_IICLC S3C2410_IICREG(0x10)
24581 +
24582 +#define S3C2410_IICCON_ACKEN (1<<7)
24583 +#define S3C2410_IICCON_TXDIV_16 (0<<6)
24584 +#define S3C2410_IICCON_TXDIV_512 (1<<6)
24585 +#define S3C2410_IICCON_IRQEN (1<<5)
24586 +#define S3C2410_IICCON_IRQPEND (1<<4)
24587 +#define S3C2410_IICCON_SCALE(x) ((x)&15)
24588 +#define S3C2410_IICCON_SCALEMASK (0xf)
24589 +
24590 +#define S3C2410_IICSTAT_MASTER_RX (2<<6)
24591 +#define S3C2410_IICSTAT_MASTER_TX (3<<6)
24592 +#define S3C2410_IICSTAT_SLAVE_RX (0<<6)
24593 +#define S3C2410_IICSTAT_SLAVE_TX (1<<6)
24594 +#define S3C2410_IICSTAT_MODEMASK (3<<6)
24595 +
24596 +#define S3C2410_IICSTAT_START (1<<5)
24597 +#define S3C2410_IICSTAT_BUSBUSY (1<<5)
24598 +#define S3C2410_IICSTAT_TXRXEN (1<<4)
24599 +#define S3C2410_IICSTAT_ARBITR (1<<3)
24600 +#define S3C2410_IICSTAT_ASSLAVE (1<<2)
24601 +#define S3C2410_IICSTAT_ADDR0 (1<<1)
24602 +#define S3C2410_IICSTAT_LASTBIT (1<<0)
24603 +
24604 +#define S3C2410_IICLC_SDA_DELAY0 (0 << 0)
24605 +#define S3C2410_IICLC_SDA_DELAY5 (1 << 0)
24606 +#define S3C2410_IICLC_SDA_DELAY10 (2 << 0)
24607 +#define S3C2410_IICLC_SDA_DELAY15 (3 << 0)
24608 +#define S3C2410_IICLC_SDA_DELAY_MASK (3 << 0)
24609 +
24610 +#define S3C2410_IICLC_FILTER_ON (1<<2)
24611 +
24612 +#endif /* __ASM_ARCH_REGS_IIC_H */
24613 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-irqtype.h
24614 ===================================================================
24615 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
24616 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-irqtype.h 2009-01-02 00:01:56.000000000 +0100
24617 @@ -0,0 +1,21 @@
24618 +/* arch/arm/plat-s3c/include/plat/regs-irqtype.h
24619 + *
24620 + * Copyright 2008 Simtec Electronics
24621 + * Ben Dooks <ben@simtec.co.uk>
24622 + * http://armlinux.simtec.co.uk/
24623 + *
24624 + * S3C - IRQ detection types.
24625 + *
24626 + * This program is free software; you can redistribute it and/or modify
24627 + * it under the terms of the GNU General Public License version 2 as
24628 + * published by the Free Software Foundation.
24629 + */
24630 +
24631 +/* values for S3C2410_EXTINT0/1/2 and other cpus in the series, including
24632 + * the S3C64XX
24633 +*/
24634 +#define S3C2410_EXTINT_LOWLEV (0x00)
24635 +#define S3C2410_EXTINT_HILEV (0x01)
24636 +#define S3C2410_EXTINT_FALLEDGE (0x02)
24637 +#define S3C2410_EXTINT_RISEEDGE (0x04)
24638 +#define S3C2410_EXTINT_BOTHEDGE (0x06)
24639 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-nand.h
24640 ===================================================================
24641 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
24642 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-nand.h 2009-01-02 00:01:56.000000000 +0100
24643 @@ -0,0 +1,123 @@
24644 +/* arch/arm/mach-s3c2410/include/mach/regs-nand.h
24645 + *
24646 + * Copyright (c) 2004,2005 Simtec Electronics <linux@simtec.co.uk>
24647 + * http://www.simtec.co.uk/products/SWLINUX/
24648 + *
24649 + * This program is free software; you can redistribute it and/or modify
24650 + * it under the terms of the GNU General Public License version 2 as
24651 + * published by the Free Software Foundation.
24652 + *
24653 + * S3C2410 NAND register definitions
24654 +*/
24655 +
24656 +#ifndef __ASM_ARM_REGS_NAND
24657 +#define __ASM_ARM_REGS_NAND
24658 +
24659 +
24660 +#define S3C2410_NFREG(x) (x)
24661 +
24662 +#define S3C2410_NFCONF S3C2410_NFREG(0x00)
24663 +#define S3C2410_NFCMD S3C2410_NFREG(0x04)
24664 +#define S3C2410_NFADDR S3C2410_NFREG(0x08)
24665 +#define S3C2410_NFDATA S3C2410_NFREG(0x0C)
24666 +#define S3C2410_NFSTAT S3C2410_NFREG(0x10)
24667 +#define S3C2410_NFECC S3C2410_NFREG(0x14)
24668 +
24669 +#define S3C2440_NFCONT S3C2410_NFREG(0x04)
24670 +#define S3C2440_NFCMD S3C2410_NFREG(0x08)
24671 +#define S3C2440_NFADDR S3C2410_NFREG(0x0C)
24672 +#define S3C2440_NFDATA S3C2410_NFREG(0x10)
24673 +#define S3C2440_NFECCD0 S3C2410_NFREG(0x14)
24674 +#define S3C2440_NFECCD1 S3C2410_NFREG(0x18)
24675 +#define S3C2440_NFECCD S3C2410_NFREG(0x1C)
24676 +#define S3C2440_NFSTAT S3C2410_NFREG(0x20)
24677 +#define S3C2440_NFESTAT0 S3C2410_NFREG(0x24)
24678 +#define S3C2440_NFESTAT1 S3C2410_NFREG(0x28)
24679 +#define S3C2440_NFMECC0 S3C2410_NFREG(0x2C)
24680 +#define S3C2440_NFMECC1 S3C2410_NFREG(0x30)
24681 +#define S3C2440_NFSECC S3C2410_NFREG(0x34)
24682 +#define S3C2440_NFSBLK S3C2410_NFREG(0x38)
24683 +#define S3C2440_NFEBLK S3C2410_NFREG(0x3C)
24684 +
24685 +#define S3C2412_NFSBLK S3C2410_NFREG(0x20)
24686 +#define S3C2412_NFEBLK S3C2410_NFREG(0x24)
24687 +#define S3C2412_NFSTAT S3C2410_NFREG(0x28)
24688 +#define S3C2412_NFMECC_ERR0 S3C2410_NFREG(0x2C)
24689 +#define S3C2412_NFMECC_ERR1 S3C2410_NFREG(0x30)
24690 +#define S3C2412_NFMECC0 S3C2410_NFREG(0x34)
24691 +#define S3C2412_NFMECC1 S3C2410_NFREG(0x38)
24692 +#define S3C2412_NFSECC S3C2410_NFREG(0x3C)
24693 +
24694 +#define S3C2410_NFCONF_EN (1<<15)
24695 +#define S3C2410_NFCONF_512BYTE (1<<14)
24696 +#define S3C2410_NFCONF_4STEP (1<<13)
24697 +#define S3C2410_NFCONF_INITECC (1<<12)
24698 +#define S3C2410_NFCONF_nFCE (1<<11)
24699 +#define S3C2410_NFCONF_TACLS(x) ((x)<<8)
24700 +#define S3C2410_NFCONF_TWRPH0(x) ((x)<<4)
24701 +#define S3C2410_NFCONF_TWRPH1(x) ((x)<<0)
24702 +
24703 +#define S3C2410_NFSTAT_BUSY (1<<0)
24704 +
24705 +#define S3C2440_NFCONF_BUSWIDTH_8 (0<<0)
24706 +#define S3C2440_NFCONF_BUSWIDTH_16 (1<<0)
24707 +#define S3C2440_NFCONF_ADVFLASH (1<<3)
24708 +#define S3C2440_NFCONF_TACLS(x) ((x)<<12)
24709 +#define S3C2440_NFCONF_TWRPH0(x) ((x)<<8)
24710 +#define S3C2440_NFCONF_TWRPH1(x) ((x)<<4)
24711 +
24712 +#define S3C2440_NFCONT_LOCKTIGHT (1<<13)
24713 +#define S3C2440_NFCONT_SOFTLOCK (1<<12)
24714 +#define S3C2440_NFCONT_ILLEGALACC_EN (1<<10)
24715 +#define S3C2440_NFCONT_RNBINT_EN (1<<9)
24716 +#define S3C2440_NFCONT_RN_FALLING (1<<8)
24717 +#define S3C2440_NFCONT_SPARE_ECCLOCK (1<<6)
24718 +#define S3C2440_NFCONT_MAIN_ECCLOCK (1<<5)
24719 +#define S3C2440_NFCONT_INITECC (1<<4)
24720 +#define S3C2440_NFCONT_nFCE (1<<1)
24721 +#define S3C2440_NFCONT_ENABLE (1<<0)
24722 +
24723 +#define S3C2440_NFSTAT_READY (1<<0)
24724 +#define S3C2440_NFSTAT_nCE (1<<1)
24725 +#define S3C2440_NFSTAT_RnB_CHANGE (1<<2)
24726 +#define S3C2440_NFSTAT_ILLEGAL_ACCESS (1<<3)
24727 +
24728 +#define S3C2412_NFCONF_NANDBOOT (1<<31)
24729 +#define S3C2412_NFCONF_ECCCLKCON (1<<30)
24730 +#define S3C2412_NFCONF_ECC_MLC (1<<24)
24731 +#define S3C2412_NFCONF_TACLS_MASK (7<<12) /* 1 extra bit of Tacls */
24732 +
24733 +#define S3C2412_NFCONT_ECC4_DIRWR (1<<18)
24734 +#define S3C2412_NFCONT_LOCKTIGHT (1<<17)
24735 +#define S3C2412_NFCONT_SOFTLOCK (1<<16)
24736 +#define S3C2412_NFCONT_ECC4_ENCINT (1<<13)
24737 +#define S3C2412_NFCONT_ECC4_DECINT (1<<12)
24738 +#define S3C2412_NFCONT_MAIN_ECC_LOCK (1<<7)
24739 +#define S3C2412_NFCONT_INIT_MAIN_ECC (1<<5)
24740 +#define S3C2412_NFCONT_nFCE1 (1<<2)
24741 +#define S3C2412_NFCONT_nFCE0 (1<<1)
24742 +
24743 +#define S3C2412_NFSTAT_ECC_ENCDONE (1<<7)
24744 +#define S3C2412_NFSTAT_ECC_DECDONE (1<<6)
24745 +#define S3C2412_NFSTAT_ILLEGAL_ACCESS (1<<5)
24746 +#define S3C2412_NFSTAT_RnB_CHANGE (1<<4)
24747 +#define S3C2412_NFSTAT_nFCE1 (1<<3)
24748 +#define S3C2412_NFSTAT_nFCE0 (1<<2)
24749 +#define S3C2412_NFSTAT_Res1 (1<<1)
24750 +#define S3C2412_NFSTAT_READY (1<<0)
24751 +
24752 +#define S3C2412_NFECCERR_SERRDATA(x) (((x) >> 21) & 0xf)
24753 +#define S3C2412_NFECCERR_SERRBIT(x) (((x) >> 18) & 0x7)
24754 +#define S3C2412_NFECCERR_MERRDATA(x) (((x) >> 7) & 0x3ff)
24755 +#define S3C2412_NFECCERR_MERRBIT(x) (((x) >> 4) & 0x7)
24756 +#define S3C2412_NFECCERR_SPARE_ERR(x) (((x) >> 2) & 0x3)
24757 +#define S3C2412_NFECCERR_MAIN_ERR(x) (((x) >> 2) & 0x3)
24758 +#define S3C2412_NFECCERR_NONE (0)
24759 +#define S3C2412_NFECCERR_1BIT (1)
24760 +#define S3C2412_NFECCERR_MULTIBIT (2)
24761 +#define S3C2412_NFECCERR_ECCAREA (3)
24762 +
24763 +
24764 +
24765 +#endif /* __ASM_ARM_REGS_NAND */
24766 +
24767 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-rtc.h
24768 ===================================================================
24769 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
24770 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-rtc.h 2009-01-02 00:01:56.000000000 +0100
24771 @@ -0,0 +1,61 @@
24772 +/* arch/arm/mach-s3c2410/include/mach/regs-rtc.h
24773 + *
24774 + * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
24775 + * http://www.simtec.co.uk/products/SWLINUX/
24776 + *
24777 + * This program is free software; you can redistribute it and/or modify
24778 + * it under the terms of the GNU General Public License version 2 as
24779 + * published by the Free Software Foundation.
24780 + *
24781 + * S3C2410 Internal RTC register definition
24782 +*/
24783 +
24784 +#ifndef __ASM_ARCH_REGS_RTC_H
24785 +#define __ASM_ARCH_REGS_RTC_H __FILE__
24786 +
24787 +#define S3C2410_RTCREG(x) (x)
24788 +
24789 +#define S3C2410_RTCCON S3C2410_RTCREG(0x40)
24790 +#define S3C2410_RTCCON_RTCEN (1<<0)
24791 +#define S3C2410_RTCCON_CLKSEL (1<<1)
24792 +#define S3C2410_RTCCON_CNTSEL (1<<2)
24793 +#define S3C2410_RTCCON_CLKRST (1<<3)
24794 +
24795 +#define S3C2410_TICNT S3C2410_RTCREG(0x44)
24796 +#define S3C2410_TICNT_ENABLE (1<<7)
24797 +
24798 +#define S3C2410_RTCALM S3C2410_RTCREG(0x50)
24799 +#define S3C2410_RTCALM_ALMEN (1<<6)
24800 +#define S3C2410_RTCALM_YEAREN (1<<5)
24801 +#define S3C2410_RTCALM_MONEN (1<<4)
24802 +#define S3C2410_RTCALM_DAYEN (1<<3)
24803 +#define S3C2410_RTCALM_HOUREN (1<<2)
24804 +#define S3C2410_RTCALM_MINEN (1<<1)
24805 +#define S3C2410_RTCALM_SECEN (1<<0)
24806 +
24807 +#define S3C2410_RTCALM_ALL \
24808 + S3C2410_RTCALM_ALMEN | S3C2410_RTCALM_YEAREN | S3C2410_RTCALM_MONEN |\
24809 + S3C2410_RTCALM_DAYEN | S3C2410_RTCALM_HOUREN | S3C2410_RTCALM_MINEN |\
24810 + S3C2410_RTCALM_SECEN
24811 +
24812 +
24813 +#define S3C2410_ALMSEC S3C2410_RTCREG(0x54)
24814 +#define S3C2410_ALMMIN S3C2410_RTCREG(0x58)
24815 +#define S3C2410_ALMHOUR S3C2410_RTCREG(0x5c)
24816 +
24817 +#define S3C2410_ALMDATE S3C2410_RTCREG(0x60)
24818 +#define S3C2410_ALMMON S3C2410_RTCREG(0x64)
24819 +#define S3C2410_ALMYEAR S3C2410_RTCREG(0x68)
24820 +
24821 +#define S3C2410_RTCRST S3C2410_RTCREG(0x6c)
24822 +
24823 +#define S3C2410_RTCSEC S3C2410_RTCREG(0x70)
24824 +#define S3C2410_RTCMIN S3C2410_RTCREG(0x74)
24825 +#define S3C2410_RTCHOUR S3C2410_RTCREG(0x78)
24826 +#define S3C2410_RTCDATE S3C2410_RTCREG(0x7c)
24827 +#define S3C2410_RTCDAY S3C2410_RTCREG(0x80)
24828 +#define S3C2410_RTCMON S3C2410_RTCREG(0x84)
24829 +#define S3C2410_RTCYEAR S3C2410_RTCREG(0x88)
24830 +
24831 +
24832 +#endif /* __ASM_ARCH_REGS_RTC_H */
24833 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-sdhci.h
24834 ===================================================================
24835 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
24836 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-sdhci.h 2009-01-02 00:01:56.000000000 +0100
24837 @@ -0,0 +1,87 @@
24838 +/* linux/arch/arm/plat-s3c/include/plat/regs-sdhci.h
24839 + *
24840 + * Copyright 2008 Openmoko, Inc.
24841 + * Copyright 2008 Simtec Electronics
24842 + * http://armlinux.simtec.co.uk/
24843 + * Ben Dooks <ben@simtec.co.uk>
24844 + *
24845 + * S3C Platform - SDHCI (HSMMC) register definitions
24846 + *
24847 + * This program is free software; you can redistribute it and/or modify
24848 + * it under the terms of the GNU General Public License version 2 as
24849 + * published by the Free Software Foundation.
24850 +*/
24851 +
24852 +#ifndef __PLAT_S3C_SDHCI_REGS_H
24853 +#define __PLAT_S3C_SDHCI_REGS_H __FILE__
24854 +
24855 +#define S3C_SDHCI_CONTROL2 (0x80)
24856 +#define S3C_SDHCI_CONTROL3 (0x84)
24857 +#define S3C64XX_SDHCI_CONTROL4 (0x8C)
24858 +
24859 +#define S3C64XX_SDHCI_CTRL2_ENSTAASYNCCLR (1 << 31)
24860 +#define S3C64XX_SDHCI_CTRL2_ENCMDCNFMSK (1 << 30)
24861 +#define S3C_SDHCI_CTRL2_CDINVRXD3 (1 << 29)
24862 +#define S3C_SDHCI_CTRL2_SLCARDOUT (1 << 28)
24863 +
24864 +#define S3C_SDHCI_CTRL2_FLTCLKSEL_MASK (0xf << 24)
24865 +#define S3C_SDHCI_CTRL2_FLTCLKSEL_SHIFT (24)
24866 +#define S3C_SDHCI_CTRL2_FLTCLKSEL(_x) ((_x) << 24)
24867 +
24868 +#define S3C_SDHCI_CTRL2_LVLDAT_MASK (0xff << 16)
24869 +#define S3C_SDHCI_CTRL2_LVLDAT_SHIFT (16)
24870 +#define S3C_SDHCI_CTRL2_LVLDAT(_x) ((_x) << 16)
24871 +
24872 +#define S3C_SDHCI_CTRL2_ENFBCLKTX (1 << 15)
24873 +#define S3C_SDHCI_CTRL2_ENFBCLKRX (1 << 14)
24874 +#define S3C_SDHCI_CTRL2_SDCDSEL (1 << 13)
24875 +#define S3C_SDHCI_CTRL2_SDSIGPC (1 << 12)
24876 +#define S3C_SDHCI_CTRL2_ENBUSYCHKTXSTART (1 << 11)
24877 +
24878 +#define S3C_SDHCI_CTRL2_DFCNT_MASK (0x3 << 9)
24879 +#define S3C_SDHCI_CTRL2_DFCNT_SHIFT (9)
24880 +#define S3C_SDHCI_CTRL2_DFCNT_NONE (0x0 << 9)
24881 +#define S3C_SDHCI_CTRL2_DFCNT_4SDCLK (0x1 << 9)
24882 +#define S3C_SDHCI_CTRL2_DFCNT_16SDCLK (0x2 << 9)
24883 +#define S3C_SDHCI_CTRL2_DFCNT_64SDCLK (0x3 << 9)
24884 +
24885 +#define S3C_SDHCI_CTRL2_ENCLKOUTHOLD (1 << 8)
24886 +#define S3C_SDHCI_CTRL2_RWAITMODE (1 << 7)
24887 +#define S3C_SDHCI_CTRL2_DISBUFRD (1 << 6)
24888 +#define S3C_SDHCI_CTRL2_SELBASECLK_MASK (0x3 << 4)
24889 +#define S3C_SDHCI_CTRL2_SELBASECLK_SHIFT (4)
24890 +#define S3C_SDHCI_CTRL2_PWRSYNC (1 << 3)
24891 +#define S3C_SDHCI_CTRL2_ENCLKOUTMSKCON (1 << 1)
24892 +#define S3C_SDHCI_CTRL2_HWINITFIN (1 << 0)
24893 +
24894 +#define S3C_SDHCI_CTRL3_FCSEL3 (1 << 31)
24895 +#define S3C_SDHCI_CTRL3_FCSEL2 (1 << 23)
24896 +#define S3C_SDHCI_CTRL3_FCSEL1 (1 << 15)
24897 +#define S3C_SDHCI_CTRL3_FCSEL0 (1 << 7)
24898 +
24899 +#define S3C_SDHCI_CTRL3_FIA3_MASK (0x7f << 24)
24900 +#define S3C_SDHCI_CTRL3_FIA3_SHIFT (24)
24901 +#define S3C_SDHCI_CTRL3_FIA3(_x) ((_x) << 24)
24902 +
24903 +#define S3C_SDHCI_CTRL3_FIA2_MASK (0x7f << 16)
24904 +#define S3C_SDHCI_CTRL3_FIA2_SHIFT (16)
24905 +#define S3C_SDHCI_CTRL3_FIA2(_x) ((_x) << 16)
24906 +
24907 +#define S3C_SDHCI_CTRL3_FIA1_MASK (0x7f << 8)
24908 +#define S3C_SDHCI_CTRL3_FIA1_SHIFT (8)
24909 +#define S3C_SDHCI_CTRL3_FIA1(_x) ((_x) << 8)
24910 +
24911 +#define S3C_SDHCI_CTRL3_FIA0_MASK (0x7f << 0)
24912 +#define S3C_SDHCI_CTRL3_FIA0_SHIFT (0)
24913 +#define S3C_SDHCI_CTRL3_FIA0(_x) ((_x) << 0)
24914 +
24915 +#define S3C64XX_SDHCI_CONTROL4_DRIVE_MASK (0x3 << 16)
24916 +#define S3C64XX_SDHCI_CONTROL4_DRIVE_SHIFT (16)
24917 +#define S3C64XX_SDHCI_CONTROL4_DRIVE_2mA (0x0 << 16)
24918 +#define S3C64XX_SDHCI_CONTROL4_DRIVE_4mA (0x1 << 16)
24919 +#define S3C64XX_SDHCI_CONTROL4_DRIVE_7mA (0x2 << 16)
24920 +#define S3C64XX_SDHCI_CONTROL4_DRIVE_9mA (0x3 << 16)
24921 +
24922 +#define S3C64XX_SDHCI_CONTROL4_BUSY (1)
24923 +
24924 +#endif /* __PLAT_S3C_SDHCI_REGS_H */
24925 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-serial.h
24926 ===================================================================
24927 --- linux-2.6.28.orig/arch/arm/plat-s3c/include/plat/regs-serial.h 2008-12-25 00:26:37.000000000 +0100
24928 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-serial.h 2009-01-02 00:01:56.000000000 +0100
24929 @@ -77,6 +77,12 @@
24930 #define S3C2440_UCON_FCLK (3<<10)
24931 #define S3C2443_UCON_EPLL (3<<10)
24932
24933 +#define S3C6400_UCON_CLKMASK (3<<10)
24934 +#define S3C6400_UCON_PCLK (0<<10)
24935 +#define S3C6400_UCON_PCLK2 (2<<10)
24936 +#define S3C6400_UCON_UCLK0 (1<<10)
24937 +#define S3C6400_UCON_UCLK1 (3<<10)
24938 +
24939 #define S3C2440_UCON2_FCLK_EN (1<<15)
24940 #define S3C2440_UCON0_DIVMASK (15 << 12)
24941 #define S3C2440_UCON1_DIVMASK (15 << 12)
24942 @@ -149,6 +155,14 @@
24943 #define S3C2410_UFSTAT_RXMASK (15<<0)
24944 #define S3C2410_UFSTAT_RXSHIFT (0)
24945
24946 +/* UFSTAT S3C24A0 */
24947 +#define S3C24A0_UFSTAT_TXFULL (1 << 14)
24948 +#define S3C24A0_UFSTAT_RXFULL (1 << 6)
24949 +#define S3C24A0_UFSTAT_TXMASK (63 << 8)
24950 +#define S3C24A0_UFSTAT_TXSHIFT (8)
24951 +#define S3C24A0_UFSTAT_RXMASK (63)
24952 +#define S3C24A0_UFSTAT_RXSHIFT (0)
24953 +
24954 /* UFSTAT S3C2443 same as S3C2440 */
24955 #define S3C2440_UFSTAT_TXFULL (1<<14)
24956 #define S3C2440_UFSTAT_RXFULL (1<<6)
24957 @@ -175,6 +189,11 @@
24958
24959 #define S3C2443_DIVSLOT (0x2C)
24960
24961 +/* S3C64XX interrupt registers. */
24962 +#define S3C64XX_UINTP 0x30
24963 +#define S3C64XX_UINTSP 0x34
24964 +#define S3C64XX_UINTM 0x38
24965 +
24966 #ifndef __ASSEMBLY__
24967
24968 /* struct s3c24xx_uart_clksrc
24969 @@ -224,7 +243,7 @@ struct s3c2410_uartcfg {
24970 * or platform_add_device() before the console_initcall()
24971 */
24972
24973 -extern struct platform_device *s3c24xx_uart_devs[3];
24974 +extern struct platform_device *s3c24xx_uart_devs[4];
24975
24976 #endif /* __ASSEMBLY__ */
24977
24978 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-timer.h
24979 ===================================================================
24980 --- linux-2.6.28.orig/arch/arm/plat-s3c/include/plat/regs-timer.h 2008-12-25 00:26:37.000000000 +0100
24981 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-timer.h 2009-01-02 00:01:56.000000000 +0100
24982 @@ -10,7 +10,6 @@
24983 * S3C2410 Timer configuration
24984 */
24985
24986 -
24987 #ifndef __ASM_ARCH_REGS_TIMER_H
24988 #define __ASM_ARCH_REGS_TIMER_H
24989
24990 @@ -21,6 +20,8 @@
24991 #define S3C2410_TCFG1 S3C_TIMERREG(0x04)
24992 #define S3C2410_TCON S3C_TIMERREG(0x08)
24993
24994 +#define S3C64XX_TINT_CSTAT S3C_TIMERREG(0x44)
24995 +
24996 #define S3C2410_TCFG_PRESCALER0_MASK (255<<0)
24997 #define S3C2410_TCFG_PRESCALER1_MASK (255<<8)
24998 #define S3C2410_TCFG_PRESCALER1_SHIFT (8)
24999 @@ -72,6 +73,14 @@
25000 #define S3C2410_TCFG1_MUX_TCLK (4<<0)
25001 #define S3C2410_TCFG1_MUX_MASK (15<<0)
25002
25003 +#define S3C64XX_TCFG1_MUX_DIV1 (0<<0)
25004 +#define S3C64XX_TCFG1_MUX_DIV2 (1<<0)
25005 +#define S3C64XX_TCFG1_MUX_DIV4 (2<<0)
25006 +#define S3C64XX_TCFG1_MUX_DIV8 (3<<0)
25007 +#define S3C64XX_TCFG1_MUX_DIV16 (4<<0)
25008 +#define S3C64XX_TCFG1_MUX_TCLK (5<<0) /* 3 sets of TCLK */
25009 +#define S3C64XX_TCFG1_MUX_MASK (15<<0)
25010 +
25011 #define S3C2410_TCFG1_SHIFT(x) ((x) * 4)
25012
25013 /* for each timer, we have an count buffer, an compare buffer and
25014 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-watchdog.h
25015 ===================================================================
25016 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
25017 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/regs-watchdog.h 2009-01-02 00:01:56.000000000 +0100
25018 @@ -0,0 +1,41 @@
25019 +/* arch/arm/mach-s3c2410/include/mach/regs-watchdog.h
25020 + *
25021 + * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
25022 + * http://www.simtec.co.uk/products/SWLINUX/
25023 + *
25024 + * This program is free software; you can redistribute it and/or modify
25025 + * it under the terms of the GNU General Public License version 2 as
25026 + * published by the Free Software Foundation.
25027 + *
25028 + * S3C2410 Watchdog timer control
25029 +*/
25030 +
25031 +
25032 +#ifndef __ASM_ARCH_REGS_WATCHDOG_H
25033 +#define __ASM_ARCH_REGS_WATCHDOG_H
25034 +
25035 +#define S3C_WDOGREG(x) ((x) + S3C_VA_WATCHDOG)
25036 +
25037 +#define S3C2410_WTCON S3C_WDOGREG(0x00)
25038 +#define S3C2410_WTDAT S3C_WDOGREG(0x04)
25039 +#define S3C2410_WTCNT S3C_WDOGREG(0x08)
25040 +
25041 +/* the watchdog can either generate a reset pulse, or an
25042 + * interrupt.
25043 + */
25044 +
25045 +#define S3C2410_WTCON_RSTEN (0x01)
25046 +#define S3C2410_WTCON_INTEN (1<<2)
25047 +#define S3C2410_WTCON_ENABLE (1<<5)
25048 +
25049 +#define S3C2410_WTCON_DIV16 (0<<3)
25050 +#define S3C2410_WTCON_DIV32 (1<<3)
25051 +#define S3C2410_WTCON_DIV64 (2<<3)
25052 +#define S3C2410_WTCON_DIV128 (3<<3)
25053 +
25054 +#define S3C2410_WTCON_PRESCALE(x) ((x) << 8)
25055 +#define S3C2410_WTCON_PRESCALE_MASK (0xff00)
25056 +
25057 +#endif /* __ASM_ARCH_REGS_WATCHDOG_H */
25058 +
25059 +
25060 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/sdhci.h
25061 ===================================================================
25062 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
25063 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/sdhci.h 2009-01-02 00:01:56.000000000 +0100
25064 @@ -0,0 +1,112 @@
25065 +/* linux/arch/arm/plat-s3c/include/plat/sdhci.h
25066 + *
25067 + * Copyright 2008 Openmoko, Inc.
25068 + * Copyright 2008 Simtec Electronics
25069 + * http://armlinux.simtec.co.uk/
25070 + * Ben Dooks <ben@simtec.co.uk>
25071 + *
25072 + * S3C Platform - SDHCI (HSMMC) platform data definitions
25073 + *
25074 + * This program is free software; you can redistribute it and/or modify
25075 + * it under the terms of the GNU General Public License version 2 as
25076 + * published by the Free Software Foundation.
25077 +*/
25078 +
25079 +#ifndef __PLAT_S3C_SDHCI_H
25080 +#define __PLAT_S3C_SDHCI_H __FILE__
25081 +
25082 +struct platform_device;
25083 +struct mmc_host;
25084 +struct mmc_card;
25085 +struct mmc_ios;
25086 +
25087 +/**
25088 + * struct s3c_sdhci_platdata() - Platform device data for Samsung SDHCI
25089 + * @max_width: The maximum number of data bits supported.
25090 + * @host_caps: Standard MMC host capabilities bit field.
25091 + * @cfg_gpio: Configure the GPIO for a specific card bit-width
25092 + * @cfg_card: Configure the interface for a specific card and speed. This
25093 + * is necessary the controllers and/or GPIO blocks require the
25094 + * changing of driver-strength and other controls dependant on
25095 + * the card and speed of operation.
25096 + * sdhci_host: Pointer kept during init, allows presence change notification
25097 + *
25098 + * Initialisation data specific to either the machine or the platform
25099 + * for the device driver to use or call-back when configuring gpio or
25100 + * card speed information.
25101 +*/
25102 +struct s3c_sdhci_platdata {
25103 + unsigned int max_width;
25104 + unsigned int host_caps;
25105 +
25106 + char **clocks; /* set of clock sources */
25107 +
25108 + void (*cfg_gpio)(struct platform_device *dev, int width);
25109 + void (*cfg_card)(struct platform_device *dev,
25110 + void __iomem *regbase,
25111 + struct mmc_ios *ios,
25112 + struct mmc_card *card);
25113 + struct sdhci_host * sdhci_host;
25114 +};
25115 +
25116 +extern void sdhci_s3c_force_presence_change(struct platform_device *pdev);
25117 +
25118 +/**
25119 + * s3c_sdhci0_set_platdata - Set platform data for S3C SDHCI device.
25120 + * @pd: Platform data to register to device.
25121 + *
25122 + * Register the given platform data for use withe S3C SDHCI device.
25123 + * The call will copy the platform data, so the board definitions can
25124 + * make the structure itself __initdata.
25125 + */
25126 +extern void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd);
25127 +extern void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd);
25128 +
25129 +/* Default platform data, exported so that per-cpu initialisation can
25130 + * set the correct one when there are more than one cpu type selected.
25131 +*/
25132 +
25133 +extern struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata;
25134 +extern struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata;
25135 +
25136 +/* Helper function availablity */
25137 +
25138 +#ifdef CONFIG_S3C6410_SETUP_SDHCI
25139 +extern char *s3c6410_hsmmc_clksrcs[4];
25140 +
25141 +extern void s3c6410_setup_sdhci0_cfg_gpio(struct platform_device *, int w);
25142 +extern void s3c6410_setup_sdhci1_cfg_gpio(struct platform_device *, int w);
25143 +
25144 +extern void s3c6410_setup_sdhci0_cfg_card(struct platform_device *dev,
25145 + void __iomem *r,
25146 + struct mmc_ios *ios,
25147 + struct mmc_card *card);
25148 +
25149 +#ifdef CONFIG_S3C_DEV_HSMMC
25150 +static inline void s3c6410_default_sdhci0(void)
25151 +{
25152 + s3c_hsmmc0_def_platdata.clocks = s3c6410_hsmmc_clksrcs;
25153 + s3c_hsmmc0_def_platdata.cfg_gpio = s3c6410_setup_sdhci0_cfg_gpio;
25154 + s3c_hsmmc0_def_platdata.cfg_card = s3c6410_setup_sdhci0_cfg_card;
25155 +}
25156 +#else
25157 +static inline void s3c6410_default_sdhci0(void) { }
25158 +#endif /* CONFIG_S3C_DEV_HSMMC */
25159 +
25160 +#ifdef CONFIG_S3C_DEV_HSMMC1
25161 +static inline void s3c6410_default_sdhci1(void)
25162 +{
25163 + s3c_hsmmc1_def_platdata.clocks = s3c6410_hsmmc_clksrcs;
25164 + s3c_hsmmc1_def_platdata.cfg_gpio = s3c6410_setup_sdhci1_cfg_gpio;
25165 + s3c_hsmmc1_def_platdata.cfg_card = s3c6410_setup_sdhci0_cfg_card;
25166 +}
25167 +#else
25168 +static inline void s3c6410_default_sdhci1(void) { }
25169 +#endif /* CONFIG_S3C_DEV_HSMMC1 */
25170 +
25171 +#else
25172 +static inline void s3c6410_default_sdhci0(void) { }
25173 +static inline void s3c6410_default_sdhci1(void) { }
25174 +#endif /* CONFIG_S3C6410_SETUP_SDHCI */
25175 +
25176 +#endif /* __PLAT_S3C_SDHCI_H */
25177 Index: linux-2.6.28/arch/arm/plat-s3c/include/plat/uncompress.h
25178 ===================================================================
25179 --- linux-2.6.28.orig/arch/arm/plat-s3c/include/plat/uncompress.h 2008-12-25 00:26:37.000000000 +0100
25180 +++ linux-2.6.28/arch/arm/plat-s3c/include/plat/uncompress.h 2009-01-02 00:01:56.000000000 +0100
25181 @@ -28,7 +28,7 @@ static void arch_detect_cpu(void);
25182 /* defines for UART registers */
25183
25184 #include <plat/regs-serial.h>
25185 -#include <asm/plat-s3c/regs-watchdog.h>
25186 +#include <plat/regs-watchdog.h>
25187
25188 /* working in physical space... */
25189 #undef S3C2410_WDOGREG
25190 @@ -37,7 +37,7 @@ static void arch_detect_cpu(void);
25191 /* how many bytes we allow into the FIFO at a time in FIFO mode */
25192 #define FIFO_MAX (14)
25193
25194 -#define uart_base S3C24XX_PA_UART + (0x4000*CONFIG_S3C_LOWLEVEL_UART_PORT)
25195 +#define uart_base S3C_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT)
25196
25197 static __inline__ void
25198 uart_wr(unsigned int reg, unsigned int val)
25199 @@ -139,6 +139,28 @@ static void arch_decomp_error(const char
25200
25201 static void error(char *err);
25202
25203 +#ifdef CONFIG_S3C_BOOT_UART_FORCE_FIFO
25204 +static inline void arch_enable_uart_fifo(void)
25205 +{
25206 + u32 fifocon = uart_rd(S3C2410_UFCON);
25207 +
25208 + if (!(fifocon & S3C2410_UFCON_FIFOMODE)) {
25209 + fifocon |= S3C2410_UFCON_RESETBOTH;
25210 + uart_wr(S3C2410_UFCON, fifocon);
25211 +
25212 + /* wait for fifo reset to complete */
25213 + while (1) {
25214 + fifocon = uart_rd(S3C2410_UFCON);
25215 + if (!(fifocon & S3C2410_UFCON_RESETBOTH))
25216 + break;
25217 + }
25218 + }
25219 +}
25220 +#else
25221 +#define arch_enable_uart_fifo() do { } while(0)
25222 +#endif
25223 +
25224 +
25225 static void
25226 arch_decomp_setup(void)
25227 {
25228 @@ -149,6 +171,12 @@ arch_decomp_setup(void)
25229
25230 arch_detect_cpu();
25231 arch_decomp_wdog_start();
25232 +
25233 + /* Enable the UART FIFOs if they where not enabled and our
25234 + * configuration says we should turn them on.
25235 + */
25236 +
25237 + arch_enable_uart_fifo();
25238 }
25239
25240
25241 Index: linux-2.6.28/arch/arm/plat-s3c/init.c
25242 ===================================================================
25243 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
25244 +++ linux-2.6.28/arch/arm/plat-s3c/init.c 2009-01-02 00:01:56.000000000 +0100
25245 @@ -0,0 +1,161 @@
25246 +/* linux/arch/arm/plat-s3c/init.c
25247 + *
25248 + * Copyright (c) 2008 Simtec Electronics
25249 + * Ben Dooks <ben@simtec.co.uk>
25250 + * http://armlinux.simtec.co.uk/
25251 + *
25252 + * S3C series CPU initialisation
25253 + *
25254 + * This program is free software; you can redistribute it and/or modify
25255 + * it under the terms of the GNU General Public License version 2 as
25256 + * published by the Free Software Foundation.
25257 +*/
25258 +
25259 +#include <linux/init.h>
25260 +#include <linux/module.h>
25261 +#include <linux/interrupt.h>
25262 +#include <linux/ioport.h>
25263 +#include <linux/serial_core.h>
25264 +#include <linux/platform_device.h>
25265 +#include <linux/delay.h>
25266 +
25267 +#include <mach/hardware.h>
25268 +
25269 +#include <asm/mach/arch.h>
25270 +#include <asm/mach/map.h>
25271 +
25272 +#include <plat/cpu.h>
25273 +#include <plat/devs.h>
25274 +#include <plat/clock.h>
25275 +
25276 +#include <plat/regs-serial.h>
25277 +
25278 +static struct cpu_table *cpu;
25279 +
25280 +static struct cpu_table * __init s3c_lookup_cpu(unsigned long idcode,
25281 + struct cpu_table *tab,
25282 + unsigned int count)
25283 +{
25284 + for (; count != 0; count--, tab++) {
25285 + if ((idcode & tab->idmask) == tab->idcode)
25286 + return tab;
25287 + }
25288 +
25289 + return NULL;
25290 +}
25291 +
25292 +void __init s3c_init_cpu(unsigned long idcode,
25293 + struct cpu_table *cputab, unsigned int cputab_size)
25294 +{
25295 + cpu = s3c_lookup_cpu(idcode, cputab, cputab_size);
25296 +
25297 + if (cpu == NULL) {
25298 + printk(KERN_ERR "Unknown CPU type 0x%08lx\n", idcode);
25299 + panic("Unknown S3C24XX CPU");
25300 + }
25301 +
25302 + printk("CPU %s (id 0x%08lx)\n", cpu->name, idcode);
25303 +
25304 + if (cpu->map_io == NULL || cpu->init == NULL) {
25305 + printk(KERN_ERR "CPU %s support not enabled\n", cpu->name);
25306 + panic("Unsupported Samsung CPU");
25307 + }
25308 +
25309 + cpu->map_io();
25310 +}
25311 +
25312 +/* s3c24xx_init_clocks
25313 + *
25314 + * Initialise the clock subsystem and associated information from the
25315 + * given master crystal value.
25316 + *
25317 + * xtal = 0 -> use default PLL crystal value (normally 12MHz)
25318 + * != 0 -> PLL crystal value in Hz
25319 +*/
25320 +
25321 +void __init s3c24xx_init_clocks(int xtal)
25322 +{
25323 + if (xtal == 0)
25324 + xtal = 12*1000*1000;
25325 +
25326 + if (cpu == NULL)
25327 + panic("s3c24xx_init_clocks: no cpu setup?\n");
25328 +
25329 + if (cpu->init_clocks == NULL)
25330 + panic("s3c24xx_init_clocks: cpu has no clock init\n");
25331 + else
25332 + (cpu->init_clocks)(xtal);
25333 +}
25334 +
25335 +/* uart management */
25336 +
25337 +static int nr_uarts __initdata = 0;
25338 +
25339 +static struct s3c2410_uartcfg uart_cfgs[CONFIG_SERIAL_SAMSUNG_UARTS];
25340 +
25341 +/* s3c24xx_init_uartdevs
25342 + *
25343 + * copy the specified platform data and configuration into our central
25344 + * set of devices, before the data is thrown away after the init process.
25345 + *
25346 + * This also fills in the array passed to the serial driver for the
25347 + * early initialisation of the console.
25348 +*/
25349 +
25350 +void __init s3c24xx_init_uartdevs(char *name,
25351 + struct s3c24xx_uart_resources *res,
25352 + struct s3c2410_uartcfg *cfg, int no)
25353 +{
25354 + struct platform_device *platdev;
25355 + struct s3c2410_uartcfg *cfgptr = uart_cfgs;
25356 + struct s3c24xx_uart_resources *resp;
25357 + int uart;
25358 +
25359 + memcpy(cfgptr, cfg, sizeof(struct s3c2410_uartcfg) * no);
25360 +
25361 + for (uart = 0; uart < no; uart++, cfg++, cfgptr++) {
25362 + platdev = s3c24xx_uart_src[cfgptr->hwport];
25363 +
25364 + resp = res + cfgptr->hwport;
25365 +
25366 + s3c24xx_uart_devs[uart] = platdev;
25367 +
25368 + platdev->name = name;
25369 + platdev->resource = resp->resources;
25370 + platdev->num_resources = resp->nr_resources;
25371 +
25372 + platdev->dev.platform_data = cfgptr;
25373 + }
25374 +
25375 + nr_uarts = no;
25376 +}
25377 +
25378 +void __init s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no)
25379 +{
25380 + if (cpu == NULL)
25381 + return;
25382 +
25383 + if (cpu->init_uarts == NULL) {
25384 + printk(KERN_ERR "s3c24xx_init_uarts: cpu has no uart init\n");
25385 + } else
25386 + (cpu->init_uarts)(cfg, no);
25387 +}
25388 +
25389 +static int __init s3c_arch_init(void)
25390 +{
25391 + int ret;
25392 +
25393 + // do the correct init for cpu
25394 +
25395 + if (cpu == NULL)
25396 + panic("s3c_arch_init: NULL cpu\n");
25397 +
25398 + ret = (cpu->init)();
25399 + if (ret != 0)
25400 + return ret;
25401 +
25402 + ret = platform_add_devices(s3c24xx_uart_devs, nr_uarts);
25403 + return ret;
25404 +}
25405 +
25406 +arch_initcall(s3c_arch_init);
25407 Index: linux-2.6.28/arch/arm/plat-s3c/Kconfig
25408 ===================================================================
25409 --- linux-2.6.28.orig/arch/arm/plat-s3c/Kconfig 2008-12-25 00:26:37.000000000 +0100
25410 +++ linux-2.6.28/arch/arm/plat-s3c/Kconfig 2009-01-02 00:01:56.000000000 +0100
25411 @@ -6,8 +6,8 @@
25412
25413 config PLAT_S3C
25414 bool
25415 - depends on ARCH_S3C2410
25416 - default y if ARCH_S3C2410
25417 + depends on ARCH_S3C2410 || ARCH_S3C24A0 || ARCH_S3C64XX
25418 + default y
25419 select NO_IOPORT
25420 help
25421 Base platform code for any Samsung S3C device
25422 @@ -16,24 +16,24 @@ config PLAT_S3C
25423
25424 config CPU_LLSERIAL_S3C2410_ONLY
25425 bool
25426 - depends on ARCH_S3C2410
25427 + depends on PLAT_S3C
25428 default y if CPU_LLSERIAL_S3C2410 && !CPU_LLSERIAL_S3C2440
25429
25430 config CPU_LLSERIAL_S3C2440_ONLY
25431 bool
25432 - depends on ARCH_S3C2410
25433 + depends on PLAT_S3C
25434 default y if CPU_LLSERIAL_S3C2440 && !CPU_LLSERIAL_S3C2410
25435
25436 config CPU_LLSERIAL_S3C2410
25437 bool
25438 - depends on ARCH_S3C2410
25439 + depends on PLAT_S3C
25440 help
25441 Selected if there is an S3C2410 (or register compatible) serial
25442 low-level implementation needed
25443
25444 config CPU_LLSERIAL_S3C2440
25445 bool
25446 - depends on ARCH_S3C2410
25447 + depends on PLAT_S3C
25448 help
25449 Selected if there is an S3C2440 (or register compatible) serial
25450 low-level implementation needed
25451 @@ -57,6 +57,14 @@ config S3C_BOOT_ERROR_RESET
25452 Say y here to use the watchdog to reset the system if the
25453 kernel decompressor detects an error during decompression.
25454
25455 +config S3C_BOOT_UART_FORCE_FIFO
25456 + bool "Force UART FIFO on during boot process"
25457 + depends on PLAT_S3C
25458 + default y
25459 + help
25460 + Say Y here to force the UART FIFOs on during the kernel
25461 + uncompressor
25462 +
25463 comment "Power management"
25464
25465 config S3C2410_PM_DEBUG
25466 @@ -67,6 +75,15 @@ config S3C2410_PM_DEBUG
25467 Resume code. See <file:Documentation/arm/Samsung-S3C24XX/Suspend.txt>
25468 for more information.
25469
25470 +config S3C_PM_DEBUG_LED_SMDK
25471 + bool "SMDK LED suspend/resume debugging"
25472 + depends on PM && (MACH_SMDK6410)
25473 + help
25474 + Say Y here to enable the use of the SMDK LEDs on the baseboard
25475 + for debugging of the state of the suspend and resume process.
25476 +
25477 + Note, this currently only works for S3C64XX based SMDK boards.
25478 +
25479 config S3C2410_PM_CHECK
25480 bool "S3C2410 PM Suspend Memory CRC"
25481 depends on PLAT_S3C && PM && CRC32
25482 @@ -102,3 +119,73 @@ config S3C_LOWLEVEL_UART_PORT
25483 such as the `Uncompressing...` at start time. The value of
25484 this configuration should be between zero and two. The port
25485 must have been initialised by the boot-loader before use.
25486 +
25487 +# options for gpiolib support
25488 +
25489 +config S3C_GPIO_SPACE
25490 + int "Space between gpio banks"
25491 + default 0
25492 + help
25493 + Add a number of spare GPIO entries between each bank for debugging
25494 + purposes. This allows any problems where an counter overflows from
25495 + one bank to another to be caught, at the expense of using a little
25496 + more memory.
25497 +
25498 +config S3C_GPIO_TRACK
25499 + bool
25500 + help
25501 + Internal configuration option to enable the s3c specific gpio
25502 + chip tracking if the platform requires it.
25503 +
25504 +config S3C_GPIO_PULL_UPDOWN
25505 + bool
25506 + help
25507 + Internal configuration to enable the correct GPIO pull helper
25508 +
25509 +config S3C_GPIO_PULL_DOWN
25510 + bool
25511 + help
25512 + Internal configuration to enable the correct GPIO pull helper
25513 +
25514 +config S3C_GPIO_PULL_UP
25515 + bool
25516 + help
25517 + Internal configuration to enable the correct GPIO pull helper
25518 +
25519 +config S3C_GPIO_CFG_S3C24XX
25520 + bool
25521 + help
25522 + Internal configuration to enable S3C24XX style GPIO configuration
25523 + functions.
25524 +
25525 +config S3C_GPIO_CFG_S3C64XX
25526 + bool
25527 + help
25528 + Internal configuration to enable S3C64XX style GPIO configuration
25529 + functions.
25530 +
25531 +# device definitions to compile in
25532 +
25533 +config S3C_DEV_HSMMC
25534 + bool
25535 + depends on PLAT_S3C
25536 + help
25537 + Compile in platform device definitions for HSMMC code
25538 +
25539 +config S3C_DEV_HSMMC1
25540 + bool
25541 + depends on PLAT_S3C
25542 + help
25543 + Compile in platform device definitions for HSMMC channel 1
25544 +
25545 +config S3C_DEV_I2C1
25546 + bool
25547 + depends on PLAT_S3C
25548 + help
25549 + Compile in platform device definitions for I2C channel 1
25550 +
25551 +config S3C_DEV_FB
25552 + bool
25553 + depends on PLAT_S3C
25554 + help
25555 + Compile in platform device definition for framebuffer
25556 Index: linux-2.6.28/arch/arm/plat-s3c/Makefile
25557 ===================================================================
25558 --- linux-2.6.28.orig/arch/arm/plat-s3c/Makefile 2008-12-25 00:26:37.000000000 +0100
25559 +++ linux-2.6.28/arch/arm/plat-s3c/Makefile 2009-01-02 00:01:56.000000000 +0100
25560 @@ -1,3 +1,33 @@
25561 -# dummy makefile, currently just including asm/arm/plat-s3c/include/plat
25562 +# arch/arm/plat-s3c/Makefile
25563 +#
25564 +# Copyright 2008 Simtec Electronics
25565 +#
25566 +# Licensed under GPLv2
25567
25568 -obj-n := dummy.o
25569 +obj-y :=
25570 +obj-m :=
25571 +obj-n :=
25572 +obj- :=
25573 +
25574 +# Core support for all Samsung SoCs
25575 +
25576 +obj-y += init.o
25577 +obj-y += time.o
25578 +obj-y += clock.o
25579 +obj-y += pwm-clock.o
25580 +obj-y += gpio.o
25581 +obj-y += gpio-config.o
25582 +
25583 +# PM support
25584 +
25585 +obj-$(CONFIG_PM) += pm.o
25586 +obj-$(CONFIG_PM) += pm-gpio.o
25587 +obj-$(CONFIG_S3C2410_PM_CHECK) += pm-check.o
25588 +
25589 +# devices
25590 +
25591 +obj-$(CONFIG_S3C_DEV_HSMMC) += dev-hsmmc.o
25592 +obj-$(CONFIG_S3C_DEV_HSMMC1) += dev-hsmmc1.o
25593 +obj-y += dev-i2c0.o
25594 +obj-$(CONFIG_S3C_DEV_I2C1) += dev-i2c1.o
25595 +obj-$(CONFIG_S3C_DEV_FB) += dev-fb.o
25596 Index: linux-2.6.28/arch/arm/plat-s3c/pm.c
25597 ===================================================================
25598 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
25599 +++ linux-2.6.28/arch/arm/plat-s3c/pm.c 2009-01-02 00:01:56.000000000 +0100
25600 @@ -0,0 +1,387 @@
25601 +/* linux/arch/arm/plat-s3c/pm.c
25602 + *
25603 + * Copyright 2008 Openmoko, Inc.
25604 + * Copyright 2004,2006,2008 Simtec Electronics
25605 + * Ben Dooks <ben@simtec.co.uk>
25606 + * http://armlinux.simtec.co.uk/
25607 + *
25608 + * S3C common power management (suspend to ram) support.
25609 + *
25610 + * This program is free software; you can redistribute it and/or modify
25611 + * it under the terms of the GNU General Public License version 2 as
25612 + * published by the Free Software Foundation.
25613 +*/
25614 +
25615 +#include <linux/init.h>
25616 +#include <linux/suspend.h>
25617 +#include <linux/errno.h>
25618 +#include <linux/delay.h>
25619 +#include <linux/serial_core.h>
25620 +#include <linux/io.h>
25621 +#include <linux/regulator/machine.h>
25622 +
25623 +#include <asm/cacheflush.h>
25624 +#include <mach/hardware.h>
25625 +#include <mach/map.h>
25626 +
25627 +#include <plat/regs-serial.h>
25628 +#include <mach/regs-clock.h>
25629 +#include <mach/regs-irq.h>
25630 +#include <asm/irq.h>
25631 +
25632 +#include <plat/pm.h>
25633 +#include <plat/pm-core.h>
25634 +
25635 +/* for external use */
25636 +
25637 +unsigned long s3c_pm_flags;
25638 +
25639 +/* Debug code:
25640 + *
25641 + * This code supports debug output to the low level UARTs for use on
25642 + * resume before the console layer is available.
25643 +*/
25644 +
25645 +#ifdef CONFIG_S3C2410_PM_DEBUG
25646 +extern void printascii(const char *);
25647 +
25648 +void s3c_pm_dbg(const char *fmt, ...)
25649 +{
25650 + va_list va;
25651 + char buff[256];
25652 +
25653 + va_start(va, fmt);
25654 + vsprintf(buff, fmt, va);
25655 + va_end(va);
25656 +
25657 + printascii(buff);
25658 +}
25659 +
25660 +static inline void s3c_pm_debug_init(void)
25661 +{
25662 + /* restart uart clocks so we can use them to output */
25663 + s3c_pm_debug_init_uart();
25664 +}
25665 +
25666 +#else
25667 +#define s3c_pm_debug_init() do { } while(0)
25668 +
25669 +#endif /* CONFIG_S3C2410_PM_DEBUG */
25670 +
25671 +/* Save the UART configurations if we are configured for debug. */
25672 +
25673 +unsigned char pm_uart_udivslot;
25674 +
25675 +#ifdef CONFIG_S3C2410_PM_DEBUG
25676 +
25677 +struct pm_uart_save uart_save[CONFIG_SERIAL_SAMSUNG_UARTS];
25678 +
25679 +static void s3c_pm_save_uart(unsigned int uart, struct pm_uart_save *save)
25680 +{
25681 + void __iomem *regs = S3C_VA_UARTx(uart);
25682 +
25683 + save->ulcon = __raw_readl(regs + S3C2410_ULCON);
25684 + save->ucon = __raw_readl(regs + S3C2410_UCON);
25685 + save->ufcon = __raw_readl(regs + S3C2410_UFCON);
25686 + save->umcon = __raw_readl(regs + S3C2410_UMCON);
25687 + save->ubrdiv = __raw_readl(regs + S3C2410_UBRDIV);
25688 +
25689 + if (pm_uart_udivslot)
25690 + save->udivslot = __raw_readl(regs + S3C2443_DIVSLOT);
25691 +
25692 + S3C_PMDBG("UART[%d]: ULCON=%04x, UCON=%04x, UFCON=%04x, UBRDIV=%04x\n",
25693 + uart, save->ulcon, save->ucon, save->ufcon, save->ubrdiv);
25694 +}
25695 +
25696 +static void s3c_pm_save_uarts(void)
25697 +{
25698 + struct pm_uart_save *save = uart_save;
25699 + unsigned int uart;
25700 +
25701 + for (uart = 0; uart < CONFIG_SERIAL_SAMSUNG_UARTS; uart++, save++)
25702 + s3c_pm_save_uart(uart, save);
25703 +}
25704 +
25705 +static void s3c_pm_restore_uart(unsigned int uart, struct pm_uart_save *save)
25706 +{
25707 + void __iomem *regs = S3C_VA_UARTx(uart);
25708 +
25709 + s3c_pm_arch_update_uart(regs, save);
25710 +
25711 + __raw_writel(save->ulcon, regs + S3C2410_ULCON);
25712 + __raw_writel(save->ucon, regs + S3C2410_UCON);
25713 + __raw_writel(save->ufcon, regs + S3C2410_UFCON);
25714 + __raw_writel(save->umcon, regs + S3C2410_UMCON);
25715 + __raw_writel(save->ubrdiv, regs + S3C2410_UBRDIV);
25716 +
25717 + if (pm_uart_udivslot)
25718 + __raw_writel(save->udivslot, regs + S3C2443_DIVSLOT);
25719 +}
25720 +
25721 +static void s3c_pm_restore_uarts(void)
25722 +{
25723 + struct pm_uart_save *save = uart_save;
25724 + unsigned int uart;
25725 +
25726 + for (uart = 0; uart < CONFIG_SERIAL_SAMSUNG_UARTS; uart++, save++)
25727 + s3c_pm_restore_uart(uart, save);
25728 +}
25729 +#else
25730 +static void s3c_pm_save_uarts(void) { }
25731 +static void s3c_pm_restore_uarts(void) { }
25732 +#endif
25733 +
25734 +/* The IRQ ext-int code goes here, it is too small to currently bother
25735 + * with its own file. */
25736 +
25737 +unsigned long s3c_irqwake_intmask = 0xffffffffL;
25738 +unsigned long s3c_irqwake_eintmask = 0xffffffffL;
25739 +
25740 +int s3c_irqext_wake(unsigned int irqno, unsigned int state)
25741 +{
25742 + unsigned long bit = 1L << IRQ_EINT_BIT(irqno);
25743 +
25744 + if (!(s3c_irqwake_eintallow & bit))
25745 + return -ENOENT;
25746 +
25747 + printk(KERN_INFO "wake %s for irq %d\n",
25748 + state ? "enabled" : "disabled", irqno);
25749 +
25750 + if (!state)
25751 + s3c_irqwake_eintmask |= bit;
25752 + else
25753 + s3c_irqwake_eintmask &= ~bit;
25754 +
25755 + return 0;
25756 +}
25757 +
25758 +/* helper functions to save and restore register state */
25759 +
25760 +/**
25761 + * s3c_pm_do_save() - save a set of registers for restoration on resume.
25762 + * @ptr: Pointer to an array of registers.
25763 + * @count: Size of the ptr array.
25764 + *
25765 + * Run through the list of registers given, saving their contents in the
25766 + * array for later restoration when we wakeup.
25767 + */
25768 +void s3c_pm_do_save(struct sleep_save *ptr, int count)
25769 +{
25770 + for (; count > 0; count--, ptr++) {
25771 + ptr->val = __raw_readl(ptr->reg);
25772 + S3C_PMDBG("saved %p value %08lx\n", ptr->reg, ptr->val);
25773 + }
25774 +}
25775 +
25776 +/**
25777 + * s3c_pm_do_restore() - restore register values from the save list.
25778 + * @ptr: Pointer to an array of registers.
25779 + * @count: Size of the ptr array.
25780 + *
25781 + * Restore the register values saved from s3c_pm_do_save().
25782 + *
25783 + * Note, we do not use S3C_PMDBG() in here, as the system may not have
25784 + * restore the UARTs state yet
25785 +*/
25786 +
25787 +void s3c_pm_do_restore(struct sleep_save *ptr, int count)
25788 +{
25789 + for (; count > 0; count--, ptr++) {
25790 + printk(KERN_DEBUG "restore %p (restore %08lx, was %08x)\n",
25791 + ptr->reg, ptr->val, __raw_readl(ptr->reg));
25792 +
25793 + __raw_writel(ptr->val, ptr->reg);
25794 + }
25795 +}
25796 +
25797 +/**
25798 + * s3c_pm_do_restore_core() - early restore register values from save list.
25799 + *
25800 + * This is similar to s3c_pm_do_restore() except we try and minimise the
25801 + * side effects of the function in case registers that hardware might need
25802 + * to work has been restored.
25803 + *
25804 + * WARNING: Do not put any debug in here that may effect memory or use
25805 + * peripherals, as things may be changing!
25806 +*/
25807 +
25808 +void s3c_pm_do_restore_core(struct sleep_save *ptr, int count)
25809 +{
25810 + for (; count > 0; count--, ptr++)
25811 + __raw_writel(ptr->val, ptr->reg);
25812 +}
25813 +
25814 +/* s3c2410_pm_show_resume_irqs
25815 + *
25816 + * print any IRQs asserted at resume time (ie, we woke from)
25817 +*/
25818 +static void s3c_pm_show_resume_irqs(int start, unsigned long which,
25819 + unsigned long mask)
25820 +{
25821 + int i;
25822 +
25823 + which &= ~mask;
25824 +
25825 + for (i = 0; i <= 31; i++) {
25826 + if (which & (1L<<i)) {
25827 + S3C_PMDBG("IRQ %d asserted at resume\n", start+i);
25828 + }
25829 + }
25830 +}
25831 +
25832 +
25833 +void (*pm_cpu_prep)(void);
25834 +void (*pm_cpu_sleep)(void);
25835 +
25836 +#define any_allowed(mask, allow) (((mask) & (allow)) != (allow))
25837 +
25838 +/* s3c_pm_enter
25839 + *
25840 + * central control for sleep/resume process
25841 +*/
25842 +
25843 +static int s3c_pm_enter(suspend_state_t state)
25844 +{
25845 + unsigned long regs_save[16];
25846 +
25847 + /* ensure the debug is initialised (if enabled) */
25848 +
25849 + s3c_pm_debug_init();
25850 +
25851 + S3C_PMDBG("%s(%d)\n", __func__, state);
25852 +
25853 + if (pm_cpu_prep == NULL || pm_cpu_sleep == NULL) {
25854 + printk(KERN_ERR "%s: error: no cpu sleep function\n", __func__);
25855 + return -EINVAL;
25856 + }
25857 +
25858 + /* check if we have anything to wake-up with... bad things seem
25859 + * to happen if you suspend with no wakeup (system will often
25860 + * require a full power-cycle)
25861 + */
25862 +
25863 + if (!any_allowed(s3c_irqwake_intmask, s3c_irqwake_intallow) &&
25864 + !any_allowed(s3c_irqwake_eintmask, s3c_irqwake_eintallow)) {
25865 + printk(KERN_ERR "%s: No wake-up sources!\n", __func__);
25866 + printk(KERN_ERR "%s: Aborting sleep\n", __func__);
25867 + return -EINVAL;
25868 + }
25869 +
25870 + /* store the physical address of the register recovery block */
25871 +
25872 + s3c_sleep_save_phys = virt_to_phys(regs_save);
25873 +
25874 + S3C_PMDBG("s3c_sleep_save_phys=0x%08lx\n", s3c_sleep_save_phys);
25875 +
25876 + /* save all necessary core registers not covered by the drivers */
25877 +
25878 + s3c_pm_save_gpios();
25879 + s3c_pm_save_uarts();
25880 + s3c_pm_save_core();
25881 +
25882 + /* set the irq configuration for wake */
25883 +
25884 + s3c_pm_configure_extint();
25885 +
25886 + S3C_PMDBG("sleep: irq wakeup masks: %08lx,%08lx\n",
25887 + s3c_irqwake_intmask, s3c_irqwake_eintmask);
25888 +
25889 + s3c_pm_arch_prepare_irqs();
25890 +
25891 + /* call cpu specific preparation */
25892 +
25893 + pm_cpu_prep();
25894 +
25895 + /* flush cache back to ram */
25896 +
25897 + flush_cache_all();
25898 +
25899 + s3c_pm_check_store();
25900 +
25901 + /* send the cpu to sleep... */
25902 +
25903 + s3c_pm_arch_stop_clocks();
25904 +
25905 + /* s3c2410_cpu_save will also act as our return point from when
25906 + * we resume as it saves its own register state, so use the return
25907 + * code to differentiate return from save and return from sleep */
25908 +
25909 + if (s3c_cpu_save(regs_save) == 0) {
25910 + flush_cache_all();
25911 + pm_cpu_sleep();
25912 + }
25913 +
25914 + /* restore the cpu state using the kernel's cpu init code. */
25915 +
25916 + cpu_init();
25917 +
25918 + /* restore the system state */
25919 +
25920 + s3c_pm_restore_core();
25921 + s3c_pm_restore_uarts();
25922 + s3c_pm_restore_gpios();
25923 +
25924 + s3c_pm_debug_init();
25925 +
25926 + /* check what irq (if any) restored the system */
25927 +
25928 + s3c_pm_arch_show_resume_irqs();
25929 +
25930 + S3C_PMDBG("%s: post sleep, preparing to return\n", __func__);
25931 +
25932 + s3c_pm_check_restore();
25933 +
25934 + /* LEDs should now be 1110 */
25935 + s3c_pm_debug_smdkled(1 << 1, 0);
25936 +
25937 + /* ok, let's return from sleep */
25938 +
25939 + S3C_PMDBG("S3C PM Resume (post-restore)\n");
25940 + return 0;
25941 +}
25942 +
25943 +static int s3c_pm_prepare(void)
25944 +{
25945 + /* prepare check area if configured */
25946 +
25947 + s3c_pm_check_prepare();
25948 + return 0;
25949 +}
25950 +
25951 +static void s3c_pm_finish(void)
25952 +{
25953 + s3c_pm_check_cleanup();
25954 +}
25955 +
25956 +static int s3c_pm_begin(suspend_state_t state)
25957 +{
25958 + int ret = 0;
25959 +
25960 +#ifdef CONFIG_REGULATOR
25961 + ret = regulator_suspend_prepare(state);
25962 +#endif
25963 + return ret;
25964 +}
25965 +
25966 +static struct platform_suspend_ops s3c_pm_ops = {
25967 + .enter = s3c_pm_enter,
25968 + .prepare = s3c_pm_prepare,
25969 + .finish = s3c_pm_finish,
25970 + .valid = suspend_valid_only_mem,
25971 + .begin = s3c_pm_begin,
25972 +};
25973 +
25974 +/* s3c_pm_init
25975 + *
25976 + * Attach the power management functions. This should be called
25977 + * from the board specific initialisation if the board supports
25978 + * it.
25979 +*/
25980 +
25981 +int __init s3c_pm_init(void)
25982 +{
25983 + printk("S3C Power Management, Copyright 2004 Simtec Electronics\n");
25984 +
25985 + suspend_set_ops(&s3c_pm_ops);
25986 + return 0;
25987 +}
25988 Index: linux-2.6.28/arch/arm/plat-s3c/pm-check.c
25989 ===================================================================
25990 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
25991 +++ linux-2.6.28/arch/arm/plat-s3c/pm-check.c 2009-01-02 00:01:56.000000000 +0100
25992 @@ -0,0 +1,242 @@
25993 +/* linux/arch/arm/plat-s3c/pm-check.c
25994 + * originally in linux/arch/arm/plat-s3c24xx/pm.c
25995 + *
25996 + * Copyright (c) 2004,2006,2008 Simtec Electronics
25997 + * http://armlinux.simtec.co.uk
25998 + * Ben Dooks <ben@simtec.co.uk>
25999 + *
26000 + * S3C Power Mangament - suspend/resume memory corruptiuon check.
26001 + *
26002 + * This program is free software; you can redistribute it and/or modify
26003 + * it under the terms of the GNU General Public License version 2 as
26004 + * published by the Free Software Foundation.
26005 +*/
26006 +
26007 +#include <linux/kernel.h>
26008 +#include <linux/suspend.h>
26009 +#include <linux/init.h>
26010 +#include <linux/crc32.h>
26011 +#include <linux/ioport.h>
26012 +
26013 +#include <plat/pm.h>
26014 +
26015 +#if CONFIG_S3C2410_PM_CHECK_CHUNKSIZE < 1
26016 +#error CONFIG_S3C2410_PM_CHECK_CHUNKSIZE must be a positive non-zero value
26017 +#endif
26018 +
26019 +/* suspend checking code...
26020 + *
26021 + * this next area does a set of crc checks over all the installed
26022 + * memory, so the system can verify if the resume was ok.
26023 + *
26024 + * CONFIG_S3C2410_PM_CHECK_CHUNKSIZE defines the block-size for the CRC,
26025 + * increasing it will mean that the area corrupted will be less easy to spot,
26026 + * and reducing the size will cause the CRC save area to grow
26027 +*/
26028 +
26029 +#define CHECK_CHUNKSIZE (CONFIG_S3C2410_PM_CHECK_CHUNKSIZE * 1024)
26030 +
26031 +static u32 crc_size; /* size needed for the crc block */
26032 +static u32 *crcs; /* allocated over suspend/resume */
26033 +
26034 +typedef u32 *(run_fn_t)(struct resource *ptr, u32 *arg);
26035 +
26036 +/* s3c_pm_run_res
26037 + *
26038 + * go through the given resource list, and look for system ram
26039 +*/
26040 +
26041 +static void s3c_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg)
26042 +{
26043 + while (ptr != NULL) {
26044 + if (ptr->child != NULL)
26045 + s3c_pm_run_res(ptr->child, fn, arg);
26046 +
26047 + if ((ptr->flags & IORESOURCE_MEM) &&
26048 + strcmp(ptr->name, "System RAM") == 0) {
26049 + S3C_PMDBG("Found system RAM at %08lx..%08lx\n",
26050 + (unsigned long)ptr->start,
26051 + (unsigned long)ptr->end);
26052 + arg = (fn)(ptr, arg);
26053 + }
26054 +
26055 + ptr = ptr->sibling;
26056 + }
26057 +}
26058 +
26059 +static void s3c_pm_run_sysram(run_fn_t fn, u32 *arg)
26060 +{
26061 + s3c_pm_run_res(&iomem_resource, fn, arg);
26062 +}
26063 +
26064 +static u32 *s3c_pm_countram(struct resource *res, u32 *val)
26065 +{
26066 + u32 size = (u32)(res->end - res->start)+1;
26067 +
26068 + size += CHECK_CHUNKSIZE-1;
26069 + size /= CHECK_CHUNKSIZE;
26070 +
26071 + S3C_PMDBG("Area %08lx..%08lx, %d blocks\n",
26072 + (unsigned long)res->start, (unsigned long)res->end, size);
26073 +
26074 + *val += size * sizeof(u32);
26075 + return val;
26076 +}
26077 +
26078 +/* s3c_pm_prepare_check
26079 + *
26080 + * prepare the necessary information for creating the CRCs. This
26081 + * must be done before the final save, as it will require memory
26082 + * allocating, and thus touching bits of the kernel we do not
26083 + * know about.
26084 +*/
26085 +
26086 +void s3c_pm_check_prepare(void)
26087 +{
26088 + crc_size = 0;
26089 +
26090 + s3c_pm_run_sysram(s3c_pm_countram, &crc_size);
26091 +
26092 + S3C_PMDBG("s3c_pm_prepare_check: %u checks needed\n", crc_size);
26093 +
26094 + crcs = kmalloc(crc_size+4, GFP_KERNEL);
26095 + if (crcs == NULL)
26096 + printk(KERN_ERR "Cannot allocated CRC save area\n");
26097 +}
26098 +
26099 +static u32 *s3c_pm_makecheck(struct resource *res, u32 *val)
26100 +{
26101 + unsigned long addr, left;
26102 +
26103 + for (addr = res->start; addr < res->end;
26104 + addr += CHECK_CHUNKSIZE) {
26105 + left = res->end - addr;
26106 +
26107 + if (left > CHECK_CHUNKSIZE)
26108 + left = CHECK_CHUNKSIZE;
26109 +
26110 + *val = crc32_le(~0, phys_to_virt(addr), left);
26111 + val++;
26112 + }
26113 +
26114 + return val;
26115 +}
26116 +
26117 +/* s3c_pm_check_store
26118 + *
26119 + * compute the CRC values for the memory blocks before the final
26120 + * sleep.
26121 +*/
26122 +
26123 +void s3c_pm_check_store(void)
26124 +{
26125 + if (crcs != NULL)
26126 + s3c_pm_run_sysram(s3c_pm_makecheck, crcs);
26127 +}
26128 +
26129 +/* in_region
26130 + *
26131 + * return TRUE if the area defined by ptr..ptr+size contains the
26132 + * what..what+whatsz
26133 +*/
26134 +
26135 +static inline int in_region(void *ptr, int size, void *what, size_t whatsz)
26136 +{
26137 + if ((what+whatsz) < ptr)
26138 + return 0;
26139 +
26140 + if (what > (ptr+size))
26141 + return 0;
26142 +
26143 + return 1;
26144 +}
26145 +
26146 +/**
26147 + * s3c_pm_runcheck() - helper to check a resource on restore.
26148 + * @res: The resource to check
26149 + * @vak: Pointer to list of CRC32 values to check.
26150 + *
26151 + * Called from the s3c_pm_check_restore() via s3c_pm_run_sysram(), this
26152 + * function runs the given memory resource checking it against the stored
26153 + * CRC to ensure that memory is restored. The function tries to skip as
26154 + * many of the areas used during the suspend process.
26155 + */
26156 +static u32 *s3c_pm_runcheck(struct resource *res, u32 *val)
26157 +{
26158 + void *save_at = phys_to_virt(s3c_sleep_save_phys);
26159 + unsigned long addr;
26160 + unsigned long left;
26161 + void *stkpage;
26162 + void *ptr;
26163 + u32 calc;
26164 +
26165 + stkpage = (void *)((u32)&calc & ~PAGE_MASK);
26166 +
26167 + for (addr = res->start; addr < res->end;
26168 + addr += CHECK_CHUNKSIZE) {
26169 + left = res->end - addr;
26170 +
26171 + if (left > CHECK_CHUNKSIZE)
26172 + left = CHECK_CHUNKSIZE;
26173 +
26174 + ptr = phys_to_virt(addr);
26175 +
26176 + if (in_region(ptr, left, stkpage, 4096)) {
26177 + S3C_PMDBG("skipping %08lx, has stack in\n", addr);
26178 + goto skip_check;
26179 + }
26180 +
26181 + if (in_region(ptr, left, crcs, crc_size)) {
26182 + S3C_PMDBG("skipping %08lx, has crc block in\n", addr);
26183 + goto skip_check;
26184 + }
26185 +
26186 + if (in_region(ptr, left, save_at, 32*4 )) {
26187 + S3C_PMDBG("skipping %08lx, has save block in\n", addr);
26188 + goto skip_check;
26189 + }
26190 +
26191 + /* calculate and check the checksum */
26192 +
26193 + calc = crc32_le(~0, ptr, left);
26194 + if (calc != *val) {
26195 + printk(KERN_ERR "Restore CRC error at "
26196 + "%08lx (%08x vs %08x)\n", addr, calc, *val);
26197 +
26198 + S3C_PMDBG("Restore CRC error at %08lx (%08x vs %08x)\n",
26199 + addr, calc, *val);
26200 + }
26201 +
26202 + skip_check:
26203 + val++;
26204 + }
26205 +
26206 + return val;
26207 +}
26208 +
26209 +/**
26210 + * s3c_pm_check_restore() - memory check called on resume
26211 + *
26212 + * check the CRCs after the restore event and free the memory used
26213 + * to hold them
26214 +*/
26215 +void s3c_pm_check_restore(void)
26216 +{
26217 + if (crcs != NULL)
26218 + s3c_pm_run_sysram(s3c_pm_runcheck, crcs);
26219 +}
26220 +
26221 +/**
26222 + * s3c_pm_check_cleanup() - free memory resources
26223 + *
26224 + * Free the resources that where allocated by the suspend
26225 + * memory check code. We do this separately from the
26226 + * s3c_pm_check_restore() function as we cannot call any
26227 + * functions that might sleep during that resume.
26228 + */
26229 +void s3c_pm_check_cleanup(void)
26230 +{
26231 + kfree(crcs);
26232 + crcs = NULL;
26233 +}
26234 +
26235 Index: linux-2.6.28/arch/arm/plat-s3c/pm-gpio.c
26236 ===================================================================
26237 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
26238 +++ linux-2.6.28/arch/arm/plat-s3c/pm-gpio.c 2009-01-02 00:01:56.000000000 +0100
26239 @@ -0,0 +1,378 @@
26240 +/* linux/arch/arm/plat-s3c/pm-gpio.c
26241 + *
26242 + * Copyright 2008 Openmoko, Inc.
26243 + * Copyright 2008 Simtec Electronics
26244 + * Ben Dooks <ben@simtec.co.uk>
26245 + * http://armlinux.simtec.co.uk/
26246 + *
26247 + * S3C series GPIO PM code
26248 + *
26249 + * This program is free software; you can redistribute it and/or modify
26250 + * it under the terms of the GNU General Public License version 2 as
26251 + * published by the Free Software Foundation.
26252 +*/
26253 +
26254 +#include <linux/kernel.h>
26255 +#include <linux/init.h>
26256 +#include <linux/io.h>
26257 +#include <linux/gpio.h>
26258 +
26259 +#include <mach/gpio-core.h>
26260 +#include <plat/pm.h>
26261 +
26262 +/* PM GPIO helpers */
26263 +
26264 +#define OFFS_CON (0x00)
26265 +#define OFFS_DAT (0X04)
26266 +#define OFFS_UP (0X08)
26267 +
26268 +static void s3c_gpio_pm_1bit_save(struct s3c_gpio_chip *chip)
26269 +{
26270 + chip->pm_save[0] = __raw_readl(chip->base + OFFS_CON);
26271 + chip->pm_save[1] = __raw_readl(chip->base + OFFS_DAT);
26272 +}
26273 +
26274 +static void s3c_gpio_pm_1bit_resume(struct s3c_gpio_chip *chip)
26275 +{
26276 + void __iomem *base = chip->base;
26277 + u32 old_gpcon = __raw_readl(base + OFFS_CON);
26278 + u32 old_gpdat = __raw_readl(base + OFFS_DAT);
26279 + u32 gps_gpcon = chip->pm_save[0];
26280 + u32 gps_gpdat = chip->pm_save[1];
26281 + u32 gpcon;
26282 +
26283 + /* GPACON only has one bit per control / data and no PULLUPs.
26284 + * GPACON[x] = 0 => Output, 1 => SFN */
26285 +
26286 + /* first set all SFN bits to SFN */
26287 +
26288 + gpcon = old_gpcon | gps_gpcon;
26289 + __raw_writel(gpcon, base + OFFS_CON);
26290 +
26291 + /* now set all the other bits */
26292 +
26293 + __raw_writel(gps_gpdat, base + OFFS_DAT);
26294 + __raw_writel(gps_gpcon, base + OFFS_CON);
26295 +
26296 + S3C_PMDBG("%s: CON %08x => %08x, DAT %08x => %08x\n",
26297 + chip->chip.label, old_gpcon, gps_gpcon, old_gpdat, gps_gpdat);
26298 +}
26299 +
26300 +struct s3c_gpio_pm s3c_gpio_pm_1bit = {
26301 + .save = s3c_gpio_pm_1bit_save,
26302 + .resume = s3c_gpio_pm_1bit_resume,
26303 +};
26304 +
26305 +static void s3c_gpio_pm_2bit_save(struct s3c_gpio_chip *chip)
26306 +{
26307 + chip->pm_save[0] = __raw_readl(chip->base + OFFS_CON);
26308 + chip->pm_save[1] = __raw_readl(chip->base + OFFS_DAT);
26309 + chip->pm_save[2] = __raw_readl(chip->base + OFFS_UP);
26310 +}
26311 +
26312 +/* Test whether the given masked+shifted bits of an GPIO configuration
26313 + * are one of the SFN (special function) modes. */
26314 +
26315 +static inline int is_sfn(unsigned long con)
26316 +{
26317 + return con >= 2;
26318 +}
26319 +
26320 +/* Test if the given masked+shifted GPIO configuration is an input */
26321 +
26322 +static inline int is_in(unsigned long con)
26323 +{
26324 + return con == 0;
26325 +}
26326 +
26327 +/* Test if the given masked+shifted GPIO configuration is an output */
26328 +
26329 +static inline int is_out(unsigned long con)
26330 +{
26331 + return con == 1;
26332 +}
26333 +
26334 +/**
26335 + * s3c_gpio_pm_2bit_resume() - restore the given GPIO bank
26336 + * @chip: The chip information to resume.
26337 + *
26338 + * Restore one of the GPIO banks that was saved during suspend. This is
26339 + * not as simple as once thought, due to the possibility of glitches
26340 + * from the order that the CON and DAT registers are set in.
26341 + *
26342 + * The three states the pin can be are {IN,OUT,SFN} which gives us 9
26343 + * combinations of changes to check. Three of these, if the pin stays
26344 + * in the same configuration can be discounted. This leaves us with
26345 + * the following:
26346 + *
26347 + * { IN => OUT } Change DAT first
26348 + * { IN => SFN } Change CON first
26349 + * { OUT => SFN } Change CON first, so new data will not glitch
26350 + * { OUT => IN } Change CON first, so new data will not glitch
26351 + * { SFN => IN } Change CON first
26352 + * { SFN => OUT } Change DAT first, so new data will not glitch [1]
26353 + *
26354 + * We do not currently deal with the UP registers as these control
26355 + * weak resistors, so a small delay in change should not need to bring
26356 + * these into the calculations.
26357 + *
26358 + * [1] this assumes that writing to a pin DAT whilst in SFN will set the
26359 + * state for when it is next output.
26360 + */
26361 +static void s3c_gpio_pm_2bit_resume(struct s3c_gpio_chip *chip)
26362 +{
26363 + void __iomem *base = chip->base;
26364 + u32 old_gpcon = __raw_readl(base + OFFS_CON);
26365 + u32 old_gpdat = __raw_readl(base + OFFS_DAT);
26366 + u32 gps_gpcon = chip->pm_save[0];
26367 + u32 gps_gpdat = chip->pm_save[1];
26368 + u32 gpcon, old, new, mask;
26369 + u32 change_mask = 0x0;
26370 + int nr;
26371 +
26372 + /* restore GPIO pull-up settings */
26373 + __raw_writel(chip->pm_save[2], base + OFFS_UP);
26374 +
26375 + /* Create a change_mask of all the items that need to have
26376 + * their CON value changed before their DAT value, so that
26377 + * we minimise the work between the two settings.
26378 + */
26379 +
26380 + for (nr = 0, mask = 0x03; nr < 32; nr += 2, mask <<= 2) {
26381 + old = (old_gpcon & mask) >> nr;
26382 + new = (gps_gpcon & mask) >> nr;
26383 +
26384 + /* If there is no change, then skip */
26385 +
26386 + if (old == new)
26387 + continue;
26388 +
26389 + /* If both are special function, then skip */
26390 +
26391 + if (is_sfn(old) && is_sfn(new))
26392 + continue;
26393 +
26394 + /* Change is IN => OUT, do not change now */
26395 +
26396 + if (is_in(old) && is_out(new))
26397 + continue;
26398 +
26399 + /* Change is SFN => OUT, do not change now */
26400 +
26401 + if (is_sfn(old) && is_out(new))
26402 + continue;
26403 +
26404 + /* We should now be at the case of IN=>SFN,
26405 + * OUT=>SFN, OUT=>IN, SFN=>IN. */
26406 +
26407 + change_mask |= mask;
26408 + }
26409 +
26410 +
26411 + /* Write the new CON settings */
26412 +
26413 + gpcon = old_gpcon & ~change_mask;
26414 + gpcon |= gps_gpcon & change_mask;
26415 +
26416 + __raw_writel(gpcon, base + OFFS_CON);
26417 +
26418 + /* Now change any items that require DAT,CON */
26419 +
26420 + __raw_writel(gps_gpdat, base + OFFS_DAT);
26421 + __raw_writel(gps_gpcon, base + OFFS_CON);
26422 +
26423 + S3C_PMDBG("%s: CON %08x => %08x, DAT %08x => %08x\n",
26424 + chip->chip.label, old_gpcon, gps_gpcon, old_gpdat, gps_gpdat);
26425 +}
26426 +
26427 +struct s3c_gpio_pm s3c_gpio_pm_2bit = {
26428 + .save = s3c_gpio_pm_2bit_save,
26429 + .resume = s3c_gpio_pm_2bit_resume,
26430 +};
26431 +
26432 +#ifdef CONFIG_ARCH_S3C64XX
26433 +static void s3c_gpio_pm_4bit_save(struct s3c_gpio_chip *chip)
26434 +{
26435 + chip->pm_save[1] = __raw_readl(chip->base + OFFS_CON);
26436 + chip->pm_save[2] = __raw_readl(chip->base + OFFS_DAT);
26437 + chip->pm_save[3] = __raw_readl(chip->base + OFFS_UP);
26438 +
26439 + if (chip->chip.ngpio > 8)
26440 + chip->pm_save[0] = __raw_readl(chip->base - 4);
26441 +}
26442 +
26443 +static u32 s3c_gpio_pm_4bit_mask(u32 old_gpcon, u32 gps_gpcon)
26444 +{
26445 + u32 old, new, mask;
26446 + u32 change_mask = 0x0;
26447 + int nr;
26448 +
26449 + for (nr = 0, mask = 0x0f; nr < 16; nr += 4, mask <<= 4) {
26450 + old = (old_gpcon & mask) >> nr;
26451 + new = (gps_gpcon & mask) >> nr;
26452 +
26453 + /* If there is no change, then skip */
26454 +
26455 + if (old == new)
26456 + continue;
26457 +
26458 + /* If both are special function, then skip */
26459 +
26460 + if (is_sfn(old) && is_sfn(new))
26461 + continue;
26462 +
26463 + /* Change is IN => OUT, do not change now */
26464 +
26465 + if (is_in(old) && is_out(new))
26466 + continue;
26467 +
26468 + /* Change is SFN => OUT, do not change now */
26469 +
26470 + if (is_sfn(old) && is_out(new))
26471 + continue;
26472 +
26473 + /* We should now be at the case of IN=>SFN,
26474 + * OUT=>SFN, OUT=>IN, SFN=>IN. */
26475 +
26476 + change_mask |= mask;
26477 + }
26478 +
26479 + return change_mask;
26480 +}
26481 +
26482 +static void s3c_gpio_pm_4bit_con(struct s3c_gpio_chip *chip, int index)
26483 +{
26484 + void __iomem *con = chip->base + (index * 4);
26485 + u32 old_gpcon = __raw_readl(con);
26486 + u32 gps_gpcon = chip->pm_save[index + 1];
26487 + u32 gpcon, mask;
26488 +
26489 + mask = s3c_gpio_pm_4bit_mask(old_gpcon, gps_gpcon);
26490 +
26491 + gpcon = old_gpcon & ~mask;
26492 + gpcon |= gps_gpcon & mask;
26493 +
26494 + __raw_writel(gpcon, con);
26495 +}
26496 +
26497 +static void s3c_gpio_pm_4bit_resume(struct s3c_gpio_chip *chip)
26498 +{
26499 + void __iomem *base = chip->base;
26500 + u32 old_gpcon[2];
26501 + u32 old_gpdat = __raw_readl(base + OFFS_DAT);
26502 + u32 gps_gpdat = chip->pm_save[2];
26503 +
26504 + /* First, modify the CON settings */
26505 +
26506 + old_gpcon[0] = 0;
26507 + old_gpcon[1] = __raw_readl(base + OFFS_CON);
26508 +
26509 + s3c_gpio_pm_4bit_con(chip, 0);
26510 + if (chip->chip.ngpio > 8) {
26511 + old_gpcon[0] = __raw_readl(base - 4);
26512 + s3c_gpio_pm_4bit_con(chip, -1);
26513 + }
26514 +
26515 + /* Now change the configurations that require DAT,CON */
26516 +
26517 + __raw_writel(chip->pm_save[2], base + OFFS_DAT);
26518 + __raw_writel(chip->pm_save[1], base + OFFS_CON);
26519 + if (chip->chip.ngpio > 8)
26520 + __raw_writel(chip->pm_save[0], base - 4);
26521 +
26522 + __raw_writel(chip->pm_save[2], base + OFFS_DAT);
26523 + __raw_writel(chip->pm_save[3], base + OFFS_UP);
26524 +
26525 + if (chip->chip.ngpio > 8) {
26526 + S3C_PMDBG("%s: CON4 %08x,%08x => %08x,%08x, DAT %08x => %08x\n",
26527 + chip->chip.label, old_gpcon[0], old_gpcon[1],
26528 + __raw_readl(base - 4),
26529 + __raw_readl(base + OFFS_CON),
26530 + old_gpdat, gps_gpdat);
26531 + } else
26532 + S3C_PMDBG("%s: CON4 %08x => %08x, DAT %08x => %08x\n",
26533 + chip->chip.label, old_gpcon[1],
26534 + __raw_readl(base + OFFS_CON),
26535 + old_gpdat, gps_gpdat);
26536 +}
26537 +
26538 +struct s3c_gpio_pm s3c_gpio_pm_4bit = {
26539 + .save = s3c_gpio_pm_4bit_save,
26540 + .resume = s3c_gpio_pm_4bit_resume,
26541 +};
26542 +#endif /* CONFIG_ARCH_S3C64XX */
26543 +
26544 +/**
26545 + * s3c_pm_save_gpio() - save gpio chip data for suspend
26546 + * @ourchip: The chip for suspend.
26547 + */
26548 +static void s3c_pm_save_gpio(struct s3c_gpio_chip *ourchip)
26549 +{
26550 + struct s3c_gpio_pm *pm = ourchip->pm;
26551 +
26552 + if (pm == NULL || pm->save == NULL)
26553 + S3C_PMDBG("%s: no pm for %s\n", __func__, ourchip->chip.label);
26554 + else
26555 + pm->save(ourchip);
26556 +}
26557 +
26558 +/**
26559 + * s3c_pm_save_gpios() - Save the state of the GPIO banks.
26560 + *
26561 + * For all the GPIO banks, save the state of each one ready for going
26562 + * into a suspend mode.
26563 + */
26564 +void s3c_pm_save_gpios(void)
26565 +{
26566 + struct s3c_gpio_chip *ourchip;
26567 + unsigned int gpio_nr;
26568 +
26569 + for (gpio_nr = 0; gpio_nr < S3C_GPIO_END; gpio_nr++) {
26570 + ourchip = s3c_gpiolib_getchip(gpio_nr);
26571 + if (!ourchip)
26572 + continue;
26573 +
26574 + s3c_pm_save_gpio(ourchip);
26575 +
26576 + S3C_PMDBG("%s: save %08x,%08x,%08x,%08x\n",
26577 + ourchip->chip.label,
26578 + ourchip->pm_save[0],
26579 + ourchip->pm_save[1],
26580 + ourchip->pm_save[2],
26581 + ourchip->pm_save[3]);
26582 +
26583 + gpio_nr += ourchip->chip.ngpio;
26584 + gpio_nr += CONFIG_S3C_GPIO_SPACE;
26585 + }
26586 +}
26587 +
26588 +/**
26589 + * s3c_pm_resume_gpio() - restore gpio chip data after suspend
26590 + * @ourchip: The suspended chip.
26591 + */
26592 +static void s3c_pm_resume_gpio(struct s3c_gpio_chip *ourchip)
26593 +{
26594 + struct s3c_gpio_pm *pm = ourchip->pm;
26595 +
26596 + if (pm == NULL || pm->resume == NULL)
26597 + S3C_PMDBG("%s: no pm for %s\n", __func__, ourchip->chip.label);
26598 + else
26599 + pm->resume(ourchip);
26600 +}
26601 +
26602 +void s3c_pm_restore_gpios(void)
26603 +{
26604 + struct s3c_gpio_chip *ourchip;
26605 + unsigned int gpio_nr;
26606 +
26607 + for (gpio_nr = 0; gpio_nr < S3C_GPIO_END; gpio_nr++) {
26608 + ourchip = s3c_gpiolib_getchip(gpio_nr);
26609 + if (!ourchip)
26610 + continue;
26611 +
26612 + s3c_pm_resume_gpio(ourchip);
26613 +
26614 + gpio_nr += ourchip->chip.ngpio;
26615 + gpio_nr += CONFIG_S3C_GPIO_SPACE;
26616 + }
26617 +}
26618 Index: linux-2.6.28/arch/arm/plat-s3c/pwm-clock.c
26619 ===================================================================
26620 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
26621 +++ linux-2.6.28/arch/arm/plat-s3c/pwm-clock.c 2009-01-02 00:01:56.000000000 +0100
26622 @@ -0,0 +1,463 @@
26623 +/* linux/arch/arm/plat-s3c24xx/pwm-clock.c
26624 + *
26625 + * Copyright (c) 2007 Simtec Electronics
26626 + * Copyright (c) 2007, 2008 Ben Dooks
26627 + * Ben Dooks <ben-linux@fluff.org>
26628 + *
26629 + * This program is free software; you can redistribute it and/or modify
26630 + * it under the terms of the GNU General Public License as published by
26631 + * the Free Software Foundation; either version 2 of the License.
26632 +*/
26633 +
26634 +#include <linux/init.h>
26635 +#include <linux/module.h>
26636 +#include <linux/kernel.h>
26637 +#include <linux/list.h>
26638 +#include <linux/errno.h>
26639 +#include <linux/log2.h>
26640 +#include <linux/clk.h>
26641 +#include <linux/err.h>
26642 +#include <linux/io.h>
26643 +
26644 +#include <mach/hardware.h>
26645 +#include <mach/map.h>
26646 +#include <asm/irq.h>
26647 +
26648 +#include <plat/clock.h>
26649 +#include <plat/cpu.h>
26650 +
26651 +#include <plat/regs-timer.h>
26652 +#include <mach/pwm-clock.h>
26653 +
26654 +/* Each of the timers 0 through 5 go through the following
26655 + * clock tree, with the inputs depending on the timers.
26656 + *
26657 + * pclk ---- [ prescaler 0 ] -+---> timer 0
26658 + * +---> timer 1
26659 + *
26660 + * pclk ---- [ prescaler 1 ] -+---> timer 2
26661 + * +---> timer 3
26662 + * \---> timer 4
26663 + *
26664 + * Which are fed into the timers as so:
26665 + *
26666 + * prescaled 0 ---- [ div 2,4,8,16 ] ---\
26667 + * [mux] -> timer 0
26668 + * tclk 0 ------------------------------/
26669 + *
26670 + * prescaled 0 ---- [ div 2,4,8,16 ] ---\
26671 + * [mux] -> timer 1
26672 + * tclk 0 ------------------------------/
26673 + *
26674 + *
26675 + * prescaled 1 ---- [ div 2,4,8,16 ] ---\
26676 + * [mux] -> timer 2
26677 + * tclk 1 ------------------------------/
26678 + *
26679 + * prescaled 1 ---- [ div 2,4,8,16 ] ---\
26680 + * [mux] -> timer 3
26681 + * tclk 1 ------------------------------/
26682 + *
26683 + * prescaled 1 ---- [ div 2,4,8, 16 ] --\
26684 + * [mux] -> timer 4
26685 + * tclk 1 ------------------------------/
26686 + *
26687 + * Since the mux and the divider are tied together in the
26688 + * same register space, it is impossible to set the parent
26689 + * and the rate at the same time. To avoid this, we add an
26690 + * intermediate 'prescaled-and-divided' clock to select
26691 + * as the parent for the timer input clock called tdiv.
26692 + *
26693 + * prescaled clk --> pwm-tdiv ---\
26694 + * [ mux ] --> timer X
26695 + * tclk -------------------------/
26696 +*/
26697 +
26698 +static struct clk clk_timer_scaler[];
26699 +
26700 +static unsigned long clk_pwm_scaler_get_rate(struct clk *clk)
26701 +{
26702 + unsigned long tcfg0 = __raw_readl(S3C2410_TCFG0);
26703 +
26704 + if (clk == &clk_timer_scaler[1]) {
26705 + tcfg0 &= S3C2410_TCFG_PRESCALER1_MASK;
26706 + tcfg0 >>= S3C2410_TCFG_PRESCALER1_SHIFT;
26707 + } else {
26708 + tcfg0 &= S3C2410_TCFG_PRESCALER0_MASK;
26709 + }
26710 +
26711 + return clk_get_rate(clk->parent) / (tcfg0 + 1);
26712 +}
26713 +
26714 +static unsigned long clk_pwm_scaler_round_rate(struct clk *clk,
26715 + unsigned long rate)
26716 +{
26717 + unsigned long parent_rate = clk_get_rate(clk->parent);
26718 + unsigned long divisor = parent_rate / rate;
26719 +
26720 + if (divisor > 256)
26721 + divisor = 256;
26722 + else if (divisor < 2)
26723 + divisor = 2;
26724 +
26725 + return parent_rate / divisor;
26726 +}
26727 +
26728 +static int clk_pwm_scaler_set_rate(struct clk *clk, unsigned long rate)
26729 +{
26730 + unsigned long round = clk_pwm_scaler_round_rate(clk, rate);
26731 + unsigned long tcfg0;
26732 + unsigned long divisor;
26733 + unsigned long flags;
26734 +
26735 + divisor = clk_get_rate(clk->parent) / round;
26736 + divisor--;
26737 +
26738 + local_irq_save(flags);
26739 + tcfg0 = __raw_readl(S3C2410_TCFG0);
26740 +
26741 + if (clk == &clk_timer_scaler[1]) {
26742 + tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
26743 + tcfg0 |= divisor << S3C2410_TCFG_PRESCALER1_SHIFT;
26744 + } else {
26745 + tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
26746 + tcfg0 |= divisor;
26747 + }
26748 +
26749 + __raw_writel(tcfg0, S3C2410_TCFG0);
26750 + local_irq_restore(flags);
26751 +
26752 + return 0;
26753 +}
26754 +
26755 +static struct clk clk_timer_scaler[] = {
26756 + [0] = {
26757 + .name = "pwm-scaler0",
26758 + .id = -1,
26759 + .get_rate = clk_pwm_scaler_get_rate,
26760 + .set_rate = clk_pwm_scaler_set_rate,
26761 + .round_rate = clk_pwm_scaler_round_rate,
26762 + },
26763 + [1] = {
26764 + .name = "pwm-scaler1",
26765 + .id = -1,
26766 + .get_rate = clk_pwm_scaler_get_rate,
26767 + .set_rate = clk_pwm_scaler_set_rate,
26768 + .round_rate = clk_pwm_scaler_round_rate,
26769 + },
26770 +};
26771 +
26772 +static struct clk clk_timer_tclk[] = {
26773 + [0] = {
26774 + .name = "pwm-tclk0",
26775 + .id = -1,
26776 + },
26777 + [1] = {
26778 + .name = "pwm-tclk1",
26779 + .id = -1,
26780 + },
26781 +};
26782 +
26783 +struct pwm_tdiv_clk {
26784 + struct clk clk;
26785 + unsigned int divisor;
26786 +};
26787 +
26788 +static inline struct pwm_tdiv_clk *to_tdiv(struct clk *clk)
26789 +{
26790 + return container_of(clk, struct pwm_tdiv_clk, clk);
26791 +}
26792 +
26793 +static unsigned long clk_pwm_tdiv_get_rate(struct clk *clk)
26794 +{
26795 + unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1);
26796 + unsigned int divisor;
26797 +
26798 + tcfg1 >>= S3C2410_TCFG1_SHIFT(clk->id);
26799 + tcfg1 &= S3C2410_TCFG1_MUX_MASK;
26800 +
26801 + if (pwm_cfg_src_is_tclk(tcfg1))
26802 + divisor = to_tdiv(clk)->divisor;
26803 + else
26804 + divisor = tcfg_to_divisor(tcfg1);
26805 +
26806 + return clk_get_rate(clk->parent) / divisor;
26807 +}
26808 +
26809 +static unsigned long clk_pwm_tdiv_round_rate(struct clk *clk,
26810 + unsigned long rate)
26811 +{
26812 + unsigned long parent_rate;
26813 + unsigned long divisor;
26814 +
26815 + parent_rate = clk_get_rate(clk->parent);
26816 + divisor = parent_rate / rate;
26817 +
26818 + if (divisor <= 1 && pwm_tdiv_has_div1())
26819 + divisor = 1;
26820 + else if (divisor <= 2)
26821 + divisor = 2;
26822 + else if (divisor <= 4)
26823 + divisor = 4;
26824 + else if (divisor <= 8)
26825 + divisor = 8;
26826 + else
26827 + divisor = 16;
26828 +
26829 + return parent_rate / divisor;
26830 +}
26831 +
26832 +static unsigned long clk_pwm_tdiv_bits(struct pwm_tdiv_clk *divclk)
26833 +{
26834 + return pwm_tdiv_div_bits(divclk->divisor);
26835 +}
26836 +
26837 +static void clk_pwm_tdiv_update(struct pwm_tdiv_clk *divclk)
26838 +{
26839 + unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1);
26840 + unsigned long bits = clk_pwm_tdiv_bits(divclk);
26841 + unsigned long flags;
26842 + unsigned long shift = S3C2410_TCFG1_SHIFT(divclk->clk.id);
26843 +
26844 + local_irq_save(flags);
26845 +
26846 + tcfg1 = __raw_readl(S3C2410_TCFG1);
26847 + tcfg1 &= ~(S3C2410_TCFG1_MUX_MASK << shift);
26848 + tcfg1 |= bits << shift;
26849 + __raw_writel(tcfg1, S3C2410_TCFG1);
26850 +
26851 + local_irq_restore(flags);
26852 +}
26853 +
26854 +static int clk_pwm_tdiv_set_rate(struct clk *clk, unsigned long rate)
26855 +{
26856 + struct pwm_tdiv_clk *divclk = to_tdiv(clk);
26857 + unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1);
26858 + unsigned long parent_rate = clk_get_rate(clk->parent);
26859 + unsigned long divisor;
26860 +
26861 + tcfg1 >>= S3C2410_TCFG1_SHIFT(clk->id);
26862 + tcfg1 &= S3C2410_TCFG1_MUX_MASK;
26863 +
26864 + rate = clk_round_rate(clk, rate);
26865 + divisor = parent_rate / rate;
26866 +
26867 + if (divisor > 16)
26868 + return -EINVAL;
26869 +
26870 + divclk->divisor = divisor;
26871 +
26872 + /* Update the current MUX settings if we are currently
26873 + * selected as the clock source for this clock. */
26874 +
26875 + if (!pwm_cfg_src_is_tclk(tcfg1))
26876 + clk_pwm_tdiv_update(divclk);
26877 +
26878 + return 0;
26879 +}
26880 +
26881 +static struct pwm_tdiv_clk clk_timer_tdiv[] = {
26882 + [0] = {
26883 + .clk = {
26884 + .name = "pwm-tdiv",
26885 + .parent = &clk_timer_scaler[0],
26886 + .get_rate = clk_pwm_tdiv_get_rate,
26887 + .set_rate = clk_pwm_tdiv_set_rate,
26888 + .round_rate = clk_pwm_tdiv_round_rate,
26889 + },
26890 + },
26891 + [1] = {
26892 + .clk = {
26893 + .name = "pwm-tdiv",
26894 + .parent = &clk_timer_scaler[0],
26895 + .get_rate = clk_pwm_tdiv_get_rate,
26896 + .set_rate = clk_pwm_tdiv_set_rate,
26897 + .round_rate = clk_pwm_tdiv_round_rate,
26898 + }
26899 + },
26900 + [2] = {
26901 + .clk = {
26902 + .name = "pwm-tdiv",
26903 + .parent = &clk_timer_scaler[1],
26904 + .get_rate = clk_pwm_tdiv_get_rate,
26905 + .set_rate = clk_pwm_tdiv_set_rate,
26906 + .round_rate = clk_pwm_tdiv_round_rate,
26907 + },
26908 + },
26909 + [3] = {
26910 + .clk = {
26911 + .name = "pwm-tdiv",
26912 + .parent = &clk_timer_scaler[1],
26913 + .get_rate = clk_pwm_tdiv_get_rate,
26914 + .set_rate = clk_pwm_tdiv_set_rate,
26915 + .round_rate = clk_pwm_tdiv_round_rate,
26916 + },
26917 + },
26918 + [4] = {
26919 + .clk = {
26920 + .name = "pwm-tdiv",
26921 + .parent = &clk_timer_scaler[1],
26922 + .get_rate = clk_pwm_tdiv_get_rate,
26923 + .set_rate = clk_pwm_tdiv_set_rate,
26924 + .round_rate = clk_pwm_tdiv_round_rate,
26925 + },
26926 + },
26927 +};
26928 +
26929 +static int __init clk_pwm_tdiv_register(unsigned int id)
26930 +{
26931 + struct pwm_tdiv_clk *divclk = &clk_timer_tdiv[id];
26932 + unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1);
26933 +
26934 + tcfg1 >>= S3C2410_TCFG1_SHIFT(id);
26935 + tcfg1 &= S3C2410_TCFG1_MUX_MASK;
26936 +
26937 + divclk->clk.id = id;
26938 + divclk->divisor = tcfg_to_divisor(tcfg1);
26939 +
26940 + return s3c24xx_register_clock(&divclk->clk);
26941 +}
26942 +
26943 +static inline struct clk *s3c24xx_pwmclk_tclk(unsigned int id)
26944 +{
26945 + return (id >= 2) ? &clk_timer_tclk[1] : &clk_timer_tclk[0];
26946 +}
26947 +
26948 +static inline struct clk *s3c24xx_pwmclk_tdiv(unsigned int id)
26949 +{
26950 + return &clk_timer_tdiv[id].clk;
26951 +}
26952 +
26953 +static int clk_pwm_tin_set_parent(struct clk *clk, struct clk *parent)
26954 +{
26955 + unsigned int id = clk->id;
26956 + unsigned long tcfg1;
26957 + unsigned long flags;
26958 + unsigned long bits;
26959 + unsigned long shift = S3C2410_TCFG1_SHIFT(id);
26960 +
26961 + if (parent == s3c24xx_pwmclk_tclk(id))
26962 + bits = S3C_TCFG1_MUX_TCLK << shift;
26963 + else if (parent == s3c24xx_pwmclk_tdiv(id))
26964 + bits = clk_pwm_tdiv_bits(to_tdiv(parent)) << shift;
26965 + else
26966 + return -EINVAL;
26967 +
26968 + clk->parent = parent;
26969 +
26970 + local_irq_save(flags);
26971 +
26972 + tcfg1 = __raw_readl(S3C2410_TCFG1);
26973 + tcfg1 &= ~(S3C2410_TCFG1_MUX_MASK << shift);
26974 + __raw_writel(tcfg1 | bits, S3C2410_TCFG1);
26975 +
26976 + local_irq_restore(flags);
26977 +
26978 + return 0;
26979 +}
26980 +
26981 +static struct clk clk_tin[] = {
26982 + [0] = {
26983 + .name = "pwm-tin",
26984 + .id = 0,
26985 + .set_parent = clk_pwm_tin_set_parent,
26986 + },
26987 + [1] = {
26988 + .name = "pwm-tin",
26989 + .id = 1,
26990 + .set_parent = clk_pwm_tin_set_parent,
26991 + },
26992 + [2] = {
26993 + .name = "pwm-tin",
26994 + .id = 2,
26995 + .set_parent = clk_pwm_tin_set_parent,
26996 + },
26997 + [3] = {
26998 + .name = "pwm-tin",
26999 + .id = 3,
27000 + .set_parent = clk_pwm_tin_set_parent,
27001 + },
27002 + [4] = {
27003 + .name = "pwm-tin",
27004 + .id = 4,
27005 + .set_parent = clk_pwm_tin_set_parent,
27006 + },
27007 +};
27008 +
27009 +static __init int clk_pwm_tin_register(struct clk *pwm)
27010 +{
27011 + unsigned long tcfg1 = __raw_readl(S3C2410_TCFG1);
27012 + unsigned int id = pwm->id;
27013 +
27014 + struct clk *parent;
27015 + int ret;
27016 +
27017 + ret = s3c24xx_register_clock(pwm);
27018 + if (ret < 0)
27019 + return ret;
27020 +
27021 + tcfg1 >>= S3C2410_TCFG1_SHIFT(id);
27022 + tcfg1 &= S3C2410_TCFG1_MUX_MASK;
27023 +
27024 + if (pwm_cfg_src_is_tclk(tcfg1))
27025 + parent = s3c24xx_pwmclk_tclk(id);
27026 + else
27027 + parent = s3c24xx_pwmclk_tdiv(id);
27028 +
27029 + return clk_set_parent(pwm, parent);
27030 +}
27031 +
27032 +/**
27033 + * s3c_pwmclk_init() - initialise pwm clocks
27034 + *
27035 + * Initialise and register the clocks which provide the inputs for the
27036 + * pwm timer blocks.
27037 + *
27038 + * Note, this call is required by the time core, so must be called after
27039 + * the base clocks are added and before any of the initcalls are run.
27040 + */
27041 +__init void s3c_pwmclk_init(void)
27042 +{
27043 + struct clk *clk_timers;
27044 + unsigned int clk;
27045 + int ret;
27046 +
27047 + clk_timers = clk_get(NULL, "timers");
27048 + if (IS_ERR(clk_timers)) {
27049 + printk(KERN_ERR "%s: no parent clock\n", __func__);
27050 + return;
27051 + }
27052 +
27053 + for (clk = 0; clk < ARRAY_SIZE(clk_timer_scaler); clk++) {
27054 + clk_timer_scaler[clk].parent = clk_timers;
27055 + ret = s3c24xx_register_clock(&clk_timer_scaler[clk]);
27056 + if (ret < 0) {
27057 + printk(KERN_ERR "error adding pwm scaler%d clock\n", clk);
27058 + return;
27059 + }
27060 + }
27061 +
27062 + for (clk = 0; clk < ARRAY_SIZE(clk_timer_tclk); clk++) {
27063 + ret = s3c24xx_register_clock(&clk_timer_tclk[clk]);
27064 + if (ret < 0) {
27065 + printk(KERN_ERR "error adding pww tclk%d\n", clk);
27066 + return;
27067 + }
27068 + }
27069 +
27070 + for (clk = 0; clk < ARRAY_SIZE(clk_timer_tdiv); clk++) {
27071 + ret = clk_pwm_tdiv_register(clk);
27072 + if (ret < 0) {
27073 + printk(KERN_ERR "error adding pwm%d tdiv clock\n", clk);
27074 + return;
27075 + }
27076 + }
27077 +
27078 + for (clk = 0; clk < ARRAY_SIZE(clk_tin); clk++) {
27079 + ret = clk_pwm_tin_register(&clk_tin[clk]);
27080 + if (ret < 0) {
27081 + printk(KERN_ERR "error adding pwm%d tin clock\n", clk);
27082 + return;
27083 + }
27084 + }
27085 +}
27086 Index: linux-2.6.28/arch/arm/plat-s3c/time.c
27087 ===================================================================
27088 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
27089 +++ linux-2.6.28/arch/arm/plat-s3c/time.c 2009-01-02 00:01:56.000000000 +0100
27090 @@ -0,0 +1,285 @@
27091 +/* linux/arch/arm/plat-s3c24xx/time.c
27092 + *
27093 + * Copyright (C) 2003-2005 Simtec Electronics
27094 + * Ben Dooks, <ben@simtec.co.uk>
27095 + *
27096 + * This program is free software; you can redistribute it and/or modify
27097 + * it under the terms of the GNU General Public License as published by
27098 + * the Free Software Foundation; either version 2 of the License, or
27099 + * (at your option) any later version.
27100 + *
27101 + * This program is distributed in the hope that it will be useful,
27102 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
27103 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27104 + * GNU General Public License for more details.
27105 + *
27106 + * You should have received a copy of the GNU General Public License
27107 + * along with this program; if not, write to the Free Software
27108 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27109 + */
27110 +
27111 +#include <linux/kernel.h>
27112 +#include <linux/sched.h>
27113 +#include <linux/init.h>
27114 +#include <linux/interrupt.h>
27115 +#include <linux/irq.h>
27116 +#include <linux/err.h>
27117 +#include <linux/clk.h>
27118 +#include <linux/io.h>
27119 +#include <linux/platform_device.h>
27120 +
27121 +#include <asm/system.h>
27122 +#include <asm/leds.h>
27123 +#include <asm/mach-types.h>
27124 +
27125 +#include <asm/irq.h>
27126 +#include <mach/map.h>
27127 +#include <plat/regs-timer.h>
27128 +#include <mach/regs-irq.h>
27129 +#include <asm/mach/time.h>
27130 +#include <mach/tick.h>
27131 +
27132 +#include <plat/clock.h>
27133 +#include <plat/cpu.h>
27134 +
27135 +static unsigned long timer_startval;
27136 +static unsigned long timer_usec_ticks;
27137 +
27138 +#ifndef TICK_MAX
27139 +#define TICK_MAX (0xffff)
27140 +#endif
27141 +
27142 +#define TIMER_USEC_SHIFT 16
27143 +
27144 +/* we use the shifted arithmetic to work out the ratio of timer ticks
27145 + * to usecs, as often the peripheral clock is not a nice even multiple
27146 + * of 1MHz.
27147 + *
27148 + * shift of 14 and 15 are too low for the 12MHz, 16 seems to be ok
27149 + * for the current HZ value of 200 without producing overflows.
27150 + *
27151 + * Original patch by Dimitry Andric, updated by Ben Dooks
27152 +*/
27153 +
27154 +
27155 +/* timer_mask_usec_ticks
27156 + *
27157 + * given a clock and divisor, make the value to pass into timer_ticks_to_usec
27158 + * to scale the ticks into usecs
27159 +*/
27160 +
27161 +static inline unsigned long
27162 +timer_mask_usec_ticks(unsigned long scaler, unsigned long pclk)
27163 +{
27164 + unsigned long den = pclk / 1000;
27165 +
27166 + return ((1000 << TIMER_USEC_SHIFT) * scaler + (den >> 1)) / den;
27167 +}
27168 +
27169 +/* timer_ticks_to_usec
27170 + *
27171 + * convert timer ticks to usec.
27172 +*/
27173 +
27174 +static inline unsigned long timer_ticks_to_usec(unsigned long ticks)
27175 +{
27176 + unsigned long res;
27177 +
27178 + res = ticks * timer_usec_ticks;
27179 + res += 1 << (TIMER_USEC_SHIFT - 4); /* round up slightly */
27180 +
27181 + return res >> TIMER_USEC_SHIFT;
27182 +}
27183 +
27184 +/***
27185 + * Returns microsecond since last clock interrupt. Note that interrupts
27186 + * will have been disabled by do_gettimeoffset()
27187 + * IRQs are disabled before entering here from do_gettimeofday()
27188 + */
27189 +
27190 +static unsigned long s3c2410_gettimeoffset (void)
27191 +{
27192 + unsigned long tdone;
27193 + unsigned long tval;
27194 +
27195 + /* work out how many ticks have gone since last timer interrupt */
27196 +
27197 + tval = __raw_readl(S3C2410_TCNTO(4));
27198 + tdone = timer_startval - tval;
27199 +
27200 + /* check to see if there is an interrupt pending */
27201 +
27202 + if (s3c24xx_ostimer_pending()) {
27203 + /* re-read the timer, and try and fix up for the missed
27204 + * interrupt. Note, the interrupt may go off before the
27205 + * timer has re-loaded from wrapping.
27206 + */
27207 +
27208 + tval = __raw_readl(S3C2410_TCNTO(4));
27209 + tdone = timer_startval - tval;
27210 +
27211 + if (tval != 0)
27212 + tdone += timer_startval;
27213 + }
27214 +
27215 + return timer_ticks_to_usec(tdone);
27216 +}
27217 +
27218 +
27219 +/*
27220 + * IRQ handler for the timer
27221 + */
27222 +static irqreturn_t
27223 +s3c2410_timer_interrupt(int irq, void *dev_id)
27224 +{
27225 + timer_tick();
27226 + return IRQ_HANDLED;
27227 +}
27228 +
27229 +static struct irqaction s3c2410_timer_irq = {
27230 + .name = "S3C2410 Timer Tick",
27231 + .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
27232 + .handler = s3c2410_timer_interrupt,
27233 +};
27234 +
27235 +#define use_tclk1_12() ( \
27236 + machine_is_bast() || \
27237 + machine_is_vr1000() || \
27238 + machine_is_anubis() || \
27239 + machine_is_osiris())
27240 +
27241 +static struct clk *tin;
27242 +static struct clk *tdiv;
27243 +static struct clk *timerclk;
27244 +
27245 +/*
27246 + * Set up timer interrupt, and return the current time in seconds.
27247 + *
27248 + * Currently we only use timer4, as it is the only timer which has no
27249 + * other function that can be exploited externally
27250 + */
27251 +static void s3c2410_timer_setup (void)
27252 +{
27253 + unsigned long tcon;
27254 + unsigned long tcnt;
27255 + unsigned long tcfg1;
27256 + unsigned long tcfg0;
27257 +
27258 + tcnt = TICK_MAX; /* default value for tcnt */
27259 +
27260 + /* configure the system for whichever machine is in use */
27261 +
27262 + if (use_tclk1_12()) {
27263 + /* timer is at 12MHz, scaler is 1 */
27264 + timer_usec_ticks = timer_mask_usec_ticks(1, 12000000);
27265 + tcnt = 12000000 / HZ;
27266 +
27267 + tcfg1 = __raw_readl(S3C2410_TCFG1);
27268 + tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
27269 + tcfg1 |= S3C2410_TCFG1_MUX4_TCLK1;
27270 + __raw_writel(tcfg1, S3C2410_TCFG1);
27271 + } else {
27272 + unsigned long pclk;
27273 + struct clk *tscaler;
27274 +
27275 + /* for the h1940 (and others), we use the pclk from the core
27276 + * to generate the timer values. since values around 50 to
27277 + * 70MHz are not values we can directly generate the timer
27278 + * value from, we need to pre-scale and divide before using it.
27279 + *
27280 + * for instance, using 50.7MHz and dividing by 6 gives 8.45MHz
27281 + * (8.45 ticks per usec)
27282 + */
27283 +
27284 + pclk = clk_get_rate(timerclk);
27285 +
27286 + /* configure clock tick */
27287 +
27288 + timer_usec_ticks = timer_mask_usec_ticks(6, pclk);
27289 +
27290 + tscaler = clk_get_parent(tdiv);
27291 +
27292 + clk_set_rate(tscaler, pclk / 3);
27293 + clk_set_rate(tdiv, pclk / 6);
27294 + clk_set_parent(tin, tdiv);
27295 +
27296 + tcnt = clk_get_rate(tin) / HZ;
27297 + }
27298 +
27299 + tcon = __raw_readl(S3C2410_TCON);
27300 + tcfg0 = __raw_readl(S3C2410_TCFG0);
27301 + tcfg1 = __raw_readl(S3C2410_TCFG1);
27302 +
27303 + /* timers reload after counting zero, so reduce the count by 1 */
27304 +
27305 + tcnt--;
27306 +
27307 + printk(KERN_DEBUG "timer tcon=%08lx, tcnt %04lx, tcfg %08lx,%08lx, usec %08lx\n",
27308 + tcon, tcnt, tcfg0, tcfg1, timer_usec_ticks);
27309 +
27310 + /* check to see if timer is within 16bit range... */
27311 + if (tcnt > TICK_MAX) {
27312 + panic("setup_timer: HZ is too small, cannot configure timer!");
27313 + return;
27314 + }
27315 +
27316 + __raw_writel(tcfg1, S3C2410_TCFG1);
27317 + __raw_writel(tcfg0, S3C2410_TCFG0);
27318 +
27319 + timer_startval = tcnt;
27320 + __raw_writel(tcnt, S3C2410_TCNTB(4));
27321 +
27322 + /* ensure timer is stopped... */
27323 +
27324 + tcon &= ~(7<<20);
27325 + tcon |= S3C2410_TCON_T4RELOAD;
27326 + tcon |= S3C2410_TCON_T4MANUALUPD;
27327 +
27328 + __raw_writel(tcon, S3C2410_TCON);
27329 + __raw_writel(tcnt, S3C2410_TCNTB(4));
27330 + __raw_writel(tcnt, S3C2410_TCMPB(4));
27331 +
27332 + /* start the timer running */
27333 + tcon |= S3C2410_TCON_T4START;
27334 + tcon &= ~S3C2410_TCON_T4MANUALUPD;
27335 + __raw_writel(tcon, S3C2410_TCON);
27336 +}
27337 +
27338 +static void __init s3c2410_timer_resources(void)
27339 +{
27340 + struct platform_device tmpdev;
27341 +
27342 + tmpdev.dev.bus = &platform_bus_type;
27343 + tmpdev.id = 4;
27344 +
27345 + timerclk = clk_get(NULL, "timers");
27346 + if (IS_ERR(timerclk))
27347 + panic("failed to get clock for system timer");
27348 +
27349 + clk_enable(timerclk);
27350 +
27351 + if (!use_tclk1_12()) {
27352 + tin = clk_get(&tmpdev.dev, "pwm-tin");
27353 + if (IS_ERR(tin))
27354 + panic("failed to get pwm-tin clock for system timer");
27355 +
27356 + tdiv = clk_get(&tmpdev.dev, "pwm-tdiv");
27357 + if (IS_ERR(tdiv))
27358 + panic("failed to get pwm-tdiv clock for system timer");
27359 + }
27360 +
27361 + clk_enable(tin);
27362 +}
27363 +
27364 +static void __init s3c2410_timer_init(void)
27365 +{
27366 + s3c2410_timer_resources();
27367 + s3c2410_timer_setup();
27368 + setup_irq(IRQ_TIMER4, &s3c2410_timer_irq);
27369 +}
27370 +
27371 +struct sys_timer s3c24xx_timer = {
27372 + .init = s3c2410_timer_init,
27373 + .offset = s3c2410_gettimeoffset,
27374 + .resume = s3c2410_timer_setup
27375 +};
27376 Index: linux-2.6.28/arch/arm/plat-s3c24xx/clock.c
27377 ===================================================================
27378 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/clock.c 2008-12-25 00:26:37.000000000 +0100
27379 +++ linux-2.6.28/arch/arm/plat-s3c24xx/clock.c 2009-01-02 00:01:56.000000000 +0100
27380 @@ -27,18 +27,8 @@
27381 */
27382
27383 #include <linux/init.h>
27384 -#include <linux/module.h>
27385 #include <linux/kernel.h>
27386 -#include <linux/list.h>
27387 -#include <linux/errno.h>
27388 -#include <linux/err.h>
27389 -#include <linux/platform_device.h>
27390 -#include <linux/sysdev.h>
27391 -#include <linux/interrupt.h>
27392 -#include <linux/ioport.h>
27393 #include <linux/clk.h>
27394 -#include <linux/mutex.h>
27395 -#include <linux/delay.h>
27396 #include <linux/io.h>
27397
27398 #include <mach/hardware.h>
27399 @@ -47,490 +37,23 @@
27400 #include <mach/regs-clock.h>
27401 #include <mach/regs-gpio.h>
27402
27403 +#include <plat/cpu-freq.h>
27404 +
27405 #include <plat/clock.h>
27406 #include <plat/cpu.h>
27407 -
27408 -/* clock information */
27409 -
27410 -static LIST_HEAD(clocks);
27411 -
27412 -DEFINE_MUTEX(clocks_mutex);
27413 -
27414 -/* enable and disable calls for use with the clk struct */
27415 -
27416 -static int clk_null_enable(struct clk *clk, int enable)
27417 -{
27418 - return 0;
27419 -}
27420 -
27421 -/* Clock API calls */
27422 -
27423 -struct clk *clk_get(struct device *dev, const char *id)
27424 -{
27425 - struct clk *p;
27426 - struct clk *clk = ERR_PTR(-ENOENT);
27427 - int idno;
27428 -
27429 - if (dev == NULL || dev->bus != &platform_bus_type)
27430 - idno = -1;
27431 - else
27432 - idno = to_platform_device(dev)->id;
27433 -
27434 - mutex_lock(&clocks_mutex);
27435 -
27436 - list_for_each_entry(p, &clocks, list) {
27437 - if (p->id == idno &&
27438 - strcmp(id, p->name) == 0 &&
27439 - try_module_get(p->owner)) {
27440 - clk = p;
27441 - break;
27442 - }
27443 - }
27444 -
27445 - /* check for the case where a device was supplied, but the
27446 - * clock that was being searched for is not device specific */
27447 -
27448 - if (IS_ERR(clk)) {
27449 - list_for_each_entry(p, &clocks, list) {
27450 - if (p->id == -1 && strcmp(id, p->name) == 0 &&
27451 - try_module_get(p->owner)) {
27452 - clk = p;
27453 - break;
27454 - }
27455 - }
27456 - }
27457 -
27458 - mutex_unlock(&clocks_mutex);
27459 - return clk;
27460 -}
27461 -
27462 -void clk_put(struct clk *clk)
27463 -{
27464 - module_put(clk->owner);
27465 -}
27466 -
27467 -int clk_enable(struct clk *clk)
27468 -{
27469 - if (IS_ERR(clk) || clk == NULL)
27470 - return -EINVAL;
27471 -
27472 - clk_enable(clk->parent);
27473 -
27474 - mutex_lock(&clocks_mutex);
27475 -
27476 - if ((clk->usage++) == 0)
27477 - (clk->enable)(clk, 1);
27478 -
27479 - mutex_unlock(&clocks_mutex);
27480 - return 0;
27481 -}
27482 -
27483 -void clk_disable(struct clk *clk)
27484 -{
27485 - if (IS_ERR(clk) || clk == NULL)
27486 - return;
27487 -
27488 - mutex_lock(&clocks_mutex);
27489 -
27490 - if ((--clk->usage) == 0)
27491 - (clk->enable)(clk, 0);
27492 -
27493 - mutex_unlock(&clocks_mutex);
27494 - clk_disable(clk->parent);
27495 -}
27496 -
27497 -
27498 -unsigned long clk_get_rate(struct clk *clk)
27499 -{
27500 - if (IS_ERR(clk))
27501 - return 0;
27502 -
27503 - if (clk->rate != 0)
27504 - return clk->rate;
27505 -
27506 - if (clk->get_rate != NULL)
27507 - return (clk->get_rate)(clk);
27508 -
27509 - if (clk->parent != NULL)
27510 - return clk_get_rate(clk->parent);
27511 -
27512 - return clk->rate;
27513 -}
27514 -
27515 -long clk_round_rate(struct clk *clk, unsigned long rate)
27516 -{
27517 - if (!IS_ERR(clk) && clk->round_rate)
27518 - return (clk->round_rate)(clk, rate);
27519 -
27520 - return rate;
27521 -}
27522 -
27523 -int clk_set_rate(struct clk *clk, unsigned long rate)
27524 -{
27525 - int ret;
27526 -
27527 - if (IS_ERR(clk))
27528 - return -EINVAL;
27529 -
27530 - /* We do not default just do a clk->rate = rate as
27531 - * the clock may have been made this way by choice.
27532 - */
27533 -
27534 - WARN_ON(clk->set_rate == NULL);
27535 -
27536 - if (clk->set_rate == NULL)
27537 - return -EINVAL;
27538 -
27539 - mutex_lock(&clocks_mutex);
27540 - ret = (clk->set_rate)(clk, rate);
27541 - mutex_unlock(&clocks_mutex);
27542 -
27543 - return ret;
27544 -}
27545 -
27546 -struct clk *clk_get_parent(struct clk *clk)
27547 -{
27548 - return clk->parent;
27549 -}
27550 -
27551 -int clk_set_parent(struct clk *clk, struct clk *parent)
27552 -{
27553 - int ret = 0;
27554 -
27555 - if (IS_ERR(clk))
27556 - return -EINVAL;
27557 -
27558 - mutex_lock(&clocks_mutex);
27559 -
27560 - if (clk->set_parent)
27561 - ret = (clk->set_parent)(clk, parent);
27562 -
27563 - mutex_unlock(&clocks_mutex);
27564 -
27565 - return ret;
27566 -}
27567 -
27568 -EXPORT_SYMBOL(clk_get);
27569 -EXPORT_SYMBOL(clk_put);
27570 -EXPORT_SYMBOL(clk_enable);
27571 -EXPORT_SYMBOL(clk_disable);
27572 -EXPORT_SYMBOL(clk_get_rate);
27573 -EXPORT_SYMBOL(clk_round_rate);
27574 -EXPORT_SYMBOL(clk_set_rate);
27575 -EXPORT_SYMBOL(clk_get_parent);
27576 -EXPORT_SYMBOL(clk_set_parent);
27577 -
27578 -/* base clocks */
27579 -
27580 -static int clk_default_setrate(struct clk *clk, unsigned long rate)
27581 -{
27582 - clk->rate = rate;
27583 - return 0;
27584 -}
27585 -
27586 -struct clk clk_xtal = {
27587 - .name = "xtal",
27588 - .id = -1,
27589 - .rate = 0,
27590 - .parent = NULL,
27591 - .ctrlbit = 0,
27592 -};
27593 -
27594 -struct clk clk_mpll = {
27595 - .name = "mpll",
27596 - .id = -1,
27597 - .set_rate = clk_default_setrate,
27598 -};
27599 -
27600 -struct clk clk_upll = {
27601 - .name = "upll",
27602 - .id = -1,
27603 - .parent = NULL,
27604 - .ctrlbit = 0,
27605 -};
27606 -
27607 -struct clk clk_f = {
27608 - .name = "fclk",
27609 - .id = -1,
27610 - .rate = 0,
27611 - .parent = &clk_mpll,
27612 - .ctrlbit = 0,
27613 - .set_rate = clk_default_setrate,
27614 -};
27615 -
27616 -struct clk clk_h = {
27617 - .name = "hclk",
27618 - .id = -1,
27619 - .rate = 0,
27620 - .parent = NULL,
27621 - .ctrlbit = 0,
27622 - .set_rate = clk_default_setrate,
27623 -};
27624 -
27625 -struct clk clk_p = {
27626 - .name = "pclk",
27627 - .id = -1,
27628 - .rate = 0,
27629 - .parent = NULL,
27630 - .ctrlbit = 0,
27631 - .set_rate = clk_default_setrate,
27632 -};
27633 -
27634 -struct clk clk_usb_bus = {
27635 - .name = "usb-bus",
27636 - .id = -1,
27637 - .rate = 0,
27638 - .parent = &clk_upll,
27639 -};
27640 -
27641 -/* clocks that could be registered by external code */
27642 -
27643 -static int s3c24xx_dclk_enable(struct clk *clk, int enable)
27644 -{
27645 - unsigned long dclkcon = __raw_readl(S3C24XX_DCLKCON);
27646 -
27647 - if (enable)
27648 - dclkcon |= clk->ctrlbit;
27649 - else
27650 - dclkcon &= ~clk->ctrlbit;
27651 -
27652 - __raw_writel(dclkcon, S3C24XX_DCLKCON);
27653 -
27654 - return 0;
27655 -}
27656 -
27657 -static int s3c24xx_dclk_setparent(struct clk *clk, struct clk *parent)
27658 -{
27659 - unsigned long dclkcon;
27660 - unsigned int uclk;
27661 -
27662 - if (parent == &clk_upll)
27663 - uclk = 1;
27664 - else if (parent == &clk_p)
27665 - uclk = 0;
27666 - else
27667 - return -EINVAL;
27668 -
27669 - clk->parent = parent;
27670 -
27671 - dclkcon = __raw_readl(S3C24XX_DCLKCON);
27672 -
27673 - if (clk->ctrlbit == S3C2410_DCLKCON_DCLK0EN) {
27674 - if (uclk)
27675 - dclkcon |= S3C2410_DCLKCON_DCLK0_UCLK;
27676 - else
27677 - dclkcon &= ~S3C2410_DCLKCON_DCLK0_UCLK;
27678 - } else {
27679 - if (uclk)
27680 - dclkcon |= S3C2410_DCLKCON_DCLK1_UCLK;
27681 - else
27682 - dclkcon &= ~S3C2410_DCLKCON_DCLK1_UCLK;
27683 - }
27684 -
27685 - __raw_writel(dclkcon, S3C24XX_DCLKCON);
27686 -
27687 - return 0;
27688 -}
27689 -
27690 -static unsigned long s3c24xx_calc_div(struct clk *clk, unsigned long rate)
27691 -{
27692 - unsigned long div;
27693 -
27694 - if ((rate == 0) || !clk->parent)
27695 - return 0;
27696 -
27697 - div = clk_get_rate(clk->parent) / rate;
27698 - if (div < 2)
27699 - div = 2;
27700 - else if (div > 16)
27701 - div = 16;
27702 -
27703 - return div;
27704 -}
27705 -
27706 -static unsigned long s3c24xx_round_dclk_rate(struct clk *clk,
27707 - unsigned long rate)
27708 -{
27709 - unsigned long div = s3c24xx_calc_div(clk, rate);
27710 -
27711 - if (div == 0)
27712 - return 0;
27713 -
27714 - return clk_get_rate(clk->parent) / div;
27715 -}
27716 -
27717 -static int s3c24xx_set_dclk_rate(struct clk *clk, unsigned long rate)
27718 -{
27719 - unsigned long mask, data, div = s3c24xx_calc_div(clk, rate);
27720 -
27721 - if (div == 0)
27722 - return -EINVAL;
27723 -
27724 - if (clk == &s3c24xx_dclk0) {
27725 - mask = S3C2410_DCLKCON_DCLK0_DIV_MASK |
27726 - S3C2410_DCLKCON_DCLK0_CMP_MASK;
27727 - data = S3C2410_DCLKCON_DCLK0_DIV(div) |
27728 - S3C2410_DCLKCON_DCLK0_CMP((div + 1) / 2);
27729 - } else if (clk == &s3c24xx_dclk1) {
27730 - mask = S3C2410_DCLKCON_DCLK1_DIV_MASK |
27731 - S3C2410_DCLKCON_DCLK1_CMP_MASK;
27732 - data = S3C2410_DCLKCON_DCLK1_DIV(div) |
27733 - S3C2410_DCLKCON_DCLK1_CMP((div + 1) / 2);
27734 - } else
27735 - return -EINVAL;
27736 -
27737 - clk->rate = clk_get_rate(clk->parent) / div;
27738 - __raw_writel(((__raw_readl(S3C24XX_DCLKCON) & ~mask) | data),
27739 - S3C24XX_DCLKCON);
27740 - return clk->rate;
27741 -}
27742 -
27743 -static int s3c24xx_clkout_setparent(struct clk *clk, struct clk *parent)
27744 -{
27745 - unsigned long mask;
27746 - unsigned long source;
27747 -
27748 - /* calculate the MISCCR setting for the clock */
27749 -
27750 - if (parent == &clk_xtal)
27751 - source = S3C2410_MISCCR_CLK0_MPLL;
27752 - else if (parent == &clk_upll)
27753 - source = S3C2410_MISCCR_CLK0_UPLL;
27754 - else if (parent == &clk_f)
27755 - source = S3C2410_MISCCR_CLK0_FCLK;
27756 - else if (parent == &clk_h)
27757 - source = S3C2410_MISCCR_CLK0_HCLK;
27758 - else if (parent == &clk_p)
27759 - source = S3C2410_MISCCR_CLK0_PCLK;
27760 - else if (clk == &s3c24xx_clkout0 && parent == &s3c24xx_dclk0)
27761 - source = S3C2410_MISCCR_CLK0_DCLK0;
27762 - else if (clk == &s3c24xx_clkout1 && parent == &s3c24xx_dclk1)
27763 - source = S3C2410_MISCCR_CLK0_DCLK0;
27764 - else
27765 - return -EINVAL;
27766 -
27767 - clk->parent = parent;
27768 -
27769 - if (clk == &s3c24xx_clkout0)
27770 - mask = S3C2410_MISCCR_CLK0_MASK;
27771 - else {
27772 - source <<= 4;
27773 - mask = S3C2410_MISCCR_CLK1_MASK;
27774 - }
27775 -
27776 - s3c2410_modify_misccr(mask, source);
27777 - return 0;
27778 -}
27779 -
27780 -/* external clock definitions */
27781 -
27782 -struct clk s3c24xx_dclk0 = {
27783 - .name = "dclk0",
27784 - .id = -1,
27785 - .ctrlbit = S3C2410_DCLKCON_DCLK0EN,
27786 - .enable = s3c24xx_dclk_enable,
27787 - .set_parent = s3c24xx_dclk_setparent,
27788 - .set_rate = s3c24xx_set_dclk_rate,
27789 - .round_rate = s3c24xx_round_dclk_rate,
27790 -};
27791 -
27792 -struct clk s3c24xx_dclk1 = {
27793 - .name = "dclk1",
27794 - .id = -1,
27795 - .ctrlbit = S3C2410_DCLKCON_DCLK1EN,
27796 - .enable = s3c24xx_dclk_enable,
27797 - .set_parent = s3c24xx_dclk_setparent,
27798 - .set_rate = s3c24xx_set_dclk_rate,
27799 - .round_rate = s3c24xx_round_dclk_rate,
27800 -};
27801 -
27802 -struct clk s3c24xx_clkout0 = {
27803 - .name = "clkout0",
27804 - .id = -1,
27805 - .set_parent = s3c24xx_clkout_setparent,
27806 -};
27807 -
27808 -struct clk s3c24xx_clkout1 = {
27809 - .name = "clkout1",
27810 - .id = -1,
27811 - .set_parent = s3c24xx_clkout_setparent,
27812 -};
27813 -
27814 -struct clk s3c24xx_uclk = {
27815 - .name = "uclk",
27816 - .id = -1,
27817 -};
27818 -
27819 -/* initialise the clock system */
27820 -
27821 -int s3c24xx_register_clock(struct clk *clk)
27822 -{
27823 - clk->owner = THIS_MODULE;
27824 -
27825 - if (clk->enable == NULL)
27826 - clk->enable = clk_null_enable;
27827 -
27828 - /* add to the list of available clocks */
27829 -
27830 - mutex_lock(&clocks_mutex);
27831 - list_add(&clk->list, &clocks);
27832 - mutex_unlock(&clocks_mutex);
27833 -
27834 - return 0;
27835 -}
27836 -
27837 -int s3c24xx_register_clocks(struct clk **clks, int nr_clks)
27838 -{
27839 - int fails = 0;
27840 -
27841 - for (; nr_clks > 0; nr_clks--, clks++) {
27842 - if (s3c24xx_register_clock(*clks) < 0)
27843 - fails++;
27844 - }
27845 -
27846 - return fails;
27847 -}
27848 +#include <plat/pll.h>
27849
27850 /* initalise all the clocks */
27851
27852 -int __init s3c24xx_setup_clocks(unsigned long xtal,
27853 - unsigned long fclk,
27854 - unsigned long hclk,
27855 - unsigned long pclk)
27856 +void __init_or_cpufreq s3c24xx_setup_clocks(unsigned long fclk,
27857 + unsigned long hclk,
27858 + unsigned long pclk)
27859 {
27860 - printk(KERN_INFO "S3C24XX Clocks, (c) 2004 Simtec Electronics\n");
27861 -
27862 - /* initialise the main system clocks */
27863 -
27864 - clk_xtal.rate = xtal;
27865 - clk_upll.rate = s3c2410_get_pll(__raw_readl(S3C2410_UPLLCON), xtal);
27866 + clk_upll.rate = s3c24xx_get_pll(__raw_readl(S3C2410_UPLLCON),
27867 + clk_xtal.rate);
27868
27869 clk_mpll.rate = fclk;
27870 clk_h.rate = hclk;
27871 clk_p.rate = pclk;
27872 clk_f.rate = fclk;
27873 -
27874 - /* assume uart clocks are correctly setup */
27875 -
27876 - /* register our clocks */
27877 -
27878 - if (s3c24xx_register_clock(&clk_xtal) < 0)
27879 - printk(KERN_ERR "failed to register master xtal\n");
27880 -
27881 - if (s3c24xx_register_clock(&clk_mpll) < 0)
27882 - printk(KERN_ERR "failed to register mpll clock\n");
27883 -
27884 - if (s3c24xx_register_clock(&clk_upll) < 0)
27885 - printk(KERN_ERR "failed to register upll clock\n");
27886 -
27887 - if (s3c24xx_register_clock(&clk_f) < 0)
27888 - printk(KERN_ERR "failed to register cpu fclk\n");
27889 -
27890 - if (s3c24xx_register_clock(&clk_h) < 0)
27891 - printk(KERN_ERR "failed to register cpu hclk\n");
27892 -
27893 - if (s3c24xx_register_clock(&clk_p) < 0)
27894 - printk(KERN_ERR "failed to register cpu pclk\n");
27895 -
27896 - return 0;
27897 }
27898 Index: linux-2.6.28/arch/arm/plat-s3c24xx/clock-dclk.c
27899 ===================================================================
27900 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
27901 +++ linux-2.6.28/arch/arm/plat-s3c24xx/clock-dclk.c 2009-01-02 00:01:56.000000000 +0100
27902 @@ -0,0 +1,194 @@
27903 +/* linux/arch/arm/plat-s3c24xx/clock-dclk.c
27904 + *
27905 + * Copyright (c) 2004,2008 Simtec Electronics
27906 + * Ben Dooks <ben@simtec.co.uk>
27907 + * http://armlinux.simtec.co.uk/
27908 + *
27909 + * This program is free software; you can redistribute it and/or modify
27910 + * it under the terms of the GNU General Public License version 2 as
27911 + * published by the Free Software Foundation.
27912 + *
27913 + * S3C24XX - definitions for DCLK and CLKOUT registers
27914 + */
27915 +
27916 +#include <linux/kernel.h>
27917 +#include <linux/errno.h>
27918 +#include <linux/clk.h>
27919 +#include <linux/io.h>
27920 +
27921 +#include <mach/regs-clock.h>
27922 +#include <mach/regs-gpio.h>
27923 +
27924 +#include <plat/clock.h>
27925 +#include <plat/cpu.h>
27926 +
27927 +/* clocks that could be registered by external code */
27928 +
27929 +static int s3c24xx_dclk_enable(struct clk *clk, int enable)
27930 +{
27931 + unsigned long dclkcon = __raw_readl(S3C24XX_DCLKCON);
27932 +
27933 + if (enable)
27934 + dclkcon |= clk->ctrlbit;
27935 + else
27936 + dclkcon &= ~clk->ctrlbit;
27937 +
27938 + __raw_writel(dclkcon, S3C24XX_DCLKCON);
27939 +
27940 + return 0;
27941 +}
27942 +
27943 +static int s3c24xx_dclk_setparent(struct clk *clk, struct clk *parent)
27944 +{
27945 + unsigned long dclkcon;
27946 + unsigned int uclk;
27947 +
27948 + if (parent == &clk_upll)
27949 + uclk = 1;
27950 + else if (parent == &clk_p)
27951 + uclk = 0;
27952 + else
27953 + return -EINVAL;
27954 +
27955 + clk->parent = parent;
27956 +
27957 + dclkcon = __raw_readl(S3C24XX_DCLKCON);
27958 +
27959 + if (clk->ctrlbit == S3C2410_DCLKCON_DCLK0EN) {
27960 + if (uclk)
27961 + dclkcon |= S3C2410_DCLKCON_DCLK0_UCLK;
27962 + else
27963 + dclkcon &= ~S3C2410_DCLKCON_DCLK0_UCLK;
27964 + } else {
27965 + if (uclk)
27966 + dclkcon |= S3C2410_DCLKCON_DCLK1_UCLK;
27967 + else
27968 + dclkcon &= ~S3C2410_DCLKCON_DCLK1_UCLK;
27969 + }
27970 +
27971 + __raw_writel(dclkcon, S3C24XX_DCLKCON);
27972 +
27973 + return 0;
27974 +}
27975 +static unsigned long s3c24xx_calc_div(struct clk *clk, unsigned long rate)
27976 +{
27977 + unsigned long div;
27978 +
27979 + if ((rate == 0) || !clk->parent)
27980 + return 0;
27981 +
27982 + div = clk_get_rate(clk->parent) / rate;
27983 + if (div < 2)
27984 + div = 2;
27985 + else if (div > 16)
27986 + div = 16;
27987 +
27988 + return div;
27989 +}
27990 +
27991 +static unsigned long s3c24xx_round_dclk_rate(struct clk *clk,
27992 + unsigned long rate)
27993 +{
27994 + unsigned long div = s3c24xx_calc_div(clk, rate);
27995 +
27996 + if (div == 0)
27997 + return 0;
27998 +
27999 + return clk_get_rate(clk->parent) / div;
28000 +}
28001 +
28002 +static int s3c24xx_set_dclk_rate(struct clk *clk, unsigned long rate)
28003 +{
28004 + unsigned long mask, data, div = s3c24xx_calc_div(clk, rate);
28005 +
28006 + if (div == 0)
28007 + return -EINVAL;
28008 +
28009 + if (clk == &s3c24xx_dclk0) {
28010 + mask = S3C2410_DCLKCON_DCLK0_DIV_MASK |
28011 + S3C2410_DCLKCON_DCLK0_CMP_MASK;
28012 + data = S3C2410_DCLKCON_DCLK0_DIV(div) |
28013 + S3C2410_DCLKCON_DCLK0_CMP((div + 1) / 2);
28014 + } else if (clk == &s3c24xx_dclk1) {
28015 + mask = S3C2410_DCLKCON_DCLK1_DIV_MASK |
28016 + S3C2410_DCLKCON_DCLK1_CMP_MASK;
28017 + data = S3C2410_DCLKCON_DCLK1_DIV(div) |
28018 + S3C2410_DCLKCON_DCLK1_CMP((div + 1) / 2);
28019 + } else
28020 + return -EINVAL;
28021 +
28022 + clk->rate = clk_get_rate(clk->parent) / div;
28023 + __raw_writel(((__raw_readl(S3C24XX_DCLKCON) & ~mask) | data),
28024 + S3C24XX_DCLKCON);
28025 + return clk->rate;
28026 +}
28027 +static int s3c24xx_clkout_setparent(struct clk *clk, struct clk *parent)
28028 +{
28029 + unsigned long mask;
28030 + unsigned long source;
28031 +
28032 + /* calculate the MISCCR setting for the clock */
28033 +
28034 + if (parent == &clk_xtal)
28035 + source = S3C2410_MISCCR_CLK0_MPLL;
28036 + else if (parent == &clk_upll)
28037 + source = S3C2410_MISCCR_CLK0_UPLL;
28038 + else if (parent == &clk_f)
28039 + source = S3C2410_MISCCR_CLK0_FCLK;
28040 + else if (parent == &clk_h)
28041 + source = S3C2410_MISCCR_CLK0_HCLK;
28042 + else if (parent == &clk_p)
28043 + source = S3C2410_MISCCR_CLK0_PCLK;
28044 + else if (clk == &s3c24xx_clkout0 && parent == &s3c24xx_dclk0)
28045 + source = S3C2410_MISCCR_CLK0_DCLK0;
28046 + else if (clk == &s3c24xx_clkout1 && parent == &s3c24xx_dclk1)
28047 + source = S3C2410_MISCCR_CLK0_DCLK0;
28048 + else
28049 + return -EINVAL;
28050 +
28051 + clk->parent = parent;
28052 +
28053 + if (clk == &s3c24xx_clkout0)
28054 + mask = S3C2410_MISCCR_CLK0_MASK;
28055 + else {
28056 + source <<= 4;
28057 + mask = S3C2410_MISCCR_CLK1_MASK;
28058 + }
28059 +
28060 + s3c2410_modify_misccr(mask, source);
28061 + return 0;
28062 +}
28063 +
28064 +/* external clock definitions */
28065 +
28066 +struct clk s3c24xx_dclk0 = {
28067 + .name = "dclk0",
28068 + .id = -1,
28069 + .ctrlbit = S3C2410_DCLKCON_DCLK0EN,
28070 + .enable = s3c24xx_dclk_enable,
28071 + .set_parent = s3c24xx_dclk_setparent,
28072 + .set_rate = s3c24xx_set_dclk_rate,
28073 + .round_rate = s3c24xx_round_dclk_rate,
28074 +};
28075 +
28076 +struct clk s3c24xx_dclk1 = {
28077 + .name = "dclk1",
28078 + .id = -1,
28079 + .ctrlbit = S3C2410_DCLKCON_DCLK1EN,
28080 + .enable = s3c24xx_dclk_enable,
28081 + .set_parent = s3c24xx_dclk_setparent,
28082 + .set_rate = s3c24xx_set_dclk_rate,
28083 + .round_rate = s3c24xx_round_dclk_rate,
28084 +};
28085 +
28086 +struct clk s3c24xx_clkout0 = {
28087 + .name = "clkout0",
28088 + .id = -1,
28089 + .set_parent = s3c24xx_clkout_setparent,
28090 +};
28091 +
28092 +struct clk s3c24xx_clkout1 = {
28093 + .name = "clkout1",
28094 + .id = -1,
28095 + .set_parent = s3c24xx_clkout_setparent,
28096 +};
28097 Index: linux-2.6.28/arch/arm/plat-s3c24xx/common-smdk.c
28098 ===================================================================
28099 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/common-smdk.c 2008-12-25 00:26:37.000000000 +0100
28100 +++ linux-2.6.28/arch/arm/plat-s3c24xx/common-smdk.c 2009-01-02 00:01:56.000000000 +0100
28101 @@ -38,7 +38,7 @@
28102 #include <mach/regs-gpio.h>
28103 #include <mach/leds-gpio.h>
28104
28105 -#include <asm/plat-s3c/nand.h>
28106 +#include <plat/nand.h>
28107
28108 #include <plat/common-smdk.h>
28109 #include <plat/devs.h>
28110 @@ -201,5 +201,5 @@ void __init smdk_machine_init(void)
28111
28112 platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));
28113
28114 - s3c2410_pm_init();
28115 + s3c_pm_init();
28116 }
28117 Index: linux-2.6.28/arch/arm/plat-s3c24xx/cpu.c
28118 ===================================================================
28119 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/cpu.c 2008-12-25 00:26:37.000000000 +0100
28120 +++ linux-2.6.28/arch/arm/plat-s3c24xx/cpu.c 2009-01-02 00:01:56.000000000 +0100
28121 @@ -55,16 +55,6 @@
28122 #include <plat/s3c2442.h>
28123 #include <plat/s3c2443.h>
28124
28125 -struct cpu_table {
28126 - unsigned long idcode;
28127 - unsigned long idmask;
28128 - void (*map_io)(struct map_desc *mach_desc, int size);
28129 - void (*init_uarts)(struct s3c2410_uartcfg *cfg, int no);
28130 - void (*init_clocks)(int xtal);
28131 - int (*init)(void);
28132 - const char *name;
28133 -};
28134 -
28135 /* table of supported CPUs */
28136
28137 static const char name_s3c2400[] = "S3C2400";
28138 @@ -72,6 +62,7 @@ static const char name_s3c2410[] = "S3C
28139 static const char name_s3c2412[] = "S3C2412";
28140 static const char name_s3c2440[] = "S3C2440";
28141 static const char name_s3c2442[] = "S3C2442";
28142 +static const char name_s3c2442b[] = "S3C2442B";
28143 static const char name_s3c2443[] = "S3C2443";
28144 static const char name_s3c2410a[] = "S3C2410A";
28145 static const char name_s3c2440a[] = "S3C2440A";
28146 @@ -123,6 +114,15 @@ static struct cpu_table cpu_ids[] __init
28147 .name = name_s3c2442
28148 },
28149 {
28150 + .idcode = 0x32440aab,
28151 + .idmask = 0xffffffff,
28152 + .map_io = s3c244x_map_io,
28153 + .init_clocks = s3c244x_init_clocks,
28154 + .init_uarts = s3c244x_init_uarts,
28155 + .init = s3c2442_init,
28156 + .name = name_s3c2442b
28157 + },
28158 + {
28159 .idcode = 0x32412001,
28160 .idmask = 0xffffffff,
28161 .map_io = s3c2412_map_io,
28162 @@ -169,23 +169,7 @@ static struct map_desc s3c_iodesc[] __in
28163 IODESC_ENT(UART)
28164 };
28165
28166 -static struct cpu_table * __init s3c_lookup_cpu(unsigned long idcode)
28167 -{
28168 - struct cpu_table *tab;
28169 - int count;
28170 -
28171 - tab = cpu_ids;
28172 - for (count = 0; count < ARRAY_SIZE(cpu_ids); count++, tab++) {
28173 - if ((idcode & tab->idmask) == tab->idcode)
28174 - return tab;
28175 - }
28176 -
28177 - return NULL;
28178 -}
28179 -
28180 -/* cpu information */
28181 -
28182 -static struct cpu_table *cpu;
28183 +/* read cpu identificaiton code */
28184
28185 static unsigned long s3c24xx_read_idcode_v5(void)
28186 {
28187 @@ -231,6 +215,7 @@ void __init s3c24xx_init_io(struct map_d
28188 unsigned long idcode = 0x0;
28189
28190 /* initialise the io descriptors we need for initialisation */
28191 + iotable_init(mach_desc, size);
28192 iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
28193
28194 if (cpu_architecture() >= CPU_ARCH_ARMv5) {
28195 @@ -239,117 +224,7 @@ void __init s3c24xx_init_io(struct map_d
28196 idcode = s3c24xx_read_idcode_v4();
28197 }
28198
28199 - cpu = s3c_lookup_cpu(idcode);
28200 -
28201 - if (cpu == NULL) {
28202 - printk(KERN_ERR "Unknown CPU type 0x%08lx\n", idcode);
28203 - panic("Unknown S3C24XX CPU");
28204 - }
28205 -
28206 - printk("CPU %s (id 0x%08lx)\n", cpu->name, idcode);
28207 -
28208 - if (cpu->map_io == NULL || cpu->init == NULL) {
28209 - printk(KERN_ERR "CPU %s support not enabled\n", cpu->name);
28210 - panic("Unsupported S3C24XX CPU");
28211 - }
28212 -
28213 arm_pm_restart = s3c24xx_pm_restart;
28214
28215 - (cpu->map_io)(mach_desc, size);
28216 -}
28217 -
28218 -/* s3c24xx_init_clocks
28219 - *
28220 - * Initialise the clock subsystem and associated information from the
28221 - * given master crystal value.
28222 - *
28223 - * xtal = 0 -> use default PLL crystal value (normally 12MHz)
28224 - * != 0 -> PLL crystal value in Hz
28225 -*/
28226 -
28227 -void __init s3c24xx_init_clocks(int xtal)
28228 -{
28229 - if (xtal == 0)
28230 - xtal = 12*1000*1000;
28231 -
28232 - if (cpu == NULL)
28233 - panic("s3c24xx_init_clocks: no cpu setup?\n");
28234 -
28235 - if (cpu->init_clocks == NULL)
28236 - panic("s3c24xx_init_clocks: cpu has no clock init\n");
28237 - else
28238 - (cpu->init_clocks)(xtal);
28239 + s3c_init_cpu(idcode, cpu_ids, ARRAY_SIZE(cpu_ids));
28240 }
28241 -
28242 -/* uart management */
28243 -
28244 -static int nr_uarts __initdata = 0;
28245 -
28246 -static struct s3c2410_uartcfg uart_cfgs[3];
28247 -
28248 -/* s3c24xx_init_uartdevs
28249 - *
28250 - * copy the specified platform data and configuration into our central
28251 - * set of devices, before the data is thrown away after the init process.
28252 - *
28253 - * This also fills in the array passed to the serial driver for the
28254 - * early initialisation of the console.
28255 -*/
28256 -
28257 -void __init s3c24xx_init_uartdevs(char *name,
28258 - struct s3c24xx_uart_resources *res,
28259 - struct s3c2410_uartcfg *cfg, int no)
28260 -{
28261 - struct platform_device *platdev;
28262 - struct s3c2410_uartcfg *cfgptr = uart_cfgs;
28263 - struct s3c24xx_uart_resources *resp;
28264 - int uart;
28265 -
28266 - memcpy(cfgptr, cfg, sizeof(struct s3c2410_uartcfg) * no);
28267 -
28268 - for (uart = 0; uart < no; uart++, cfg++, cfgptr++) {
28269 - platdev = s3c24xx_uart_src[cfgptr->hwport];
28270 -
28271 - resp = res + cfgptr->hwport;
28272 -
28273 - s3c24xx_uart_devs[uart] = platdev;
28274 -
28275 - platdev->name = name;
28276 - platdev->resource = resp->resources;
28277 - platdev->num_resources = resp->nr_resources;
28278 -
28279 - platdev->dev.platform_data = cfgptr;
28280 - }
28281 -
28282 - nr_uarts = no;
28283 -}
28284 -
28285 -void __init s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no)
28286 -{
28287 - if (cpu == NULL)
28288 - return;
28289 -
28290 - if (cpu->init_uarts == NULL) {
28291 - printk(KERN_ERR "s3c24xx_init_uarts: cpu has no uart init\n");
28292 - } else
28293 - (cpu->init_uarts)(cfg, no);
28294 -}
28295 -
28296 -static int __init s3c_arch_init(void)
28297 -{
28298 - int ret;
28299 -
28300 - // do the correct init for cpu
28301 -
28302 - if (cpu == NULL)
28303 - panic("s3c_arch_init: NULL cpu\n");
28304 -
28305 - ret = (cpu->init)();
28306 - if (ret != 0)
28307 - return ret;
28308 -
28309 - ret = platform_add_devices(s3c24xx_uart_devs, nr_uarts);
28310 - return ret;
28311 -}
28312 -
28313 -arch_initcall(s3c_arch_init);
28314 Index: linux-2.6.28/arch/arm/plat-s3c24xx/devs.c
28315 ===================================================================
28316 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/devs.c 2008-12-25 00:26:37.000000000 +0100
28317 +++ linux-2.6.28/arch/arm/plat-s3c24xx/devs.c 2009-01-02 00:01:56.000000000 +0100
28318 @@ -26,14 +26,16 @@
28319 #include <asm/mach/irq.h>
28320 #include <mach/fb.h>
28321 #include <mach/hardware.h>
28322 +#include <mach/ts.h>
28323 +#include <asm/io.h>
28324 #include <asm/irq.h>
28325
28326 #include <plat/regs-serial.h>
28327 -#include <asm/plat-s3c24xx/udc.h>
28328 +#include <plat/udc.h>
28329
28330 #include <plat/devs.h>
28331 #include <plat/cpu.h>
28332 -#include <asm/plat-s3c24xx/regs-spi.h>
28333 +#include <plat/regs-spi.h>
28334
28335 /* Serial port registrations */
28336
28337 @@ -76,6 +78,19 @@ static struct resource s3c2410_uart2_res
28338 }
28339 };
28340
28341 +static struct resource s3c2410_uart3_resource[] = {
28342 + [0] = {
28343 + .start = S3C2443_PA_UART3,
28344 + .end = S3C2443_PA_UART3 + 0x3fff,
28345 + .flags = IORESOURCE_MEM,
28346 + },
28347 + [1] = {
28348 + .start = IRQ_S3CUART_RX3,
28349 + .end = IRQ_S3CUART_ERR3,
28350 + .flags = IORESOURCE_IRQ,
28351 + },
28352 +};
28353 +
28354 struct s3c24xx_uart_resources s3c2410_uart_resources[] __initdata = {
28355 [0] = {
28356 .resources = s3c2410_uart0_resource,
28357 @@ -89,6 +104,10 @@ struct s3c24xx_uart_resources s3c2410_ua
28358 .resources = s3c2410_uart2_resource,
28359 .nr_resources = ARRAY_SIZE(s3c2410_uart2_resource),
28360 },
28361 + [3] = {
28362 + .resources = s3c2410_uart3_resource,
28363 + .nr_resources = ARRAY_SIZE(s3c2410_uart3_resource),
28364 + },
28365 };
28366
28367 /* yart devices */
28368 @@ -105,13 +124,18 @@ static struct platform_device s3c24xx_ua
28369 .id = 2,
28370 };
28371
28372 -struct platform_device *s3c24xx_uart_src[3] = {
28373 +static struct platform_device s3c24xx_uart_device3 = {
28374 + .id = 3,
28375 +};
28376 +
28377 +struct platform_device *s3c24xx_uart_src[4] = {
28378 &s3c24xx_uart_device0,
28379 &s3c24xx_uart_device1,
28380 &s3c24xx_uart_device2,
28381 + &s3c24xx_uart_device3,
28382 };
28383
28384 -struct platform_device *s3c24xx_uart_devs[3] = {
28385 +struct platform_device *s3c24xx_uart_devs[4] = {
28386 };
28387
28388 /* USB Host Controller */
28389 @@ -192,8 +216,8 @@ void __init s3c24xx_fb_set_platdata(stru
28390
28391 static struct resource s3c_nand_resource[] = {
28392 [0] = {
28393 - .start = S3C2410_PA_NAND,
28394 - .end = S3C2410_PA_NAND + S3C24XX_SZ_NAND - 1,
28395 + .start = S3C24XX_PA_NAND,
28396 + .end = S3C24XX_PA_NAND + S3C24XX_SZ_NAND - 1,
28397 .flags = IORESOURCE_MEM,
28398 }
28399 };
28400 @@ -207,6 +231,23 @@ struct platform_device s3c_device_nand =
28401
28402 EXPORT_SYMBOL(s3c_device_nand);
28403
28404 +/* Touchscreen */
28405 +struct platform_device s3c_device_ts = {
28406 + .name = "s3c2410-ts",
28407 + .id = -1,
28408 +};
28409 +
28410 +EXPORT_SYMBOL(s3c_device_ts);
28411 +
28412 +static struct s3c2410_ts_mach_info s3c2410ts_info;
28413 +
28414 +void set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)
28415 +{
28416 + memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));
28417 + s3c_device_ts.dev.platform_data = &s3c2410ts_info;
28418 +}
28419 +EXPORT_SYMBOL(set_s3c2410ts_info);
28420 +
28421 /* USB Device (Gadget)*/
28422
28423 static struct resource s3c_usbgadget_resource[] = {
28424 @@ -271,31 +312,6 @@ struct platform_device s3c_device_wdt =
28425
28426 EXPORT_SYMBOL(s3c_device_wdt);
28427
28428 -/* I2C */
28429 -
28430 -static struct resource s3c_i2c_resource[] = {
28431 - [0] = {
28432 - .start = S3C24XX_PA_IIC,
28433 - .end = S3C24XX_PA_IIC + S3C24XX_SZ_IIC - 1,
28434 - .flags = IORESOURCE_MEM,
28435 - },
28436 - [1] = {
28437 - .start = IRQ_IIC,
28438 - .end = IRQ_IIC,
28439 - .flags = IORESOURCE_IRQ,
28440 - }
28441 -
28442 -};
28443 -
28444 -struct platform_device s3c_device_i2c = {
28445 - .name = "s3c2410-i2c",
28446 - .id = -1,
28447 - .num_resources = ARRAY_SIZE(s3c_i2c_resource),
28448 - .resource = s3c_i2c_resource,
28449 -};
28450 -
28451 -EXPORT_SYMBOL(s3c_device_i2c);
28452 -
28453 /* IIS */
28454
28455 static struct resource s3c_iis_resource[] = {
28456 @@ -382,8 +398,8 @@ struct platform_device s3c_device_adc =
28457
28458 static struct resource s3c_sdi_resource[] = {
28459 [0] = {
28460 - .start = S3C2410_PA_SDI,
28461 - .end = S3C2410_PA_SDI + S3C24XX_SZ_SDI - 1,
28462 + .start = S3C24XX_PA_SDI,
28463 + .end = S3C24XX_PA_SDI + S3C24XX_SZ_SDI - 1,
28464 .flags = IORESOURCE_MEM,
28465 },
28466 [1] = {
28467 @@ -403,36 +419,6 @@ struct platform_device s3c_device_sdi =
28468
28469 EXPORT_SYMBOL(s3c_device_sdi);
28470
28471 -/* High-speed MMC/SD */
28472 -
28473 -static struct resource s3c_hsmmc_resource[] = {
28474 - [0] = {
28475 - .start = S3C2443_PA_HSMMC,
28476 - .end = S3C2443_PA_HSMMC + S3C2443_SZ_HSMMC - 1,
28477 - .flags = IORESOURCE_MEM,
28478 - },
28479 - [1] = {
28480 - .start = IRQ_S3C2443_HSMMC,
28481 - .end = IRQ_S3C2443_HSMMC,
28482 - .flags = IORESOURCE_IRQ,
28483 - }
28484 -};
28485 -
28486 -static u64 s3c_device_hsmmc_dmamask = 0xffffffffUL;
28487 -
28488 -struct platform_device s3c_device_hsmmc = {
28489 - .name = "s3c-sdhci",
28490 - .id = -1,
28491 - .num_resources = ARRAY_SIZE(s3c_hsmmc_resource),
28492 - .resource = s3c_hsmmc_resource,
28493 - .dev = {
28494 - .dma_mask = &s3c_device_hsmmc_dmamask,
28495 - .coherent_dma_mask = 0xffffffffUL
28496 - }
28497 -};
28498 -
28499 -
28500 -
28501 /* SPI (0) */
28502
28503 static struct resource s3c_spi0_resource[] = {
28504 Index: linux-2.6.28/arch/arm/plat-s3c24xx/gpio.c
28505 ===================================================================
28506 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/gpio.c 2008-12-25 00:26:37.000000000 +0100
28507 +++ linux-2.6.28/arch/arm/plat-s3c24xx/gpio.c 2009-01-02 00:01:56.000000000 +0100
28508 @@ -32,6 +32,7 @@
28509 #include <asm/irq.h>
28510
28511 #include <mach/regs-gpio.h>
28512 +#include <mach/regs-gpioj.h>
28513
28514 void s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)
28515 {
28516 @@ -215,3 +216,423 @@ int s3c2410_gpio_irq2pin(unsigned int ir
28517 }
28518
28519 EXPORT_SYMBOL(s3c2410_gpio_irq2pin);
28520 +
28521 +static void pretty_dump(u32 cfg, u32 state, u32 pull,
28522 + const char ** function_names_2,
28523 + const char ** function_names_3,
28524 + const char * prefix,
28525 + int count)
28526 +{
28527 + int n;
28528 + const char *tag_type = NULL,
28529 + *tag_state = NULL,
28530 + *tag_pulldown = NULL,
28531 + * level0 = "0",
28532 + * level1 = "1";
28533 +
28534 + for (n = 0; n < count; n++) {
28535 + switch ((cfg >> (2 * n)) & 3) {
28536 + case 0:
28537 + tag_type = "input ";
28538 + break;
28539 + case 1:
28540 + tag_type = "OUTPUT ";
28541 + break;
28542 + case 2:
28543 + if (function_names_2) {
28544 + if (function_names_2[n])
28545 + tag_type = function_names_2[n];
28546 + else
28547 + tag_type = "*** ILLEGAL CFG (2) *** ";
28548 + } else
28549 + tag_type = "(function) ";
28550 + break;
28551 + default:
28552 + if (function_names_3) {
28553 + if (function_names_3[n])
28554 + tag_type = function_names_3[n];
28555 + else
28556 + tag_type = "*** ILLEGAL CFG (3) *** ";
28557 + } else
28558 + tag_type = "(function) ";
28559 + break;
28560 + }
28561 + if ((state >> n) & 1)
28562 + tag_state = level1;
28563 + else
28564 + tag_state = level0;
28565 +
28566 + if (((pull >> n) & 1))
28567 + tag_pulldown = "";
28568 + else
28569 + tag_pulldown = "(pulldown)";
28570 +
28571 + printk(KERN_INFO"%s%02d: %s %s %s\n", prefix, n, tag_type,
28572 + tag_state, tag_pulldown);
28573 + }
28574 + printk(KERN_INFO"\n");
28575 +}
28576 +
28577 +static void pretty_dump_a(u32 cfg, u32 state,
28578 + const char ** function_names,
28579 + const char * prefix,
28580 + int count)
28581 +{
28582 + int n;
28583 + const char *tag_type = NULL,
28584 + *tag_state = NULL,
28585 + * level0 = "0",
28586 + * level1 = "1";
28587 +
28588 + for (n = 0; n < count; n++) {
28589 + switch ((cfg >> n) & 1) {
28590 + case 0:
28591 + tag_type = "OUTPUT ";
28592 + break;
28593 + default:
28594 + if (function_names) {
28595 + if (function_names[n])
28596 + tag_type = function_names[n];
28597 + else
28598 + tag_type = "*** ILLEGAL CFG *** ";
28599 + } else
28600 + tag_type = "(function) ";
28601 + break;
28602 + }
28603 + if ((state >> n) & 1)
28604 + tag_state = level1;
28605 + else
28606 + tag_state = level0;
28607 +
28608 + printk(KERN_INFO"%s%02d: %s %s\n", prefix, n, tag_type,
28609 + tag_state);
28610 + }
28611 + printk(KERN_INFO"\n");
28612 +}
28613 +
28614 +static const char * funcs_a[] = {
28615 + "ADDR0 ",
28616 + "ADDR16 ",
28617 + "ADDR17 ",
28618 + "ADDR18 ",
28619 + "ADDR19 ",
28620 + "ADDR20 ",
28621 + "ADDR21 ",
28622 + "ADDR22 ",
28623 + "ADDR23 ",
28624 + "ADDR24 ",
28625 + "ADDR25 ",
28626 + "ADDR26 ",
28627 + "nGCS[1] ",
28628 + "nGCS[2] ",
28629 + "nGCS[3] ",
28630 + "nGCS[4] ",
28631 + "nGCS[5] ",
28632 + "CLE ",
28633 + "ALE ",
28634 + "nFWE ",
28635 + "nFRE ",
28636 + "nRSTOUT ",
28637 + "nFCE ",
28638 + NULL,
28639 + NULL
28640 +};
28641 +
28642 +
28643 +static const char * funcs_b2[] = {
28644 + "TOUT0 ",
28645 + "TOUT1 ",
28646 + "TOUT2 ",
28647 + "TOUT3 ",
28648 + "TCLK[0] ",
28649 + "nXBACK ",
28650 + "nXBREQ ",
28651 + "nXDACK1 ",
28652 + "nXDREQ1 ",
28653 + "nXDACK0 ",
28654 + "nXDREQ0 ",
28655 +};
28656 +static const char * funcs_b3[] = {
28657 + NULL,
28658 + NULL,
28659 + NULL,
28660 + NULL,
28661 + NULL,
28662 + NULL,
28663 + NULL,
28664 + NULL,
28665 + NULL,
28666 + NULL,
28667 + NULL,
28668 +};
28669 +
28670 +static const char * funcs_c2[] = {
28671 + "LEND ",
28672 + "VCLK ",
28673 + "VLINE ",
28674 + "VFRAME ",
28675 + "VM ",
28676 + "LCD_LPCOE ",
28677 + "LCD_LPCREV ",
28678 + "LCD_LPCREVB",
28679 + "VD[0] ",
28680 + "VD[1] ",
28681 + "VD[2] ",
28682 + "VD[3] ",
28683 + "VD[4] ",
28684 + "VD[5] ",
28685 + "VD[6] ",
28686 + "VD[7] ",
28687 +};
28688 +static const char * funcs_c3[] = {
28689 + NULL,
28690 + NULL,
28691 + NULL,
28692 + NULL,
28693 + "I2SSDI ",
28694 + NULL,
28695 + NULL,
28696 + NULL,
28697 + NULL,
28698 + NULL,
28699 + NULL,
28700 + NULL,
28701 + NULL,
28702 + NULL,
28703 + NULL,
28704 + NULL,
28705 +};
28706 +
28707 +static const char * funcs_d2[] = {
28708 + "VD[8] ",
28709 + "VD[9] ",
28710 + "VD[10] ",
28711 + "VD[11] ",
28712 + "VD[12] ",
28713 + "VD[13] ",
28714 + "VD[14] ",
28715 + "VD[15] ",
28716 + "VD[16] ",
28717 + "VD[17] ",
28718 + "VD[18] ",
28719 + "VD[19] ",
28720 + "VD[20] ",
28721 + "VD[21] ",
28722 + "VD[22] ",
28723 + "VD[23] ",
28724 +};
28725 +static const char * funcs_d3[] = {
28726 + "nSPICS1 ",
28727 + "SPICLK1 ",
28728 + NULL,
28729 + NULL,
28730 + NULL,
28731 + NULL,
28732 + NULL,
28733 + NULL,
28734 + "SPIMISO1 ",
28735 + "SPIMOSI1 ",
28736 + "SPICLK1 ",
28737 + NULL,
28738 + NULL,
28739 + NULL,
28740 + "nSS1 ",
28741 + "nSS0 ",
28742 +};
28743 +
28744 +static const char * funcs_e2[] = {
28745 + "I2SLRCK ",
28746 + "I2SSCLK ",
28747 + "CDCLK ",
28748 + "I2SDI ",
28749 + "I2SDO ",
28750 + "SDCLK ",
28751 + "SDCMD ",
28752 + "SDDAT0 ",
28753 + "SDDAT1 ",
28754 + "SDDAT2 ",
28755 + "SDDAT3 ",
28756 + "SPIMISO0 ",
28757 + "SPIMOSI0 ",
28758 + "SPICLK0 ",
28759 + "IICSCL ",
28760 + "IICSDA ",
28761 +};
28762 +static const char * funcs_e3[] = {
28763 + NULL,
28764 + NULL,
28765 + NULL,
28766 + NULL,
28767 + NULL,
28768 + NULL,
28769 + NULL,
28770 + NULL,
28771 + NULL,
28772 + NULL,
28773 + NULL,
28774 + NULL,
28775 + NULL,
28776 + NULL,
28777 + NULL,
28778 + NULL,
28779 +};
28780 +
28781 +static const char * funcs_f2[] = {
28782 + "EINT[0] ",
28783 + "EINT[1] ",
28784 + "EINT[2] ",
28785 + "EINT[3] ",
28786 + "EINT[4] ",
28787 + "EINT[5] ",
28788 + "EINT[6] ",
28789 + "EINT[7] ",
28790 +};
28791 +static const char * funcs_f3[] = {
28792 + NULL,
28793 + NULL,
28794 + NULL,
28795 + NULL,
28796 + NULL,
28797 + NULL,
28798 + NULL,
28799 + NULL,
28800 +};
28801 +
28802 +
28803 +static const char * funcs_g2[] = {
28804 + "EINT[8] ",
28805 + "EINT[9] ",
28806 + "EINT[10] ",
28807 + "EINT[11] ",
28808 + "EINT[12] ",
28809 + "EINT[13] ",
28810 + "EINT[14] ",
28811 + "EINT[15] ",
28812 + "EINT[16] ",
28813 + "EINT[17] ",
28814 + "EINT[18] ",
28815 + "EINT[19] ",
28816 + "EINT[20] ",
28817 + "EINT[21] ",
28818 + "EINT[22] ",
28819 + "EINT[23] ",
28820 +};
28821 +static const char * funcs_g3[] = {
28822 + NULL,
28823 + NULL,
28824 + "nSS0 ",
28825 + "nSS1 ",
28826 + "LCD_PWRDN ",
28827 + "SPIMISO1 ",
28828 + "SPIMOSI1 ",
28829 + "SPICLK1 ",
28830 + NULL,
28831 + "nRTS1 ",
28832 + "nCTS1 ",
28833 + "TCLK[1] ",
28834 + "nSPICS0 ",
28835 + NULL,
28836 + NULL,
28837 + NULL,
28838 +};
28839 +
28840 +static const char * funcs_h2[] = {
28841 + "nCTS0 ",
28842 + "nRTS0 ",
28843 + "TXD[0] ",
28844 + "RXD[0] ",
28845 + "TXD[1] ",
28846 + "RXD[1] ",
28847 + "TXD[2] ",
28848 + "RXD[2] ",
28849 + "UEXTCLK ",
28850 + "CLKOUT0 ",
28851 + "CLKOUT1 ",
28852 +};
28853 +static const char * funcs_h3[] = {
28854 + NULL,
28855 + NULL,
28856 + NULL,
28857 + NULL,
28858 + NULL,
28859 + NULL,
28860 + "nRTS1 ",
28861 + "nCTS1 ",
28862 + NULL,
28863 + "nSPICS0 ",
28864 + NULL,
28865 +};
28866 +
28867 +static const char * funcs_j2[] = {
28868 + "CAMDATA[0] ",
28869 + "CAMDATA[1] ",
28870 + "CAMDATA[2] ",
28871 + "CAMDATA[3] ",
28872 + "CAMDATA[4] ",
28873 + "CAMDATA[5] ",
28874 + "CAMDATA[6] ",
28875 + "CAMDATA[7] ",
28876 + "CAMPCLK ",
28877 + "CAMVSYNC ",
28878 + "CAMHREF ",
28879 + "CAMCLKOUT ",
28880 + "CAMRESET ",
28881 +};
28882 +static const char * funcs_j3[] = {
28883 + NULL,
28884 + NULL,
28885 + NULL,
28886 + NULL,
28887 + NULL,
28888 + NULL,
28889 + NULL,
28890 + NULL,
28891 + NULL,
28892 + NULL,
28893 + NULL,
28894 + NULL,
28895 + NULL,
28896 +};
28897 +
28898 +/* used to dump GPIO states at suspend */
28899 +void s3c24xx_dump_gpio_states(void)
28900 +{
28901 + pretty_dump_a(__raw_readl(S3C2410_GPACON),
28902 + __raw_readl(S3C2410_GPADAT),
28903 + funcs_a, "GPA", 25);
28904 + pretty_dump(__raw_readl(S3C2410_GPBCON),
28905 + __raw_readl(S3C2410_GPBDAT),
28906 + __raw_readl(S3C2410_GPBUP),
28907 + funcs_b2, funcs_b3, "GPB", 11);
28908 + pretty_dump(__raw_readl(S3C2410_GPCCON),
28909 + __raw_readl(S3C2410_GPCDAT),
28910 + __raw_readl(S3C2410_GPCUP),
28911 + funcs_c2, funcs_c3, "GPC", 16);
28912 + pretty_dump(__raw_readl(S3C2410_GPDCON),
28913 + __raw_readl(S3C2410_GPDDAT),
28914 + __raw_readl(S3C2410_GPDUP),
28915 + funcs_d2, funcs_d3, "GPD", 16);
28916 + pretty_dump(__raw_readl(S3C2410_GPECON),
28917 + __raw_readl(S3C2410_GPEDAT),
28918 + __raw_readl(S3C2410_GPEUP),
28919 + funcs_e2, funcs_e3, "GPE", 16);
28920 + pretty_dump(__raw_readl(S3C2410_GPFCON),
28921 + __raw_readl(S3C2410_GPFDAT),
28922 + __raw_readl(S3C2410_GPFUP),
28923 + funcs_f2, funcs_f3, "GPF", 8);
28924 + pretty_dump(__raw_readl(S3C2410_GPGCON),
28925 + __raw_readl(S3C2410_GPGDAT),
28926 + __raw_readl(S3C2410_GPGUP),
28927 + funcs_g2, funcs_g3, "GPG", 16);
28928 + pretty_dump(__raw_readl(S3C2410_GPHCON),
28929 + __raw_readl(S3C2410_GPHDAT),
28930 + __raw_readl(S3C2410_GPHUP),
28931 + funcs_h2, funcs_h3, "GPH", 11);
28932 + pretty_dump(__raw_readl(S3C2440_GPJCON),
28933 + __raw_readl(S3C2440_GPJDAT),
28934 + __raw_readl(S3C2440_GPJUP),
28935 + funcs_j2, funcs_j3, "GPJ", 13);
28936 +
28937 +}
28938 +EXPORT_SYMBOL(s3c24xx_dump_gpio_states);
28939 +
28940 Index: linux-2.6.28/arch/arm/plat-s3c24xx/gpiolib.c
28941 ===================================================================
28942 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/gpiolib.c 2008-12-25 00:26:37.000000000 +0100
28943 +++ linux-2.6.28/arch/arm/plat-s3c24xx/gpiolib.c 2009-01-02 00:01:56.000000000 +0100
28944 @@ -19,104 +19,13 @@
28945 #include <linux/io.h>
28946 #include <linux/gpio.h>
28947
28948 +#include <plat/gpio-core.h>
28949 #include <mach/hardware.h>
28950 #include <asm/irq.h>
28951 +#include <plat/pm.h>
28952
28953 #include <mach/regs-gpio.h>
28954
28955 -struct s3c24xx_gpio_chip {
28956 - struct gpio_chip chip;
28957 - void __iomem *base;
28958 -};
28959 -
28960 -static inline struct s3c24xx_gpio_chip *to_s3c_chip(struct gpio_chip *gpc)
28961 -{
28962 - return container_of(gpc, struct s3c24xx_gpio_chip, chip);
28963 -}
28964 -
28965 -/* these routines are exported for use by other parts of the platform
28966 - * and system support, but are not intended to be used directly by the
28967 - * drivers themsevles.
28968 - */
28969 -
28970 -static int s3c24xx_gpiolib_input(struct gpio_chip *chip, unsigned offset)
28971 -{
28972 - struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip);
28973 - void __iomem *base = ourchip->base;
28974 - unsigned long flags;
28975 - unsigned long con;
28976 -
28977 - local_irq_save(flags);
28978 -
28979 - con = __raw_readl(base + 0x00);
28980 - con &= ~(3 << (offset * 2));
28981 - con |= (S3C2410_GPIO_OUTPUT & 0xf) << (offset * 2);
28982 -
28983 - __raw_writel(con, base + 0x00);
28984 -
28985 - local_irq_restore(flags);
28986 - return 0;
28987 -}
28988 -
28989 -static int s3c24xx_gpiolib_output(struct gpio_chip *chip,
28990 - unsigned offset, int value)
28991 -{
28992 - struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip);
28993 - void __iomem *base = ourchip->base;
28994 - unsigned long flags;
28995 - unsigned long dat;
28996 - unsigned long con;
28997 -
28998 - local_irq_save(flags);
28999 -
29000 - dat = __raw_readl(base + 0x04);
29001 - dat &= ~(1 << offset);
29002 - if (value)
29003 - dat |= 1 << offset;
29004 - __raw_writel(dat, base + 0x04);
29005 -
29006 - con = __raw_readl(base + 0x00);
29007 - con &= ~(3 << (offset * 2));
29008 - con |= (S3C2410_GPIO_OUTPUT & 0xf) << (offset * 2);
29009 -
29010 - __raw_writel(con, base + 0x00);
29011 - __raw_writel(dat, base + 0x04);
29012 -
29013 - local_irq_restore(flags);
29014 - return 0;
29015 -}
29016 -
29017 -static void s3c24xx_gpiolib_set(struct gpio_chip *chip,
29018 - unsigned offset, int value)
29019 -{
29020 - struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip);
29021 - void __iomem *base = ourchip->base;
29022 - unsigned long flags;
29023 - unsigned long dat;
29024 -
29025 - local_irq_save(flags);
29026 -
29027 - dat = __raw_readl(base + 0x04);
29028 - dat &= ~(1 << offset);
29029 - if (value)
29030 - dat |= 1 << offset;
29031 - __raw_writel(dat, base + 0x04);
29032 -
29033 - local_irq_restore(flags);
29034 -}
29035 -
29036 -static int s3c24xx_gpiolib_get(struct gpio_chip *chip, unsigned offset)
29037 -{
29038 - struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip);
29039 - unsigned long val;
29040 -
29041 - val = __raw_readl(ourchip->base + 0x04);
29042 - val >>= offset;
29043 - val &= 1;
29044 -
29045 - return val;
29046 -}
29047 -
29048 static int s3c24xx_gpiolib_banka_input(struct gpio_chip *chip, unsigned offset)
29049 {
29050 return -EINVAL;
29051 @@ -125,7 +34,7 @@ static int s3c24xx_gpiolib_banka_input(s
29052 static int s3c24xx_gpiolib_banka_output(struct gpio_chip *chip,
29053 unsigned offset, int value)
29054 {
29055 - struct s3c24xx_gpio_chip *ourchip = to_s3c_chip(chip);
29056 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
29057 void __iomem *base = ourchip->base;
29058 unsigned long flags;
29059 unsigned long dat;
29060 @@ -151,9 +60,10 @@ static int s3c24xx_gpiolib_banka_output(
29061 return 0;
29062 }
29063
29064 -static struct s3c24xx_gpio_chip gpios[] = {
29065 +struct s3c_gpio_chip s3c24xx_gpios[] = {
29066 [0] = {
29067 .base = S3C24XX_GPIO_BASE(S3C2410_GPA0),
29068 + .pm = __gpio_pm(&s3c_gpio_pm_1bit),
29069 .chip = {
29070 .base = S3C2410_GPA0,
29071 .owner = THIS_MODULE,
29072 @@ -161,97 +71,87 @@ static struct s3c24xx_gpio_chip gpios[]
29073 .ngpio = 24,
29074 .direction_input = s3c24xx_gpiolib_banka_input,
29075 .direction_output = s3c24xx_gpiolib_banka_output,
29076 - .set = s3c24xx_gpiolib_set,
29077 - .get = s3c24xx_gpiolib_get,
29078 },
29079 },
29080 [1] = {
29081 .base = S3C24XX_GPIO_BASE(S3C2410_GPB0),
29082 + .pm = __gpio_pm(&s3c_gpio_pm_2bit),
29083 .chip = {
29084 .base = S3C2410_GPB0,
29085 .owner = THIS_MODULE,
29086 .label = "GPIOB",
29087 .ngpio = 16,
29088 - .direction_input = s3c24xx_gpiolib_input,
29089 - .direction_output = s3c24xx_gpiolib_output,
29090 - .set = s3c24xx_gpiolib_set,
29091 - .get = s3c24xx_gpiolib_get,
29092 },
29093 },
29094 [2] = {
29095 .base = S3C24XX_GPIO_BASE(S3C2410_GPC0),
29096 + .pm = __gpio_pm(&s3c_gpio_pm_2bit),
29097 .chip = {
29098 .base = S3C2410_GPC0,
29099 .owner = THIS_MODULE,
29100 .label = "GPIOC",
29101 .ngpio = 16,
29102 - .direction_input = s3c24xx_gpiolib_input,
29103 - .direction_output = s3c24xx_gpiolib_output,
29104 - .set = s3c24xx_gpiolib_set,
29105 - .get = s3c24xx_gpiolib_get,
29106 },
29107 },
29108 [3] = {
29109 .base = S3C24XX_GPIO_BASE(S3C2410_GPD0),
29110 + .pm = __gpio_pm(&s3c_gpio_pm_2bit),
29111 .chip = {
29112 .base = S3C2410_GPD0,
29113 .owner = THIS_MODULE,
29114 .label = "GPIOD",
29115 .ngpio = 16,
29116 - .direction_input = s3c24xx_gpiolib_input,
29117 - .direction_output = s3c24xx_gpiolib_output,
29118 - .set = s3c24xx_gpiolib_set,
29119 - .get = s3c24xx_gpiolib_get,
29120 },
29121 },
29122 [4] = {
29123 .base = S3C24XX_GPIO_BASE(S3C2410_GPE0),
29124 + .pm = __gpio_pm(&s3c_gpio_pm_2bit),
29125 .chip = {
29126 .base = S3C2410_GPE0,
29127 .label = "GPIOE",
29128 .owner = THIS_MODULE,
29129 .ngpio = 16,
29130 - .direction_input = s3c24xx_gpiolib_input,
29131 - .direction_output = s3c24xx_gpiolib_output,
29132 - .set = s3c24xx_gpiolib_set,
29133 - .get = s3c24xx_gpiolib_get,
29134 },
29135 },
29136 [5] = {
29137 .base = S3C24XX_GPIO_BASE(S3C2410_GPF0),
29138 + .pm = __gpio_pm(&s3c_gpio_pm_2bit),
29139 .chip = {
29140 .base = S3C2410_GPF0,
29141 .owner = THIS_MODULE,
29142 .label = "GPIOF",
29143 .ngpio = 8,
29144 - .direction_input = s3c24xx_gpiolib_input,
29145 - .direction_output = s3c24xx_gpiolib_output,
29146 - .set = s3c24xx_gpiolib_set,
29147 - .get = s3c24xx_gpiolib_get,
29148 },
29149 },
29150 [6] = {
29151 .base = S3C24XX_GPIO_BASE(S3C2410_GPG0),
29152 + .pm = __gpio_pm(&s3c_gpio_pm_2bit),
29153 .chip = {
29154 .base = S3C2410_GPG0,
29155 .owner = THIS_MODULE,
29156 .label = "GPIOG",
29157 - .ngpio = 10,
29158 - .direction_input = s3c24xx_gpiolib_input,
29159 - .direction_output = s3c24xx_gpiolib_output,
29160 - .set = s3c24xx_gpiolib_set,
29161 - .get = s3c24xx_gpiolib_get,
29162 + .ngpio = 16,
29163 + },
29164 + },
29165 + [7] = {
29166 + .base = S3C24XX_GPIO_BASE(S3C2410_GPH0),
29167 + .pm = __gpio_pm(&s3c_gpio_pm_2bit),
29168 + .chip = {
29169 + .base = S3C2410_GPH0,
29170 + .owner = THIS_MODULE,
29171 + .label = "GPIOH",
29172 + .ngpio = 11,
29173 },
29174 },
29175 };
29176
29177 static __init int s3c24xx_gpiolib_init(void)
29178 {
29179 - struct s3c24xx_gpio_chip *chip = gpios;
29180 + struct s3c_gpio_chip *chip = s3c24xx_gpios;
29181 int gpn;
29182
29183 - for (gpn = 0; gpn < ARRAY_SIZE(gpios); gpn++, chip++)
29184 - gpiochip_add(&chip->chip);
29185 + for (gpn = 0; gpn < ARRAY_SIZE(s3c24xx_gpios); gpn++, chip++)
29186 + s3c_gpiolib_add(chip);
29187
29188 return 0;
29189 }
29190 Index: linux-2.6.28/arch/arm/plat-s3c24xx/gta02_pm_wlan.c
29191 ===================================================================
29192 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
29193 +++ linux-2.6.28/arch/arm/plat-s3c24xx/gta02_pm_wlan.c 2009-01-02 00:01:56.000000000 +0100
29194 @@ -0,0 +1,161 @@
29195 +/*
29196 + * GTA02 WLAN power management
29197 + *
29198 + * (C) 2008 by Openmoko Inc.
29199 + * Author: Andy Green <andy@openmoko.com>
29200 + * All rights reserved.
29201 + *
29202 + * This program is free software; you can redistribute it and/or modify
29203 + * it under the terms of the GNU General Public License version 2 as
29204 + * published by the Free Software Foundation
29205 + *
29206 + */
29207 +
29208 +#include <linux/module.h>
29209 +#include <linux/init.h>
29210 +#include <linux/kernel.h>
29211 +#include <linux/mutex.h>
29212 +#include <linux/platform_device.h>
29213 +
29214 +#include <mach/hardware.h>
29215 +#include <asm/mach-types.h>
29216 +#include <asm/plat-s3c24xx/neo1973.h>
29217 +
29218 +#include <mach/gta02.h>
29219 +#include <mach/gta02-pm-wlan.h>
29220 +#include <mach/regs-gpio.h>
29221 +#include <mach/regs-gpioj.h>
29222 +
29223 +#include <linux/delay.h>
29224 +
29225 +
29226 +static void __gta02_wlan_power(int on)
29227 +{
29228 + if (!on) {
29229 + s3c2410_gpio_setpin(GTA02_CHIP_PWD, 1);
29230 + s3c2410_gpio_setpin(GTA02_GPIO_nWLAN_RESET, 0);
29231 + return;
29232 + }
29233 +
29234 + /* power up sequencing */
29235 +
29236 + s3c2410_gpio_setpin(GTA02_CHIP_PWD, 1);
29237 + s3c2410_gpio_setpin(GTA02_GPIO_nWLAN_RESET, 0);
29238 + msleep(100);
29239 + s3c2410_gpio_setpin(GTA02_CHIP_PWD, 0);
29240 + msleep(100);
29241 + s3c2410_gpio_setpin(GTA02_GPIO_nWLAN_RESET, 1);
29242 +}
29243 +
29244 +void gta02_wlan_power(int on)
29245 +{
29246 + static DEFINE_MUTEX(lock);
29247 + static int is_on = -1; /* initial state is unknown */
29248 +
29249 + on = !!on; /* normalize */
29250 + mutex_lock(&lock);
29251 + if (on != is_on)
29252 + __gta02_wlan_power(on);
29253 + is_on = on;
29254 + mutex_unlock(&lock);
29255 +}
29256 +
29257 +static ssize_t gta02_wlan_read(struct device *dev,
29258 + struct device_attribute *attr, char *buf)
29259 +{
29260 + if (s3c2410_gpio_getpin(GTA02_CHIP_PWD))
29261 + return strlcpy(buf, "0\n", 3);
29262 +
29263 + return strlcpy(buf, "1\n", 3);
29264 +}
29265 +
29266 +static ssize_t gta02_wlan_write(struct device *dev,
29267 + struct device_attribute *attr, const char *buf, size_t count)
29268 +{
29269 + unsigned long on = simple_strtoul(buf, NULL, 10) & 1;
29270 +
29271 + gta02_wlan_power(on);
29272 + return count;
29273 +}
29274 +
29275 +static DEVICE_ATTR(power_on, 0644, gta02_wlan_read, gta02_wlan_write);
29276 +
29277 +#ifdef CONFIG_PM
29278 +static int gta02_wlan_suspend(struct platform_device *pdev, pm_message_t state)
29279 +{
29280 + dev_dbg(&pdev->dev, "suspending\n");
29281 +
29282 + return 0;
29283 +}
29284 +
29285 +static int gta02_wlan_resume(struct platform_device *pdev)
29286 +{
29287 + dev_dbg(&pdev->dev, "resuming\n");
29288 +
29289 + return 0;
29290 +}
29291 +#else
29292 +#define gta02_wlan_suspend NULL
29293 +#define gta02_wlan_resume NULL
29294 +#endif
29295 +
29296 +static struct attribute *gta02_wlan_sysfs_entries[] = {
29297 + &dev_attr_power_on.attr,
29298 + NULL
29299 +};
29300 +
29301 +static struct attribute_group gta02_wlan_attr_group = {
29302 + .name = NULL,
29303 + .attrs = gta02_wlan_sysfs_entries,
29304 +};
29305 +
29306 +static int __init gta02_wlan_probe(struct platform_device *pdev)
29307 +{
29308 + /* default-on for now */
29309 + const int default_state = 1;
29310 +
29311 + if (!machine_is_neo1973_gta02())
29312 + return -EINVAL;
29313 +
29314 + dev_info(&pdev->dev, "starting\n");
29315 +
29316 + s3c2410_gpio_cfgpin(GTA02_CHIP_PWD, S3C2410_GPIO_OUTPUT);
29317 + s3c2410_gpio_cfgpin(GTA02_GPIO_nWLAN_RESET, S3C2410_GPIO_OUTPUT);
29318 + gta02_wlan_power(default_state);
29319 +
29320 + return sysfs_create_group(&pdev->dev.kobj, &gta02_wlan_attr_group);
29321 +}
29322 +
29323 +static int gta02_wlan_remove(struct platform_device *pdev)
29324 +{
29325 + sysfs_remove_group(&pdev->dev.kobj, &gta02_wlan_attr_group);
29326 +
29327 + return 0;
29328 +}
29329 +
29330 +static struct platform_driver gta02_wlan_driver = {
29331 + .probe = gta02_wlan_probe,
29332 + .remove = gta02_wlan_remove,
29333 + .suspend = gta02_wlan_suspend,
29334 + .resume = gta02_wlan_resume,
29335 + .driver = {
29336 + .name = "gta02-pm-wlan",
29337 + },
29338 +};
29339 +
29340 +static int __devinit gta02_wlan_init(void)
29341 +{
29342 + return platform_driver_register(&gta02_wlan_driver);
29343 +}
29344 +
29345 +static void gta02_wlan_exit(void)
29346 +{
29347 + platform_driver_unregister(&gta02_wlan_driver);
29348 +}
29349 +
29350 +module_init(gta02_wlan_init);
29351 +module_exit(gta02_wlan_exit);
29352 +
29353 +MODULE_LICENSE("GPL");
29354 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
29355 +MODULE_DESCRIPTION("Openmoko GTA02 WLAN power management");
29356 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/mach/pwm-clock.h
29357 ===================================================================
29358 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
29359 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/mach/pwm-clock.h 2009-01-02 00:01:56.000000000 +0100
29360 @@ -0,0 +1,55 @@
29361 +/* linux/arch/arm/plat-s3c24xx/include/mach/pwm-clock.h
29362 + *
29363 + * Copyright 2008 Simtec Electronics
29364 + * Ben Dooks <ben@simtec.co.uk>
29365 + * http://armlinux.simtec.co.uk/
29366 + *
29367 + * S3C24xx - pwm clock and timer support
29368 + */
29369 +
29370 +/**
29371 + * pwm_cfg_src_is_tclk() - return whether the given mux config is a tclk
29372 + * @cfg: The timer TCFG1 register bits shifted down to 0.
29373 + *
29374 + * Return true if the given configuration from TCFG1 is a TCLK instead
29375 + * any of the TDIV clocks.
29376 + */
29377 +static inline int pwm_cfg_src_is_tclk(unsigned long tcfg)
29378 +{
29379 + return tcfg == S3C2410_TCFG1_MUX_TCLK;
29380 +}
29381 +
29382 +/**
29383 + * tcfg_to_divisor() - convert tcfg1 setting to a divisor
29384 + * @tcfg1: The tcfg1 setting, shifted down.
29385 + *
29386 + * Get the divisor value for the given tcfg1 setting. We assume the
29387 + * caller has already checked to see if this is not a TCLK source.
29388 + */
29389 +static inline unsigned long tcfg_to_divisor(unsigned long tcfg1)
29390 +{
29391 + return 1 << (1 + tcfg1);
29392 +}
29393 +
29394 +/**
29395 + * pwm_tdiv_has_div1() - does the tdiv setting have a /1
29396 + *
29397 + * Return true if we have a /1 in the tdiv setting.
29398 + */
29399 +static inline unsigned int pwm_tdiv_has_div1(void)
29400 +{
29401 + return 0;
29402 +}
29403 +
29404 +/**
29405 + * pwm_tdiv_div_bits() - calculate TCFG1 divisor value.
29406 + * @div: The divisor to calculate the bit information for.
29407 + *
29408 + * Turn a divisor into the necessary bit field for TCFG1.
29409 + */
29410 +static inline unsigned long pwm_tdiv_div_bits(unsigned int div)
29411 +{
29412 + return ilog2(div) - 1;
29413 +}
29414 +
29415 +#define S3C_TCFG1_MUX_TCLK S3C2410_TCFG1_MUX_TCLK
29416 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/clock.h
29417 ===================================================================
29418 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/clock.h 2008-12-25 00:26:37.000000000 +0100
29419 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
29420 @@ -1,64 +0,0 @@
29421 -/* linux/include/asm-arm/plat-s3c24xx/clock.h
29422 - * linux/arch/arm/mach-s3c2410/clock.h
29423 - *
29424 - * Copyright (c) 2004-2005 Simtec Electronics
29425 - * http://www.simtec.co.uk/products/SWLINUX/
29426 - * Written by Ben Dooks, <ben@simtec.co.uk>
29427 - *
29428 - * This program is free software; you can redistribute it and/or modify
29429 - * it under the terms of the GNU General Public License version 2 as
29430 - * published by the Free Software Foundation.
29431 -*/
29432 -
29433 -struct clk {
29434 - struct list_head list;
29435 - struct module *owner;
29436 - struct clk *parent;
29437 - const char *name;
29438 - int id;
29439 - int usage;
29440 - unsigned long rate;
29441 - unsigned long ctrlbit;
29442 -
29443 - int (*enable)(struct clk *, int enable);
29444 - int (*set_rate)(struct clk *c, unsigned long rate);
29445 - unsigned long (*get_rate)(struct clk *c);
29446 - unsigned long (*round_rate)(struct clk *c, unsigned long rate);
29447 - int (*set_parent)(struct clk *c, struct clk *parent);
29448 -};
29449 -
29450 -/* other clocks which may be registered by board support */
29451 -
29452 -extern struct clk s3c24xx_dclk0;
29453 -extern struct clk s3c24xx_dclk1;
29454 -extern struct clk s3c24xx_clkout0;
29455 -extern struct clk s3c24xx_clkout1;
29456 -extern struct clk s3c24xx_uclk;
29457 -
29458 -extern struct clk clk_usb_bus;
29459 -
29460 -/* core clock support */
29461 -
29462 -extern struct clk clk_f;
29463 -extern struct clk clk_h;
29464 -extern struct clk clk_p;
29465 -extern struct clk clk_mpll;
29466 -extern struct clk clk_upll;
29467 -extern struct clk clk_xtal;
29468 -
29469 -/* exports for arch/arm/mach-s3c2410
29470 - *
29471 - * Please DO NOT use these outside of arch/arm/mach-s3c2410
29472 -*/
29473 -
29474 -extern struct mutex clocks_mutex;
29475 -
29476 -extern int s3c2410_clkcon_enable(struct clk *clk, int enable);
29477 -
29478 -extern int s3c24xx_register_clock(struct clk *clk);
29479 -extern int s3c24xx_register_clocks(struct clk **clk, int nr_clks);
29480 -
29481 -extern int s3c24xx_setup_clocks(unsigned long xtal,
29482 - unsigned long fclk,
29483 - unsigned long hclk,
29484 - unsigned long pclk);
29485 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/cpu.h
29486 ===================================================================
29487 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/cpu.h 2008-12-25 00:26:37.000000000 +0100
29488 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
29489 @@ -1,54 +0,0 @@
29490 -/* linux/include/asm-arm/plat-s3c24xx/cpu.h
29491 - *
29492 - * Copyright (c) 2004-2005 Simtec Electronics
29493 - * Ben Dooks <ben@simtec.co.uk>
29494 - *
29495 - * Header file for S3C24XX CPU support
29496 - *
29497 - * This program is free software; you can redistribute it and/or modify
29498 - * it under the terms of the GNU General Public License version 2 as
29499 - * published by the Free Software Foundation.
29500 -*/
29501 -
29502 -/* todo - fix when rmk changes iodescs to use `void __iomem *` */
29503 -
29504 -#define IODESC_ENT(x) { (unsigned long)S3C24XX_VA_##x, __phys_to_pfn(S3C24XX_PA_##x), S3C24XX_SZ_##x, MT_DEVICE }
29505 -
29506 -#ifndef MHZ
29507 -#define MHZ (1000*1000)
29508 -#endif
29509 -
29510 -#define print_mhz(m) ((m) / MHZ), ((m / 1000) % 1000)
29511 -
29512 -/* forward declaration */
29513 -struct s3c24xx_uart_resources;
29514 -struct platform_device;
29515 -struct s3c2410_uartcfg;
29516 -struct map_desc;
29517 -
29518 -/* core initialisation functions */
29519 -
29520 -extern void s3c24xx_init_irq(void);
29521 -
29522 -extern void s3c24xx_init_io(struct map_desc *mach_desc, int size);
29523 -
29524 -extern void s3c24xx_init_uarts(struct s3c2410_uartcfg *cfg, int no);
29525 -
29526 -extern void s3c24xx_init_clocks(int xtal);
29527 -
29528 -extern void s3c24xx_init_uartdevs(char *name,
29529 - struct s3c24xx_uart_resources *res,
29530 - struct s3c2410_uartcfg *cfg, int no);
29531 -
29532 -/* timer for 2410/2440 */
29533 -
29534 -struct sys_timer;
29535 -extern struct sys_timer s3c24xx_timer;
29536 -
29537 -/* system device classes */
29538 -
29539 -extern struct sysdev_class s3c2410_sysclass;
29540 -extern struct sysdev_class s3c2412_sysclass;
29541 -extern struct sysdev_class s3c2440_sysclass;
29542 -extern struct sysdev_class s3c2442_sysclass;
29543 -extern struct sysdev_class s3c2443_sysclass;
29544 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/devs.h
29545 ===================================================================
29546 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/devs.h 2008-12-25 00:26:37.000000000 +0100
29547 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
29548 @@ -1,49 +0,0 @@
29549 -/* linux/include/asm-arm/plat-s3c24xx/devs.h
29550 - *
29551 - * Copyright (c) 2004 Simtec Electronics
29552 - * Ben Dooks <ben@simtec.co.uk>
29553 - *
29554 - * Header file for s3c2410 standard platform devices
29555 - *
29556 - * This program is free software; you can redistribute it and/or modify
29557 - * it under the terms of the GNU General Public License version 2 as
29558 - * published by the Free Software Foundation.
29559 -*/
29560 -#include <linux/platform_device.h>
29561 -
29562 -struct s3c24xx_uart_resources {
29563 - struct resource *resources;
29564 - unsigned long nr_resources;
29565 -};
29566 -
29567 -extern struct s3c24xx_uart_resources s3c2410_uart_resources[];
29568 -
29569 -extern struct platform_device *s3c24xx_uart_devs[];
29570 -extern struct platform_device *s3c24xx_uart_src[];
29571 -
29572 -extern struct platform_device s3c_device_timer[];
29573 -
29574 -extern struct platform_device s3c_device_usb;
29575 -extern struct platform_device s3c_device_lcd;
29576 -extern struct platform_device s3c_device_wdt;
29577 -extern struct platform_device s3c_device_i2c;
29578 -extern struct platform_device s3c_device_iis;
29579 -extern struct platform_device s3c_device_rtc;
29580 -extern struct platform_device s3c_device_adc;
29581 -extern struct platform_device s3c_device_sdi;
29582 -extern struct platform_device s3c_device_hsmmc;
29583 -
29584 -extern struct platform_device s3c_device_spi0;
29585 -extern struct platform_device s3c_device_spi1;
29586 -
29587 -extern struct platform_device s3c_device_nand;
29588 -
29589 -extern struct platform_device s3c_device_usbgadget;
29590 -
29591 -/* s3c2440 specific devices */
29592 -
29593 -#ifdef CONFIG_CPU_S3C2440
29594 -
29595 -extern struct platform_device s3c_device_camif;
29596 -
29597 -#endif
29598 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/irq.h
29599 ===================================================================
29600 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/irq.h 2008-12-25 00:26:37.000000000 +0100
29601 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/irq.h 2009-01-02 00:01:56.000000000 +0100
29602 @@ -10,6 +10,12 @@
29603 * published by the Free Software Foundation.
29604 */
29605
29606 +#include <linux/io.h>
29607 +
29608 +#include <mach/hardware.h>
29609 +#include <mach/regs-irq.h>
29610 +#include <mach/regs-gpio.h>
29611 +
29612 #define irqdbf(x...)
29613 #define irqdbf2(x...)
29614
29615 @@ -25,8 +31,15 @@ s3c_irqsub_mask(unsigned int irqno, unsi
29616 {
29617 unsigned long mask;
29618 unsigned long submask;
29619 +#ifdef CONFIG_S3C2440_C_FIQ
29620 + unsigned long flags;
29621 +#endif
29622
29623 submask = __raw_readl(S3C2410_INTSUBMSK);
29624 +#ifdef CONFIG_S3C2440_C_FIQ
29625 + local_save_flags(flags);
29626 + local_fiq_disable();
29627 +#endif
29628 mask = __raw_readl(S3C2410_INTMSK);
29629
29630 submask |= (1UL << (irqno - IRQ_S3CUART_RX0));
29631 @@ -39,6 +52,9 @@ s3c_irqsub_mask(unsigned int irqno, unsi
29632
29633 /* write back masks */
29634 __raw_writel(submask, S3C2410_INTSUBMSK);
29635 +#ifdef CONFIG_S3C2440_C_FIQ
29636 + local_irq_restore(flags);
29637 +#endif
29638
29639 }
29640
29641 @@ -47,8 +63,15 @@ s3c_irqsub_unmask(unsigned int irqno, un
29642 {
29643 unsigned long mask;
29644 unsigned long submask;
29645 +#ifdef CONFIG_S3C2440_C_FIQ
29646 + unsigned long flags;
29647 +#endif
29648
29649 submask = __raw_readl(S3C2410_INTSUBMSK);
29650 +#ifdef CONFIG_S3C2440_C_FIQ
29651 + local_save_flags(flags);
29652 + local_fiq_disable();
29653 +#endif
29654 mask = __raw_readl(S3C2410_INTMSK);
29655
29656 submask &= ~(1UL << (irqno - IRQ_S3CUART_RX0));
29657 @@ -57,6 +80,9 @@ s3c_irqsub_unmask(unsigned int irqno, un
29658 /* write back masks */
29659 __raw_writel(submask, S3C2410_INTSUBMSK);
29660 __raw_writel(mask, S3C2410_INTMSK);
29661 +#ifdef CONFIG_S3C2440_C_FIQ
29662 + local_irq_restore(flags);
29663 +#endif
29664 }
29665
29666
29667 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/map.h
29668 ===================================================================
29669 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
29670 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/map.h 2009-01-02 00:01:56.000000000 +0100
29671 @@ -0,0 +1,101 @@
29672 +/* linux/include/asm-arm/plat-s3c24xx/map.h
29673 + *
29674 + * Copyright (c) 2008 Simtec Electronics
29675 + * Ben Dooks <ben@simtec.co.uk>
29676 + *
29677 + * S3C24XX - Memory map definitions
29678 + *
29679 + * This program is free software; you can redistribute it and/or modify
29680 + * it under the terms of the GNU General Public License version 2 as
29681 + * published by the Free Software Foundation.
29682 +*/
29683 +
29684 +#ifndef __ASM_PLAT_S3C24XX_MAP_H
29685 +#define __ASM_PLAT_S3C24XX_MAP_H
29686 +
29687 +/* interrupt controller is the first thing we put in, to make
29688 + * the assembly code for the irq detection easier
29689 + */
29690 +#define S3C24XX_VA_IRQ S3C_VA_IRQ
29691 +#define S3C2410_PA_IRQ (0x4A000000)
29692 +#define S3C24XX_SZ_IRQ SZ_1M
29693 +
29694 +/* memory controller registers */
29695 +#define S3C24XX_VA_MEMCTRL S3C_VA_MEM
29696 +#define S3C2410_PA_MEMCTRL (0x48000000)
29697 +#define S3C24XX_SZ_MEMCTRL SZ_1M
29698 +
29699 +/* UARTs */
29700 +#define S3C24XX_VA_UART S3C_VA_UART
29701 +#define S3C2410_PA_UART (0x50000000)
29702 +#define S3C24XX_SZ_UART SZ_1M
29703 +#define S3C_UART_OFFSET (0x4000)
29704 +
29705 +#define S3C_VA_UARTx(uart) (S3C_VA_UART + ((uart * S3C_UART_OFFSET)))
29706 +
29707 +/* Timers */
29708 +#define S3C24XX_VA_TIMER S3C_VA_TIMER
29709 +#define S3C2410_PA_TIMER (0x51000000)
29710 +#define S3C24XX_SZ_TIMER SZ_1M
29711 +
29712 +/* Clock and Power management */
29713 +#define S3C24XX_VA_CLKPWR S3C_VA_SYS
29714 +#define S3C24XX_SZ_CLKPWR SZ_1M
29715 +
29716 +/* USB Device port */
29717 +#define S3C2410_PA_USBDEV (0x52000000)
29718 +#define S3C24XX_SZ_USBDEV SZ_1M
29719 +
29720 +/* Watchdog */
29721 +#define S3C24XX_VA_WATCHDOG S3C_VA_WATCHDOG
29722 +#define S3C2410_PA_WATCHDOG (0x53000000)
29723 +#define S3C24XX_SZ_WATCHDOG SZ_1M
29724 +
29725 +/* Standard size definitions for peripheral blocks. */
29726 +
29727 +#define S3C24XX_SZ_IIS SZ_1M
29728 +#define S3C24XX_SZ_ADC SZ_1M
29729 +#define S3C24XX_SZ_SPI SZ_1M
29730 +#define S3C24XX_SZ_SDI SZ_1M
29731 +#define S3C24XX_SZ_NAND SZ_1M
29732 +#define S3C24XX_SZ_USBHOST SZ_1M
29733 +
29734 +/* GPIO ports */
29735 +
29736 +/* the calculation for the VA of this must ensure that
29737 + * it is the same distance apart from the UART in the
29738 + * phsyical address space, as the initial mapping for the IO
29739 + * is done as a 1:1 maping. This puts it (currently) at
29740 + * 0xFA800000, which is not in the way of any current mapping
29741 + * by the base system.
29742 +*/
29743 +
29744 +#define S3C2410_PA_GPIO (0x56000000)
29745 +#define S3C24XX_VA_GPIO ((S3C24XX_PA_GPIO - S3C24XX_PA_UART) + S3C24XX_VA_UART)
29746 +#define S3C24XX_SZ_GPIO SZ_1M
29747 +
29748 +
29749 +/* ISA style IO, for each machine to sort out mappings for, if it
29750 + * implements it. We reserve two 16M regions for ISA.
29751 + */
29752 +
29753 +#define S3C24XX_VA_ISA_WORD S3C2410_ADDR(0x02000000)
29754 +#define S3C24XX_VA_ISA_BYTE S3C2410_ADDR(0x03000000)
29755 +
29756 +/* deal with the registers that move under the 2412/2413 */
29757 +
29758 +#if defined(CONFIG_CPU_S3C2412) || defined(CONFIG_CPU_S3C2413)
29759 +#ifndef __ASSEMBLY__
29760 +extern void __iomem *s3c24xx_va_gpio2;
29761 +#endif
29762 +#ifdef CONFIG_CPU_S3C2412_ONLY
29763 +#define S3C24XX_VA_GPIO2 (S3C24XX_VA_GPIO + 0x10)
29764 +#else
29765 +#define S3C24XX_VA_GPIO2 s3c24xx_va_gpio2
29766 +#endif
29767 +#else
29768 +#define s3c24xx_va_gpio2 S3C24XX_VA_GPIO
29769 +#define S3C24XX_VA_GPIO2 S3C24XX_VA_GPIO
29770 +#endif
29771 +
29772 +#endif /* __ASM_PLAT_S3C24XX_MAP_H */
29773 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/mci.h
29774 ===================================================================
29775 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
29776 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/mci.h 2009-01-02 00:01:56.000000000 +0100
29777 @@ -0,0 +1,15 @@
29778 +#ifndef _ARCH_MCI_H
29779 +#define _ARCH_MCI_H
29780 +
29781 +struct s3c24xx_mci_pdata {
29782 + unsigned int wprotect_invert : 1;
29783 + unsigned int detect_invert : 1; /* set => detect active high. */
29784 +
29785 + unsigned int gpio_detect;
29786 + unsigned int gpio_wprotect;
29787 + unsigned long ocr_avail;
29788 + void (*set_power)(unsigned char power_mode,
29789 + unsigned short vdd);
29790 +};
29791 +
29792 +#endif /* _ARCH_NCI_H */
29793 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/pll.h
29794 ===================================================================
29795 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
29796 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/pll.h 2009-01-02 00:01:56.000000000 +0100
29797 @@ -0,0 +1,37 @@
29798 +/* linux/arch/arm/plat-s3c24xx/include/plat/pll.h
29799 + *
29800 + * Copyright 2008 Simtec Electronics
29801 + * Ben Dooks <ben@simtec.co.uk>
29802 + * http://armlinux.simtec.co.uk/
29803 + *
29804 + * S3C24xx - common pll registers and code
29805 + */
29806 +
29807 +#define S3C24XX_PLLCON_MDIVSHIFT 12
29808 +#define S3C24XX_PLLCON_PDIVSHIFT 4
29809 +#define S3C24XX_PLLCON_SDIVSHIFT 0
29810 +#define S3C24XX_PLLCON_MDIVMASK ((1<<(1+(19-12)))-1)
29811 +#define S3C24XX_PLLCON_PDIVMASK ((1<<5)-1)
29812 +#define S3C24XX_PLLCON_SDIVMASK 3
29813 +
29814 +#include <asm/div64.h>
29815 +
29816 +static inline unsigned int
29817 +s3c24xx_get_pll(unsigned int pllval, unsigned int baseclk)
29818 +{
29819 + unsigned int mdiv, pdiv, sdiv;
29820 + uint64_t fvco;
29821 +
29822 + mdiv = pllval >> S3C24XX_PLLCON_MDIVSHIFT;
29823 + pdiv = pllval >> S3C24XX_PLLCON_PDIVSHIFT;
29824 + sdiv = pllval >> S3C24XX_PLLCON_SDIVSHIFT;
29825 +
29826 + mdiv &= S3C24XX_PLLCON_MDIVMASK;
29827 + pdiv &= S3C24XX_PLLCON_PDIVMASK;
29828 + sdiv &= S3C24XX_PLLCON_SDIVMASK;
29829 +
29830 + fvco = (uint64_t)baseclk * (mdiv + 8);
29831 + do_div(fvco, (pdiv + 2) << sdiv);
29832 +
29833 + return (unsigned int)fvco;
29834 +}
29835 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/pm-core.h
29836 ===================================================================
29837 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
29838 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/pm-core.h 2009-01-02 00:01:56.000000000 +0100
29839 @@ -0,0 +1,64 @@
29840 +/* linux/arch/arm/plat-s3c24xx/include/plat/pll.h
29841 + *
29842 + * Copyright 2008 Simtec Electronics
29843 + * Ben Dooks <ben@simtec.co.uk>
29844 + * http://armlinux.simtec.co.uk/
29845 + *
29846 + * S3C24xx - PM core support for arch/arm/plat-s3c/pm.c
29847 + *
29848 + * This program is free software; you can redistribute it and/or modify
29849 + * it under the terms of the GNU General Public License version 2 as
29850 + * published by the Free Software Foundation.
29851 + */
29852 +
29853 +static inline void s3c_pm_debug_init_uart(void)
29854 +{
29855 + unsigned long tmp = __raw_readl(S3C2410_CLKCON);
29856 +
29857 + /* re-start uart clocks */
29858 + tmp |= S3C2410_CLKCON_UART0;
29859 + tmp |= S3C2410_CLKCON_UART1;
29860 + tmp |= S3C2410_CLKCON_UART2;
29861 +
29862 + __raw_writel(tmp, S3C2410_CLKCON);
29863 + udelay(10);
29864 +}
29865 +
29866 +static inline void s3c_pm_arch_prepare_irqs(void)
29867 +{
29868 + __raw_writel(s3c_irqwake_intmask, S3C2410_INTMSK);
29869 + __raw_writel(s3c_irqwake_eintmask, S3C2410_EINTMASK);
29870 +
29871 + /* ack any outstanding external interrupts before we go to sleep */
29872 +
29873 + __raw_writel(__raw_readl(S3C2410_EINTPEND), S3C2410_EINTPEND);
29874 + __raw_writel(__raw_readl(S3C2410_INTPND), S3C2410_INTPND);
29875 + __raw_writel(__raw_readl(S3C2410_SRCPND), S3C2410_SRCPND);
29876 +
29877 +}
29878 +
29879 +static inline void s3c_pm_arch_stop_clocks(void)
29880 +{
29881 + __raw_writel(0x00, S3C2410_CLKCON); /* turn off clocks over sleep */
29882 +}
29883 +
29884 +static void s3c_pm_show_resume_irqs(int start, unsigned long which,
29885 + unsigned long mask);
29886 +
29887 +static inline void s3c_pm_arch_show_resume_irqs(void)
29888 +{
29889 + S3C_PMDBG("post sleep: IRQs 0x%08x, 0x%08x\n",
29890 + __raw_readl(S3C2410_SRCPND),
29891 + __raw_readl(S3C2410_EINTPEND));
29892 +
29893 + s3c_pm_show_resume_irqs(IRQ_EINT0, __raw_readl(S3C2410_SRCPND),
29894 + s3c_irqwake_intmask);
29895 +
29896 + s3c_pm_show_resume_irqs(IRQ_EINT4-4, __raw_readl(S3C2410_EINTPEND),
29897 + s3c_irqwake_eintmask);
29898 +}
29899 +
29900 +static inline void s3c_pm_arch_update_uart(void __iomem *regs,
29901 + struct pm_uart_save *save)
29902 +{
29903 +}
29904 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/pm.h
29905 ===================================================================
29906 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/pm.h 2008-12-25 00:26:37.000000000 +0100
29907 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
29908 @@ -1,73 +0,0 @@
29909 -/* linux/include/asm-arm/plat-s3c24xx/pm.h
29910 - *
29911 - * Copyright (c) 2004 Simtec Electronics
29912 - * Written by Ben Dooks, <ben@simtec.co.uk>
29913 - *
29914 - * This program is free software; you can redistribute it and/or modify
29915 - * it under the terms of the GNU General Public License version 2 as
29916 - * published by the Free Software Foundation.
29917 -*/
29918 -
29919 -/* s3c2410_pm_init
29920 - *
29921 - * called from board at initialisation time to setup the power
29922 - * management
29923 -*/
29924 -
29925 -#ifdef CONFIG_PM
29926 -
29927 -extern __init int s3c2410_pm_init(void);
29928 -
29929 -#else
29930 -
29931 -static inline int s3c2410_pm_init(void)
29932 -{
29933 - return 0;
29934 -}
29935 -#endif
29936 -
29937 -/* configuration for the IRQ mask over sleep */
29938 -extern unsigned long s3c_irqwake_intmask;
29939 -extern unsigned long s3c_irqwake_eintmask;
29940 -
29941 -/* IRQ masks for IRQs allowed to go to sleep (see irq.c) */
29942 -extern unsigned long s3c_irqwake_intallow;
29943 -extern unsigned long s3c_irqwake_eintallow;
29944 -
29945 -/* per-cpu sleep functions */
29946 -
29947 -extern void (*pm_cpu_prep)(void);
29948 -extern void (*pm_cpu_sleep)(void);
29949 -
29950 -/* Flags for PM Control */
29951 -
29952 -extern unsigned long s3c_pm_flags;
29953 -
29954 -/* from sleep.S */
29955 -
29956 -extern int s3c2410_cpu_save(unsigned long *saveblk);
29957 -extern void s3c2410_cpu_suspend(void);
29958 -extern void s3c2410_cpu_resume(void);
29959 -
29960 -extern unsigned long s3c2410_sleep_save_phys;
29961 -
29962 -/* sleep save info */
29963 -
29964 -struct sleep_save {
29965 - void __iomem *reg;
29966 - unsigned long val;
29967 -};
29968 -
29969 -#define SAVE_ITEM(x) \
29970 - { .reg = (x) }
29971 -
29972 -extern void s3c2410_pm_do_save(struct sleep_save *ptr, int count);
29973 -extern void s3c2410_pm_do_restore(struct sleep_save *ptr, int count);
29974 -
29975 -#ifdef CONFIG_PM
29976 -extern int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t state);
29977 -extern int s3c24xx_irq_resume(struct sys_device *dev);
29978 -#else
29979 -#define s3c24xx_irq_suspend NULL
29980 -#define s3c24xx_irq_resume NULL
29981 -#endif
29982 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/regs-spi.h
29983 ===================================================================
29984 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
29985 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/regs-spi.h 2009-01-02 00:01:56.000000000 +0100
29986 @@ -0,0 +1,82 @@
29987 +/* arch/arm/mach-s3c2410/include/mach/regs-spi.h
29988 + *
29989 + * Copyright (c) 2004 Fetron GmbH
29990 + *
29991 + * This program is free software; you can redistribute it and/or modify
29992 + * it under the terms of the GNU General Public License version 2 as
29993 + * published by the Free Software Foundation.
29994 + *
29995 + * S3C2410 SPI register definition
29996 +*/
29997 +
29998 +#ifndef __ASM_ARCH_REGS_SPI_H
29999 +#define __ASM_ARCH_REGS_SPI_H
30000 +
30001 +#define S3C2410_SPI1 (0x20)
30002 +#define S3C2412_SPI1 (0x100)
30003 +
30004 +#define S3C2410_SPCON (0x00)
30005 +
30006 +#define S3C2412_SPCON_RXFIFO_RB2 (0<<14)
30007 +#define S3C2412_SPCON_RXFIFO_RB4 (1<<14)
30008 +#define S3C2412_SPCON_RXFIFO_RB12 (2<<14)
30009 +#define S3C2412_SPCON_RXFIFO_RB14 (3<<14)
30010 +#define S3C2412_SPCON_TXFIFO_RB2 (0<<12)
30011 +#define S3C2412_SPCON_TXFIFO_RB4 (1<<12)
30012 +#define S3C2412_SPCON_TXFIFO_RB12 (2<<12)
30013 +#define S3C2412_SPCON_TXFIFO_RB14 (3<<12)
30014 +#define S3C2412_SPCON_RXFIFO_RESET (1<<11) /* RxFIFO reset */
30015 +#define S3C2412_SPCON_TXFIFO_RESET (1<<10) /* TxFIFO reset */
30016 +#define S3C2412_SPCON_RXFIFO_EN (1<<9) /* RxFIFO Enable */
30017 +#define S3C2412_SPCON_TXFIFO_EN (1<<8) /* TxFIFO Enable */
30018 +
30019 +#define S3C2412_SPCON_DIRC_RX (1<<7)
30020 +
30021 +#define S3C2410_SPCON_SMOD_DMA (2<<5) /* DMA mode */
30022 +#define S3C2410_SPCON_SMOD_INT (1<<5) /* interrupt mode */
30023 +#define S3C2410_SPCON_SMOD_POLL (0<<5) /* polling mode */
30024 +#define S3C2410_SPCON_ENSCK (1<<4) /* Enable SCK */
30025 +#define S3C2410_SPCON_MSTR (1<<3) /* Master/Slave select
30026 + 0: slave, 1: master */
30027 +#define S3C2410_SPCON_CPOL_HIGH (1<<2) /* Clock polarity select */
30028 +#define S3C2410_SPCON_CPOL_LOW (0<<2) /* Clock polarity select */
30029 +
30030 +#define S3C2410_SPCON_CPHA_FMTB (1<<1) /* Clock Phase Select */
30031 +#define S3C2410_SPCON_CPHA_FMTA (0<<1) /* Clock Phase Select */
30032 +
30033 +#define S3C2410_SPCON_TAGD (1<<0) /* Tx auto garbage data mode */
30034 +
30035 +
30036 +#define S3C2410_SPSTA (0x04)
30037 +
30038 +#define S3C2412_SPSTA_RXFIFO_AE (1<<11)
30039 +#define S3C2412_SPSTA_TXFIFO_AE (1<<10)
30040 +#define S3C2412_SPSTA_RXFIFO_ERROR (1<<9)
30041 +#define S3C2412_SPSTA_TXFIFO_ERROR (1<<8)
30042 +#define S3C2412_SPSTA_RXFIFO_FIFO (1<<7)
30043 +#define S3C2412_SPSTA_RXFIFO_EMPTY (1<<6)
30044 +#define S3C2412_SPSTA_TXFIFO_NFULL (1<<5)
30045 +#define S3C2412_SPSTA_TXFIFO_EMPTY (1<<4)
30046 +
30047 +#define S3C2410_SPSTA_DCOL (1<<2) /* Data Collision Error */
30048 +#define S3C2410_SPSTA_MULD (1<<1) /* Multi Master Error */
30049 +#define S3C2410_SPSTA_READY (1<<0) /* Data Tx/Rx ready */
30050 +#define S3C2412_SPSTA_READY_ORG (1<<3)
30051 +
30052 +#define S3C2410_SPPIN (0x08)
30053 +
30054 +#define S3C2410_SPPIN_ENMUL (1<<2) /* Multi Master Error detect */
30055 +#define S3C2410_SPPIN_RESERVED (1<<1)
30056 +#define S3C2400_SPPIN_nCS (1<<1) /* SPI Card Select */
30057 +#define S3C2410_SPPIN_KEEP (1<<0) /* Master Out keep */
30058 +
30059 +#define S3C2410_SPPRE (0x0C)
30060 +#define S3C2410_SPTDAT (0x10)
30061 +#define S3C2410_SPRDAT (0x14)
30062 +
30063 +#define S3C2412_TXFIFO (0x18)
30064 +#define S3C2412_RXFIFO (0x18)
30065 +#define S3C2412_SPFIC (0x24)
30066 +
30067 +
30068 +#endif /* __ASM_ARCH_REGS_SPI_H */
30069 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/regs-udc.h
30070 ===================================================================
30071 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
30072 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/regs-udc.h 2009-01-02 00:01:56.000000000 +0100
30073 @@ -0,0 +1,153 @@
30074 +/* arch/arm/mach-s3c2410/include/mach/regs-udc.h
30075 + *
30076 + * Copyright (C) 2004 Herbert Poetzl <herbert@13thfloor.at>
30077 + *
30078 + * This include file is free software; you can redistribute it and/or
30079 + * modify it under the terms of the GNU General Public License as
30080 + * published by the Free Software Foundation; either version 2 of
30081 + * the License, or (at your option) any later version.
30082 +*/
30083 +
30084 +#ifndef __ASM_ARCH_REGS_UDC_H
30085 +#define __ASM_ARCH_REGS_UDC_H
30086 +
30087 +#define S3C2410_USBDREG(x) (x)
30088 +
30089 +#define S3C2410_UDC_FUNC_ADDR_REG S3C2410_USBDREG(0x0140)
30090 +#define S3C2410_UDC_PWR_REG S3C2410_USBDREG(0x0144)
30091 +#define S3C2410_UDC_EP_INT_REG S3C2410_USBDREG(0x0148)
30092 +
30093 +#define S3C2410_UDC_USB_INT_REG S3C2410_USBDREG(0x0158)
30094 +#define S3C2410_UDC_EP_INT_EN_REG S3C2410_USBDREG(0x015c)
30095 +
30096 +#define S3C2410_UDC_USB_INT_EN_REG S3C2410_USBDREG(0x016c)
30097 +
30098 +#define S3C2410_UDC_FRAME_NUM1_REG S3C2410_USBDREG(0x0170)
30099 +#define S3C2410_UDC_FRAME_NUM2_REG S3C2410_USBDREG(0x0174)
30100 +
30101 +#define S3C2410_UDC_EP0_FIFO_REG S3C2410_USBDREG(0x01c0)
30102 +#define S3C2410_UDC_EP1_FIFO_REG S3C2410_USBDREG(0x01c4)
30103 +#define S3C2410_UDC_EP2_FIFO_REG S3C2410_USBDREG(0x01c8)
30104 +#define S3C2410_UDC_EP3_FIFO_REG S3C2410_USBDREG(0x01cc)
30105 +#define S3C2410_UDC_EP4_FIFO_REG S3C2410_USBDREG(0x01d0)
30106 +
30107 +#define S3C2410_UDC_EP1_DMA_CON S3C2410_USBDREG(0x0200)
30108 +#define S3C2410_UDC_EP1_DMA_UNIT S3C2410_USBDREG(0x0204)
30109 +#define S3C2410_UDC_EP1_DMA_FIFO S3C2410_USBDREG(0x0208)
30110 +#define S3C2410_UDC_EP1_DMA_TTC_L S3C2410_USBDREG(0x020c)
30111 +#define S3C2410_UDC_EP1_DMA_TTC_M S3C2410_USBDREG(0x0210)
30112 +#define S3C2410_UDC_EP1_DMA_TTC_H S3C2410_USBDREG(0x0214)
30113 +
30114 +#define S3C2410_UDC_EP2_DMA_CON S3C2410_USBDREG(0x0218)
30115 +#define S3C2410_UDC_EP2_DMA_UNIT S3C2410_USBDREG(0x021c)
30116 +#define S3C2410_UDC_EP2_DMA_FIFO S3C2410_USBDREG(0x0220)
30117 +#define S3C2410_UDC_EP2_DMA_TTC_L S3C2410_USBDREG(0x0224)
30118 +#define S3C2410_UDC_EP2_DMA_TTC_M S3C2410_USBDREG(0x0228)
30119 +#define S3C2410_UDC_EP2_DMA_TTC_H S3C2410_USBDREG(0x022c)
30120 +
30121 +#define S3C2410_UDC_EP3_DMA_CON S3C2410_USBDREG(0x0240)
30122 +#define S3C2410_UDC_EP3_DMA_UNIT S3C2410_USBDREG(0x0244)
30123 +#define S3C2410_UDC_EP3_DMA_FIFO S3C2410_USBDREG(0x0248)
30124 +#define S3C2410_UDC_EP3_DMA_TTC_L S3C2410_USBDREG(0x024c)
30125 +#define S3C2410_UDC_EP3_DMA_TTC_M S3C2410_USBDREG(0x0250)
30126 +#define S3C2410_UDC_EP3_DMA_TTC_H S3C2410_USBDREG(0x0254)
30127 +
30128 +#define S3C2410_UDC_EP4_DMA_CON S3C2410_USBDREG(0x0258)
30129 +#define S3C2410_UDC_EP4_DMA_UNIT S3C2410_USBDREG(0x025c)
30130 +#define S3C2410_UDC_EP4_DMA_FIFO S3C2410_USBDREG(0x0260)
30131 +#define S3C2410_UDC_EP4_DMA_TTC_L S3C2410_USBDREG(0x0264)
30132 +#define S3C2410_UDC_EP4_DMA_TTC_M S3C2410_USBDREG(0x0268)
30133 +#define S3C2410_UDC_EP4_DMA_TTC_H S3C2410_USBDREG(0x026c)
30134 +
30135 +#define S3C2410_UDC_INDEX_REG S3C2410_USBDREG(0x0178)
30136 +
30137 +/* indexed registers */
30138 +
30139 +#define S3C2410_UDC_MAXP_REG S3C2410_USBDREG(0x0180)
30140 +
30141 +#define S3C2410_UDC_EP0_CSR_REG S3C2410_USBDREG(0x0184)
30142 +
30143 +#define S3C2410_UDC_IN_CSR1_REG S3C2410_USBDREG(0x0184)
30144 +#define S3C2410_UDC_IN_CSR2_REG S3C2410_USBDREG(0x0188)
30145 +
30146 +#define S3C2410_UDC_OUT_CSR1_REG S3C2410_USBDREG(0x0190)
30147 +#define S3C2410_UDC_OUT_CSR2_REG S3C2410_USBDREG(0x0194)
30148 +#define S3C2410_UDC_OUT_FIFO_CNT1_REG S3C2410_USBDREG(0x0198)
30149 +#define S3C2410_UDC_OUT_FIFO_CNT2_REG S3C2410_USBDREG(0x019c)
30150 +
30151 +#define S3C2410_UDC_FUNCADDR_UPDATE (1<<7)
30152 +
30153 +#define S3C2410_UDC_PWR_ISOUP (1<<7) // R/W
30154 +#define S3C2410_UDC_PWR_RESET (1<<3) // R
30155 +#define S3C2410_UDC_PWR_RESUME (1<<2) // R/W
30156 +#define S3C2410_UDC_PWR_SUSPEND (1<<1) // R
30157 +#define S3C2410_UDC_PWR_ENSUSPEND (1<<0) // R/W
30158 +
30159 +#define S3C2410_UDC_PWR_DEFAULT 0x00
30160 +
30161 +#define S3C2410_UDC_INT_EP4 (1<<4) // R/W (clear only)
30162 +#define S3C2410_UDC_INT_EP3 (1<<3) // R/W (clear only)
30163 +#define S3C2410_UDC_INT_EP2 (1<<2) // R/W (clear only)
30164 +#define S3C2410_UDC_INT_EP1 (1<<1) // R/W (clear only)
30165 +#define S3C2410_UDC_INT_EP0 (1<<0) // R/W (clear only)
30166 +
30167 +#define S3C2410_UDC_USBINT_RESET (1<<2) // R/W (clear only)
30168 +#define S3C2410_UDC_USBINT_RESUME (1<<1) // R/W (clear only)
30169 +#define S3C2410_UDC_USBINT_SUSPEND (1<<0) // R/W (clear only)
30170 +
30171 +#define S3C2410_UDC_INTE_EP4 (1<<4) // R/W
30172 +#define S3C2410_UDC_INTE_EP3 (1<<3) // R/W
30173 +#define S3C2410_UDC_INTE_EP2 (1<<2) // R/W
30174 +#define S3C2410_UDC_INTE_EP1 (1<<1) // R/W
30175 +#define S3C2410_UDC_INTE_EP0 (1<<0) // R/W
30176 +
30177 +#define S3C2410_UDC_USBINTE_RESET (1<<2) // R/W
30178 +#define S3C2410_UDC_USBINTE_SUSPEND (1<<0) // R/W
30179 +
30180 +
30181 +#define S3C2410_UDC_INDEX_EP0 (0x00)
30182 +#define S3C2410_UDC_INDEX_EP1 (0x01) // ??
30183 +#define S3C2410_UDC_INDEX_EP2 (0x02) // ??
30184 +#define S3C2410_UDC_INDEX_EP3 (0x03) // ??
30185 +#define S3C2410_UDC_INDEX_EP4 (0x04) // ??
30186 +
30187 +#define S3C2410_UDC_ICSR1_CLRDT (1<<6) // R/W
30188 +#define S3C2410_UDC_ICSR1_SENTSTL (1<<5) // R/W (clear only)
30189 +#define S3C2410_UDC_ICSR1_SENDSTL (1<<4) // R/W
30190 +#define S3C2410_UDC_ICSR1_FFLUSH (1<<3) // W (set only)
30191 +#define S3C2410_UDC_ICSR1_UNDRUN (1<<2) // R/W (clear only)
30192 +#define S3C2410_UDC_ICSR1_PKTRDY (1<<0) // R/W (set only)
30193 +
30194 +#define S3C2410_UDC_ICSR2_AUTOSET (1<<7) // R/W
30195 +#define S3C2410_UDC_ICSR2_ISO (1<<6) // R/W
30196 +#define S3C2410_UDC_ICSR2_MODEIN (1<<5) // R/W
30197 +#define S3C2410_UDC_ICSR2_DMAIEN (1<<4) // R/W
30198 +
30199 +#define S3C2410_UDC_OCSR1_CLRDT (1<<7) // R/W
30200 +#define S3C2410_UDC_OCSR1_SENTSTL (1<<6) // R/W (clear only)
30201 +#define S3C2410_UDC_OCSR1_SENDSTL (1<<5) // R/W
30202 +#define S3C2410_UDC_OCSR1_FFLUSH (1<<4) // R/W
30203 +#define S3C2410_UDC_OCSR1_DERROR (1<<3) // R
30204 +#define S3C2410_UDC_OCSR1_OVRRUN (1<<2) // R/W (clear only)
30205 +#define S3C2410_UDC_OCSR1_PKTRDY (1<<0) // R/W (clear only)
30206 +
30207 +#define S3C2410_UDC_OCSR2_AUTOCLR (1<<7) // R/W
30208 +#define S3C2410_UDC_OCSR2_ISO (1<<6) // R/W
30209 +#define S3C2410_UDC_OCSR2_DMAIEN (1<<5) // R/W
30210 +
30211 +#define S3C2410_UDC_EP0_CSR_OPKRDY (1<<0)
30212 +#define S3C2410_UDC_EP0_CSR_IPKRDY (1<<1)
30213 +#define S3C2410_UDC_EP0_CSR_SENTSTL (1<<2)
30214 +#define S3C2410_UDC_EP0_CSR_DE (1<<3)
30215 +#define S3C2410_UDC_EP0_CSR_SE (1<<4)
30216 +#define S3C2410_UDC_EP0_CSR_SENDSTL (1<<5)
30217 +#define S3C2410_UDC_EP0_CSR_SOPKTRDY (1<<6)
30218 +#define S3C2410_UDC_EP0_CSR_SSE (1<<7)
30219 +
30220 +#define S3C2410_UDC_MAXP_8 (1<<0)
30221 +#define S3C2410_UDC_MAXP_16 (1<<1)
30222 +#define S3C2410_UDC_MAXP_32 (1<<2)
30223 +#define S3C2410_UDC_MAXP_64 (1<<3)
30224 +
30225 +
30226 +#endif
30227 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/s3c2400.h
30228 ===================================================================
30229 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/s3c2400.h 2008-12-25 00:26:37.000000000 +0100
30230 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/s3c2400.h 2009-01-02 00:01:56.000000000 +0100
30231 @@ -17,7 +17,7 @@
30232
30233 extern int s3c2400_init(void);
30234
30235 -extern void s3c2400_map_io(struct map_desc *mach_desc, int size);
30236 +extern void s3c2400_map_io(void);
30237
30238 extern void s3c2400_init_uarts(struct s3c2410_uartcfg *cfg, int no);
30239
30240 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/s3c2410.h
30241 ===================================================================
30242 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/s3c2410.h 2008-12-25 00:26:37.000000000 +0100
30243 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/s3c2410.h 2009-01-02 00:01:56.000000000 +0100
30244 @@ -15,7 +15,7 @@
30245
30246 extern int s3c2410_init(void);
30247
30248 -extern void s3c2410_map_io(struct map_desc *mach_desc, int size);
30249 +extern void s3c2410_map_io(void);
30250
30251 extern void s3c2410_init_uarts(struct s3c2410_uartcfg *cfg, int no);
30252
30253 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/s3c2412.h
30254 ===================================================================
30255 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/s3c2412.h 2008-12-25 00:26:37.000000000 +0100
30256 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/s3c2412.h 2009-01-02 00:01:56.000000000 +0100
30257 @@ -14,7 +14,7 @@
30258
30259 extern int s3c2412_init(void);
30260
30261 -extern void s3c2412_map_io(struct map_desc *mach_desc, int size);
30262 +extern void s3c2412_map_io(void);
30263
30264 extern void s3c2412_init_uarts(struct s3c2410_uartcfg *cfg, int no);
30265
30266 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/s3c2443.h
30267 ===================================================================
30268 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/include/plat/s3c2443.h 2008-12-25 00:26:37.000000000 +0100
30269 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/s3c2443.h 2009-01-02 00:01:56.000000000 +0100
30270 @@ -16,7 +16,7 @@ struct s3c2410_uartcfg;
30271
30272 extern int s3c2443_init(void);
30273
30274 -extern void s3c2443_map_io(struct map_desc *mach_desc, int size);
30275 +extern void s3c2443_map_io(void);
30276
30277 extern void s3c2443_init_uarts(struct s3c2410_uartcfg *cfg, int no);
30278
30279 Index: linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/udc.h
30280 ===================================================================
30281 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
30282 +++ linux-2.6.28/arch/arm/plat-s3c24xx/include/plat/udc.h 2009-01-02 00:01:56.000000000 +0100
30283 @@ -0,0 +1,36 @@
30284 +/* arch/arm/mach-s3c2410/include/mach/udc.h
30285 + *
30286 + * Copyright (c) 2005 Arnaud Patard <arnaud.patard@rtp-net.org>
30287 + *
30288 + *
30289 + * This program is free software; you can redistribute it and/or modify
30290 + * it under the terms of the GNU General Public License version 2 as
30291 + * published by the Free Software Foundation.
30292 + *
30293 + *
30294 + * Changelog:
30295 + * 14-Mar-2005 RTP Created file
30296 + * 02-Aug-2005 RTP File rename
30297 + * 07-Sep-2005 BJD Minor cleanups, changed cmd to enum
30298 + * 18-Jan-2007 HMW Add per-platform vbus_draw function
30299 +*/
30300 +
30301 +#ifndef __ASM_ARM_ARCH_UDC_H
30302 +#define __ASM_ARM_ARCH_UDC_H
30303 +
30304 +enum s3c2410_udc_cmd_e {
30305 + S3C2410_UDC_P_ENABLE = 1, /* Pull-up enable */
30306 + S3C2410_UDC_P_DISABLE = 2, /* Pull-up disable */
30307 + S3C2410_UDC_P_RESET = 3, /* UDC reset, in case of */
30308 +};
30309 +
30310 +struct s3c2410_udc_mach_info {
30311 + void (*udc_command)(enum s3c2410_udc_cmd_e);
30312 + void (*vbus_draw)(unsigned int ma);
30313 + unsigned int vbus_pin;
30314 + unsigned char vbus_pin_inverted;
30315 +};
30316 +
30317 +extern void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *);
30318 +
30319 +#endif /* __ASM_ARM_ARCH_UDC_H */
30320 Index: linux-2.6.28/arch/arm/plat-s3c24xx/irq.c
30321 ===================================================================
30322 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/irq.c 2008-12-25 00:26:37.000000000 +0100
30323 +++ linux-2.6.28/arch/arm/plat-s3c24xx/irq.c 2009-01-02 00:01:56.000000000 +0100
30324 @@ -1,6 +1,6 @@
30325 /* linux/arch/arm/plat-s3c24xx/irq.c
30326 *
30327 - * Copyright (c) 2003,2004 Simtec Electronics
30328 + * Copyright (c) 2003,2004 Simtec Electronics
30329 * Ben Dooks <ben@simtec.co.uk>
30330 *
30331 * This program is free software; you can redistribute it and/or modify
30332 @@ -16,38 +16,6 @@
30333 * You should have received a copy of the GNU General Public License
30334 * along with this program; if not, write to the Free Software
30335 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30336 - *
30337 - * Changelog:
30338 - *
30339 - * 22-Jul-2004 Ben Dooks <ben@simtec.co.uk>
30340 - * Fixed compile warnings
30341 - *
30342 - * 22-Jul-2004 Roc Wu <cooloney@yahoo.com.cn>
30343 - * Fixed s3c_extirq_type
30344 - *
30345 - * 21-Jul-2004 Arnaud Patard (Rtp) <arnaud.patard@rtp-net.org>
30346 - * Addition of ADC/TC demux
30347 - *
30348 - * 04-Oct-2004 Klaus Fetscher <k.fetscher@fetron.de>
30349 - * Fix for set_irq_type() on low EINT numbers
30350 - *
30351 - * 05-Oct-2004 Ben Dooks <ben@simtec.co.uk>
30352 - * Tidy up KF's patch and sort out new release
30353 - *
30354 - * 05-Oct-2004 Ben Dooks <ben@simtec.co.uk>
30355 - * Add support for power management controls
30356 - *
30357 - * 04-Nov-2004 Ben Dooks
30358 - * Fix standard IRQ wake for EINT0..4 and RTC
30359 - *
30360 - * 22-Feb-2005 Ben Dooks
30361 - * Fixed edge-triggering on ADC IRQ
30362 - *
30363 - * 28-Jun-2005 Ben Dooks
30364 - * Mark IRQ_LCD valid
30365 - *
30366 - * 25-Jul-2005 Ben Dooks
30367 - * Split the S3C2440 IRQ code to separate file
30368 */
30369
30370 #include <linux/init.h>
30371 @@ -55,90 +23,34 @@
30372 #include <linux/interrupt.h>
30373 #include <linux/ioport.h>
30374 #include <linux/sysdev.h>
30375 -#include <linux/io.h>
30376
30377 -#include <mach/hardware.h>
30378 #include <asm/irq.h>
30379 -
30380 #include <asm/mach/irq.h>
30381
30382 -#include <mach/regs-irq.h>
30383 -#include <mach/regs-gpio.h>
30384 +#include <plat/regs-irqtype.h>
30385
30386 #include <plat/cpu.h>
30387 #include <plat/pm.h>
30388 #include <plat/irq.h>
30389
30390 -/* wakeup irq control */
30391 -
30392 -#ifdef CONFIG_PM
30393 -
30394 -/* state for IRQs over sleep */
30395 -
30396 -/* default is to allow for EINT0..EINT15, and IRQ_RTC as wakeup sources
30397 - *
30398 - * set bit to 1 in allow bitfield to enable the wakeup settings on it
30399 -*/
30400 -
30401 -unsigned long s3c_irqwake_intallow = 1L << (IRQ_RTC - IRQ_EINT0) | 0xfL;
30402 -unsigned long s3c_irqwake_intmask = 0xffffffffL;
30403 -unsigned long s3c_irqwake_eintallow = 0x0000fff0L;
30404 -unsigned long s3c_irqwake_eintmask = 0xffffffffL;
30405 -
30406 -int
30407 -s3c_irq_wake(unsigned int irqno, unsigned int state)
30408 -{
30409 - unsigned long irqbit = 1 << (irqno - IRQ_EINT0);
30410 -
30411 - if (!(s3c_irqwake_intallow & irqbit))
30412 - return -ENOENT;
30413 -
30414 - printk(KERN_INFO "wake %s for irq %d\n",
30415 - state ? "enabled" : "disabled", irqno);
30416 -
30417 - if (!state)
30418 - s3c_irqwake_intmask |= irqbit;
30419 - else
30420 - s3c_irqwake_intmask &= ~irqbit;
30421 -
30422 - return 0;
30423 -}
30424 -
30425 -static int
30426 -s3c_irqext_wake(unsigned int irqno, unsigned int state)
30427 -{
30428 - unsigned long bit = 1L << (irqno - EXTINT_OFF);
30429 -
30430 - if (!(s3c_irqwake_eintallow & bit))
30431 - return -ENOENT;
30432 -
30433 - printk(KERN_INFO "wake %s for irq %d\n",
30434 - state ? "enabled" : "disabled", irqno);
30435 -
30436 - if (!state)
30437 - s3c_irqwake_eintmask |= bit;
30438 - else
30439 - s3c_irqwake_eintmask &= ~bit;
30440 -
30441 - return 0;
30442 -}
30443 -
30444 -#else
30445 -#define s3c_irqext_wake NULL
30446 -#define s3c_irq_wake NULL
30447 -#endif
30448 -
30449 -
30450 static void
30451 s3c_irq_mask(unsigned int irqno)
30452 {
30453 unsigned long mask;
30454 -
30455 +#ifdef CONFIG_S3C2440_C_FIQ
30456 + unsigned long flags;
30457 +#endif
30458 irqno -= IRQ_EINT0;
30459 -
30460 +#ifdef CONFIG_S3C2440_C_FIQ
30461 + local_save_flags(flags);
30462 + local_fiq_disable();
30463 +#endif
30464 mask = __raw_readl(S3C2410_INTMSK);
30465 mask |= 1UL << irqno;
30466 __raw_writel(mask, S3C2410_INTMSK);
30467 +#ifdef CONFIG_S3C2440_C_FIQ
30468 + local_irq_restore(flags);
30469 +#endif
30470 }
30471
30472 static inline void
30473 @@ -155,9 +67,19 @@ s3c_irq_maskack(unsigned int irqno)
30474 {
30475 unsigned long bitval = 1UL << (irqno - IRQ_EINT0);
30476 unsigned long mask;
30477 +#ifdef CONFIG_S3C2440_C_FIQ
30478 + unsigned long flags;
30479 +#endif
30480
30481 +#ifdef CONFIG_S3C2440_C_FIQ
30482 + local_save_flags(flags);
30483 + local_fiq_disable();
30484 +#endif
30485 mask = __raw_readl(S3C2410_INTMSK);
30486 __raw_writel(mask|bitval, S3C2410_INTMSK);
30487 +#ifdef CONFIG_S3C2440_C_FIQ
30488 + local_irq_restore(flags);
30489 +#endif
30490
30491 __raw_writel(bitval, S3C2410_SRCPND);
30492 __raw_writel(bitval, S3C2410_INTPND);
30493 @@ -168,15 +90,25 @@ static void
30494 s3c_irq_unmask(unsigned int irqno)
30495 {
30496 unsigned long mask;
30497 +#ifdef CONFIG_S3C2440_C_FIQ
30498 + unsigned long flags;
30499 +#endif
30500
30501 if (irqno != IRQ_TIMER4 && irqno != IRQ_EINT8t23)
30502 irqdbf2("s3c_irq_unmask %d\n", irqno);
30503
30504 irqno -= IRQ_EINT0;
30505
30506 +#ifdef CONFIG_S3C2440_C_FIQ
30507 + local_save_flags(flags);
30508 + local_fiq_disable();
30509 +#endif
30510 mask = __raw_readl(S3C2410_INTMSK);
30511 mask &= ~(1UL << irqno);
30512 __raw_writel(mask, S3C2410_INTMSK);
30513 +#ifdef CONFIG_S3C2440_C_FIQ
30514 + local_irq_restore(flags);
30515 +#endif
30516 }
30517
30518 struct irq_chip s3c_irq_level_chip = {
30519 @@ -589,59 +521,6 @@ s3c_irq_demux_extint4t7(unsigned int irq
30520 }
30521 }
30522
30523 -#ifdef CONFIG_PM
30524 -
30525 -static struct sleep_save irq_save[] = {
30526 - SAVE_ITEM(S3C2410_INTMSK),
30527 - SAVE_ITEM(S3C2410_INTSUBMSK),
30528 -};
30529 -
30530 -/* the extint values move between the s3c2410/s3c2440 and the s3c2412
30531 - * so we use an array to hold them, and to calculate the address of
30532 - * the register at run-time
30533 -*/
30534 -
30535 -static unsigned long save_extint[3];
30536 -static unsigned long save_eintflt[4];
30537 -static unsigned long save_eintmask;
30538 -
30539 -int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t state)
30540 -{
30541 - unsigned int i;
30542 -
30543 - for (i = 0; i < ARRAY_SIZE(save_extint); i++)
30544 - save_extint[i] = __raw_readl(S3C24XX_EXTINT0 + (i*4));
30545 -
30546 - for (i = 0; i < ARRAY_SIZE(save_eintflt); i++)
30547 - save_eintflt[i] = __raw_readl(S3C24XX_EINFLT0 + (i*4));
30548 -
30549 - s3c2410_pm_do_save(irq_save, ARRAY_SIZE(irq_save));
30550 - save_eintmask = __raw_readl(S3C24XX_EINTMASK);
30551 -
30552 - return 0;
30553 -}
30554 -
30555 -int s3c24xx_irq_resume(struct sys_device *dev)
30556 -{
30557 - unsigned int i;
30558 -
30559 - for (i = 0; i < ARRAY_SIZE(save_extint); i++)
30560 - __raw_writel(save_extint[i], S3C24XX_EXTINT0 + (i*4));
30561 -
30562 - for (i = 0; i < ARRAY_SIZE(save_eintflt); i++)
30563 - __raw_writel(save_eintflt[i], S3C24XX_EINFLT0 + (i*4));
30564 -
30565 - s3c2410_pm_do_restore(irq_save, ARRAY_SIZE(irq_save));
30566 - __raw_writel(save_eintmask, S3C24XX_EINTMASK);
30567 -
30568 - return 0;
30569 -}
30570 -
30571 -#else
30572 -#define s3c24xx_irq_suspend NULL
30573 -#define s3c24xx_irq_resume NULL
30574 -#endif
30575 -
30576 /* s3c24xx_init_irq
30577 *
30578 * Initialise S3C2410 IRQ system
30579 @@ -672,26 +551,26 @@ void __init s3c24xx_init_irq(void)
30580
30581 last = 0;
30582 for (i = 0; i < 4; i++) {
30583 - pend = __raw_readl(S3C2410_INTPND);
30584 + pend = __raw_readl(S3C2410_SUBSRCPND);
30585
30586 if (pend == 0 || pend == last)
30587 break;
30588
30589 - __raw_writel(pend, S3C2410_SRCPND);
30590 - __raw_writel(pend, S3C2410_INTPND);
30591 - printk("irq: clearing pending status %08x\n", (int)pend);
30592 + printk("irq: clearing subpending status %08x\n", (int)pend);
30593 + __raw_writel(pend, S3C2410_SUBSRCPND);
30594 last = pend;
30595 }
30596
30597 last = 0;
30598 for (i = 0; i < 4; i++) {
30599 - pend = __raw_readl(S3C2410_SUBSRCPND);
30600 + pend = __raw_readl(S3C2410_INTPND);
30601
30602 if (pend == 0 || pend == last)
30603 break;
30604
30605 - printk("irq: clearing subpending status %08x\n", (int)pend);
30606 - __raw_writel(pend, S3C2410_SUBSRCPND);
30607 + __raw_writel(pend, S3C2410_SRCPND);
30608 + __raw_writel(pend, S3C2410_INTPND);
30609 + printk("irq: clearing pending status %08x\n", (int)pend);
30610 last = pend;
30611 }
30612
30613 Index: linux-2.6.28/arch/arm/plat-s3c24xx/irq-pm.c
30614 ===================================================================
30615 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
30616 +++ linux-2.6.28/arch/arm/plat-s3c24xx/irq-pm.c 2009-01-02 00:01:56.000000000 +0100
30617 @@ -0,0 +1,118 @@
30618 +/* linux/arch/arm/plat-s3c24xx/irq-om.c
30619 + *
30620 + * Copyright (c) 2003,2004 Simtec Electronics
30621 + * Ben Dooks <ben@simtec.co.uk>
30622 + * http://armlinux.simtec.co.uk/
30623 + *
30624 + * S3C24XX - IRQ PM code
30625 + *
30626 + * This program is free software; you can redistribute it and/or modify
30627 + * it under the terms of the GNU General Public License version 2 as
30628 + * published by the Free Software Foundation.
30629 + */
30630 +
30631 +#include <linux/init.h>
30632 +#include <linux/module.h>
30633 +#include <linux/interrupt.h>
30634 +#include <linux/sysdev.h>
30635 +#include <linux/irq.h>
30636 +
30637 +#include <plat/cpu.h>
30638 +#include <plat/pm.h>
30639 +#include <plat/irq.h>
30640 +
30641 +/* state for IRQs over sleep */
30642 +
30643 +/* default is to allow for EINT0..EINT15, and IRQ_RTC as wakeup sources
30644 + *
30645 + * set bit to 1 in allow bitfield to enable the wakeup settings on it
30646 +*/
30647 +
30648 +unsigned long s3c_irqwake_intallow = 1L << (IRQ_RTC - IRQ_EINT0) | 0xfL;
30649 +unsigned long s3c_irqwake_eintallow = 0x0000fff0L;
30650 +
30651 +int s3c_irq_wake(unsigned int irqno, unsigned int state)
30652 +{
30653 + unsigned long irqbit = 1 << (irqno - IRQ_EINT0);
30654 +
30655 + if (!(s3c_irqwake_intallow & irqbit))
30656 + return -ENOENT;
30657 +
30658 + printk(KERN_INFO "wake %s for irq %d\n",
30659 + state ? "enabled" : "disabled", irqno);
30660 +
30661 + if (!state)
30662 + s3c_irqwake_intmask |= irqbit;
30663 + else
30664 + s3c_irqwake_intmask &= ~irqbit;
30665 +
30666 + return 0;
30667 +}
30668 +
30669 +static struct sleep_save irq_save[] = {
30670 + SAVE_ITEM(S3C2410_INTMSK),
30671 + SAVE_ITEM(S3C2410_INTSUBMSK),
30672 +};
30673 +
30674 +/* the extint values move between the s3c2410/s3c2440 and the s3c2412
30675 + * so we use an array to hold them, and to calculate the address of
30676 + * the register at run-time
30677 +*/
30678 +
30679 +static unsigned long save_extint[3];
30680 +static unsigned long save_eintflt[4];
30681 +static unsigned long save_eintmask;
30682 +
30683 +int s3c24xx_irq_suspend(struct sys_device *dev, pm_message_t state)
30684 +{
30685 + unsigned int i;
30686 +
30687 + for (i = 0; i < ARRAY_SIZE(save_extint); i++)
30688 + save_extint[i] = __raw_readl(S3C24XX_EXTINT0 + (i*4));
30689 +
30690 + for (i = 0; i < ARRAY_SIZE(save_eintflt); i++)
30691 + save_eintflt[i] = __raw_readl(S3C24XX_EINFLT0 + (i*4));
30692 +
30693 + s3c_pm_do_save(irq_save, ARRAY_SIZE(irq_save));
30694 + save_eintmask = __raw_readl(S3C24XX_EINTMASK);
30695 +
30696 + return 0;
30697 +}
30698 +
30699 +int s3c24xx_irq_resume(struct sys_device *dev)
30700 +{
30701 + unsigned int i, irq;
30702 + unsigned long eintpnd;
30703 + struct irq_desc *desc;
30704 +
30705 + for (i = 0; i < ARRAY_SIZE(save_extint); i++)
30706 + __raw_writel(save_extint[i], S3C24XX_EXTINT0 + (i*4));
30707 +
30708 + for (i = 0; i < ARRAY_SIZE(save_eintflt); i++)
30709 + __raw_writel(save_eintflt[i], S3C24XX_EINFLT0 + (i*4));
30710 +
30711 + s3c_pm_do_restore(irq_save, ARRAY_SIZE(irq_save));
30712 + __raw_writel(save_eintmask, S3C24XX_EINTMASK);
30713 +
30714 + /*
30715 + * ACK those interrupts which are now masked and pending.
30716 + * Level interrupts if not ACKed here, create an interrupt storm
30717 + * because they are not handled at all.
30718 + */
30719 +
30720 + eintpnd = __raw_readl(S3C24XX_EINTPEND);
30721 +
30722 + eintpnd &= save_eintmask;
30723 + eintpnd &= ~0xff; /* ignore lower irqs */
30724 +
30725 + while (eintpnd) {
30726 + irq = __ffs(eintpnd);
30727 + eintpnd &= ~(1 << irq);
30728 +
30729 + irq += (IRQ_EINT4 - 4);
30730 + desc = irq_to_desc(irq);
30731 + desc->chip->ack(irq);
30732 + }
30733 +
30734 + return 0;
30735 +}
30736 Index: linux-2.6.28/arch/arm/plat-s3c24xx/Kconfig
30737 ===================================================================
30738 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/Kconfig 2008-12-25 00:26:37.000000000 +0100
30739 +++ linux-2.6.28/arch/arm/plat-s3c24xx/Kconfig 2009-01-02 00:01:56.000000000 +0100
30740 @@ -6,18 +6,32 @@
30741
30742 config PLAT_S3C24XX
30743 bool
30744 - depends on ARCH_S3C2410
30745 - default y if ARCH_S3C2410
30746 + depends on ARCH_S3C2410 || ARCH_S3C24A0
30747 + default y
30748 select NO_IOPORT
30749 select ARCH_REQUIRE_GPIOLIB
30750 + select S3C_GPIO_TRACK
30751 help
30752 Base platform code for any Samsung S3C24XX device
30753
30754 if PLAT_S3C24XX
30755
30756 +# code that is shared between a number of the s3c24xx implementations
30757 +
30758 +config S3C2410_CLOCK
30759 + bool
30760 + help
30761 + Clock code for the S3C2410, and similar processors which
30762 + is currently includes the S3C2410, S3C2440, S3C2442.
30763 +
30764 +config S3C24XX_DCLK
30765 + bool
30766 + help
30767 + Clock code for supporting DCLK/CLKOUT on S3C24XX architectures
30768 +
30769 config CPU_S3C244X
30770 bool
30771 - depends on ARCH_S3C2410 && (CPU_S3C2440 || CPU_S3C2442)
30772 + default y if CPU_S3C2440 || CPU_S3C2442
30773 help
30774 Support for S3C2440 and S3C2442 Samsung Mobile CPU based systems.
30775
30776 @@ -49,9 +63,31 @@ config S3C2410_DMA_DEBUG
30777 Enable debugging output for the DMA code. This option sends info
30778 to the kernel log, at priority KERN_DEBUG.
30779
30780 +# SPI default pin configuration code
30781 +
30782 +config S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13
30783 + bool
30784 + help
30785 + SPI GPIO configuration code for BUS0 when connected to
30786 + GPE11, GPE12 and GPE13.
30787 +
30788 +config S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7
30789 + bool
30790 + help
30791 + SPI GPIO configuration code for BUS 1 when connected to
30792 + GPG5, GPG6 and GPG7.
30793 +
30794 +# common code for s3c24xx based machines, such as the SMDKs.
30795 +
30796 config MACH_SMDK
30797 bool
30798 help
30799 Common machine code for SMDK2410 and SMDK2440
30800
30801 +config MACH_NEO1973
30802 + bool
30803 + select RFKILL
30804 + help
30805 + Common machine code for Neo1973 hardware
30806 +
30807 endif
30808 Index: linux-2.6.28/arch/arm/plat-s3c24xx/Makefile
30809 ===================================================================
30810 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/Makefile 2008-12-25 00:26:37.000000000 +0100
30811 +++ linux-2.6.28/arch/arm/plat-s3c24xx/Makefile 2009-01-02 00:01:56.000000000 +0100
30812 @@ -17,9 +17,8 @@ obj-y += irq.o
30813 obj-y += devs.o
30814 obj-y += gpio.o
30815 obj-y += gpiolib.o
30816 -obj-y += time.o
30817 obj-y += clock.o
30818 -obj-y += pwm-clock.o
30819 +obj-$(CONFIG_S3C24XX_DCLK) += clock-dclk.o
30820
30821 # Architecture dependant builds
30822
30823 @@ -28,7 +27,26 @@ obj-$(CONFIG_CPU_S3C244X) += s3c244x-irq
30824 obj-$(CONFIG_CPU_S3C244X) += s3c244x-clock.o
30825 obj-$(CONFIG_PM_SIMTEC) += pm-simtec.o
30826 obj-$(CONFIG_PM) += pm.o
30827 +obj-$(CONFIG_PM) += irq-pm.o
30828 obj-$(CONFIG_PM) += sleep.o
30829 obj-$(CONFIG_HAVE_PWM) += pwm.o
30830 +obj-$(CONFIG_S3C2410_CLOCK) += s3c2410-clock.o
30831 obj-$(CONFIG_S3C2410_DMA) += dma.o
30832 +
30833 +# device specific setup and/or initialisation
30834 +obj-$(CONFIG_ARCH_S3C2410) += setup-i2c.o
30835 +
30836 +# SPI gpio central GPIO functions
30837 +
30838 +obj-$(CONFIG_S3C24XX_SPI_BUS0_GPE11_GPE12_GPE13) += spi-bus0-gpe11_12_13.o
30839 +obj-$(CONFIG_S3C24XX_SPI_BUS1_GPG5_GPG6_GPG7) += spi-bus1-gpg5_6_7.o
30840 +
30841 +# machine common support
30842 +
30843 obj-$(CONFIG_MACH_SMDK) += common-smdk.o
30844 +obj-$(CONFIG_MACH_NEO1973) += \
30845 + neo1973_pm_gsm.o \
30846 + neo1973_pm_gps.o \
30847 + neo1973_pm_bt.o \
30848 + gta02_pm_wlan.o \
30849 + neo1973_shadow.o
30850 Index: linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_pm_bt.c
30851 ===================================================================
30852 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
30853 +++ linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_pm_bt.c 2009-01-02 00:01:56.000000000 +0100
30854 @@ -0,0 +1,323 @@
30855 +/*
30856 + * Bluetooth PM code for the FIC Neo1973 GSM Phone
30857 + *
30858 + * (C) 2007 by Openmoko Inc.
30859 + * Author: Harald Welte <laforge@openmoko.org>
30860 + * All rights reserved.
30861 + *
30862 + * This program is free software; you can redistribute it and/or modify
30863 + * it under the terms of the GNU General Public License version 2 as
30864 + * published by the Free Software Foundation
30865 + *
30866 + */
30867 +
30868 +#include <linux/module.h>
30869 +#include <linux/init.h>
30870 +#include <linux/kernel.h>
30871 +#include <linux/platform_device.h>
30872 +#include <linux/rfkill.h>
30873 +#include <linux/err.h>
30874 +
30875 +#include <mach/hardware.h>
30876 +#include <asm/mach-types.h>
30877 +#include <asm/plat-s3c24xx/neo1973.h>
30878 +
30879 +/* For GTA01 */
30880 +#include <mach/gta01.h>
30881 +#include <linux/pcf50606.h>
30882 +
30883 +/* For GTA02 */
30884 +#include <mach/gta02.h>
30885 +#include <linux/mfd/pcf50633/gpio.h>
30886 +
30887 +#include <linux/regulator/consumer.h>
30888 +
30889 +#define DRVMSG "FIC Neo1973 Bluetooth Power Management"
30890 +
30891 +struct gta01_pm_bt_data {
30892 + struct regulator *regulator;
30893 + struct rfkill *rfkill;
30894 + int pre_resume_state;
30895 +};
30896 +
30897 +static ssize_t bt_read(struct device *dev, struct device_attribute *attr,
30898 + char *buf)
30899 +{
30900 + int ret = 0;
30901 +
30902 + if (!strcmp(attr->attr.name, "power_on")) {
30903 +
30904 + if (machine_is_neo1973_gta01()) {
30905 + if (pcf50606_onoff_get(pcf50606_global,
30906 + PCF50606_REGULATOR_D1REG) &&
30907 + pcf50606_voltage_get(pcf50606_global,
30908 + PCF50606_REGULATOR_D1REG) == 3100)
30909 + ret = 1;
30910 + } else if (machine_is_neo1973_gta02()) {
30911 + if (s3c2410_gpio_getpin(GTA02_GPIO_BT_EN))
30912 + ret = 1;
30913 + }
30914 + } else if (!strcmp(attr->attr.name, "reset")) {
30915 + if (machine_is_neo1973_gta01()) {
30916 + if (s3c2410_gpio_getpin(GTA01_GPIO_BT_EN) == 0)
30917 + ret = 1;
30918 + } else if (machine_is_neo1973_gta02()) {
30919 + if (s3c2410_gpio_getpin(GTA02_GPIO_BT_EN) == 0)
30920 + ret = 1;
30921 + }
30922 + }
30923 +
30924 + if (!ret) {
30925 + return strlcpy(buf, "0\n", 3);
30926 + } else {
30927 + return strlcpy(buf, "1\n", 3);
30928 + }
30929 +}
30930 +
30931 +static void __gta02_pm_bt_toggle_radio(struct device *dev, unsigned int on)
30932 +{
30933 + struct gta01_pm_bt_data *bt_data = dev_get_drvdata(dev);
30934 +
30935 + dev_info(dev, "__gta02_pm_bt_toggle_radio %d\n", on);
30936 +
30937 + if (machine_is_neo1973_gta02()) {
30938 +
30939 + bt_data = dev_get_drvdata(dev);
30940 +
30941 + neo1973_gpb_setpin(GTA02_GPIO_BT_EN, !on);
30942 +
30943 + if (on) {
30944 + if (!regulator_is_enabled(bt_data->regulator))
30945 + regulator_enable(bt_data->regulator);
30946 + } else {
30947 + if (regulator_is_enabled(bt_data->regulator))
30948 + regulator_disable(bt_data->regulator);
30949 + }
30950 +
30951 + neo1973_gpb_setpin(GTA02_GPIO_BT_EN, on);
30952 + }
30953 +}
30954 +
30955 +
30956 +static int bt_rfkill_toggle_radio(void *data, enum rfkill_state state)
30957 +{
30958 + struct device *dev = data;
30959 + unsigned long on = (state == RFKILL_STATE_ON);
30960 +
30961 + if (machine_is_neo1973_gta01()) {
30962 + /* if we are powering up, assert reset, then power,
30963 + * then release reset */
30964 + if (on) {
30965 + neo1973_gpb_setpin(GTA01_GPIO_BT_EN, 0);
30966 + pcf50606_voltage_set(pcf50606_global,
30967 + PCF50606_REGULATOR_D1REG,
30968 + 3100);
30969 + }
30970 + pcf50606_onoff_set(pcf50606_global,
30971 + PCF50606_REGULATOR_D1REG, on);
30972 + neo1973_gpb_setpin(GTA01_GPIO_BT_EN, on);
30973 + } else if (machine_is_neo1973_gta02())
30974 + __gta02_pm_bt_toggle_radio(dev, on);
30975 +
30976 + return 0;
30977 +}
30978 +
30979 +static ssize_t bt_write(struct device *dev, struct device_attribute *attr,
30980 + const char *buf, size_t count)
30981 +{
30982 + unsigned long on = simple_strtoul(buf, NULL, 10);
30983 + struct gta01_pm_bt_data *bt_data = dev_get_drvdata(dev);
30984 +
30985 + if (!strcmp(attr->attr.name, "power_on")) {
30986 + enum rfkill_state state = on ? RFKILL_STATE_ON : RFKILL_STATE_OFF;
30987 + bt_rfkill_toggle_radio(dev, state);
30988 + bt_data->rfkill->state = state;
30989 +
30990 + if (machine_is_neo1973_gta01()) {
30991 + /* if we are powering up, assert reset, then power,
30992 + * then release reset */
30993 + if (on) {
30994 + neo1973_gpb_setpin(GTA01_GPIO_BT_EN, 0);
30995 + pcf50606_voltage_set(pcf50606_global,
30996 + PCF50606_REGULATOR_D1REG,
30997 + 3100);
30998 + }
30999 + pcf50606_onoff_set(pcf50606_global,
31000 + PCF50606_REGULATOR_D1REG, on);
31001 + neo1973_gpb_setpin(GTA01_GPIO_BT_EN, on);
31002 + } else if (machine_is_neo1973_gta02())
31003 + __gta02_pm_bt_toggle_radio(dev, on);
31004 +
31005 + } else if (!strcmp(attr->attr.name, "reset")) {
31006 + /* reset is low-active, so we need to invert */
31007 + if (machine_is_neo1973_gta01()) {
31008 + neo1973_gpb_setpin(GTA01_GPIO_BT_EN, on ? 0 : 1);
31009 + } else if (machine_is_neo1973_gta02()) {
31010 + neo1973_gpb_setpin(GTA02_GPIO_BT_EN, on ? 0 : 1);
31011 + }
31012 + }
31013 +
31014 + return count;
31015 +}
31016 +
31017 +static DEVICE_ATTR(power_on, 0644, bt_read, bt_write);
31018 +static DEVICE_ATTR(reset, 0644, bt_read, bt_write);
31019 +
31020 +#ifdef CONFIG_PM
31021 +static int gta01_bt_suspend(struct platform_device *pdev, pm_message_t state)
31022 +{
31023 + struct gta01_pm_bt_data *bt_data = dev_get_drvdata(&pdev->dev);
31024 +
31025 + dev_dbg(&pdev->dev, DRVMSG ": suspending\n");
31026 +
31027 + if (machine_is_neo1973_gta02()) {
31028 + bt_data->pre_resume_state =
31029 + s3c2410_gpio_getpin(GTA02_GPIO_BT_EN);
31030 + __gta02_pm_bt_toggle_radio(&pdev->dev, 0);
31031 + }
31032 +
31033 + return 0;
31034 +}
31035 +
31036 +static int gta01_bt_resume(struct platform_device *pdev)
31037 +{
31038 + struct gta01_pm_bt_data *bt_data = dev_get_drvdata(&pdev->dev);
31039 + dev_dbg(&pdev->dev, DRVMSG ": resuming\n");
31040 +
31041 + if (machine_is_neo1973_gta02()) {
31042 + __gta02_pm_bt_toggle_radio(&pdev->dev,
31043 + bt_data->pre_resume_state);
31044 + }
31045 +
31046 + return 0;
31047 +}
31048 +#else
31049 +#define gta01_bt_suspend NULL
31050 +#define gta01_bt_resume NULL
31051 +#endif
31052 +
31053 +static struct attribute *gta01_bt_sysfs_entries[] = {
31054 + &dev_attr_power_on.attr,
31055 + &dev_attr_reset.attr,
31056 + NULL
31057 +};
31058 +
31059 +static struct attribute_group gta01_bt_attr_group = {
31060 + .name = NULL,
31061 + .attrs = gta01_bt_sysfs_entries,
31062 +};
31063 +
31064 +static int __init gta01_bt_probe(struct platform_device *pdev)
31065 +{
31066 + struct rfkill *rfkill;
31067 + struct regulator *regulator;
31068 + struct gta01_pm_bt_data *bt_data;
31069 + int ret;
31070 +
31071 + dev_info(&pdev->dev, DRVMSG ": starting\n");
31072 +
31073 + bt_data = kzalloc(sizeof(*bt_data), GFP_KERNEL);
31074 + dev_set_drvdata(&pdev->dev, bt_data);
31075 +
31076 + if (machine_is_neo1973_gta01()) {
31077 + /* we make sure that the voltage is off */
31078 + pcf50606_onoff_set(pcf50606_global,
31079 + PCF50606_REGULATOR_D1REG, 0);
31080 + /* we pull reset to low to make sure that the chip doesn't
31081 + * drain power through the reset line */
31082 + neo1973_gpb_setpin(GTA01_GPIO_BT_EN, 0);
31083 + } else if (machine_is_neo1973_gta02()) {
31084 + regulator = regulator_get(&pdev->dev, "BT_3V2");
31085 + if (IS_ERR(regulator))
31086 + return -ENODEV;
31087 +
31088 + bt_data->regulator = regulator;
31089 +
31090 + /* this tests the true physical state of the regulator... */
31091 + if (regulator_is_enabled(regulator)) {
31092 + /*
31093 + * but these only operate on the logical state of the
31094 + * regulator... so we need to logicaly "adopt" it on
31095 + * to turn it off
31096 + */
31097 + regulator_enable(regulator);
31098 + regulator_disable(regulator);
31099 + }
31100 +
31101 + /* we pull reset to low to make sure that the chip doesn't
31102 + * drain power through the reset line */
31103 + neo1973_gpb_setpin(GTA02_GPIO_BT_EN, 0);
31104 + }
31105 +
31106 + rfkill = rfkill_allocate(&pdev->dev, RFKILL_TYPE_BLUETOOTH);
31107 +
31108 + rfkill->name = pdev->name;
31109 + rfkill->data = &pdev->dev;
31110 + rfkill->state = RFKILL_STATE_OFF;
31111 + rfkill->toggle_radio = bt_rfkill_toggle_radio;
31112 +
31113 + ret = rfkill_register(rfkill);
31114 + if (ret) {
31115 + dev_err(&pdev->dev, "Failed to register rfkill\n");
31116 + return ret;
31117 + }
31118 +
31119 + bt_data->rfkill = rfkill;
31120 +
31121 + return sysfs_create_group(&pdev->dev.kobj, &gta01_bt_attr_group);
31122 +}
31123 +
31124 +static int gta01_bt_remove(struct platform_device *pdev)
31125 +{
31126 + struct gta01_pm_bt_data *bt_data = dev_get_drvdata(&pdev->dev);
31127 + struct regulator *regulator;
31128 +
31129 + sysfs_remove_group(&pdev->dev.kobj, &gta01_bt_attr_group);
31130 +
31131 + if (bt_data->rfkill) {
31132 + rfkill_unregister(bt_data->rfkill);
31133 + rfkill_free(bt_data->rfkill);
31134 + }
31135 +
31136 + if (!bt_data || !bt_data->regulator)
31137 + return 0;
31138 +
31139 + regulator = bt_data->regulator;
31140 +
31141 + /* Make sure regulator is disabled before calling regulator_put */
31142 + if (regulator_is_enabled(regulator))
31143 + regulator_disable(regulator);
31144 +
31145 + regulator_put(regulator);
31146 +
31147 + kfree(bt_data);
31148 +
31149 + return 0;
31150 +}
31151 +
31152 +static struct platform_driver gta01_bt_driver = {
31153 + .probe = gta01_bt_probe,
31154 + .remove = gta01_bt_remove,
31155 + .suspend = gta01_bt_suspend,
31156 + .resume = gta01_bt_resume,
31157 + .driver = {
31158 + .name = "neo1973-pm-bt",
31159 + },
31160 +};
31161 +
31162 +static int __devinit gta01_bt_init(void)
31163 +{
31164 + return platform_driver_register(&gta01_bt_driver);
31165 +}
31166 +
31167 +static void gta01_bt_exit(void)
31168 +{
31169 + platform_driver_unregister(&gta01_bt_driver);
31170 +}
31171 +
31172 +module_init(gta01_bt_init);
31173 +module_exit(gta01_bt_exit);
31174 +
31175 +MODULE_LICENSE("GPL");
31176 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
31177 +MODULE_DESCRIPTION(DRVMSG);
31178 Index: linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_pm_gps.c
31179 ===================================================================
31180 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
31181 +++ linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_pm_gps.c 2009-01-02 00:01:56.000000000 +0100
31182 @@ -0,0 +1,699 @@
31183 +/*
31184 + * GPS Power Management code for the FIC Neo1973 GSM Phone
31185 + *
31186 + * (C) 2007 by Openmoko Inc.
31187 + * Author: Harald Welte <laforge@openmoko.org>
31188 + * All rights reserved.
31189 + *
31190 + * This program is free software; you can redistribute it and/or modify
31191 + * it under the terms of the GNU General Public License version 2 as
31192 + * published by the Free Software Foundation
31193 + *
31194 + */
31195 +
31196 +#include <linux/module.h>
31197 +#include <linux/init.h>
31198 +#include <linux/kernel.h>
31199 +#include <linux/delay.h>
31200 +#include <linux/platform_device.h>
31201 +
31202 +#include <mach/hardware.h>
31203 +
31204 +#include <asm/mach-types.h>
31205 +
31206 +#include <asm/plat-s3c24xx/neo1973.h>
31207 +
31208 +/* For GTA01 */
31209 +#include <mach/gta01.h>
31210 +#include <linux/pcf50606.h>
31211 +
31212 +/* For GTA02 */
31213 +#include <mach/gta02.h>
31214 +
31215 +#include <linux/regulator/consumer.h>
31216 +
31217 +struct neo1973_pm_gps_data {
31218 + int power_was_on;
31219 + struct regulator *regulator;
31220 +};
31221 +
31222 +static struct neo1973_pm_gps_data neo1973_gps;
31223 +
31224 +int neo1973_pm_gps_is_on(void)
31225 +{
31226 + return neo1973_gps.power_was_on;
31227 +}
31228 +EXPORT_SYMBOL_GPL(neo1973_pm_gps_is_on);
31229 +
31230 +#ifdef CONFIG_MACH_NEO1973_GTA01
31231 +
31232 +/* This is the 2.8V supply for the RTC crystal, the mail clock crystal and
31233 + * the input to VDD_RF */
31234 +static void gps_power_2v8_set(int on)
31235 +{
31236 + switch (system_rev) {
31237 + case GTA01v3_SYSTEM_REV:
31238 + case GTA01v4_SYSTEM_REV:
31239 + if (on)
31240 + pcf50606_voltage_set(pcf50606_global,
31241 + PCF50606_REGULATOR_IOREG, 2800);
31242 + pcf50606_onoff_set(pcf50606_global,
31243 + PCF50606_REGULATOR_IOREG, on);
31244 + break;
31245 + case GTA01Bv2_SYSTEM_REV:
31246 + s3c2410_gpio_setpin(GTA01_GPIO_GPS_EN_2V8, on);
31247 + break;
31248 + case GTA01Bv3_SYSTEM_REV:
31249 + case GTA01Bv4_SYSTEM_REV:
31250 + break;
31251 + }
31252 +}
31253 +
31254 +static int gps_power_2v8_get(void)
31255 +{
31256 + int ret = 0;
31257 +
31258 + switch (system_rev) {
31259 + case GTA01v3_SYSTEM_REV:
31260 + case GTA01v4_SYSTEM_REV:
31261 + if (pcf50606_onoff_get(pcf50606_global,
31262 + PCF50606_REGULATOR_IOREG) &&
31263 + pcf50606_voltage_get(pcf50606_global,
31264 + PCF50606_REGULATOR_IOREG) == 2800)
31265 + ret = 1;
31266 + break;
31267 + case GTA01Bv2_SYSTEM_REV:
31268 + if (s3c2410_gpio_getpin(GTA01_GPIO_GPS_EN_2V8))
31269 + ret = 1;
31270 + break;
31271 + case GTA01Bv3_SYSTEM_REV:
31272 + case GTA01Bv4_SYSTEM_REV:
31273 + break;
31274 + }
31275 +
31276 + return ret;
31277 +}
31278 +
31279 +/* This is the 3V supply (AVDD) for the external RF frontend (LNA bias) */
31280 +static void gps_power_3v_set(int on)
31281 +{
31282 + switch (system_rev) {
31283 + case GTA01v3_SYSTEM_REV:
31284 + case GTA01v4_SYSTEM_REV:
31285 + if (on)
31286 + pcf50606_voltage_set(pcf50606_global,
31287 + PCF50606_REGULATOR_D1REG, 3000);
31288 + pcf50606_onoff_set(pcf50606_global,
31289 + PCF50606_REGULATOR_D1REG, on);
31290 + break;
31291 + case GTA01Bv2_SYSTEM_REV:
31292 + case GTA01Bv3_SYSTEM_REV:
31293 + case GTA01Bv4_SYSTEM_REV:
31294 + s3c2410_gpio_setpin(GTA01_GPIO_GPS_EN_3V, on);
31295 + break;
31296 + }
31297 +}
31298 +
31299 +static int gps_power_3v_get(void)
31300 +{
31301 + int ret = 0;
31302 +
31303 + switch (system_rev) {
31304 + case GTA01v3_SYSTEM_REV:
31305 + case GTA01v4_SYSTEM_REV:
31306 + if (pcf50606_onoff_get(pcf50606_global,
31307 + PCF50606_REGULATOR_D1REG) &&
31308 + pcf50606_voltage_get(pcf50606_global,
31309 + PCF50606_REGULATOR_D1REG) == 3000)
31310 + ret = 1;
31311 + break;
31312 + case GTA01Bv2_SYSTEM_REV:
31313 + case GTA01Bv3_SYSTEM_REV:
31314 + case GTA01Bv4_SYSTEM_REV:
31315 + if (s3c2410_gpio_getpin(GTA01_GPIO_GPS_EN_3V))
31316 + ret = 1;
31317 + break;
31318 + }
31319 +
31320 + return ret;
31321 +}
31322 +
31323 +/* This is the 3.3V supply for VDD_IO and VDD_LPREG input */
31324 +static void gps_power_3v3_set(int on)
31325 +{
31326 + switch (system_rev) {
31327 + case GTA01v3_SYSTEM_REV:
31328 + case GTA01v4_SYSTEM_REV:
31329 + case GTA01Bv2_SYSTEM_REV:
31330 + if (on)
31331 + pcf50606_voltage_set(pcf50606_global,
31332 + PCF50606_REGULATOR_DCD, 3300);
31333 + pcf50606_onoff_set(pcf50606_global,
31334 + PCF50606_REGULATOR_DCD, on);
31335 + break;
31336 + case GTA01Bv3_SYSTEM_REV:
31337 + case GTA01Bv4_SYSTEM_REV:
31338 + s3c2410_gpio_setpin(GTA01_GPIO_GPS_EN_3V3, on);
31339 + break;
31340 + }
31341 +}
31342 +
31343 +static int gps_power_3v3_get(void)
31344 +{
31345 + int ret = 0;
31346 +
31347 + switch (system_rev) {
31348 + case GTA01v3_SYSTEM_REV:
31349 + case GTA01v4_SYSTEM_REV:
31350 + case GTA01Bv2_SYSTEM_REV:
31351 + if (pcf50606_onoff_get(pcf50606_global,
31352 + PCF50606_REGULATOR_DCD) &&
31353 + pcf50606_voltage_get(pcf50606_global,
31354 + PCF50606_REGULATOR_DCD) == 3300)
31355 + ret = 1;
31356 + break;
31357 + case GTA01Bv3_SYSTEM_REV:
31358 + case GTA01Bv4_SYSTEM_REV:
31359 + if (s3c2410_gpio_getpin(GTA01_GPIO_GPS_EN_3V3))
31360 + ret = 1;
31361 + break;
31362 + }
31363 +
31364 + return ret;
31365 +}
31366 +
31367 +/* This is the 2.5V supply for VDD_PLLREG and VDD_COREREG input */
31368 +static void gps_power_2v5_set(int on)
31369 +{
31370 + switch (system_rev) {
31371 + case GTA01v3_SYSTEM_REV:
31372 + /* This is CORE_1V8 and cannot be disabled */
31373 + break;
31374 + case GTA01v4_SYSTEM_REV:
31375 + case GTA01Bv2_SYSTEM_REV:
31376 + case GTA01Bv3_SYSTEM_REV:
31377 + case GTA01Bv4_SYSTEM_REV:
31378 + if (on)
31379 + pcf50606_voltage_set(pcf50606_global,
31380 + PCF50606_REGULATOR_D2REG, 2500);
31381 + pcf50606_onoff_set(pcf50606_global,
31382 + PCF50606_REGULATOR_D2REG, on);
31383 + break;
31384 + }
31385 +}
31386 +
31387 +static int gps_power_2v5_get(void)
31388 +{
31389 + int ret = 0;
31390 +
31391 + switch (system_rev) {
31392 + case GTA01v3_SYSTEM_REV:
31393 + /* This is CORE_1V8 and cannot be disabled */
31394 + ret = 1;
31395 + break;
31396 + case GTA01v4_SYSTEM_REV:
31397 + case GTA01Bv2_SYSTEM_REV:
31398 + case GTA01Bv3_SYSTEM_REV:
31399 + case GTA01Bv4_SYSTEM_REV:
31400 + if (pcf50606_onoff_get(pcf50606_global,
31401 + PCF50606_REGULATOR_D2REG) &&
31402 + pcf50606_voltage_get(pcf50606_global,
31403 + PCF50606_REGULATOR_D2REG) == 2500)
31404 + ret = 1;
31405 + break;
31406 + }
31407 +
31408 + return ret;
31409 +}
31410 +
31411 +/* This is the 1.5V supply for VDD_CORE */
31412 +static void gps_power_1v5_set(int on)
31413 +{
31414 + switch (system_rev) {
31415 + case GTA01v3_SYSTEM_REV:
31416 + case GTA01v4_SYSTEM_REV:
31417 + case GTA01Bv2_SYSTEM_REV:
31418 + /* This is switched via 2v5 */
31419 + break;
31420 + case GTA01Bv3_SYSTEM_REV:
31421 + case GTA01Bv4_SYSTEM_REV:
31422 + if (on)
31423 + pcf50606_voltage_set(pcf50606_global,
31424 + PCF50606_REGULATOR_DCD, 1500);
31425 + pcf50606_onoff_set(pcf50606_global,
31426 + PCF50606_REGULATOR_DCD, on);
31427 + break;
31428 + }
31429 +}
31430 +
31431 +static int gps_power_1v5_get(void)
31432 +{
31433 + int ret = 0;
31434 +
31435 + switch (system_rev) {
31436 + case GTA01v3_SYSTEM_REV:
31437 + case GTA01v4_SYSTEM_REV:
31438 + case GTA01Bv2_SYSTEM_REV:
31439 + /* This is switched via 2v5 */
31440 + ret = 1;
31441 + break;
31442 + case GTA01Bv3_SYSTEM_REV:
31443 + case GTA01Bv4_SYSTEM_REV:
31444 + if (pcf50606_onoff_get(pcf50606_global,
31445 + PCF50606_REGULATOR_DCD) &&
31446 + pcf50606_voltage_get(pcf50606_global,
31447 + PCF50606_REGULATOR_DCD) == 1500)
31448 + ret = 1;
31449 + break;
31450 + }
31451 +
31452 + return ret;
31453 +}
31454 +#endif
31455 +
31456 +/* This is the POWERON pin */
31457 +static void gps_pwron_set(int on)
31458 +{
31459 +
31460 + if (machine_is_neo1973_gta01())
31461 + neo1973_gpb_setpin(GTA01_GPIO_GPS_PWRON, on);
31462 +
31463 + if (machine_is_neo1973_gta02()) {
31464 + if (on) {
31465 + /* return UART pins to being UART pins */
31466 + s3c2410_gpio_cfgpin(S3C2410_GPH4, S3C2410_GPH4_TXD1);
31467 + /* remove pulldown now it won't be floating any more */
31468 + s3c2410_gpio_pullup(S3C2410_GPH5, 0);
31469 + } else {
31470 + /*
31471 + * take care not to power unpowered GPS from UART TX
31472 + * return them to GPIO and force low
31473 + */
31474 + s3c2410_gpio_cfgpin(S3C2410_GPH4, S3C2410_GPH4_OUTP);
31475 + s3c2410_gpio_setpin(S3C2410_GPH4, 0);
31476 + /* don't let RX from unpowered GPS float */
31477 + s3c2410_gpio_pullup(S3C2410_GPH5, 1);
31478 + }
31479 + if ((on) && (!neo1973_gps.power_was_on))
31480 + regulator_enable(neo1973_gps.regulator);
31481 +
31482 + if ((!on) && (neo1973_gps.power_was_on))
31483 + regulator_disable(neo1973_gps.regulator);
31484 + }
31485 +
31486 + neo1973_gps.power_was_on = !!on;
31487 +}
31488 +
31489 +static int gps_pwron_get(void)
31490 +{
31491 + if (machine_is_neo1973_gta01())
31492 + return !!s3c2410_gpio_getpin(GTA01_GPIO_GPS_PWRON);
31493 +
31494 + if (machine_is_neo1973_gta02())
31495 + return regulator_is_enabled(neo1973_gps.regulator);
31496 + return -1;
31497 +}
31498 +
31499 +
31500 +#ifdef CONFIG_MACH_NEO1973_GTA01
31501 +static void gps_rst_set(int on);
31502 +static int gps_rst_get(void);
31503 +#endif
31504 +
31505 +static ssize_t power_gps_read(struct device *dev,
31506 + struct device_attribute *attr, char *buf)
31507 +{
31508 + int ret = 0;
31509 +
31510 + if (!strcmp(attr->attr.name, "pwron"))
31511 +#ifdef CONFIG_MACH_NEO1973_GTA01
31512 + {
31513 +#endif
31514 + ret = gps_pwron_get();
31515 +#ifdef CONFIG_MACH_NEO1973_GTA01
31516 + } else if (!strcmp(attr->attr.name, "power_avdd_3v")) {
31517 + ret = gps_power_3v_get();
31518 + } else if (!strcmp(attr->attr.name, "power_tcxo_2v8")) {
31519 + ret = gps_power_2v8_get();
31520 + } else if (!strcmp(attr->attr.name, "reset")) {
31521 + ret = gps_rst_get();
31522 + } else if (!strcmp(attr->attr.name, "power_lp_io_3v3")) {
31523 + ret = gps_power_3v3_get();
31524 + } else if (!strcmp(attr->attr.name, "power_pll_core_2v5")) {
31525 + ret = gps_power_2v5_get();
31526 + } else if (!strcmp(attr->attr.name, "power_core_1v5") ||
31527 + !strcmp(attr->attr.name, "power_vdd_core_1v5")) {
31528 + ret = gps_power_1v5_get();
31529 + }
31530 +#endif
31531 + if (ret)
31532 + return strlcpy(buf, "1\n", 3);
31533 + else
31534 + return strlcpy(buf, "0\n", 3);
31535 +}
31536 +
31537 +static ssize_t power_gps_write(struct device *dev,
31538 + struct device_attribute *attr, const char *buf,
31539 + size_t count)
31540 +{
31541 + unsigned long on = simple_strtoul(buf, NULL, 10);
31542 +
31543 + if (!strcmp(attr->attr.name, "pwron"))
31544 +#ifdef CONFIG_MACH_NEO1973_GTA01
31545 +{
31546 +#endif
31547 + gps_pwron_set(on);
31548 +#ifdef CONFIG_MACH_NEO1973_GTA01
31549 + } else if (!strcmp(attr->attr.name, "power_avdd_3v")) {
31550 + gps_power_3v_set(on);
31551 + } else if (!strcmp(attr->attr.name, "power_tcxo_2v8")) {
31552 + gps_power_2v8_set(on);
31553 + } else if (!strcmp(attr->attr.name, "reset")) {
31554 + gps_rst_set(on);
31555 + } else if (!strcmp(attr->attr.name, "power_lp_io_3v3")) {
31556 + gps_power_3v3_set(on);
31557 + } else if (!strcmp(attr->attr.name, "power_pll_core_2v5")) {
31558 + gps_power_2v5_set(on);
31559 + } else if (!strcmp(attr->attr.name, "power_core_1v5") ||
31560 + !strcmp(attr->attr.name, "power_vdd_core_1v5")) {
31561 + gps_power_1v5_set(on);
31562 + }
31563 +#endif
31564 + return count;
31565 +}
31566 +
31567 +
31568 +#ifdef CONFIG_MACH_NEO1973_GTA01
31569 +
31570 +/* This is the nRESET pin */
31571 +static void gps_rst_set(int on)
31572 +{
31573 + switch (system_rev) {
31574 + case GTA01v3_SYSTEM_REV:
31575 + pcf50606_gpo0_set(pcf50606_global, on);
31576 + break;
31577 + case GTA01v4_SYSTEM_REV:
31578 + case GTA01Bv2_SYSTEM_REV:
31579 + case GTA01Bv3_SYSTEM_REV:
31580 + case GTA01Bv4_SYSTEM_REV:
31581 + s3c2410_gpio_setpin(GTA01_GPIO_GPS_RESET, on);
31582 + break;
31583 + }
31584 +}
31585 +
31586 +static int gps_rst_get(void)
31587 +{
31588 + switch (system_rev) {
31589 + case GTA01v3_SYSTEM_REV:
31590 + if (pcf50606_gpo0_get(pcf50606_global))
31591 + return 1;
31592 + break;
31593 + case GTA01v4_SYSTEM_REV:
31594 + case GTA01Bv2_SYSTEM_REV:
31595 + case GTA01Bv3_SYSTEM_REV:
31596 + case GTA01Bv4_SYSTEM_REV:
31597 + if (s3c2410_gpio_getpin(GTA01_GPIO_GPS_RESET))
31598 + return 1;
31599 + break;
31600 + }
31601 +
31602 + return 0;
31603 +}
31604 +
31605 +
31606 +static void gps_power_sequence_up(void)
31607 +{
31608 + /* According to PMB2520 Data Sheet, Rev. 2006-06-05,
31609 + * Chapter 4.2.2 */
31610 +
31611 + /* nRESET must be asserted low */
31612 + gps_rst_set(0);
31613 +
31614 + /* POWERON must be de-asserted (low) */
31615 + gps_pwron_set(0);
31616 +
31617 + /* Apply VDD_IO and VDD_LPREG_IN */
31618 + gps_power_3v3_set(1);
31619 +
31620 + /* VDD_COREREG_IN, VDD_PLLREG_IN */
31621 + gps_power_1v5_set(1);
31622 + gps_power_2v5_set(1);
31623 +
31624 + /* and VDD_RF may be applied */
31625 + gps_power_2v8_set(1);
31626 +
31627 + /* We need to enable AVDD, since in GTA01Bv3 it is
31628 + * shared with RFREG_IN */
31629 + gps_power_3v_set(1);
31630 +
31631 + msleep(3); /* Is 3ms enough? */
31632 +
31633 + /* De-asert nRESET */
31634 + gps_rst_set(1);
31635 +
31636 + /* Switch power on */
31637 + gps_pwron_set(1);
31638 +
31639 +}
31640 +
31641 +static void gps_power_sequence_down(void)
31642 +{
31643 + /* According to PMB2520 Data Sheet, Rev. 2006-06-05,
31644 + * Chapter 4.2.3.1 */
31645 + gps_pwron_set(0);
31646 +
31647 + /* Don't disable AVDD before PWRON is cleared, since
31648 + * in GTA01Bv3, AVDD and RFREG_IN are shared */
31649 + gps_power_3v_set(0);
31650 +
31651 + /* Remove VDD_COREREG_IN, VDD_PLLREG_IN and VDD_REFREG_IN */
31652 + gps_power_1v5_set(0);
31653 + gps_power_2v5_set(0);
31654 + gps_power_2v8_set(0);
31655 +
31656 + /* Remove VDD_LPREG_IN and VDD_IO */
31657 + gps_power_3v3_set(0);
31658 +}
31659 +
31660 +
31661 +static ssize_t power_sequence_read(struct device *dev,
31662 + struct device_attribute *attr,
31663 + char *buf)
31664 +{
31665 + return strlcpy(buf, "power_up power_down\n", PAGE_SIZE);
31666 +}
31667 +
31668 +static ssize_t power_sequence_write(struct device *dev,
31669 + struct device_attribute *attr,
31670 + const char *buf, size_t count)
31671 +{
31672 + dev_dbg(dev, "wrote: '%s'\n", buf);
31673 +
31674 + if (!strncmp(buf, "power_up", 8))
31675 + gps_power_sequence_up();
31676 + else if (!strncmp(buf, "power_down", 10))
31677 + gps_power_sequence_down();
31678 + else
31679 + return -EINVAL;
31680 +
31681 + return count;
31682 +}
31683 +
31684 +static DEVICE_ATTR(power_tcxo_2v8, 0644, power_gps_read, power_gps_write);
31685 +static DEVICE_ATTR(power_avdd_3v, 0644, power_gps_read, power_gps_write);
31686 +static DEVICE_ATTR(reset, 0644, power_gps_read, power_gps_write);
31687 +static DEVICE_ATTR(power_lp_io_3v3, 0644, power_gps_read, power_gps_write);
31688 +static DEVICE_ATTR(power_pll_core_2v5, 0644, power_gps_read, power_gps_write);
31689 +static DEVICE_ATTR(power_core_1v5, 0644, power_gps_read, power_gps_write);
31690 +static DEVICE_ATTR(power_vdd_core_1v5, 0644, power_gps_read, power_gps_write);
31691 +static DEVICE_ATTR(power_sequence, 0644, power_sequence_read,
31692 + power_sequence_write);
31693 +#endif
31694 +
31695 +#ifdef CONFIG_PM
31696 +static int gta01_pm_gps_suspend(struct platform_device *pdev,
31697 + pm_message_t state)
31698 +{
31699 +#ifdef CONFIG_MACH_NEO1973_GTA01
31700 + if (machine_is_neo1973_gta01())
31701 + /* FIXME */
31702 + gps_power_sequence_down();
31703 +#endif
31704 + if (machine_is_neo1973_gta02())
31705 + gps_pwron_set(0);
31706 +
31707 + return 0;
31708 +}
31709 +
31710 +static int gta01_pm_gps_resume(struct platform_device *pdev)
31711 +{
31712 +#ifdef CONFIG_MACH_NEO1973_GTA01
31713 + if (machine_is_neo1973_gta01())
31714 + if (neo1973_gps.power_was_on)
31715 + gps_power_sequence_up();
31716 +#endif
31717 + if (machine_is_neo1973_gta02())
31718 + if (neo1973_gps.power_was_on)
31719 + gps_pwron_set(1);
31720 +
31721 + return 0;
31722 +}
31723 +#else
31724 +#define gta01_pm_gps_suspend NULL
31725 +#define gta01_pm_gps_resume NULL
31726 +#endif
31727 +
31728 +static DEVICE_ATTR(pwron, 0644, power_gps_read, power_gps_write);
31729 +
31730 +
31731 +static struct attribute *gta01_gps_sysfs_entries[] = {
31732 + &dev_attr_pwron.attr,
31733 +#ifdef CONFIG_MACH_NEO1973_GTA01
31734 + &dev_attr_power_avdd_3v.attr,
31735 + &dev_attr_reset.attr,
31736 + &dev_attr_power_lp_io_3v3.attr,
31737 + &dev_attr_power_pll_core_2v5.attr,
31738 + &dev_attr_power_sequence.attr,
31739 + NULL, /* power_core_1v5 */
31740 + NULL, /* power_vdd_core_1v5 */
31741 +#endif
31742 + NULL /* terminating entry */
31743 +};
31744 +
31745 +static struct attribute_group gta01_gps_attr_group = {
31746 + .name = NULL,
31747 + .attrs = gta01_gps_sysfs_entries,
31748 +};
31749 +
31750 +static struct attribute *gta02_gps_sysfs_entries[] = {
31751 + &dev_attr_pwron.attr,
31752 + NULL
31753 +};
31754 +
31755 +static struct attribute_group gta02_gps_attr_group = {
31756 + .name = NULL,
31757 + .attrs = gta02_gps_sysfs_entries,
31758 +};
31759 +
31760 +static int __init gta01_pm_gps_probe(struct platform_device *pdev)
31761 +{
31762 + if (machine_is_neo1973_gta01()) {
31763 + s3c2410_gpio_cfgpin(GTA01_GPIO_GPS_PWRON, S3C2410_GPIO_OUTPUT);
31764 +
31765 + switch (system_rev) {
31766 + case GTA01v3_SYSTEM_REV:
31767 + break;
31768 + case GTA01v4_SYSTEM_REV:
31769 + s3c2410_gpio_cfgpin(GTA01_GPIO_GPS_RESET, S3C2410_GPIO_OUTPUT);
31770 + break;
31771 + case GTA01Bv3_SYSTEM_REV:
31772 + case GTA01Bv4_SYSTEM_REV:
31773 + s3c2410_gpio_cfgpin(GTA01_GPIO_GPS_EN_3V3, S3C2410_GPIO_OUTPUT);
31774 + /* fallthrough */
31775 + case GTA01Bv2_SYSTEM_REV:
31776 + s3c2410_gpio_cfgpin(GTA01_GPIO_GPS_EN_2V8, S3C2410_GPIO_OUTPUT);
31777 + s3c2410_gpio_cfgpin(GTA01_GPIO_GPS_EN_3V, S3C2410_GPIO_OUTPUT);
31778 + s3c2410_gpio_cfgpin(GTA01_GPIO_GPS_RESET, S3C2410_GPIO_OUTPUT);
31779 + break;
31780 + default:
31781 + dev_warn(&pdev->dev, "Unknown GTA01 Revision 0x%x, "
31782 + "AGPS PM features not available!!!\n",
31783 + system_rev);
31784 + return -1;
31785 + break;
31786 + }
31787 +
31788 +#ifdef CONFIG_MACH_NEO1973_GTA01
31789 + gps_power_sequence_down();
31790 +
31791 + switch (system_rev) {
31792 + case GTA01v3_SYSTEM_REV:
31793 + case GTA01v4_SYSTEM_REV:
31794 + case GTA01Bv2_SYSTEM_REV:
31795 + gta01_gps_sysfs_entries[ARRAY_SIZE(gta01_gps_sysfs_entries)-3] =
31796 + &dev_attr_power_tcxo_2v8.attr;
31797 + break;
31798 + case GTA01Bv3_SYSTEM_REV:
31799 + case GTA01Bv4_SYSTEM_REV:
31800 + gta01_gps_sysfs_entries[ARRAY_SIZE(gta01_gps_sysfs_entries)-3] =
31801 + &dev_attr_power_core_1v5.attr;
31802 + gta01_gps_sysfs_entries[ARRAY_SIZE(gta01_gps_sysfs_entries)-2] =
31803 + &dev_attr_power_vdd_core_1v5.attr;
31804 + break;
31805 + }
31806 +#endif
31807 + return sysfs_create_group(&pdev->dev.kobj, &gta01_gps_attr_group);
31808 + }
31809 +
31810 + if (machine_is_neo1973_gta02()) {
31811 + switch (system_rev) {
31812 + case GTA02v2_SYSTEM_REV:
31813 + case GTA02v3_SYSTEM_REV:
31814 + case GTA02v4_SYSTEM_REV:
31815 + case GTA02v5_SYSTEM_REV:
31816 + case GTA02v6_SYSTEM_REV:
31817 + neo1973_gps.regulator = regulator_get(
31818 + &pdev->dev, "RF_3V");
31819 + if (IS_ERR(neo1973_gps.regulator)) {
31820 + dev_err(&pdev->dev, "probe failed %d\n",
31821 + (int)neo1973_gps.regulator);
31822 + return (int)neo1973_gps.regulator;
31823 + }
31824 +
31825 + dev_info(&pdev->dev, "FIC Neo1973 GPS Power Management:"
31826 + "starting\n");
31827 + break;
31828 + default:
31829 + dev_warn(&pdev->dev, "Unknown GTA02 Revision 0x%x, "
31830 + "AGPS PM features not available!!!\n",
31831 + system_rev);
31832 + return -1;
31833 + break;
31834 + }
31835 + return sysfs_create_group(&pdev->dev.kobj, &gta02_gps_attr_group);
31836 + }
31837 + return -1;
31838 +}
31839 +
31840 +static int gta01_pm_gps_remove(struct platform_device *pdev)
31841 +{
31842 + if (machine_is_neo1973_gta01()) {
31843 +#ifdef CONFIG_MACH_NEO1973_GTA01
31844 + gps_power_sequence_down();
31845 +#endif
31846 + sysfs_remove_group(&pdev->dev.kobj, &gta01_gps_attr_group);
31847 + }
31848 +
31849 + if (machine_is_neo1973_gta02()) {
31850 + regulator_put(neo1973_gps.regulator);
31851 + sysfs_remove_group(&pdev->dev.kobj, &gta02_gps_attr_group);
31852 + }
31853 + return 0;
31854 +}
31855 +
31856 +static struct platform_driver gta01_pm_gps_driver = {
31857 + .probe = gta01_pm_gps_probe,
31858 + .remove = gta01_pm_gps_remove,
31859 + .suspend = gta01_pm_gps_suspend,
31860 + .resume = gta01_pm_gps_resume,
31861 + .driver = {
31862 + .name = "neo1973-pm-gps",
31863 + },
31864 +};
31865 +
31866 +static int __devinit gta01_pm_gps_init(void)
31867 +{
31868 + return platform_driver_register(&gta01_pm_gps_driver);
31869 +}
31870 +
31871 +static void gta01_pm_gps_exit(void)
31872 +{
31873 + platform_driver_unregister(&gta01_pm_gps_driver);
31874 +}
31875 +
31876 +module_init(gta01_pm_gps_init);
31877 +module_exit(gta01_pm_gps_exit);
31878 +
31879 +MODULE_LICENSE("GPL");
31880 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
31881 +MODULE_DESCRIPTION("FIC Neo1973 GPS Power Management");
31882 Index: linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_pm_gps.h
31883 ===================================================================
31884 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
31885 +++ linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_pm_gps.h 2009-01-02 00:01:56.000000000 +0100
31886 @@ -0,0 +1 @@
31887 +extern int neo1973_pm_gps_is_on(void);
31888 Index: linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
31889 ===================================================================
31890 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
31891 +++ linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c 2009-01-02 00:01:56.000000000 +0100
31892 @@ -0,0 +1,360 @@
31893 +/*
31894 + * GSM Management code for the FIC Neo1973 GSM Phone
31895 + *
31896 + * (C) 2007 by Openmoko Inc.
31897 + * Author: Harald Welte <laforge@openmoko.org>
31898 + * All rights reserved.
31899 + *
31900 + * This program is free software; you can redistribute it and/or modify
31901 + * it under the terms of the GNU General Public License version 2 as
31902 + * published by the Free Software Foundation
31903 + *
31904 + */
31905 +
31906 +#include <linux/module.h>
31907 +#include <linux/init.h>
31908 +#include <linux/kernel.h>
31909 +#include <linux/platform_device.h>
31910 +#include <linux/console.h>
31911 +#include <linux/errno.h>
31912 +#include <linux/interrupt.h>
31913 +
31914 +#include <mach/gpio.h>
31915 +#include <asm/mach-types.h>
31916 +#include <mach/gta01.h>
31917 +#include <asm/plat-s3c24xx/neo1973.h>
31918 +#include <mach/s3c24xx-serial.h>
31919 +
31920 +#include <mach/hardware.h>
31921 +
31922 +/* For GTA02 */
31923 +#include <mach/gta02.h>
31924 +#include <linux/mfd/pcf50633/gpio.h>
31925 +#include <mach/regs-gpio.h>
31926 +#include <mach/regs-gpioj.h>
31927 +
31928 +int gta_gsm_interrupts;
31929 +EXPORT_SYMBOL(gta_gsm_interrupts);
31930 +
31931 +extern void s3c24xx_serial_console_set_silence(int);
31932 +
31933 +struct gta01pm_priv {
31934 + int gpio_ngsm_en;
31935 + int gpio_ndl_gsm;
31936 +
31937 + struct console *con;
31938 +};
31939 +
31940 +static struct gta01pm_priv gta01_gsm;
31941 +
31942 +static struct console *find_s3c24xx_console(void)
31943 +{
31944 + struct console *con;
31945 +
31946 + acquire_console_sem();
31947 +
31948 + for (con = console_drivers; con; con = con->next) {
31949 + if (!strcmp(con->name, "ttySAC"))
31950 + break;
31951 + }
31952 +
31953 + release_console_sem();
31954 +
31955 + return con;
31956 +}
31957 +
31958 +static ssize_t gsm_read(struct device *dev, struct device_attribute *attr,
31959 + char *buf)
31960 +{
31961 + if (!strcmp(attr->attr.name, "power_on")) {
31962 + if (s3c2410_gpio_getpin(GTA01_GPIO_MODEM_ON))
31963 + goto out_1;
31964 + } else if (!strcmp(attr->attr.name, "reset")) {
31965 + if (machine_is_neo1973_gta01() && s3c2410_gpio_getpin(GTA01_GPIO_MODEM_RST))
31966 + goto out_1;
31967 + else if (machine_is_neo1973_gta02() && s3c2410_gpio_getpin(GTA02_GPIO_MODEM_RST))
31968 + goto out_1;
31969 + } else if (!strcmp(attr->attr.name, "download")) {
31970 + if (machine_is_neo1973_gta01()) {
31971 + if (s3c2410_gpio_getpin(GTA01_GPIO_MODEM_DNLOAD))
31972 + goto out_1;
31973 + } else if (machine_is_neo1973_gta02()) {
31974 + if (!s3c2410_gpio_getpin(GTA02_GPIO_nDL_GSM))
31975 + goto out_1;
31976 + }
31977 + } else if (!strcmp(attr->attr.name, "flowcontrolled")) {
31978 + if (s3c2410_gpio_getcfg(S3C2410_GPH1) == S3C2410_GPIO_OUTPUT)
31979 + goto out_1;
31980 + }
31981 +
31982 + return strlcpy(buf, "0\n", 3);
31983 +out_1:
31984 + return strlcpy(buf, "1\n", 3);
31985 +}
31986 +
31987 +static ssize_t gsm_write(struct device *dev, struct device_attribute *attr,
31988 + const char *buf, size_t count)
31989 +{
31990 + unsigned long on = simple_strtoul(buf, NULL, 10);
31991 +
31992 + if (!strcmp(attr->attr.name, "power_on")) {
31993 + if (on) {
31994 + if (gta01_gsm.con) {
31995 + dev_dbg(dev, "powering up GSM, thus "
31996 + "disconnecting serial console\n");
31997 +
31998 + console_stop(gta01_gsm.con);
31999 + s3c24xx_serial_console_set_silence(1);
32000 + }
32001 +
32002 + if (gta01_gsm.gpio_ngsm_en)
32003 + s3c2410_gpio_setpin(gta01_gsm.gpio_ngsm_en, 0);
32004 +
32005 + if (machine_is_neo1973_gta02()) {
32006 + switch (system_rev) {
32007 + case GTA02v2_SYSTEM_REV:
32008 + case GTA02v3_SYSTEM_REV:
32009 + case GTA02v4_SYSTEM_REV:
32010 + case GTA02v5_SYSTEM_REV:
32011 + case GTA02v6_SYSTEM_REV:
32012 + pcf50633_gpio_set(gta02_pcf_pdata.pcf,
32013 + PCF50633_GPIO2, 1);
32014 + break;
32015 + }
32016 + }
32017 +
32018 + neo1973_gpb_setpin(GTA01_GPIO_MODEM_ON, 1);
32019 + } else {
32020 + neo1973_gpb_setpin(GTA01_GPIO_MODEM_ON, 0);
32021 +
32022 + if (machine_is_neo1973_gta02()) {
32023 + switch (system_rev) {
32024 + case GTA02v2_SYSTEM_REV:
32025 + case GTA02v3_SYSTEM_REV:
32026 + case GTA02v4_SYSTEM_REV:
32027 + case GTA02v5_SYSTEM_REV:
32028 + case GTA02v6_SYSTEM_REV:
32029 + pcf50633_gpio_set(gta02_pcf_pdata.pcf,
32030 + PCF50633_GPIO2, 0);
32031 + break;
32032 + }
32033 + }
32034 +
32035 + if (gta01_gsm.gpio_ngsm_en)
32036 + s3c2410_gpio_setpin(gta01_gsm.gpio_ngsm_en, 1);
32037 +
32038 + if (gta01_gsm.con) {
32039 + s3c24xx_serial_console_set_silence(0);
32040 + console_start(gta01_gsm.con);
32041 +
32042 + dev_dbg(dev, "powered down GSM, thus enabling "
32043 + "serial console\n");
32044 + }
32045 + }
32046 + } else if (!strcmp(attr->attr.name, "reset")) {
32047 + if (machine_is_neo1973_gta01())
32048 + neo1973_gpb_setpin(GTA01_GPIO_MODEM_RST, on);
32049 + else if (machine_is_neo1973_gta02())
32050 + neo1973_gpb_setpin(GTA02_GPIO_MODEM_RST, on);
32051 + } else if (!strcmp(attr->attr.name, "download")) {
32052 + if (machine_is_neo1973_gta01())
32053 + s3c2410_gpio_setpin(GTA01_GPIO_MODEM_DNLOAD, on);
32054 +
32055 + if (machine_is_neo1973_gta02()) {
32056 + /*
32057 + * the keyboard / buttons driver requests and enables
32058 + * the JACK_INSERT IRQ. We have to take care about
32059 + * not enabling and disabling the IRQ when it was
32060 + * already in that state or we get "unblanaced IRQ"
32061 + * kernel warnings and stack dumps. So we use the
32062 + * copy of the ndl_gsm state to figure out if we should
32063 + * enable or disable the jack interrupt
32064 + */
32065 + if (on) {
32066 + if (gta01_gsm.gpio_ndl_gsm)
32067 + disable_irq(gpio_to_irq(
32068 + GTA02_GPIO_JACK_INSERT));
32069 + } else {
32070 + if (!gta01_gsm.gpio_ndl_gsm)
32071 + enable_irq(gpio_to_irq(
32072 + GTA02_GPIO_JACK_INSERT));
32073 + }
32074 +
32075 + gta01_gsm.gpio_ndl_gsm = !on;
32076 + s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, !on);
32077 + }
32078 + } else if (!strcmp(attr->attr.name, "flowcontrolled")) {
32079 + if (on) {
32080 + gta_gsm_interrupts = 0;
32081 + s3c2410_gpio_setpin(S3C2410_GPH1, 1);
32082 + s3c2410_gpio_cfgpin(S3C2410_GPH1, S3C2410_GPH1_OUTP);
32083 + } else
32084 + s3c2410_gpio_cfgpin(S3C2410_GPH1, S3C2410_GPH1_nRTS0);
32085 + }
32086 +
32087 + return count;
32088 +}
32089 +
32090 +static DEVICE_ATTR(power_on, 0644, gsm_read, gsm_write);
32091 +static DEVICE_ATTR(reset, 0644, gsm_read, gsm_write);
32092 +static DEVICE_ATTR(download, 0644, gsm_read, gsm_write);
32093 +static DEVICE_ATTR(flowcontrolled, 0644, gsm_read, gsm_write);
32094 +
32095 +#ifdef CONFIG_PM
32096 +
32097 +static int gta01_gsm_resume(struct platform_device *pdev);
32098 +static int gta01_gsm_suspend(struct platform_device *pdev, pm_message_t state)
32099 +{
32100 + /* GPIO state is saved/restored by S3C2410 core GPIO driver, so we
32101 + * don't need to do much here. */
32102 +
32103 + /* If flowcontrol asserted, abort if GSM already interrupted */
32104 + if (s3c2410_gpio_getcfg(S3C2410_GPH1) == S3C2410_GPIO_OUTPUT) {
32105 + if (gta_gsm_interrupts)
32106 + goto busy;
32107 + }
32108 +
32109 + /* disable DL GSM to prevent jack_insert becoming 'floating' */
32110 + if (machine_is_neo1973_gta02())
32111 + s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, 1);
32112 + return 0;
32113 +
32114 +busy:
32115 + return -EBUSY;
32116 +}
32117 +
32118 +static int
32119 +gta01_gsm_suspend_late(struct platform_device *pdev, pm_message_t state)
32120 +{
32121 + /* Last chance: abort if GSM already interrupted */
32122 + if (s3c2410_gpio_getcfg(S3C2410_GPH1) == S3C2410_GPIO_OUTPUT) {
32123 + if (gta_gsm_interrupts)
32124 + return -EBUSY;
32125 + }
32126 + return 0;
32127 +}
32128 +
32129 +static int gta01_gsm_resume(struct platform_device *pdev)
32130 +{
32131 + /* GPIO state is saved/restored by S3C2410 core GPIO driver, so we
32132 + * don't need to do much here. */
32133 +
32134 + /* Make sure that the kernel console on the serial port is still
32135 + * disabled. FIXME: resume ordering race with serial driver! */
32136 + if (gta01_gsm.con && s3c2410_gpio_getpin(GTA01_GPIO_MODEM_ON))
32137 + console_stop(gta01_gsm.con);
32138 +
32139 + if (machine_is_neo1973_gta02())
32140 + s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, gta01_gsm.gpio_ndl_gsm);
32141 +
32142 + return 0;
32143 +}
32144 +#else
32145 +#define gta01_gsm_suspend NULL
32146 +#define gta01_gsm_suspend_late NULL
32147 +#define gta01_gsm_resume NULL
32148 +#endif /* CONFIG_PM */
32149 +
32150 +static struct attribute *gta01_gsm_sysfs_entries[] = {
32151 + &dev_attr_power_on.attr,
32152 + &dev_attr_reset.attr,
32153 + &dev_attr_download.attr,
32154 + &dev_attr_flowcontrolled.attr,
32155 + NULL
32156 +};
32157 +
32158 +static struct attribute_group gta01_gsm_attr_group = {
32159 + .name = NULL,
32160 + .attrs = gta01_gsm_sysfs_entries,
32161 +};
32162 +
32163 +static int __init gta01_gsm_probe(struct platform_device *pdev)
32164 +{
32165 + switch (system_rev) {
32166 + case GTA01v3_SYSTEM_REV:
32167 + gta01_gsm.gpio_ngsm_en = GTA01v3_GPIO_nGSM_EN;
32168 + break;
32169 + case GTA01v4_SYSTEM_REV:
32170 + gta01_gsm.gpio_ngsm_en = 0;
32171 + break;
32172 + case GTA01Bv2_SYSTEM_REV:
32173 + case GTA01Bv3_SYSTEM_REV:
32174 + case GTA01Bv4_SYSTEM_REV:
32175 + gta01_gsm.gpio_ngsm_en = GTA01Bv2_GPIO_nGSM_EN;
32176 + s3c2410_gpio_setpin(GTA01v3_GPIO_nGSM_EN, 0);
32177 + break;
32178 + case GTA02v1_SYSTEM_REV:
32179 + case GTA02v2_SYSTEM_REV:
32180 + case GTA02v3_SYSTEM_REV:
32181 + case GTA02v4_SYSTEM_REV:
32182 + case GTA02v5_SYSTEM_REV:
32183 + case GTA02v6_SYSTEM_REV:
32184 + gta01_gsm.gpio_ngsm_en = 0;
32185 + break;
32186 + default:
32187 + dev_warn(&pdev->dev, "Unknown Neo1973 Revision 0x%x, "
32188 + "some PM features not available!!!\n",
32189 + system_rev);
32190 + break;
32191 + }
32192 +
32193 + switch (system_rev) {
32194 + case GTA01v4_SYSTEM_REV:
32195 + case GTA01Bv2_SYSTEM_REV:
32196 + gta01_gsm_sysfs_entries[ARRAY_SIZE(gta01_gsm_sysfs_entries)-2] =
32197 + &dev_attr_download.attr;
32198 + break;
32199 + default:
32200 + break;
32201 + }
32202 +
32203 + if (machine_is_neo1973_gta01()) {
32204 + gta01_gsm.con = find_s3c24xx_console();
32205 + if (!gta01_gsm.con)
32206 + dev_warn(&pdev->dev,
32207 + "cannot find S3C24xx console driver\n");
32208 + } else
32209 + gta01_gsm.con = NULL;
32210 +
32211 + /* note that download initially disabled, and enforce that */
32212 + gta01_gsm.gpio_ndl_gsm = 1;
32213 + if (machine_is_neo1973_gta02())
32214 + s3c2410_gpio_setpin(GTA02_GPIO_nDL_GSM, 1);
32215 +
32216 + return sysfs_create_group(&pdev->dev.kobj, &gta01_gsm_attr_group);
32217 +}
32218 +
32219 +static int gta01_gsm_remove(struct platform_device *pdev)
32220 +{
32221 + sysfs_remove_group(&pdev->dev.kobj, &gta01_gsm_attr_group);
32222 +
32223 + return 0;
32224 +}
32225 +
32226 +static struct platform_driver gta01_gsm_driver = {
32227 + .probe = gta01_gsm_probe,
32228 + .remove = gta01_gsm_remove,
32229 + .suspend = gta01_gsm_suspend,
32230 + .suspend_late = gta01_gsm_suspend_late,
32231 + .resume = gta01_gsm_resume,
32232 + .driver = {
32233 + .name = "neo1973-pm-gsm",
32234 + },
32235 +};
32236 +
32237 +static int __devinit gta01_gsm_init(void)
32238 +{
32239 + return platform_driver_register(&gta01_gsm_driver);
32240 +}
32241 +
32242 +static void gta01_gsm_exit(void)
32243 +{
32244 + platform_driver_unregister(&gta01_gsm_driver);
32245 +}
32246 +
32247 +module_init(gta01_gsm_init);
32248 +module_exit(gta01_gsm_exit);
32249 +
32250 +MODULE_LICENSE("GPL");
32251 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
32252 +MODULE_DESCRIPTION("FIC Neo1973 GSM Power Management");
32253 Index: linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_shadow.c
32254 ===================================================================
32255 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
32256 +++ linux-2.6.28/arch/arm/plat-s3c24xx/neo1973_shadow.c 2009-01-02 00:01:56.000000000 +0100
32257 @@ -0,0 +1,88 @@
32258 +/*
32259 + * include/asm-arm/plat-s3c24xx/neo1973.h
32260 + *
32261 + * Common utility code for GTA01 and GTA02
32262 + *
32263 + * Copyright (C) 2008 by Openmoko, Inc.
32264 + * Author: Holger Hans Peter Freyther <freyther@openmoko.org>
32265 + * All rights reserved.
32266 + *
32267 + * This program is free software; you can redistribute it and/or
32268 + * modify it under the terms of the GNU General Public License as
32269 + * published by the Free Software Foundation; either version 2 of
32270 + * the License, or (at your option) any later version.
32271 + *
32272 + * This program is distributed in the hope that it will be useful,
32273 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
32274 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32275 + * GNU General Public License for more details.
32276 + *
32277 + * You should have received a copy of the GNU General Public License
32278 + * along with this program; if not, write to the Free Software
32279 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
32280 + * MA 02111-1307 USA
32281 + *
32282 + */
32283 +
32284 +#include <linux/module.h>
32285 +#include <linux/io.h>
32286 +#include <linux/irq.h>
32287 +
32288 +#include <asm/gpio.h>
32289 +#include <mach/regs-gpio.h>
32290 +#include <asm/plat-s3c24xx/neo1973.h>
32291 +
32292 +/**
32293 + * Shadow GPIO bank B handling. For the LEDs we need to keep track of the state
32294 + * in software. The s3c2410_gpio_setpin must not be used for GPIOs on bank B
32295 + */
32296 +static unsigned long gpb_mask;
32297 +static unsigned long gpb_state;
32298 +
32299 +void neo1973_gpb_add_shadow_gpio(unsigned int gpio)
32300 +{
32301 + unsigned long offset = S3C2410_GPIO_OFFSET(gpio);
32302 + unsigned long flags;
32303 +
32304 + local_irq_save(flags);
32305 + gpb_mask |= 1L << offset;
32306 + local_irq_restore(flags);
32307 +}
32308 +EXPORT_SYMBOL(neo1973_gpb_add_shadow_gpio);
32309 +
32310 +static void set_shadow_gpio(unsigned long offset, unsigned int value)
32311 +{
32312 + unsigned long state = value != 0;
32313 +
32314 + gpb_state &= ~(1L << offset);
32315 + gpb_state |= state << offset;
32316 +}
32317 +
32318 +void neo1973_gpb_setpin(unsigned int pin, unsigned to)
32319 +{
32320 + void __iomem *base = S3C24XX_GPIO_BASE(S3C2410_GPB0);
32321 + unsigned long offset = S3C2410_GPIO_OFFSET(pin);
32322 + unsigned long flags;
32323 + unsigned long dat;
32324 +
32325 + BUG_ON(base != S3C24XX_GPIO_BASE(pin));
32326 +
32327 + local_irq_save(flags);
32328 + dat = __raw_readl(base + 0x04);
32329 +
32330 + /* Add the shadow values */
32331 + dat &= ~gpb_mask;
32332 + dat |= gpb_state;
32333 +
32334 + /* Do the operation like s3c2410_gpio_setpin */
32335 + dat &= ~(1L << offset);
32336 + dat |= to << offset;
32337 +
32338 + /* Update the shadow state */
32339 + if ((1L << offset) & gpb_mask)
32340 + set_shadow_gpio(offset, to);
32341 +
32342 + __raw_writel(dat, base + 0x04);
32343 + local_irq_restore(flags);
32344 +}
32345 +EXPORT_SYMBOL(neo1973_gpb_setpin);
32346 Index: linux-2.6.28/arch/arm/plat-s3c24xx/pm.c
32347 ===================================================================
32348 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/pm.c 2008-12-25 00:26:37.000000000 +0100
32349 +++ linux-2.6.28/arch/arm/plat-s3c24xx/pm.c 2009-01-02 00:01:56.000000000 +0100
32350 @@ -31,14 +31,9 @@
32351 #include <linux/errno.h>
32352 #include <linux/time.h>
32353 #include <linux/interrupt.h>
32354 -#include <linux/crc32.h>
32355 -#include <linux/ioport.h>
32356 -#include <linux/delay.h>
32357 #include <linux/serial_core.h>
32358 #include <linux/io.h>
32359 -
32360 -#include <asm/cacheflush.h>
32361 -#include <mach/hardware.h>
32362 +#include <linux/regulator/machine.h>
32363
32364 #include <plat/regs-serial.h>
32365 #include <mach/regs-clock.h>
32366 @@ -50,10 +45,6 @@
32367
32368 #include <plat/pm.h>
32369
32370 -/* for external use */
32371 -
32372 -unsigned long s3c_pm_flags;
32373 -
32374 #define PFX "s3c24xx-pm: "
32375
32376 static struct sleep_save core_save[] = {
32377 @@ -76,371 +67,26 @@ static struct sleep_save core_save[] = {
32378 SAVE_ITEM(S3C2410_BANKCON4),
32379 SAVE_ITEM(S3C2410_BANKCON5),
32380
32381 +#ifndef CONFIG_CPU_FREQ
32382 SAVE_ITEM(S3C2410_CLKDIVN),
32383 SAVE_ITEM(S3C2410_MPLLCON),
32384 + SAVE_ITEM(S3C2410_REFRESH),
32385 +#endif
32386 SAVE_ITEM(S3C2410_UPLLCON),
32387 SAVE_ITEM(S3C2410_CLKSLOW),
32388 - SAVE_ITEM(S3C2410_REFRESH),
32389 -};
32390 -
32391 -static struct gpio_sleep {
32392 - void __iomem *base;
32393 - unsigned int gpcon;
32394 - unsigned int gpdat;
32395 - unsigned int gpup;
32396 -} gpio_save[] = {
32397 - [0] = {
32398 - .base = S3C2410_GPACON,
32399 - },
32400 - [1] = {
32401 - .base = S3C2410_GPBCON,
32402 - },
32403 - [2] = {
32404 - .base = S3C2410_GPCCON,
32405 - },
32406 - [3] = {
32407 - .base = S3C2410_GPDCON,
32408 - },
32409 - [4] = {
32410 - .base = S3C2410_GPECON,
32411 - },
32412 - [5] = {
32413 - .base = S3C2410_GPFCON,
32414 - },
32415 - [6] = {
32416 - .base = S3C2410_GPGCON,
32417 - },
32418 - [7] = {
32419 - .base = S3C2410_GPHCON,
32420 - },
32421 };
32422
32423 static struct sleep_save misc_save[] = {
32424 SAVE_ITEM(S3C2410_DCLKCON),
32425 };
32426
32427 -#ifdef CONFIG_S3C2410_PM_DEBUG
32428 -
32429 -#define SAVE_UART(va) \
32430 - SAVE_ITEM((va) + S3C2410_ULCON), \
32431 - SAVE_ITEM((va) + S3C2410_UCON), \
32432 - SAVE_ITEM((va) + S3C2410_UFCON), \
32433 - SAVE_ITEM((va) + S3C2410_UMCON), \
32434 - SAVE_ITEM((va) + S3C2410_UBRDIV)
32435 -
32436 -static struct sleep_save uart_save[] = {
32437 - SAVE_UART(S3C24XX_VA_UART0),
32438 - SAVE_UART(S3C24XX_VA_UART1),
32439 -#ifndef CONFIG_CPU_S3C2400
32440 - SAVE_UART(S3C24XX_VA_UART2),
32441 -#endif
32442 -};
32443 -
32444 -/* debug
32445 - *
32446 - * we send the debug to printascii() to allow it to be seen if the
32447 - * system never wakes up from the sleep
32448 -*/
32449 -
32450 -extern void printascii(const char *);
32451 -
32452 -void pm_dbg(const char *fmt, ...)
32453 -{
32454 - va_list va;
32455 - char buff[256];
32456 -
32457 - va_start(va, fmt);
32458 - vsprintf(buff, fmt, va);
32459 - va_end(va);
32460 -
32461 - printascii(buff);
32462 -}
32463 -
32464 -static void s3c2410_pm_debug_init(void)
32465 -{
32466 - unsigned long tmp = __raw_readl(S3C2410_CLKCON);
32467 -
32468 - /* re-start uart clocks */
32469 - tmp |= S3C2410_CLKCON_UART0;
32470 - tmp |= S3C2410_CLKCON_UART1;
32471 - tmp |= S3C2410_CLKCON_UART2;
32472 -
32473 - __raw_writel(tmp, S3C2410_CLKCON);
32474 - udelay(10);
32475 -}
32476 -
32477 -#define DBG(fmt...) pm_dbg(fmt)
32478 -#else
32479 -#define DBG(fmt...) printk(KERN_DEBUG fmt)
32480 -
32481 -#define s3c2410_pm_debug_init() do { } while(0)
32482 -
32483 -static struct sleep_save uart_save[] = {};
32484 -#endif
32485 -
32486 -#if defined(CONFIG_S3C2410_PM_CHECK) && CONFIG_S3C2410_PM_CHECK_CHUNKSIZE != 0
32487 -
32488 -/* suspend checking code...
32489 - *
32490 - * this next area does a set of crc checks over all the installed
32491 - * memory, so the system can verify if the resume was ok.
32492 - *
32493 - * CONFIG_S3C2410_PM_CHECK_CHUNKSIZE defines the block-size for the CRC,
32494 - * increasing it will mean that the area corrupted will be less easy to spot,
32495 - * and reducing the size will cause the CRC save area to grow
32496 -*/
32497 -
32498 -#define CHECK_CHUNKSIZE (CONFIG_S3C2410_PM_CHECK_CHUNKSIZE * 1024)
32499 -
32500 -static u32 crc_size; /* size needed for the crc block */
32501 -static u32 *crcs; /* allocated over suspend/resume */
32502 -
32503 -typedef u32 *(run_fn_t)(struct resource *ptr, u32 *arg);
32504 -
32505 -/* s3c2410_pm_run_res
32506 - *
32507 - * go thorugh the given resource list, and look for system ram
32508 -*/
32509 -
32510 -static void s3c2410_pm_run_res(struct resource *ptr, run_fn_t fn, u32 *arg)
32511 -{
32512 - while (ptr != NULL) {
32513 - if (ptr->child != NULL)
32514 - s3c2410_pm_run_res(ptr->child, fn, arg);
32515 -
32516 - if ((ptr->flags & IORESOURCE_MEM) &&
32517 - strcmp(ptr->name, "System RAM") == 0) {
32518 - DBG("Found system RAM at %08lx..%08lx\n",
32519 - ptr->start, ptr->end);
32520 - arg = (fn)(ptr, arg);
32521 - }
32522 -
32523 - ptr = ptr->sibling;
32524 - }
32525 -}
32526 -
32527 -static void s3c2410_pm_run_sysram(run_fn_t fn, u32 *arg)
32528 -{
32529 - s3c2410_pm_run_res(&iomem_resource, fn, arg);
32530 -}
32531 -
32532 -static u32 *s3c2410_pm_countram(struct resource *res, u32 *val)
32533 -{
32534 - u32 size = (u32)(res->end - res->start)+1;
32535 -
32536 - size += CHECK_CHUNKSIZE-1;
32537 - size /= CHECK_CHUNKSIZE;
32538 -
32539 - DBG("Area %08lx..%08lx, %d blocks\n", res->start, res->end, size);
32540 -
32541 - *val += size * sizeof(u32);
32542 - return val;
32543 -}
32544 -
32545 -/* s3c2410_pm_prepare_check
32546 - *
32547 - * prepare the necessary information for creating the CRCs. This
32548 - * must be done before the final save, as it will require memory
32549 - * allocating, and thus touching bits of the kernel we do not
32550 - * know about.
32551 -*/
32552 -
32553 -static void s3c2410_pm_check_prepare(void)
32554 -{
32555 - crc_size = 0;
32556 -
32557 - s3c2410_pm_run_sysram(s3c2410_pm_countram, &crc_size);
32558 -
32559 - DBG("s3c2410_pm_prepare_check: %u checks needed\n", crc_size);
32560 -
32561 - crcs = kmalloc(crc_size+4, GFP_KERNEL);
32562 - if (crcs == NULL)
32563 - printk(KERN_ERR "Cannot allocated CRC save area\n");
32564 -}
32565 -
32566 -static u32 *s3c2410_pm_makecheck(struct resource *res, u32 *val)
32567 -{
32568 - unsigned long addr, left;
32569 -
32570 - for (addr = res->start; addr < res->end;
32571 - addr += CHECK_CHUNKSIZE) {
32572 - left = res->end - addr;
32573 -
32574 - if (left > CHECK_CHUNKSIZE)
32575 - left = CHECK_CHUNKSIZE;
32576 -
32577 - *val = crc32_le(~0, phys_to_virt(addr), left);
32578 - val++;
32579 - }
32580 -
32581 - return val;
32582 -}
32583 -
32584 -/* s3c2410_pm_check_store
32585 - *
32586 - * compute the CRC values for the memory blocks before the final
32587 - * sleep.
32588 -*/
32589 -
32590 -static void s3c2410_pm_check_store(void)
32591 -{
32592 - if (crcs != NULL)
32593 - s3c2410_pm_run_sysram(s3c2410_pm_makecheck, crcs);
32594 -}
32595 -
32596 -/* in_region
32597 - *
32598 - * return TRUE if the area defined by ptr..ptr+size contatins the
32599 - * what..what+whatsz
32600 -*/
32601 -
32602 -static inline int in_region(void *ptr, int size, void *what, size_t whatsz)
32603 -{
32604 - if ((what+whatsz) < ptr)
32605 - return 0;
32606 -
32607 - if (what > (ptr+size))
32608 - return 0;
32609 -
32610 - return 1;
32611 -}
32612 -
32613 -static u32 *s3c2410_pm_runcheck(struct resource *res, u32 *val)
32614 -{
32615 - void *save_at = phys_to_virt(s3c2410_sleep_save_phys);
32616 - unsigned long addr;
32617 - unsigned long left;
32618 - void *ptr;
32619 - u32 calc;
32620 -
32621 - for (addr = res->start; addr < res->end;
32622 - addr += CHECK_CHUNKSIZE) {
32623 - left = res->end - addr;
32624 -
32625 - if (left > CHECK_CHUNKSIZE)
32626 - left = CHECK_CHUNKSIZE;
32627 -
32628 - ptr = phys_to_virt(addr);
32629 -
32630 - if (in_region(ptr, left, crcs, crc_size)) {
32631 - DBG("skipping %08lx, has crc block in\n", addr);
32632 - goto skip_check;
32633 - }
32634 -
32635 - if (in_region(ptr, left, save_at, 32*4 )) {
32636 - DBG("skipping %08lx, has save block in\n", addr);
32637 - goto skip_check;
32638 - }
32639 -
32640 - /* calculate and check the checksum */
32641 -
32642 - calc = crc32_le(~0, ptr, left);
32643 - if (calc != *val) {
32644 - printk(KERN_ERR PFX "Restore CRC error at "
32645 - "%08lx (%08x vs %08x)\n", addr, calc, *val);
32646 -
32647 - DBG("Restore CRC error at %08lx (%08x vs %08x)\n",
32648 - addr, calc, *val);
32649 - }
32650 -
32651 - skip_check:
32652 - val++;
32653 - }
32654 -
32655 - return val;
32656 -}
32657 -
32658 -/* s3c2410_pm_check_restore
32659 - *
32660 - * check the CRCs after the restore event and free the memory used
32661 - * to hold them
32662 -*/
32663 -
32664 -static void s3c2410_pm_check_restore(void)
32665 -{
32666 - if (crcs != NULL) {
32667 - s3c2410_pm_run_sysram(s3c2410_pm_runcheck, crcs);
32668 - kfree(crcs);
32669 - crcs = NULL;
32670 - }
32671 -}
32672 -
32673 -#else
32674 -
32675 -#define s3c2410_pm_check_prepare() do { } while(0)
32676 -#define s3c2410_pm_check_restore() do { } while(0)
32677 -#define s3c2410_pm_check_store() do { } while(0)
32678 -#endif
32679 -
32680 -/* helper functions to save and restore register state */
32681 -
32682 -void s3c2410_pm_do_save(struct sleep_save *ptr, int count)
32683 -{
32684 - for (; count > 0; count--, ptr++) {
32685 - ptr->val = __raw_readl(ptr->reg);
32686 - DBG("saved %p value %08lx\n", ptr->reg, ptr->val);
32687 - }
32688 -}
32689 -
32690 -/* s3c2410_pm_do_restore
32691 - *
32692 - * restore the system from the given list of saved registers
32693 - *
32694 - * Note, we do not use DBG() in here, as the system may not have
32695 - * restore the UARTs state yet
32696 -*/
32697 -
32698 -void s3c2410_pm_do_restore(struct sleep_save *ptr, int count)
32699 -{
32700 - for (; count > 0; count--, ptr++) {
32701 - printk(KERN_DEBUG "restore %p (restore %08lx, was %08x)\n",
32702 - ptr->reg, ptr->val, __raw_readl(ptr->reg));
32703 -
32704 - __raw_writel(ptr->val, ptr->reg);
32705 - }
32706 -}
32707 -
32708 -/* s3c2410_pm_do_restore_core
32709 - *
32710 - * similar to s3c2410_pm_do_restore_core
32711 - *
32712 - * WARNING: Do not put any debug in here that may effect memory or use
32713 - * peripherals, as things may be changing!
32714 -*/
32715 -
32716 -static void s3c2410_pm_do_restore_core(struct sleep_save *ptr, int count)
32717 -{
32718 - for (; count > 0; count--, ptr++) {
32719 - __raw_writel(ptr->val, ptr->reg);
32720 - }
32721 -}
32722 -
32723 -/* s3c2410_pm_show_resume_irqs
32724 - *
32725 - * print any IRQs asserted at resume time (ie, we woke from)
32726 -*/
32727 -
32728 -static void s3c2410_pm_show_resume_irqs(int start, unsigned long which,
32729 - unsigned long mask)
32730 -{
32731 - int i;
32732 -
32733 - which &= ~mask;
32734 -
32735 - for (i = 0; i <= 31; i++) {
32736 - if ((which) & (1L<<i)) {
32737 - DBG("IRQ %d asserted at resume\n", start+i);
32738 - }
32739 - }
32740 -}
32741 -
32742 -/* s3c2410_pm_check_resume_pin
32743 +/* s3c_pm_check_resume_pin
32744 *
32745 * check to see if the pin is configured correctly for sleep mode, and
32746 * make any necessary adjustments if it is not
32747 */
32748
32749 -static void s3c2410_pm_check_resume_pin(unsigned int pin, unsigned int irqoffs)
32750 +static void s3c_pm_check_resume_pin(unsigned int pin, unsigned int irqoffs)
32751 {
32752 unsigned long irqstate;
32753 unsigned long pinstate;
32754 @@ -455,21 +101,21 @@ static void s3c2410_pm_check_resume_pin(
32755
32756 if (!irqstate) {
32757 if (pinstate == S3C2410_GPIO_IRQ)
32758 - DBG("Leaving IRQ %d (pin %d) enabled\n", irq, pin);
32759 + S3C_PMDBG("Leaving IRQ %d (pin %d) enabled\n", irq, pin);
32760 } else {
32761 if (pinstate == S3C2410_GPIO_IRQ) {
32762 - DBG("Disabling IRQ %d (pin %d)\n", irq, pin);
32763 + S3C_PMDBG("Disabling IRQ %d (pin %d)\n", irq, pin);
32764 s3c2410_gpio_cfgpin(pin, S3C2410_GPIO_INPUT);
32765 }
32766 }
32767 }
32768
32769 -/* s3c2410_pm_configure_extint
32770 +/* s3c_pm_configure_extint
32771 *
32772 * configure all external interrupt pins
32773 */
32774
32775 -static void s3c2410_pm_configure_extint(void)
32776 +void s3c_pm_configure_extint(void)
32777 {
32778 int pin;
32779
32780 @@ -479,336 +125,24 @@ static void s3c2410_pm_configure_extint(
32781 */
32782
32783 for (pin = S3C2410_GPF0; pin <= S3C2410_GPF7; pin++) {
32784 - s3c2410_pm_check_resume_pin(pin, pin - S3C2410_GPF0);
32785 + s3c_pm_check_resume_pin(pin, pin - S3C2410_GPF0);
32786 }
32787
32788 for (pin = S3C2410_GPG0; pin <= S3C2410_GPG7; pin++) {
32789 - s3c2410_pm_check_resume_pin(pin, (pin - S3C2410_GPG0)+8);
32790 + s3c_pm_check_resume_pin(pin, (pin - S3C2410_GPG0)+8);
32791 }
32792 }
32793
32794 -/* offsets for CON/DAT/UP registers */
32795 -
32796 -#define OFFS_CON (S3C2410_GPACON - S3C2410_GPACON)
32797 -#define OFFS_DAT (S3C2410_GPADAT - S3C2410_GPACON)
32798 -#define OFFS_UP (S3C2410_GPBUP - S3C2410_GPBCON)
32799 -
32800 -/* s3c2410_pm_save_gpios()
32801 - *
32802 - * Save the state of the GPIOs
32803 - */
32804
32805 -static void s3c2410_pm_save_gpios(void)
32806 +void s3c_pm_restore_core(void)
32807 {
32808 - struct gpio_sleep *gps = gpio_save;
32809 - unsigned int gpio;
32810 -
32811 - for (gpio = 0; gpio < ARRAY_SIZE(gpio_save); gpio++, gps++) {
32812 - void __iomem *base = gps->base;
32813 -
32814 - gps->gpcon = __raw_readl(base + OFFS_CON);
32815 - gps->gpdat = __raw_readl(base + OFFS_DAT);
32816 -
32817 - if (gpio > 0)
32818 - gps->gpup = __raw_readl(base + OFFS_UP);
32819 -
32820 - }
32821 -}
32822 -
32823 -/* Test whether the given masked+shifted bits of an GPIO configuration
32824 - * are one of the SFN (special function) modes. */
32825 -
32826 -static inline int is_sfn(unsigned long con)
32827 -{
32828 - return (con == 2 || con == 3);
32829 -}
32830 -
32831 -/* Test if the given masked+shifted GPIO configuration is an input */
32832 -
32833 -static inline int is_in(unsigned long con)
32834 -{
32835 - return con == 0;
32836 -}
32837 -
32838 -/* Test if the given masked+shifted GPIO configuration is an output */
32839 -
32840 -static inline int is_out(unsigned long con)
32841 -{
32842 - return con == 1;
32843 + s3c_pm_do_restore_core(core_save, ARRAY_SIZE(core_save));
32844 + s3c_pm_do_restore(misc_save, ARRAY_SIZE(misc_save));
32845 }
32846
32847 -/* s3c2410_pm_restore_gpio()
32848 - *
32849 - * Restore one of the GPIO banks that was saved during suspend. This is
32850 - * not as simple as once thought, due to the possibility of glitches
32851 - * from the order that the CON and DAT registers are set in.
32852 - *
32853 - * The three states the pin can be are {IN,OUT,SFN} which gives us 9
32854 - * combinations of changes to check. Three of these, if the pin stays
32855 - * in the same configuration can be discounted. This leaves us with
32856 - * the following:
32857 - *
32858 - * { IN => OUT } Change DAT first
32859 - * { IN => SFN } Change CON first
32860 - * { OUT => SFN } Change CON first, so new data will not glitch
32861 - * { OUT => IN } Change CON first, so new data will not glitch
32862 - * { SFN => IN } Change CON first
32863 - * { SFN => OUT } Change DAT first, so new data will not glitch [1]
32864 - *
32865 - * We do not currently deal with the UP registers as these control
32866 - * weak resistors, so a small delay in change should not need to bring
32867 - * these into the calculations.
32868 - *
32869 - * [1] this assumes that writing to a pin DAT whilst in SFN will set the
32870 - * state for when it is next output.
32871 - */
32872 -
32873 -static void s3c2410_pm_restore_gpio(int index, struct gpio_sleep *gps)
32874 +void s3c_pm_save_core(void)
32875 {
32876 - void __iomem *base = gps->base;
32877 - unsigned long gps_gpcon = gps->gpcon;
32878 - unsigned long gps_gpdat = gps->gpdat;
32879 - unsigned long old_gpcon;
32880 - unsigned long old_gpdat;
32881 - unsigned long old_gpup = 0x0;
32882 - unsigned long gpcon;
32883 - int nr;
32884 -
32885 - old_gpcon = __raw_readl(base + OFFS_CON);
32886 - old_gpdat = __raw_readl(base + OFFS_DAT);
32887 -
32888 - if (base == S3C2410_GPACON) {
32889 - /* GPACON only has one bit per control / data and no PULLUPs.
32890 - * GPACON[x] = 0 => Output, 1 => SFN */
32891 -
32892 - /* first set all SFN bits to SFN */
32893 -
32894 - gpcon = old_gpcon | gps->gpcon;
32895 - __raw_writel(gpcon, base + OFFS_CON);
32896 -
32897 - /* now set all the other bits */
32898 -
32899 - __raw_writel(gps_gpdat, base + OFFS_DAT);
32900 - __raw_writel(gps_gpcon, base + OFFS_CON);
32901 - } else {
32902 - unsigned long old, new, mask;
32903 - unsigned long change_mask = 0x0;
32904 -
32905 - old_gpup = __raw_readl(base + OFFS_UP);
32906 -
32907 - /* Create a change_mask of all the items that need to have
32908 - * their CON value changed before their DAT value, so that
32909 - * we minimise the work between the two settings.
32910 - */
32911 -
32912 - for (nr = 0, mask = 0x03; nr < 32; nr += 2, mask <<= 2) {
32913 - old = (old_gpcon & mask) >> nr;
32914 - new = (gps_gpcon & mask) >> nr;
32915 -
32916 - /* If there is no change, then skip */
32917 -
32918 - if (old == new)
32919 - continue;
32920 -
32921 - /* If both are special function, then skip */
32922 -
32923 - if (is_sfn(old) && is_sfn(new))
32924 - continue;
32925 -
32926 - /* Change is IN => OUT, do not change now */
32927 -
32928 - if (is_in(old) && is_out(new))
32929 - continue;
32930 -
32931 - /* Change is SFN => OUT, do not change now */
32932 -
32933 - if (is_sfn(old) && is_out(new))
32934 - continue;
32935 -
32936 - /* We should now be at the case of IN=>SFN,
32937 - * OUT=>SFN, OUT=>IN, SFN=>IN. */
32938 -
32939 - change_mask |= mask;
32940 - }
32941 -
32942 - /* Write the new CON settings */
32943 -
32944 - gpcon = old_gpcon & ~change_mask;
32945 - gpcon |= gps_gpcon & change_mask;
32946 -
32947 - __raw_writel(gpcon, base + OFFS_CON);
32948 -
32949 - /* Now change any items that require DAT,CON */
32950 -
32951 - __raw_writel(gps_gpdat, base + OFFS_DAT);
32952 - __raw_writel(gps_gpcon, base + OFFS_CON);
32953 - __raw_writel(gps->gpup, base + OFFS_UP);
32954 - }
32955 -
32956 - DBG("GPIO[%d] CON %08lx => %08lx, DAT %08lx => %08lx\n",
32957 - index, old_gpcon, gps_gpcon, old_gpdat, gps_gpdat);
32958 + s3c_pm_do_save(misc_save, ARRAY_SIZE(misc_save));
32959 + s3c_pm_do_save(core_save, ARRAY_SIZE(core_save));
32960 }
32961
32962 -
32963 -/** s3c2410_pm_restore_gpios()
32964 - *
32965 - * Restore the state of the GPIOs
32966 - */
32967 -
32968 -static void s3c2410_pm_restore_gpios(void)
32969 -{
32970 - struct gpio_sleep *gps = gpio_save;
32971 - int gpio;
32972 -
32973 - for (gpio = 0; gpio < ARRAY_SIZE(gpio_save); gpio++, gps++) {
32974 - s3c2410_pm_restore_gpio(gpio, gps);
32975 - }
32976 -}
32977 -
32978 -void (*pm_cpu_prep)(void);
32979 -void (*pm_cpu_sleep)(void);
32980 -
32981 -#define any_allowed(mask, allow) (((mask) & (allow)) != (allow))
32982 -
32983 -/* s3c2410_pm_enter
32984 - *
32985 - * central control for sleep/resume process
32986 -*/
32987 -
32988 -static int s3c2410_pm_enter(suspend_state_t state)
32989 -{
32990 - unsigned long regs_save[16];
32991 -
32992 - /* ensure the debug is initialised (if enabled) */
32993 -
32994 - s3c2410_pm_debug_init();
32995 -
32996 - DBG("s3c2410_pm_enter(%d)\n", state);
32997 -
32998 - if (pm_cpu_prep == NULL || pm_cpu_sleep == NULL) {
32999 - printk(KERN_ERR PFX "error: no cpu sleep functions set\n");
33000 - return -EINVAL;
33001 - }
33002 -
33003 - /* check if we have anything to wake-up with... bad things seem
33004 - * to happen if you suspend with no wakeup (system will often
33005 - * require a full power-cycle)
33006 - */
33007 -
33008 - if (!any_allowed(s3c_irqwake_intmask, s3c_irqwake_intallow) &&
33009 - !any_allowed(s3c_irqwake_eintmask, s3c_irqwake_eintallow)) {
33010 - printk(KERN_ERR PFX "No sources enabled for wake-up!\n");
33011 - printk(KERN_ERR PFX "Aborting sleep\n");
33012 - return -EINVAL;
33013 - }
33014 -
33015 - /* prepare check area if configured */
33016 -
33017 - s3c2410_pm_check_prepare();
33018 -
33019 - /* store the physical address of the register recovery block */
33020 -
33021 - s3c2410_sleep_save_phys = virt_to_phys(regs_save);
33022 -
33023 - DBG("s3c2410_sleep_save_phys=0x%08lx\n", s3c2410_sleep_save_phys);
33024 -
33025 - /* save all necessary core registers not covered by the drivers */
33026 -
33027 - s3c2410_pm_save_gpios();
33028 - s3c2410_pm_do_save(misc_save, ARRAY_SIZE(misc_save));
33029 - s3c2410_pm_do_save(core_save, ARRAY_SIZE(core_save));
33030 - s3c2410_pm_do_save(uart_save, ARRAY_SIZE(uart_save));
33031 -
33032 - /* set the irq configuration for wake */
33033 -
33034 - s3c2410_pm_configure_extint();
33035 -
33036 - DBG("sleep: irq wakeup masks: %08lx,%08lx\n",
33037 - s3c_irqwake_intmask, s3c_irqwake_eintmask);
33038 -
33039 - __raw_writel(s3c_irqwake_intmask, S3C2410_INTMSK);
33040 - __raw_writel(s3c_irqwake_eintmask, S3C2410_EINTMASK);
33041 -
33042 - /* ack any outstanding external interrupts before we go to sleep */
33043 -
33044 - __raw_writel(__raw_readl(S3C2410_EINTPEND), S3C2410_EINTPEND);
33045 - __raw_writel(__raw_readl(S3C2410_INTPND), S3C2410_INTPND);
33046 - __raw_writel(__raw_readl(S3C2410_SRCPND), S3C2410_SRCPND);
33047 -
33048 - /* call cpu specific preparation */
33049 -
33050 - pm_cpu_prep();
33051 -
33052 - /* flush cache back to ram */
33053 -
33054 - flush_cache_all();
33055 -
33056 - s3c2410_pm_check_store();
33057 -
33058 - /* send the cpu to sleep... */
33059 -
33060 - __raw_writel(0x00, S3C2410_CLKCON); /* turn off clocks over sleep */
33061 -
33062 - /* s3c2410_cpu_save will also act as our return point from when
33063 - * we resume as it saves its own register state, so use the return
33064 - * code to differentiate return from save and return from sleep */
33065 -
33066 - if (s3c2410_cpu_save(regs_save) == 0) {
33067 - flush_cache_all();
33068 - pm_cpu_sleep();
33069 - }
33070 -
33071 - /* restore the cpu state */
33072 -
33073 - cpu_init();
33074 -
33075 - /* restore the system state */
33076 -
33077 - s3c2410_pm_do_restore_core(core_save, ARRAY_SIZE(core_save));
33078 - s3c2410_pm_do_restore(misc_save, ARRAY_SIZE(misc_save));
33079 - s3c2410_pm_do_restore(uart_save, ARRAY_SIZE(uart_save));
33080 - s3c2410_pm_restore_gpios();
33081 -
33082 - s3c2410_pm_debug_init();
33083 -
33084 - /* check what irq (if any) restored the system */
33085 -
33086 - DBG("post sleep: IRQs 0x%08x, 0x%08x\n",
33087 - __raw_readl(S3C2410_SRCPND),
33088 - __raw_readl(S3C2410_EINTPEND));
33089 -
33090 - s3c2410_pm_show_resume_irqs(IRQ_EINT0, __raw_readl(S3C2410_SRCPND),
33091 - s3c_irqwake_intmask);
33092 -
33093 - s3c2410_pm_show_resume_irqs(IRQ_EINT4-4, __raw_readl(S3C2410_EINTPEND),
33094 - s3c_irqwake_eintmask);
33095 -
33096 - DBG("post sleep, preparing to return\n");
33097 -
33098 - s3c2410_pm_check_restore();
33099 -
33100 - /* ok, let's return from sleep */
33101 -
33102 - DBG("S3C2410 PM Resume (post-restore)\n");
33103 - return 0;
33104 -}
33105 -
33106 -static struct platform_suspend_ops s3c2410_pm_ops = {
33107 - .enter = s3c2410_pm_enter,
33108 - .valid = suspend_valid_only_mem,
33109 -};
33110 -
33111 -/* s3c2410_pm_init
33112 - *
33113 - * Attach the power management functions. This should be called
33114 - * from the board specific initialisation if the board supports
33115 - * it.
33116 -*/
33117 -
33118 -int __init s3c2410_pm_init(void)
33119 -{
33120 - printk("S3C2410 Power Management, (c) 2004 Simtec Electronics\n");
33121 -
33122 - suspend_set_ops(&s3c2410_pm_ops);
33123 - return 0;
33124 -}
33125 Index: linux-2.6.28/arch/arm/plat-s3c24xx/pm-simtec.c
33126 ===================================================================
33127 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/pm-simtec.c 2008-12-25 00:26:37.000000000 +0100
33128 +++ linux-2.6.28/arch/arm/plat-s3c24xx/pm-simtec.c 2009-01-02 00:01:56.000000000 +0100
33129 @@ -61,7 +61,7 @@ static __init int pm_simtec_init(void)
33130
33131 __raw_writel(gstatus4, S3C2410_GSTATUS4);
33132
33133 - return s3c2410_pm_init();
33134 + return s3c_pm_init();
33135 }
33136
33137 arch_initcall(pm_simtec_init);
33138 Index: linux-2.6.28/arch/arm/plat-s3c24xx/pwm-clock.c
33139 ===================================================================
33140 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/pwm-clock.c 2008-12-25 00:26:37.000000000 +0100
33141 +++ linux-2.6.28/arch/arm/plat-s3c24xx/pwm-clock.c 2009-01-02 00:01:56.000000000 +0100
33142 @@ -24,10 +24,10 @@
33143 #include <mach/regs-clock.h>
33144 #include <mach/regs-gpio.h>
33145
33146 -#include <plat/clock.h>
33147 -#include <plat/cpu.h>
33148 +#include <asm/plat-s3c24xx/clock.h>
33149 +#include <asm/plat-s3c24xx/cpu.h>
33150
33151 -#include <plat/regs-timer.h>
33152 +#include <asm/plat-s3c/regs-timer.h>
33153
33154 /* Each of the timers 0 through 5 go through the following
33155 * clock tree, with the inputs depending on the timers.
33156 Index: linux-2.6.28/arch/arm/plat-s3c24xx/s3c2410-clock.c
33157 ===================================================================
33158 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
33159 +++ linux-2.6.28/arch/arm/plat-s3c24xx/s3c2410-clock.c 2009-01-02 00:01:56.000000000 +0100
33160 @@ -0,0 +1,277 @@
33161 +/* linux/arch/arm/mach-s3c2410/clock.c
33162 + *
33163 + * Copyright (c) 2006 Simtec Electronics
33164 + * Ben Dooks <ben@simtec.co.uk>
33165 + *
33166 + * S3C2410,S3C2440,S3C2442 Clock control support
33167 + *
33168 + * This program is free software; you can redistribute it and/or modify
33169 + * it under the terms of the GNU General Public License as published by
33170 + * the Free Software Foundation; either version 2 of the License, or
33171 + * (at your option) any later version.
33172 + *
33173 + * This program is distributed in the hope that it will be useful,
33174 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
33175 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
33176 + * GNU General Public License for more details.
33177 + *
33178 + * You should have received a copy of the GNU General Public License
33179 + * along with this program; if not, write to the Free Software
33180 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
33181 +*/
33182 +
33183 +#include <linux/init.h>
33184 +#include <linux/module.h>
33185 +#include <linux/kernel.h>
33186 +#include <linux/list.h>
33187 +#include <linux/errno.h>
33188 +#include <linux/err.h>
33189 +#include <linux/sysdev.h>
33190 +#include <linux/clk.h>
33191 +#include <linux/mutex.h>
33192 +#include <linux/delay.h>
33193 +#include <linux/serial_core.h>
33194 +#include <linux/io.h>
33195 +
33196 +#include <asm/mach/map.h>
33197 +
33198 +#include <mach/hardware.h>
33199 +
33200 +#include <plat/regs-serial.h>
33201 +#include <mach/regs-clock.h>
33202 +#include <mach/regs-gpio.h>
33203 +
33204 +#include <plat/s3c2410.h>
33205 +#include <plat/clock.h>
33206 +#include <plat/cpu.h>
33207 +
33208 +int s3c2410_clkcon_enable(struct clk *clk, int enable)
33209 +{
33210 + unsigned int clocks = clk->ctrlbit;
33211 + unsigned long clkcon;
33212 +
33213 + clkcon = __raw_readl(S3C2410_CLKCON);
33214 +
33215 + if (enable)
33216 + clkcon |= clocks;
33217 + else
33218 + clkcon &= ~clocks;
33219 +
33220 + /* ensure none of the special function bits set */
33221 + clkcon &= ~(S3C2410_CLKCON_IDLE|S3C2410_CLKCON_POWER);
33222 +
33223 + __raw_writel(clkcon, S3C2410_CLKCON);
33224 +
33225 + return 0;
33226 +}
33227 +
33228 +static int s3c2410_upll_enable(struct clk *clk, int enable)
33229 +{
33230 + unsigned long clkslow = __raw_readl(S3C2410_CLKSLOW);
33231 + unsigned long orig = clkslow;
33232 +
33233 + if (enable)
33234 + clkslow &= ~S3C2410_CLKSLOW_UCLK_OFF;
33235 + else
33236 + clkslow |= S3C2410_CLKSLOW_UCLK_OFF;
33237 +
33238 + __raw_writel(clkslow, S3C2410_CLKSLOW);
33239 +
33240 + /* if we started the UPLL, then allow to settle */
33241 +
33242 + if (enable && (orig & S3C2410_CLKSLOW_UCLK_OFF))
33243 + udelay(200);
33244 +
33245 + return 0;
33246 +}
33247 +
33248 +/* standard clock definitions */
33249 +
33250 +static struct clk init_clocks_disable[] = {
33251 + {
33252 + .name = "nand",
33253 + .id = -1,
33254 + .parent = &clk_h,
33255 + .enable = s3c2410_clkcon_enable,
33256 + .ctrlbit = S3C2410_CLKCON_NAND,
33257 + }, {
33258 + .name = "sdi",
33259 + .id = -1,
33260 + .parent = &clk_p,
33261 + .enable = s3c2410_clkcon_enable,
33262 + .ctrlbit = S3C2410_CLKCON_SDI,
33263 + }, {
33264 + .name = "adc",
33265 + .id = -1,
33266 + .parent = &clk_p,
33267 + .enable = s3c2410_clkcon_enable,
33268 + .ctrlbit = S3C2410_CLKCON_ADC,
33269 + }, {
33270 + .name = "i2c",
33271 + .id = -1,
33272 + .parent = &clk_p,
33273 + .enable = s3c2410_clkcon_enable,
33274 + .ctrlbit = S3C2410_CLKCON_IIC,
33275 + }, {
33276 + .name = "iis",
33277 + .id = -1,
33278 + .parent = &clk_p,
33279 + .enable = s3c2410_clkcon_enable,
33280 + .ctrlbit = S3C2410_CLKCON_IIS,
33281 + }, {
33282 + .name = "spi",
33283 + .id = -1,
33284 + .parent = &clk_p,
33285 + .enable = s3c2410_clkcon_enable,
33286 + .ctrlbit = S3C2410_CLKCON_SPI,
33287 + }
33288 +};
33289 +
33290 +static struct clk init_clocks[] = {
33291 + {
33292 + .name = "lcd",
33293 + .id = -1,
33294 + .parent = &clk_h,
33295 + .enable = s3c2410_clkcon_enable,
33296 + .ctrlbit = S3C2410_CLKCON_LCDC,
33297 + }, {
33298 + .name = "gpio",
33299 + .id = -1,
33300 + .parent = &clk_p,
33301 + .enable = s3c2410_clkcon_enable,
33302 + .ctrlbit = S3C2410_CLKCON_GPIO,
33303 + }, {
33304 + .name = "usb-host",
33305 + .id = -1,
33306 + .parent = &clk_h,
33307 + .enable = s3c2410_clkcon_enable,
33308 + .ctrlbit = S3C2410_CLKCON_USBH,
33309 + }, {
33310 + .name = "usb-device",
33311 + .id = -1,
33312 + .parent = &clk_h,
33313 + .enable = s3c2410_clkcon_enable,
33314 + .ctrlbit = S3C2410_CLKCON_USBD,
33315 + }, {
33316 + .name = "timers",
33317 + .id = -1,
33318 + .parent = &clk_p,
33319 + .enable = s3c2410_clkcon_enable,
33320 + .ctrlbit = S3C2410_CLKCON_PWMT,
33321 + }, {
33322 + .name = "uart",
33323 + .id = 0,
33324 + .parent = &clk_p,
33325 + .enable = s3c2410_clkcon_enable,
33326 + .ctrlbit = S3C2410_CLKCON_UART0,
33327 + }, {
33328 + .name = "uart",
33329 + .id = 1,
33330 + .parent = &clk_p,
33331 + .enable = s3c2410_clkcon_enable,
33332 + .ctrlbit = S3C2410_CLKCON_UART1,
33333 + }, {
33334 + .name = "uart",
33335 + .id = 2,
33336 + .parent = &clk_p,
33337 + .enable = s3c2410_clkcon_enable,
33338 + .ctrlbit = S3C2410_CLKCON_UART2,
33339 + }, {
33340 + .name = "rtc",
33341 + .id = -1,
33342 + .parent = &clk_p,
33343 + .enable = s3c2410_clkcon_enable,
33344 + .ctrlbit = S3C2410_CLKCON_RTC,
33345 + }, {
33346 + .name = "watchdog",
33347 + .id = -1,
33348 + .parent = &clk_p,
33349 + .ctrlbit = 0,
33350 + }, {
33351 + .name = "usb-bus-host",
33352 + .id = -1,
33353 + .parent = &clk_usb_bus,
33354 + }, {
33355 + .name = "usb-bus-gadget",
33356 + .id = -1,
33357 + .parent = &clk_usb_bus,
33358 + },
33359 +};
33360 +
33361 +/* s3c2410_baseclk_add()
33362 + *
33363 + * Add all the clocks used by the s3c2410 or compatible CPUs
33364 + * such as the S3C2440 and S3C2442.
33365 + *
33366 + * We cannot use a system device as we are needed before any
33367 + * of the init-calls that initialise the devices are actually
33368 + * done.
33369 +*/
33370 +
33371 +int __init s3c2410_baseclk_add(void)
33372 +{
33373 + unsigned long clkslow = __raw_readl(S3C2410_CLKSLOW);
33374 + unsigned long clkcon = __raw_readl(S3C2410_CLKCON);
33375 + struct clk *clkp;
33376 + struct clk *xtal;
33377 + int ret;
33378 + int ptr;
33379 +
33380 + clk_upll.enable = s3c2410_upll_enable;
33381 +
33382 + if (s3c24xx_register_clock(&clk_usb_bus) < 0)
33383 + printk(KERN_ERR "failed to register usb bus clock\n");
33384 +
33385 + /* register clocks from clock array */
33386 +
33387 + clkp = init_clocks;
33388 + for (ptr = 0; ptr < ARRAY_SIZE(init_clocks); ptr++, clkp++) {
33389 + /* ensure that we note the clock state */
33390 +
33391 + clkp->usage = clkcon & clkp->ctrlbit ? 1 : 0;
33392 +
33393 + ret = s3c24xx_register_clock(clkp);
33394 + if (ret < 0) {
33395 + printk(KERN_ERR "Failed to register clock %s (%d)\n",
33396 + clkp->name, ret);
33397 + }
33398 + }
33399 +
33400 + /* We must be careful disabling the clocks we are not intending to
33401 + * be using at boot time, as subsystems such as the LCD which do
33402 + * their own DMA requests to the bus can cause the system to lockup
33403 + * if they where in the middle of requesting bus access.
33404 + *
33405 + * Disabling the LCD clock if the LCD is active is very dangerous,
33406 + * and therefore the bootloader should be careful to not enable
33407 + * the LCD clock if it is not needed.
33408 + */
33409 +
33410 + /* install (and disable) the clocks we do not need immediately */
33411 +
33412 + clkp = init_clocks_disable;
33413 + for (ptr = 0; ptr < ARRAY_SIZE(init_clocks_disable); ptr++, clkp++) {
33414 +
33415 + ret = s3c24xx_register_clock(clkp);
33416 + if (ret < 0) {
33417 + printk(KERN_ERR "Failed to register clock %s (%d)\n",
33418 + clkp->name, ret);
33419 + }
33420 +
33421 + s3c2410_clkcon_enable(clkp, 0);
33422 + }
33423 +
33424 + /* show the clock-slow value */
33425 +
33426 + xtal = clk_get(NULL, "xtal");
33427 +
33428 + printk("CLOCK: Slow mode (%ld.%ld MHz), %s, MPLL %s, UPLL %s\n",
33429 + print_mhz(clk_get_rate(xtal) /
33430 + ( 2 * S3C2410_CLKSLOW_GET_SLOWVAL(clkslow))),
33431 + (clkslow & S3C2410_CLKSLOW_SLOW) ? "slow" : "fast",
33432 + (clkslow & S3C2410_CLKSLOW_MPLL_OFF) ? "off" : "on",
33433 + (clkslow & S3C2410_CLKSLOW_UCLK_OFF) ? "off" : "on");
33434 +
33435 + s3c_pwmclk_init();
33436 + return 0;
33437 +}
33438 Index: linux-2.6.28/arch/arm/plat-s3c24xx/s3c244x.c
33439 ===================================================================
33440 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/s3c244x.c 2008-12-25 00:26:37.000000000 +0100
33441 +++ linux-2.6.28/arch/arm/plat-s3c24xx/s3c244x.c 2009-01-02 00:01:56.000000000 +0100
33442 @@ -29,6 +29,8 @@
33443 #include <mach/hardware.h>
33444 #include <asm/irq.h>
33445
33446 +#include <plat/cpu-freq.h>
33447 +
33448 #include <mach/regs-clock.h>
33449 #include <plat/regs-serial.h>
33450 #include <mach/regs-gpio.h>
33451 @@ -42,6 +44,7 @@
33452 #include <plat/devs.h>
33453 #include <plat/cpu.h>
33454 #include <plat/pm.h>
33455 +#include <plat/pll.h>
33456
33457 static struct map_desc s3c244x_iodesc[] __initdata = {
33458 IODESC_ENT(CLKPWR),
33459 @@ -56,32 +59,37 @@ void __init s3c244x_init_uarts(struct s3
33460 s3c24xx_init_uartdevs("s3c2440-uart", s3c2410_uart_resources, cfg, no);
33461 }
33462
33463 -void __init s3c244x_map_io(struct map_desc *mach_desc, int size)
33464 +extern struct platform_device s3c_device_ts;
33465 +
33466 +void __init s3c244x_map_io(void)
33467 {
33468 /* register our io-tables */
33469
33470 iotable_init(s3c244x_iodesc, ARRAY_SIZE(s3c244x_iodesc));
33471 - iotable_init(mach_desc, size);
33472
33473 /* rename any peripherals used differing from the s3c2410 */
33474
33475 s3c_device_sdi.name = "s3c2440-sdi";
33476 - s3c_device_i2c.name = "s3c2440-i2c";
33477 + s3c_device_i2c0.name = "s3c2440-i2c";
33478 s3c_device_nand.name = "s3c2440-nand";
33479 + s3c_device_ts.name = "s3c2440-ts";
33480 s3c_device_usbgadget.name = "s3c2440-usbgadget";
33481 }
33482
33483 -void __init s3c244x_init_clocks(int xtal)
33484 +void __init_or_cpufreq s3c244x_setup_clocks(void)
33485 {
33486 + struct clk *xtal_clk;
33487 unsigned long clkdiv;
33488 unsigned long camdiv;
33489 + unsigned long xtal;
33490 unsigned long hclk, fclk, pclk;
33491 int hdiv = 1;
33492
33493 - /* now we've got our machine bits initialised, work out what
33494 - * clocks we've got */
33495 + xtal_clk = clk_get(NULL, "xtal");
33496 + xtal = clk_get_rate(xtal_clk);
33497 + clk_put(xtal_clk);
33498
33499 - fclk = s3c2410_get_pll(__raw_readl(S3C2410_MPLLCON), xtal) * 2;
33500 + fclk = s3c24xx_get_pll(__raw_readl(S3C2410_MPLLCON), xtal) * 2;
33501
33502 clkdiv = __raw_readl(S3C2410_CLKDIVN);
33503 camdiv = __raw_readl(S3C2440_CAMDIVN);
33504 @@ -107,18 +115,24 @@ void __init s3c244x_init_clocks(int xtal
33505 }
33506
33507 hclk = fclk / hdiv;
33508 - pclk = hclk / ((clkdiv & S3C2440_CLKDIVN_PDIVN)? 2:1);
33509 + pclk = hclk / ((clkdiv & S3C2440_CLKDIVN_PDIVN) ? 2 : 1);
33510
33511 /* print brief summary of clocks, etc */
33512
33513 printk("S3C244X: core %ld.%03ld MHz, memory %ld.%03ld MHz, peripheral %ld.%03ld MHz\n",
33514 print_mhz(fclk), print_mhz(hclk), print_mhz(pclk));
33515
33516 + s3c24xx_setup_clocks(fclk, hclk, pclk);
33517 +}
33518 +
33519 +void __init s3c244x_init_clocks(int xtal)
33520 +{
33521 /* initialise the clocks here, to allow other things like the
33522 * console to use them, and to add new ones after the initialisation
33523 */
33524
33525 - s3c24xx_setup_clocks(xtal, fclk, hclk, pclk);
33526 + s3c24xx_register_baseclocks(xtal);
33527 + s3c244x_setup_clocks();
33528 s3c2410_baseclk_add();
33529 }
33530
33531 @@ -134,13 +148,13 @@ static struct sleep_save s3c244x_sleep[]
33532
33533 static int s3c244x_suspend(struct sys_device *dev, pm_message_t state)
33534 {
33535 - s3c2410_pm_do_save(s3c244x_sleep, ARRAY_SIZE(s3c244x_sleep));
33536 + s3c_pm_do_save(s3c244x_sleep, ARRAY_SIZE(s3c244x_sleep));
33537 return 0;
33538 }
33539
33540 static int s3c244x_resume(struct sys_device *dev)
33541 {
33542 - s3c2410_pm_do_restore(s3c244x_sleep, ARRAY_SIZE(s3c244x_sleep));
33543 + s3c_pm_do_restore(s3c244x_sleep, ARRAY_SIZE(s3c244x_sleep));
33544 return 0;
33545 }
33546
33547 Index: linux-2.6.28/arch/arm/plat-s3c24xx/s3c244x-clock.c
33548 ===================================================================
33549 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/s3c244x-clock.c 2008-12-25 00:26:37.000000000 +0100
33550 +++ linux-2.6.28/arch/arm/plat-s3c24xx/s3c244x-clock.c 2009-01-02 00:01:56.000000000 +0100
33551 @@ -31,7 +31,6 @@
33552 #include <linux/sysdev.h>
33553 #include <linux/interrupt.h>
33554 #include <linux/ioport.h>
33555 -#include <linux/mutex.h>
33556 #include <linux/clk.h>
33557 #include <linux/io.h>
33558
33559 @@ -102,13 +101,13 @@ static int s3c244x_clk_add(struct sys_de
33560 if (clk_get_rate(clock_upll) > (94 * MHZ)) {
33561 clk_usb_bus.rate = clk_get_rate(clock_upll) / 2;
33562
33563 - mutex_lock(&clocks_mutex);
33564 + spin_lock(&clocks_lock);
33565
33566 clkdivn = __raw_readl(S3C2410_CLKDIVN);
33567 clkdivn |= S3C2440_CLKDIVN_UCLK;
33568 __raw_writel(clkdivn, S3C2410_CLKDIVN);
33569
33570 - mutex_unlock(&clocks_mutex);
33571 + spin_unlock(&clocks_lock);
33572 }
33573
33574 return 0;
33575 Index: linux-2.6.28/arch/arm/plat-s3c24xx/s3c244x.h
33576 ===================================================================
33577 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/s3c244x.h 2008-12-25 00:26:37.000000000 +0100
33578 +++ linux-2.6.28/arch/arm/plat-s3c24xx/s3c244x.h 2009-01-02 00:01:56.000000000 +0100
33579 @@ -12,7 +12,7 @@
33580
33581 #if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2442)
33582
33583 -extern void s3c244x_map_io(struct map_desc *mach_desc, int size);
33584 +extern void s3c244x_map_io(void);
33585
33586 extern void s3c244x_init_uarts(struct s3c2410_uartcfg *cfg, int no);
33587
33588 Index: linux-2.6.28/arch/arm/plat-s3c24xx/setup-i2c.c
33589 ===================================================================
33590 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
33591 +++ linux-2.6.28/arch/arm/plat-s3c24xx/setup-i2c.c 2009-01-02 00:01:56.000000000 +0100
33592 @@ -0,0 +1,25 @@
33593 +/* linux/arch/arm/plat-s3c24xx/setup-i2c.c
33594 + *
33595 + * Copyright 2008 Simtec Electronics
33596 + * Ben Dooks <ben@simtec.co.uk>
33597 + *
33598 + * S3C24XX Base setup for i2c device
33599 + *
33600 + * This program is free software; you can redistribute it and/or modify
33601 + * it under the terms of the GNU General Public License version 2 as
33602 + * published by the Free Software Foundation.
33603 +*/
33604 +
33605 +#include <linux/kernel.h>
33606 +
33607 +struct platform_device;
33608 +
33609 +#include <plat/iic.h>
33610 +#include <mach/hardware.h>
33611 +#include <mach/regs-gpio.h>
33612 +
33613 +void s3c_i2c0_cfg_gpio(struct platform_device *dev)
33614 +{
33615 + s3c2410_gpio_cfgpin(S3C2410_GPE15, S3C2410_GPE15_IICSDA);
33616 + s3c2410_gpio_cfgpin(S3C2410_GPE14, S3C2410_GPE14_IICSCL);
33617 +}
33618 Index: linux-2.6.28/arch/arm/plat-s3c24xx/sleep.S
33619 ===================================================================
33620 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/sleep.S 2008-12-25 00:26:37.000000000 +0100
33621 +++ linux-2.6.28/arch/arm/plat-s3c24xx/sleep.S 2009-01-02 00:01:56.000000000 +0100
33622 @@ -41,7 +41,7 @@
33623
33624 .text
33625
33626 - /* s3c2410_cpu_save
33627 + /* s3c_cpu_save
33628 *
33629 * save enough of the CPU state to allow us to re-start
33630 * pm.c code. as we store items like the sp/lr, we will
33631 @@ -59,7 +59,7 @@
33632 * 1 => resumed from sleep
33633 */
33634
33635 -ENTRY(s3c2410_cpu_save)
33636 +ENTRY(s3c_cpu_save)
33637 stmfd sp!, { r4 - r12, lr }
33638
33639 @@ store co-processor registers
33640 @@ -84,7 +84,7 @@ resume_with_mmu:
33641 .ltorg
33642
33643 @@ the next bits sit in the .data segment, even though they
33644 - @@ happen to be code... the s3c2410_sleep_save_phys needs to be
33645 + @@ happen to be code... the s3c_sleep_save_phys needs to be
33646 @@ accessed by the resume code before it can restore the MMU.
33647 @@ This means that the variable has to be close enough for the
33648 @@ code to read it... since the .text segment needs to be RO,
33649 @@ -92,19 +92,19 @@ resume_with_mmu:
33650
33651 .data
33652
33653 - .global s3c2410_sleep_save_phys
33654 -s3c2410_sleep_save_phys:
33655 + .global s3c_sleep_save_phys
33656 +s3c_sleep_save_phys:
33657 .word 0
33658
33659
33660 /* sleep magic, to allow the bootloader to check for an valid
33661 * image to resume to. Must be the first word before the
33662 - * s3c2410_cpu_resume entry.
33663 + * s3c_cpu_resume entry.
33664 */
33665
33666 .word 0x2bedf00d
33667
33668 - /* s3c2410_cpu_resume
33669 + /* s3c_cpu_resume
33670 *
33671 * resume code entry for bootloader to call
33672 *
33673 @@ -113,7 +113,7 @@ s3c2410_sleep_save_phys:
33674 * must not write to the code segment (code is read-only)
33675 */
33676
33677 -ENTRY(s3c2410_cpu_resume)
33678 +ENTRY(s3c_cpu_resume)
33679 mov r0, #PSR_I_BIT | PSR_F_BIT | SVC_MODE
33680 msr cpsr_c, r0
33681
33682 @@ -145,7 +145,7 @@ ENTRY(s3c2410_cpu_resume)
33683 mcr p15, 0, r1, c8, c7, 0 @@ invalidate I & D TLBs
33684 mcr p15, 0, r1, c7, c7, 0 @@ invalidate I & D caches
33685
33686 - ldr r0, s3c2410_sleep_save_phys @ address of restore block
33687 + ldr r0, s3c_sleep_save_phys @ address of restore block
33688 ldmia r0, { r4 - r13 }
33689
33690 mcr p15, 0, r4, c13, c0, 0 @ PID
33691 Index: linux-2.6.28/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c
33692 ===================================================================
33693 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
33694 +++ linux-2.6.28/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c 2009-01-02 00:01:56.000000000 +0100
33695 @@ -0,0 +1,37 @@
33696 +/* linux/arch/arm/plat-s3c24xx/spi-bus0-gpe11_12_13.c
33697 + *
33698 + * Copyright (c) 2008 Simtec Electronics
33699 + * http://armlinux.simtec.co.uk/
33700 + * Ben Dooks <ben@simtec.co.uk>
33701 + *
33702 + * S3C24XX SPI - gpio configuration for bus 0 on gpe11,12,13
33703 + *
33704 + * This program is free software; you can redistribute it and/or modify
33705 + * it under the terms of the GNU General Public License as published by
33706 + * the Free Software Foundation; either version 2 of the License.
33707 +*/
33708 +
33709 +#include <linux/kernel.h>
33710 +
33711 +#include <mach/hardware.h>
33712 +
33713 +#include <mach/spi.h>
33714 +#include <mach/regs-gpio.h>
33715 +
33716 +void s3c24xx_spi_gpiocfg_bus0_gpe11_12_13(struct s3c2410_spi_info *spi,
33717 + int enable)
33718 +{
33719 + if (enable) {
33720 + s3c2410_gpio_cfgpin(S3C2410_GPE13, S3C2410_GPE13_SPICLK0);
33721 + s3c2410_gpio_cfgpin(S3C2410_GPE12, S3C2410_GPE12_SPIMOSI0);
33722 + s3c2410_gpio_cfgpin(S3C2410_GPE11, S3C2410_GPE11_SPIMISO0);
33723 + s3c2410_gpio_pullup(S3C2410_GPE11, 0);
33724 + s3c2410_gpio_pullup(S3C2410_GPE13, 0);
33725 + } else {
33726 + s3c2410_gpio_cfgpin(S3C2410_GPE13, S3C2410_GPIO_INPUT);
33727 + s3c2410_gpio_cfgpin(S3C2410_GPE11, S3C2410_GPIO_INPUT);
33728 + s3c2410_gpio_pullup(S3C2410_GPE11, 1);
33729 + s3c2410_gpio_pullup(S3C2410_GPE12, 1);
33730 + s3c2410_gpio_pullup(S3C2410_GPE13, 1);
33731 + }
33732 +}
33733 Index: linux-2.6.28/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c
33734 ===================================================================
33735 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
33736 +++ linux-2.6.28/arch/arm/plat-s3c24xx/spi-bus1-gpg5_6_7.c 2009-01-02 00:01:56.000000000 +0100
33737 @@ -0,0 +1,37 @@
33738 +/* linux/arch/arm/plat-s3c24xx/spi-bus0-gpg5_6_7.c
33739 + *
33740 + * Copyright (c) 2008 Simtec Electronics
33741 + * http://armlinux.simtec.co.uk/
33742 + * Ben Dooks <ben@simtec.co.uk>
33743 + *
33744 + * S3C24XX SPI - gpio configuration for bus 1 on gpg5,6,7
33745 + *
33746 + * This program is free software; you can redistribute it and/or modify
33747 + * it under the terms of the GNU General Public License as published by
33748 + * the Free Software Foundation; either version 2 of the License.
33749 +*/
33750 +
33751 +#include <linux/kernel.h>
33752 +
33753 +#include <mach/hardware.h>
33754 +
33755 +#include <mach/spi.h>
33756 +#include <mach/regs-gpio.h>
33757 +
33758 +void s3c24xx_spi_gpiocfg_bus1_gpg5_6_7(struct s3c2410_spi_info *spi,
33759 + int enable)
33760 +{
33761 + if (enable) {
33762 + s3c2410_gpio_cfgpin(S3C2410_GPG7, S3C2410_GPG7_SPICLK1);
33763 + s3c2410_gpio_cfgpin(S3C2410_GPG6, S3C2410_GPG6_SPIMOSI1);
33764 + s3c2410_gpio_cfgpin(S3C2410_GPG5, S3C2410_GPG5_SPIMISO1);
33765 + s3c2410_gpio_pullup(S3C2410_GPG5, 0);
33766 + s3c2410_gpio_pullup(S3C2410_GPG6, 0);
33767 + } else {
33768 + s3c2410_gpio_cfgpin(S3C2410_GPG7, S3C2410_GPIO_INPUT);
33769 + s3c2410_gpio_cfgpin(S3C2410_GPG5, S3C2410_GPIO_INPUT);
33770 + s3c2410_gpio_pullup(S3C2410_GPG5, 1);
33771 + s3c2410_gpio_pullup(S3C2410_GPG6, 1);
33772 + s3c2410_gpio_pullup(S3C2410_GPG7, 1);
33773 + }
33774 +}
33775 Index: linux-2.6.28/arch/arm/plat-s3c24xx/time.c
33776 ===================================================================
33777 --- linux-2.6.28.orig/arch/arm/plat-s3c24xx/time.c 2008-12-25 00:26:37.000000000 +0100
33778 +++ linux-2.6.28/arch/arm/plat-s3c24xx/time.c 2009-01-02 00:01:56.000000000 +0100
33779 @@ -3,6 +3,8 @@
33780 * Copyright (C) 2003-2005 Simtec Electronics
33781 * Ben Dooks, <ben@simtec.co.uk>
33782 *
33783 + * dyn_tick support by Andrzej Zaborowski based on omap_dyn_tick_timer.
33784 + *
33785 * This program is free software; you can redistribute it and/or modify
33786 * it under the terms of the GNU General Public License as published by
33787 * the Free Software Foundation; either version 2 of the License, or
33788 @@ -25,23 +27,27 @@
33789 #include <linux/irq.h>
33790 #include <linux/err.h>
33791 #include <linux/clk.h>
33792 -#include <linux/io.h>
33793
33794 #include <asm/system.h>
33795 #include <asm/leds.h>
33796 #include <asm/mach-types.h>
33797
33798 +#include <asm/io.h>
33799 #include <asm/irq.h>
33800 #include <mach/map.h>
33801 -#include <plat/regs-timer.h>
33802 +#include <asm/plat-s3c/regs-timer.h>
33803 #include <mach/regs-irq.h>
33804 #include <asm/mach/time.h>
33805
33806 -#include <plat/clock.h>
33807 -#include <plat/cpu.h>
33808 +#include <asm/plat-s3c24xx/clock.h>
33809 +#include <asm/plat-s3c24xx/cpu.h>
33810
33811 static unsigned long timer_startval;
33812 static unsigned long timer_usec_ticks;
33813 +static struct work_struct resume_work;
33814 +
33815 +unsigned long pclk;
33816 +struct clk *clk;
33817
33818 #define TIMER_USEC_SHIFT 16
33819
33820 @@ -177,11 +183,7 @@ static void s3c2410_timer_setup (void)
33821 tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
33822 tcfg1 |= S3C2410_TCFG1_MUX4_TCLK1;
33823 } else {
33824 - unsigned long pclk;
33825 - struct clk *clk;
33826 -
33827 - /* for the h1940 (and others), we use the pclk from the core
33828 - * to generate the timer values. since values around 50 to
33829 + /* since values around 50 to
33830 * 70MHz are not values we can directly generate the timer
33831 * value from, we need to pre-scale and divide before using it.
33832 *
33833 @@ -189,19 +191,9 @@ static void s3c2410_timer_setup (void)
33834 * (8.45 ticks per usec)
33835 */
33836
33837 - /* this is used as default if no other timer can be found */
33838 -
33839 - clk = clk_get(NULL, "timers");
33840 - if (IS_ERR(clk))
33841 - panic("failed to get clock for system timer");
33842 -
33843 - clk_enable(clk);
33844 -
33845 - pclk = clk_get_rate(clk);
33846 -
33847 /* configure clock tick */
33848 -
33849 timer_usec_ticks = timer_mask_usec_ticks(6, pclk);
33850 + printk("timer_usec_ticks = %lu\n", timer_usec_ticks);
33851
33852 tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
33853 tcfg1 |= S3C2410_TCFG1_MUX4_DIV2;
33854 @@ -245,16 +237,244 @@ static void s3c2410_timer_setup (void)
33855 tcon |= S3C2410_TCON_T4START;
33856 tcon &= ~S3C2410_TCON_T4MANUALUPD;
33857 __raw_writel(tcon, S3C2410_TCON);
33858 +
33859 + __raw_writel(__raw_readl(S3C2410_INTMSK) & (~(1UL << 14)),
33860 + S3C2410_INTMSK);
33861 +
33862 +}
33863 +
33864 +struct sys_timer s3c24xx_timer;
33865 +static void timer_resume_work(struct work_struct *work)
33866 +{
33867 + clk_enable(clk);
33868 +
33869 +#ifdef CONFIG_NO_IDLE_HZ
33870 + if (s3c24xx_timer.dyn_tick->state & DYN_TICK_ENABLED)
33871 + s3c24xx_timer.dyn_tick->enable();
33872 + else
33873 +#endif
33874 + s3c2410_timer_setup();
33875 }
33876
33877 static void __init s3c2410_timer_init (void)
33878 {
33879 + if (!use_tclk1_12()) {
33880 + /* for the h1940 (and others), we use the pclk from the core
33881 + * to generate the timer values.
33882 + */
33883 +
33884 + /* this is used as default if no other timer can be found */
33885 + clk = clk_get(NULL, "timers");
33886 + if (IS_ERR(clk))
33887 + panic("failed to get clock for system timer");
33888 +
33889 + clk_enable(clk);
33890 +
33891 + pclk = clk_get_rate(clk);
33892 + printk("pclk = %lu\n", pclk);
33893 + }
33894 +
33895 + INIT_WORK(&resume_work, timer_resume_work);
33896 s3c2410_timer_setup();
33897 setup_irq(IRQ_TIMER4, &s3c2410_timer_irq);
33898 }
33899
33900 +static void s3c2410_timer_resume_work(struct work_struct *work)
33901 +{
33902 + s3c2410_timer_setup();
33903 +}
33904 +
33905 +static void s3c2410_timer_resume(void)
33906 +{
33907 + static DECLARE_WORK(work, s3c2410_timer_resume_work);
33908 + int res;
33909 +
33910 + res = schedule_work(&work);
33911 + if (!res)
33912 + printk(KERN_ERR
33913 + "s3c2410_timer_resume_work already queued ???\n");
33914 +}
33915 +
33916 +#ifdef CONFIG_NO_IDLE_HZ
33917 +/*
33918 + * We'll set a constant prescaler so we don't have to bother setting it
33919 + * when reprogramming and so that we avoid costly divisions.
33920 + *
33921 + * (2 * HZ) << INPUT_FREQ_SHIFT is the desired frequency after prescaler.
33922 + * At HZ == 200, HZ * 1024 should work for PCLKs of up to ~53.5 MHz.
33923 + */
33924 +#define INPUT_FREQ_SHIFT 9
33925 +
33926 +static int ticks_last;
33927 +static int ticks_left;
33928 +static uint32_t tcnto_last;
33929 +
33930 +static inline int s3c24xx_timer_read(void)
33931 +{
33932 + uint32_t tcnto = __raw_readl(S3C2410_TCNTO(4));
33933 +
33934 + /*
33935 + * WARNING: sometimes we get called before TCNTB has been
33936 + * loaded into the counter and TCNTO then returns its previous
33937 + * value and kill us, so don't do anything before counter is
33938 + * reloaded.
33939 + */
33940 + if (unlikely(tcnto == tcnto_last))
33941 + return ticks_last;
33942 +
33943 + tcnto_last = -1;
33944 + return tcnto <<
33945 + ((__raw_readl(S3C2410_TCFG1) >> S3C2410_TCFG1_MUX4_SHIFT) & 3);
33946 +}
33947 +
33948 +static inline void s3c24xx_timer_program(int ticks)
33949 +{
33950 + uint32_t tcon = __raw_readl(S3C2410_TCON) & ~(7 << 20);
33951 + uint32_t tcfg1 = __raw_readl(S3C2410_TCFG1) & ~S3C2410_TCFG1_MUX4_MASK;
33952 +
33953 + /* Just make sure the timer is stopped. */
33954 + __raw_writel(tcon, S3C2410_TCON);
33955 +
33956 + /* TODO: add likely()ies / unlikely()ies */
33957 + if (ticks >> 18) {
33958 + ticks_last = min(ticks, 0xffff << 3);
33959 + ticks_left = ticks - ticks_last;
33960 + __raw_writel(tcfg1 | S3C2410_TCFG1_MUX4_DIV16, S3C2410_TCFG1);
33961 + __raw_writel(ticks_last >> 3, S3C2410_TCNTB(4));
33962 + } else if (ticks >> 17) {
33963 + ticks_last = ticks;
33964 + ticks_left = 0;
33965 + __raw_writel(tcfg1 | S3C2410_TCFG1_MUX4_DIV8, S3C2410_TCFG1);
33966 + __raw_writel(ticks_last >> 2, S3C2410_TCNTB(4));
33967 + } else if (ticks >> 16) {
33968 + ticks_last = ticks;
33969 + ticks_left = 0;
33970 + __raw_writel(tcfg1 | S3C2410_TCFG1_MUX4_DIV4, S3C2410_TCFG1);
33971 + __raw_writel(ticks_last >> 1, S3C2410_TCNTB(4));
33972 + } else {
33973 + ticks_last = ticks;
33974 + ticks_left = 0;
33975 + __raw_writel(tcfg1 | S3C2410_TCFG1_MUX4_DIV2, S3C2410_TCFG1);
33976 + __raw_writel(ticks_last >> 0, S3C2410_TCNTB(4));
33977 + }
33978 +
33979 + tcnto_last = __raw_readl(S3C2410_TCNTO(4));
33980 + __raw_writel(tcon | S3C2410_TCON_T4MANUALUPD,
33981 + S3C2410_TCON);
33982 + __raw_writel(tcon | S3C2410_TCON_T4START,
33983 + S3C2410_TCON);
33984 +}
33985 +
33986 +/*
33987 + * If we have already waited all the time we were supposed to wait,
33988 + * kick the timer, setting the longest allowed timeout value just
33989 + * for time-keeping.
33990 + */
33991 +static inline void s3c24xx_timer_program_idle(void)
33992 +{
33993 + s3c24xx_timer_program(0xffff << 3);
33994 +}
33995 +
33996 +static inline void s3c24xx_timer_update(int restart)
33997 +{
33998 + int ticks_cur = s3c24xx_timer_read();
33999 + int jiffies_elapsed = (ticks_last - ticks_cur) >> INPUT_FREQ_SHIFT;
34000 + int subjiffy = ticks_last - (jiffies_elapsed << INPUT_FREQ_SHIFT);
34001 +
34002 + if (restart) {
34003 + if (ticks_left >= (1 << INPUT_FREQ_SHIFT))
34004 + s3c24xx_timer_program(ticks_left);
34005 + else
34006 + s3c24xx_timer_program_idle();
34007 + ticks_last += subjiffy;
34008 + } else
34009 + ticks_last = subjiffy;
34010 +
34011 + while (jiffies_elapsed --)
34012 + timer_tick();
34013 +}
34014 +
34015 +/* Called when the timer expires. */
34016 +static irqreturn_t s3c24xx_timer_handler(int irq, void *dev_id)
34017 +{
34018 + tcnto_last = -1;
34019 + s3c24xx_timer_update(1);
34020 +
34021 + return IRQ_HANDLED;
34022 +}
34023 +
34024 +/* Called to update jiffies with time elapsed. */
34025 +static irqreturn_t s3c24xx_timer_handler_dyn_tick(int irq, void *dev_id)
34026 +{
34027 + s3c24xx_timer_update(0);
34028 +
34029 + return IRQ_HANDLED;
34030 +}
34031 +
34032 +/*
34033 + * Programs the next timer interrupt needed. Called when dynamic tick is
34034 + * enabled, and to reprogram the ticks to skip from pm_idle. The CPU goes
34035 + * to sleep directly after this.
34036 + */
34037 +static void s3c24xx_timer_reprogram_dyn_tick(unsigned long next_jiffies)
34038 +{
34039 + int subjiffy_left = ticks_last - s3c24xx_timer_read();
34040 +
34041 + s3c24xx_timer_program(max((int) next_jiffies, 1) << INPUT_FREQ_SHIFT);
34042 + ticks_last += subjiffy_left;
34043 +}
34044 +
34045 +static unsigned long s3c24xx_timer_offset_dyn_tick(void)
34046 +{
34047 + /* TODO */
34048 + return 0;
34049 +}
34050 +
34051 +static int s3c24xx_timer_enable_dyn_tick(void)
34052 +{
34053 + /* Set our constant prescaler. */
34054 + uint32_t tcfg0 = __raw_readl(S3C2410_TCFG0);
34055 + int prescaler =
34056 + max(min(256, (int) pclk / (HZ << (INPUT_FREQ_SHIFT + 1))), 1);
34057 +
34058 + tcfg0 &= ~S3C2410_TCFG_PRESCALER1_MASK;
34059 + tcfg0 |= (prescaler - 1) << S3C2410_TCFG_PRESCALER1_SHIFT;
34060 + __raw_writel(tcfg0, S3C2410_TCFG0);
34061 +
34062 + /* Override handlers. */
34063 + s3c2410_timer_irq.handler = s3c24xx_timer_handler;
34064 + s3c24xx_timer.offset = s3c24xx_timer_offset_dyn_tick;
34065 +
34066 + printk(KERN_INFO "dyn_tick enabled on s3c24xx timer 4, "
34067 + "%li Hz pclk with prescaler %i\n", pclk, prescaler);
34068 +
34069 + s3c24xx_timer_program_idle();
34070 +
34071 + return 0;
34072 +}
34073 +
34074 +static int s3c24xx_timer_disable_dyn_tick(void)
34075 +{
34076 + s3c2410_timer_irq.handler = s3c2410_timer_interrupt;
34077 + s3c24xx_timer.offset = s3c2410_gettimeoffset;
34078 + s3c2410_timer_setup();
34079 +
34080 + return 0;
34081 +}
34082 +
34083 +static struct dyn_tick_timer s3c24xx_dyn_tick_timer = {
34084 + .enable = s3c24xx_timer_enable_dyn_tick,
34085 + .disable = s3c24xx_timer_disable_dyn_tick,
34086 + .reprogram = s3c24xx_timer_reprogram_dyn_tick,
34087 + .handler = s3c24xx_timer_handler_dyn_tick,
34088 +};
34089 +#endif /* CONFIG_NO_IDLE_HZ */
34090 +
34091 struct sys_timer s3c24xx_timer = {
34092 .init = s3c2410_timer_init,
34093 .offset = s3c2410_gettimeoffset,
34094 - .resume = s3c2410_timer_setup
34095 + .resume = s3c2410_timer_resume,
34096 +#ifdef CONFIG_NO_IDLE_HZ
34097 + .dyn_tick = &s3c24xx_dyn_tick_timer,
34098 +#endif
34099 };
34100 Index: linux-2.6.28/arch/arm/plat-s3c64xx/clock.c
34101 ===================================================================
34102 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
34103 +++ linux-2.6.28/arch/arm/plat-s3c64xx/clock.c 2009-01-02 00:01:56.000000000 +0100
34104 @@ -0,0 +1,282 @@
34105 +/* linux/arch/arm/plat-s3c64xx/clock.c
34106 + *
34107 + * Copyright 2008 Openmoko, Inc.
34108 + * Copyright 2008 Simtec Electronics
34109 + * Ben Dooks <ben@simtec.co.uk>
34110 + * http://armlinux.simtec.co.uk/
34111 + *
34112 + * S3C64XX Base clock support
34113 + *
34114 + * This program is free software; you can redistribute it and/or modify
34115 + * it under the terms of the GNU General Public License version 2 as
34116 + * published by the Free Software Foundation.
34117 +*/
34118 +
34119 +#include <linux/init.h>
34120 +#include <linux/module.h>
34121 +#include <linux/interrupt.h>
34122 +#include <linux/ioport.h>
34123 +#include <linux/delay.h>
34124 +#include <linux/io.h>
34125 +
34126 +#include <mach/hardware.h>
34127 +#include <mach/map.h>
34128 +
34129 +#include <plat/regs-sys.h>
34130 +#include <plat/regs-clock.h>
34131 +#include <plat/cpu.h>
34132 +#include <plat/devs.h>
34133 +#include <plat/clock.h>
34134 +
34135 +struct clk clk_27m = {
34136 + .name = "clk_27m",
34137 + .id = -1,
34138 + .rate = 27000000,
34139 +};
34140 +
34141 +static int clk_48m_ctrl(struct clk *clk, int enable)
34142 +{
34143 + unsigned long flags;
34144 + u32 val;
34145 +
34146 + /* can't rely on clock lock, this register has other usages */
34147 + local_irq_save(flags);
34148 +
34149 + val = __raw_readl(S3C64XX_OTHERS);
34150 + if (enable)
34151 + val |= S3C64XX_OTHERS_USBMASK;
34152 + else
34153 + val &= ~S3C64XX_OTHERS_USBMASK;
34154 +
34155 + __raw_writel(val, S3C64XX_OTHERS);
34156 + local_irq_restore(flags);
34157 +
34158 + return 0;
34159 +}
34160 +
34161 +struct clk clk_48m = {
34162 + .name = "clk_48m",
34163 + .id = -1,
34164 + .rate = 48000000,
34165 + .enable = clk_48m_ctrl,
34166 +};
34167 +
34168 +static int inline s3c64xx_gate(void __iomem *reg,
34169 + struct clk *clk,
34170 + int enable)
34171 +{
34172 + unsigned int ctrlbit = clk->ctrlbit;
34173 + u32 con;
34174 +
34175 + con = __raw_readl(reg);
34176 +
34177 + if (enable)
34178 + con |= ctrlbit;
34179 + else
34180 + con &= ~ctrlbit;
34181 +
34182 + __raw_writel(con, reg);
34183 + return 0;
34184 +}
34185 +
34186 +static int s3c64xx_pclk_ctrl(struct clk *clk, int enable)
34187 +{
34188 + return s3c64xx_gate(S3C_PCLK_GATE, clk, enable);
34189 +}
34190 +
34191 +static int s3c64xx_hclk_ctrl(struct clk *clk, int enable)
34192 +{
34193 + return s3c64xx_gate(S3C_HCLK_GATE, clk, enable);
34194 +}
34195 +
34196 +int s3c64xx_sclk_ctrl(struct clk *clk, int enable)
34197 +{
34198 + return s3c64xx_gate(S3C_SCLK_GATE, clk, enable);
34199 +}
34200 +
34201 +static struct clk init_clocks_disable[] = {
34202 + {
34203 + .name = "nand",
34204 + .id = -1,
34205 + .parent = &clk_h,
34206 + }, {
34207 + .name = "adc",
34208 + .id = -1,
34209 + .parent = &clk_p,
34210 + .enable = s3c64xx_pclk_ctrl,
34211 + .ctrlbit = S3C_CLKCON_PCLK_TSADC,
34212 + }, {
34213 + .name = "i2c",
34214 + .id = -1,
34215 + .parent = &clk_p,
34216 + .enable = s3c64xx_pclk_ctrl,
34217 + .ctrlbit = S3C_CLKCON_PCLK_IIC,
34218 + }, {
34219 + .name = "iis",
34220 + .id = 0,
34221 + .parent = &clk_p,
34222 + .enable = s3c64xx_pclk_ctrl,
34223 + .ctrlbit = S3C_CLKCON_PCLK_IIS0,
34224 + }, {
34225 + .name = "iis",
34226 + .id = 1,
34227 + .parent = &clk_p,
34228 + .enable = s3c64xx_pclk_ctrl,
34229 + .ctrlbit = S3C_CLKCON_PCLK_IIS1,
34230 + }, {
34231 + .name = "spi",
34232 + .id = 0,
34233 + .parent = &clk_p,
34234 + .enable = s3c64xx_pclk_ctrl,
34235 + .ctrlbit = S3C_CLKCON_PCLK_SPI0,
34236 + }, {
34237 + .name = "spi",
34238 + .id = 1,
34239 + .parent = &clk_p,
34240 + .enable = s3c64xx_pclk_ctrl,
34241 + .ctrlbit = S3C_CLKCON_PCLK_SPI1,
34242 + }, {
34243 + .name = "48m",
34244 + .id = 0,
34245 + .parent = &clk_48m,
34246 + .enable = s3c64xx_sclk_ctrl,
34247 + .ctrlbit = S3C_CLKCON_SCLK_MMC0_48,
34248 + }, {
34249 + .name = "48m",
34250 + .id = 1,
34251 + .parent = &clk_48m,
34252 + .enable = s3c64xx_sclk_ctrl,
34253 + .ctrlbit = S3C_CLKCON_SCLK_MMC1_48,
34254 + }, {
34255 + .name = "48m",
34256 + .id = 2,
34257 + .parent = &clk_48m,
34258 + .enable = s3c64xx_sclk_ctrl,
34259 + .ctrlbit = S3C_CLKCON_SCLK_MMC2_48,
34260 + },
34261 +};
34262 +
34263 +static struct clk init_clocks[] = {
34264 + {
34265 + .name = "lcd",
34266 + .id = -1,
34267 + .parent = &clk_h,
34268 + .enable = s3c64xx_hclk_ctrl,
34269 + .ctrlbit = S3C_CLKCON_HCLK_LCD,
34270 + }, {
34271 + .name = "gpio",
34272 + .id = -1,
34273 + .parent = &clk_p,
34274 + .enable = s3c64xx_pclk_ctrl,
34275 + .ctrlbit = S3C_CLKCON_PCLK_GPIO,
34276 + }, {
34277 + .name = "usb-host",
34278 + .id = -1,
34279 + .parent = &clk_h,
34280 + .enable = s3c64xx_hclk_ctrl,
34281 + .ctrlbit = S3C_CLKCON_SCLK_UHOST,
34282 + }, {
34283 + .name = "hsmmc",
34284 + .id = 0,
34285 + .parent = &clk_h,
34286 + .enable = s3c64xx_hclk_ctrl,
34287 + .ctrlbit = S3C_CLKCON_HCLK_HSMMC0,
34288 + }, {
34289 + .name = "hsmmc",
34290 + .id = 1,
34291 + .parent = &clk_h,
34292 + .enable = s3c64xx_hclk_ctrl,
34293 + .ctrlbit = S3C_CLKCON_HCLK_HSMMC1,
34294 + }, {
34295 + .name = "hsmmc",
34296 + .id = 2,
34297 + .parent = &clk_h,
34298 + .enable = s3c64xx_hclk_ctrl,
34299 + .ctrlbit = S3C_CLKCON_HCLK_HSMMC2,
34300 + }, {
34301 + .name = "timers",
34302 + .id = -1,
34303 + .parent = &clk_p,
34304 + .enable = s3c64xx_pclk_ctrl,
34305 + .ctrlbit = S3C_CLKCON_PCLK_PWM,
34306 + }, {
34307 + .name = "uart",
34308 + .id = 0,
34309 + .parent = &clk_p,
34310 + .enable = s3c64xx_pclk_ctrl,
34311 + .ctrlbit = S3C_CLKCON_PCLK_UART0,
34312 + }, {
34313 + .name = "uart",
34314 + .id = 1,
34315 + .parent = &clk_p,
34316 + .enable = s3c64xx_pclk_ctrl,
34317 + .ctrlbit = S3C_CLKCON_PCLK_UART1,
34318 + }, {
34319 + .name = "uart",
34320 + .id = 2,
34321 + .parent = &clk_p,
34322 + .enable = s3c64xx_pclk_ctrl,
34323 + .ctrlbit = S3C_CLKCON_PCLK_UART2,
34324 + }, {
34325 + .name = "uart",
34326 + .id = 3,
34327 + .parent = &clk_p,
34328 + .enable = s3c64xx_pclk_ctrl,
34329 + .ctrlbit = S3C_CLKCON_PCLK_UART3,
34330 + }, {
34331 + .name = "rtc",
34332 + .id = -1,
34333 + .parent = &clk_p,
34334 + .enable = s3c64xx_pclk_ctrl,
34335 + .ctrlbit = S3C_CLKCON_PCLK_RTC,
34336 + }, {
34337 + .name = "watchdog",
34338 + .id = -1,
34339 + .parent = &clk_p,
34340 + .ctrlbit = S3C_CLKCON_PCLK_WDT,
34341 + }, {
34342 + .name = "ac97",
34343 + .id = -1,
34344 + .parent = &clk_p,
34345 + .ctrlbit = S3C_CLKCON_PCLK_AC97,
34346 + }
34347 +};
34348 +
34349 +static struct clk *clks[] __initdata = {
34350 + &clk_ext,
34351 + &clk_epll,
34352 + &clk_27m,
34353 + &clk_48m,
34354 +};
34355 +
34356 +void s3c64xx_register_clocks(void)
34357 +{
34358 + struct clk *clkp;
34359 + int ret;
34360 + int ptr;
34361 +
34362 + s3c24xx_register_clocks(clks, ARRAY_SIZE(clks));
34363 +
34364 + clkp = init_clocks;
34365 + for (ptr = 0; ptr < ARRAY_SIZE(init_clocks); ptr++, clkp++) {
34366 + ret = s3c24xx_register_clock(clkp);
34367 + if (ret < 0) {
34368 + printk(KERN_ERR "Failed to register clock %s (%d)\n",
34369 + clkp->name, ret);
34370 + }
34371 + }
34372 +
34373 + clkp = init_clocks_disable;
34374 + for (ptr = 0; ptr < ARRAY_SIZE(init_clocks_disable); ptr++, clkp++) {
34375 +
34376 + ret = s3c24xx_register_clock(clkp);
34377 + if (ret < 0) {
34378 + printk(KERN_ERR "Failed to register clock %s (%d)\n",
34379 + clkp->name, ret);
34380 + }
34381 +
34382 + (clkp->enable)(clkp, 0);
34383 + }
34384 +
34385 + s3c_pwmclk_init();
34386 +}
34387 Index: linux-2.6.28/arch/arm/plat-s3c64xx/cpu.c
34388 ===================================================================
34389 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
34390 +++ linux-2.6.28/arch/arm/plat-s3c64xx/cpu.c 2009-01-02 00:01:56.000000000 +0100
34391 @@ -0,0 +1,139 @@
34392 +/* linux/arch/arm/plat-s3c64xx/cpu.c
34393 + *
34394 + * Copyright 2008 Openmoko, Inc.
34395 + * Copyright 2008 Simtec Electronics
34396 + * Ben Dooks <ben@simtec.co.uk>
34397 + * http://armlinux.simtec.co.uk/
34398 + *
34399 + * S3C64XX CPU Support
34400 + *
34401 + * This program is free software; you can redistribute it and/or modify
34402 + * it under the terms of the GNU General Public License version 2 as
34403 + * published by the Free Software Foundation.
34404 +*/
34405 +
34406 +#include <linux/init.h>
34407 +#include <linux/module.h>
34408 +#include <linux/interrupt.h>
34409 +#include <linux/ioport.h>
34410 +#include <linux/sysdev.h>
34411 +#include <linux/serial_core.h>
34412 +#include <linux/platform_device.h>
34413 +#include <linux/delay.h>
34414 +#include <linux/io.h>
34415 +
34416 +#include <mach/hardware.h>
34417 +#include <mach/map.h>
34418 +
34419 +#include <asm/mach/arch.h>
34420 +#include <asm/mach/map.h>
34421 +
34422 +#include <plat/regs-serial.h>
34423 +
34424 +#include <plat/cpu.h>
34425 +#include <plat/devs.h>
34426 +#include <plat/clock.h>
34427 +
34428 +#include <plat/s3c6400.h>
34429 +#include <plat/s3c6410.h>
34430 +
34431 +/* table of supported CPUs */
34432 +
34433 +static const char name_s3c6400[] = "S3C6400";
34434 +static const char name_s3c6410[] = "S3C6410";
34435 +
34436 +static struct cpu_table cpu_ids[] __initdata = {
34437 + {
34438 + .idcode = 0x36400000,
34439 + .idmask = 0xfffff000,
34440 + .map_io = s3c6400_map_io,
34441 + .init_clocks = s3c6400_init_clocks,
34442 + .init_uarts = s3c6400_init_uarts,
34443 + .init = s3c6400_init,
34444 + .name = name_s3c6400,
34445 + }, {
34446 + .idcode = 0x36410100,
34447 + .idmask = 0xffffff00,
34448 + .map_io = s3c6410_map_io,
34449 + .init_clocks = s3c6410_init_clocks,
34450 + .init_uarts = s3c6410_init_uarts,
34451 + .init = s3c6410_init,
34452 + .name = name_s3c6410,
34453 + },
34454 +};
34455 +
34456 +/* minimal IO mapping */
34457 +
34458 +/* see notes on uart map in arch/arm/mach-s3c6400/include/mach/debug-macro.S */
34459 +#define UART_OFFS (S3C_PA_UART & 0xfffff)
34460 +
34461 +static struct map_desc s3c_iodesc[] __initdata = {
34462 + {
34463 + .virtual = (unsigned long)S3C_VA_SYS,
34464 + .pfn = __phys_to_pfn(S3C64XX_PA_SYSCON),
34465 + .length = SZ_4K,
34466 + .type = MT_DEVICE,
34467 + }, {
34468 + .virtual = (unsigned long)(S3C_VA_UART + UART_OFFS),
34469 + .pfn = __phys_to_pfn(S3C_PA_UART),
34470 + .length = SZ_4K,
34471 + .type = MT_DEVICE,
34472 + }, {
34473 + .virtual = (unsigned long)S3C_VA_VIC0,
34474 + .pfn = __phys_to_pfn(S3C64XX_PA_VIC0),
34475 + .length = SZ_16K,
34476 + .type = MT_DEVICE,
34477 + }, {
34478 + .virtual = (unsigned long)S3C_VA_VIC1,
34479 + .pfn = __phys_to_pfn(S3C64XX_PA_VIC1),
34480 + .length = SZ_16K,
34481 + .type = MT_DEVICE,
34482 + }, {
34483 + .virtual = (unsigned long)S3C_VA_TIMER,
34484 + .pfn = __phys_to_pfn(S3C_PA_TIMER),
34485 + .length = SZ_16K,
34486 + .type = MT_DEVICE,
34487 + }, {
34488 + .virtual = (unsigned long)S3C64XX_VA_GPIO,
34489 + .pfn = __phys_to_pfn(S3C64XX_PA_GPIO),
34490 + .length = SZ_4K,
34491 + .type = MT_DEVICE,
34492 + }, {
34493 + .virtual = (unsigned long)S3C64XX_VA_MODEM,
34494 + .pfn = __phys_to_pfn(S3C64XX_PA_MODEM),
34495 + .length = SZ_4K,
34496 + .type = MT_DEVICE,
34497 + },
34498 +};
34499 +
34500 +
34501 +struct sysdev_class s3c64xx_sysclass = {
34502 + .name = "s3c64xx-core",
34503 +};
34504 +
34505 +static struct sys_device s3c64xx_sysdev = {
34506 + .cls = &s3c64xx_sysclass,
34507 +};
34508 +
34509 +
34510 +/* read cpu identification code */
34511 +
34512 +void __init s3c64xx_init_io(struct map_desc *mach_desc, int size)
34513 +{
34514 + unsigned long idcode;
34515 +
34516 + /* initialise the io descriptors we need for initialisation */
34517 + iotable_init(s3c_iodesc, ARRAY_SIZE(s3c_iodesc));
34518 + iotable_init(mach_desc, size);
34519 +
34520 + idcode = __raw_readl(S3C_VA_SYS + 0x118);
34521 + s3c_init_cpu(idcode, cpu_ids, ARRAY_SIZE(cpu_ids));
34522 +}
34523 +
34524 +static __init int s3c64xx_sysdev_init(void)
34525 +{
34526 + sysdev_class_register(&s3c64xx_sysclass);
34527 + return sysdev_register(&s3c64xx_sysdev);
34528 +}
34529 +
34530 +core_initcall(s3c64xx_sysdev_init);
34531 Index: linux-2.6.28/arch/arm/plat-s3c64xx/dev-uart.c
34532 ===================================================================
34533 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
34534 +++ linux-2.6.28/arch/arm/plat-s3c64xx/dev-uart.c 2009-01-02 00:01:56.000000000 +0100
34535 @@ -0,0 +1,176 @@
34536 +/* linux/arch/arm/plat-s3c64xx/dev-uart.c
34537 + *
34538 + * Copyright 2008 Openmoko, Inc.
34539 + * Copyright 2008 Simtec Electronics
34540 + * Ben Dooks <ben@simtec.co.uk>
34541 + * http://armlinux.simtec.co.uk/
34542 + *
34543 + * Base S3C64XX UART resource and device definitions
34544 + *
34545 + * This program is free software; you can redistribute it and/or modify
34546 + * it under the terms of the GNU General Public License version 2 as
34547 + * published by the Free Software Foundation.
34548 + *
34549 +*/
34550 +
34551 +#include <linux/kernel.h>
34552 +#include <linux/types.h>
34553 +#include <linux/interrupt.h>
34554 +#include <linux/list.h>
34555 +#include <linux/platform_device.h>
34556 +
34557 +#include <asm/mach/arch.h>
34558 +#include <asm/mach/irq.h>
34559 +#include <mach/hardware.h>
34560 +#include <mach/map.h>
34561 +
34562 +#include <plat/devs.h>
34563 +
34564 +/* Serial port registrations */
34565 +
34566 +/* 64xx uarts are closer together */
34567 +
34568 +static struct resource s3c64xx_uart0_resource[] = {
34569 + [0] = {
34570 + .start = S3C_PA_UART0,
34571 + .end = S3C_PA_UART0 + 0x100,
34572 + .flags = IORESOURCE_MEM,
34573 + },
34574 + [1] = {
34575 + .start = IRQ_S3CUART_RX0,
34576 + .end = IRQ_S3CUART_RX0,
34577 + .flags = IORESOURCE_IRQ,
34578 + },
34579 + [2] = {
34580 + .start = IRQ_S3CUART_TX0,
34581 + .end = IRQ_S3CUART_TX0,
34582 + .flags = IORESOURCE_IRQ,
34583 +
34584 + },
34585 + [3] = {
34586 + .start = IRQ_S3CUART_ERR0,
34587 + .end = IRQ_S3CUART_ERR0,
34588 + .flags = IORESOURCE_IRQ,
34589 + }
34590 +};
34591 +
34592 +static struct resource s3c64xx_uart1_resource[] = {
34593 + [0] = {
34594 + .start = S3C_PA_UART1,
34595 + .end = S3C_PA_UART1 + 0x100,
34596 + .flags = IORESOURCE_MEM,
34597 + },
34598 + [1] = {
34599 + .start = IRQ_S3CUART_RX1,
34600 + .end = IRQ_S3CUART_RX1,
34601 + .flags = IORESOURCE_IRQ,
34602 + },
34603 + [2] = {
34604 + .start = IRQ_S3CUART_TX1,
34605 + .end = IRQ_S3CUART_TX1,
34606 + .flags = IORESOURCE_IRQ,
34607 +
34608 + },
34609 + [3] = {
34610 + .start = IRQ_S3CUART_ERR1,
34611 + .end = IRQ_S3CUART_ERR1,
34612 + .flags = IORESOURCE_IRQ,
34613 + },
34614 +};
34615 +
34616 +static struct resource s3c6xx_uart2_resource[] = {
34617 + [0] = {
34618 + .start = S3C_PA_UART2,
34619 + .end = S3C_PA_UART2 + 0x100,
34620 + .flags = IORESOURCE_MEM,
34621 + },
34622 + [1] = {
34623 + .start = IRQ_S3CUART_RX2,
34624 + .end = IRQ_S3CUART_RX2,
34625 + .flags = IORESOURCE_IRQ,
34626 + },
34627 + [2] = {
34628 + .start = IRQ_S3CUART_TX2,
34629 + .end = IRQ_S3CUART_TX2,
34630 + .flags = IORESOURCE_IRQ,
34631 +
34632 + },
34633 + [3] = {
34634 + .start = IRQ_S3CUART_ERR2,
34635 + .end = IRQ_S3CUART_ERR2,
34636 + .flags = IORESOURCE_IRQ,
34637 + },
34638 +};
34639 +
34640 +static struct resource s3c64xx_uart3_resource[] = {
34641 + [0] = {
34642 + .start = S3C_PA_UART3,
34643 + .end = S3C_PA_UART3 + 0x100,
34644 + .flags = IORESOURCE_MEM,
34645 + },
34646 + [1] = {
34647 + .start = IRQ_S3CUART_RX3,
34648 + .end = IRQ_S3CUART_RX3,
34649 + .flags = IORESOURCE_IRQ,
34650 + },
34651 + [2] = {
34652 + .start = IRQ_S3CUART_TX3,
34653 + .end = IRQ_S3CUART_TX3,
34654 + .flags = IORESOURCE_IRQ,
34655 +
34656 + },
34657 + [3] = {
34658 + .start = IRQ_S3CUART_ERR3,
34659 + .end = IRQ_S3CUART_ERR3,
34660 + .flags = IORESOURCE_IRQ,
34661 + },
34662 +};
34663 +
34664 +
34665 +struct s3c24xx_uart_resources s3c64xx_uart_resources[] __initdata = {
34666 + [0] = {
34667 + .resources = s3c64xx_uart0_resource,
34668 + .nr_resources = ARRAY_SIZE(s3c64xx_uart0_resource),
34669 + },
34670 + [1] = {
34671 + .resources = s3c64xx_uart1_resource,
34672 + .nr_resources = ARRAY_SIZE(s3c64xx_uart1_resource),
34673 + },
34674 + [2] = {
34675 + .resources = s3c6xx_uart2_resource,
34676 + .nr_resources = ARRAY_SIZE(s3c6xx_uart2_resource),
34677 + },
34678 + [3] = {
34679 + .resources = s3c64xx_uart3_resource,
34680 + .nr_resources = ARRAY_SIZE(s3c64xx_uart3_resource),
34681 + },
34682 +};
34683 +
34684 +/* uart devices */
34685 +
34686 +static struct platform_device s3c24xx_uart_device0 = {
34687 + .id = 0,
34688 +};
34689 +
34690 +static struct platform_device s3c24xx_uart_device1 = {
34691 + .id = 1,
34692 +};
34693 +
34694 +static struct platform_device s3c24xx_uart_device2 = {
34695 + .id = 2,
34696 +};
34697 +
34698 +static struct platform_device s3c24xx_uart_device3 = {
34699 + .id = 3,
34700 +};
34701 +
34702 +struct platform_device *s3c24xx_uart_src[4] = {
34703 + &s3c24xx_uart_device0,
34704 + &s3c24xx_uart_device1,
34705 + &s3c24xx_uart_device2,
34706 + &s3c24xx_uart_device3,
34707 +};
34708 +
34709 +struct platform_device *s3c24xx_uart_devs[4] = {
34710 +};
34711 +
34712 Index: linux-2.6.28/arch/arm/plat-s3c64xx/gpiolib.c
34713 ===================================================================
34714 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
34715 +++ linux-2.6.28/arch/arm/plat-s3c64xx/gpiolib.c 2009-01-02 00:01:56.000000000 +0100
34716 @@ -0,0 +1,428 @@
34717 +/* arch/arm/plat-s3c64xx/gpiolib.c
34718 + *
34719 + * Copyright 2008 Openmoko, Inc.
34720 + * Copyright 2008 Simtec Electronics
34721 + * Ben Dooks <ben@simtec.co.uk>
34722 + * http://armlinux.simtec.co.uk/
34723 + *
34724 + * S3C64XX - GPIOlib support
34725 + *
34726 + * This program is free software; you can redistribute it and/or modify
34727 + * it under the terms of the GNU General Public License version 2 as
34728 + * published by the Free Software Foundation.
34729 + */
34730 +
34731 +#include <linux/kernel.h>
34732 +#include <linux/irq.h>
34733 +#include <linux/io.h>
34734 +
34735 +#include <mach/map.h>
34736 +#include <mach/gpio.h>
34737 +#include <mach/gpio-core.h>
34738 +
34739 +#include <plat/gpio-cfg.h>
34740 +#include <plat/gpio-cfg-helpers.h>
34741 +#include <plat/regs-gpio.h>
34742 +
34743 +/* GPIO bank summary:
34744 + *
34745 + * Bank GPIOs Style SlpCon ExtInt Group
34746 + * A 8 4Bit Yes 1
34747 + * B 7 4Bit Yes 1
34748 + * C 8 4Bit Yes 2
34749 + * D 5 4Bit Yes 3
34750 + * E 5 4Bit Yes None
34751 + * F 16 2Bit Yes 4 [1]
34752 + * G 7 4Bit Yes 5
34753 + * H 10 4Bit[2] Yes 6
34754 + * I 16 2Bit Yes None
34755 + * J 12 2Bit Yes None
34756 + * K 16 4Bit[2] No None
34757 + * L 15 4Bit[2] No None
34758 + * M 6 4Bit No IRQ_EINT
34759 + * N 16 2Bit No IRQ_EINT
34760 + * O 16 2Bit Yes 7
34761 + * P 15 2Bit Yes 8
34762 + * Q 9 2Bit Yes 9
34763 + *
34764 + * [1] BANKF pins 14,15 do not form part of the external interrupt sources
34765 + * [2] BANK has two control registers, GPxCON0 and GPxCON1
34766 + */
34767 +
34768 +#define OFF_GPCON (0x00)
34769 +#define OFF_GPDAT (0x04)
34770 +
34771 +#define con_4bit_shift(__off) ((__off) * 4)
34772 +
34773 +#if 1
34774 +#define gpio_dbg(x...) do { } while(0)
34775 +#else
34776 +#define gpio_dbg(x...) printk(KERN_DEBUG ## x)
34777 +#endif
34778 +
34779 +/* The s3c64xx_gpiolib_4bit routines are to control the gpio banks where
34780 + * the gpio configuration register (GPxCON) has 4 bits per GPIO, as the
34781 + * following example:
34782 + *
34783 + * base + 0x00: Control register, 4 bits per gpio
34784 + * gpio n: 4 bits starting at (4*n)
34785 + * 0000 = input, 0001 = output, others mean special-function
34786 + * base + 0x04: Data register, 1 bit per gpio
34787 + * bit n: data bit n
34788 + *
34789 + * Note, since the data register is one bit per gpio and is at base + 0x4
34790 + * we can use s3c_gpiolib_get and s3c_gpiolib_set to change the state of
34791 + * the output.
34792 +*/
34793 +
34794 +static int s3c64xx_gpiolib_4bit_input(struct gpio_chip *chip, unsigned offset)
34795 +{
34796 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
34797 + void __iomem *base = ourchip->base;
34798 + unsigned long con;
34799 +
34800 + con = __raw_readl(base + OFF_GPCON);
34801 + con &= ~(0xf << con_4bit_shift(offset));
34802 + __raw_writel(con, base + OFF_GPCON);
34803 +
34804 + gpio_dbg("%s: %p: CON now %08lx\n", __func__, base, con);
34805 +
34806 + return 0;
34807 +}
34808 +
34809 +static int s3c64xx_gpiolib_4bit_output(struct gpio_chip *chip,
34810 + unsigned offset, int value)
34811 +{
34812 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
34813 + void __iomem *base = ourchip->base;
34814 + unsigned long con;
34815 + unsigned long dat;
34816 +
34817 + con = __raw_readl(base + OFF_GPCON);
34818 + con &= ~(0xf << con_4bit_shift(offset));
34819 + con |= 0x1 << con_4bit_shift(offset);
34820 +
34821 + dat = __raw_readl(base + OFF_GPDAT);
34822 + if (value)
34823 + dat |= 1 << offset;
34824 + else
34825 + dat &= ~(1 << offset);
34826 +
34827 + __raw_writel(dat, base + OFF_GPDAT);
34828 + __raw_writel(con, base + OFF_GPCON);
34829 + __raw_writel(dat, base + OFF_GPDAT);
34830 +
34831 + gpio_dbg("%s: %p: CON %08lx, DAT %08lx\n", __func__, base, con, dat);
34832 +
34833 + return 0;
34834 +}
34835 +
34836 +/* The next set of routines are for the case where the GPIO configuration
34837 + * registers are 4 bits per GPIO but there is more than one register (the
34838 + * bank has more than 8 GPIOs.
34839 + *
34840 + * This case is the similar to the 4 bit case, but the registers are as
34841 + * follows:
34842 + *
34843 + * base + 0x00: Control register, 4 bits per gpio (lower 8 GPIOs)
34844 + * gpio n: 4 bits starting at (4*n)
34845 + * 0000 = input, 0001 = output, others mean special-function
34846 + * base + 0x04: Control register, 4 bits per gpio (up to 8 additions GPIOs)
34847 + * gpio n: 4 bits starting at (4*n)
34848 + * 0000 = input, 0001 = output, others mean special-function
34849 + * base + 0x08: Data register, 1 bit per gpio
34850 + * bit n: data bit n
34851 + *
34852 + * To allow us to use the s3c_gpiolib_get and s3c_gpiolib_set routines we
34853 + * store the 'base + 0x4' address so that these routines see the data
34854 + * register at ourchip->base + 0x04.
34855 +*/
34856 +
34857 +static int s3c64xx_gpiolib_4bit2_input(struct gpio_chip *chip, unsigned offset)
34858 +{
34859 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
34860 + void __iomem *base = ourchip->base;
34861 + void __iomem *regcon = base;
34862 + unsigned long con;
34863 +
34864 + if (offset > 7)
34865 + offset -= 8;
34866 + else
34867 + regcon -= 4;
34868 +
34869 + con = __raw_readl(regcon);
34870 + con &= ~(0xf << con_4bit_shift(offset));
34871 + __raw_writel(con, regcon);
34872 +
34873 + gpio_dbg("%s: %p: CON %08lx\n", __func__, base, con);
34874 +
34875 + return 0;
34876 +
34877 +}
34878 +
34879 +static int s3c64xx_gpiolib_4bit2_output(struct gpio_chip *chip,
34880 + unsigned offset, int value)
34881 +{
34882 + struct s3c_gpio_chip *ourchip = to_s3c_gpio(chip);
34883 + void __iomem *base = ourchip->base;
34884 + void __iomem *regcon = base;
34885 + unsigned long con;
34886 + unsigned long dat;
34887 +
34888 + if (offset > 7)
34889 + offset -= 8;
34890 + else
34891 + regcon -= 4;
34892 +
34893 + con = __raw_readl(regcon);
34894 + con &= ~(0xf << con_4bit_shift(offset));
34895 + con |= 0x1 << con_4bit_shift(offset);
34896 +
34897 + dat = __raw_readl(base + OFF_GPDAT);
34898 + if (value)
34899 + dat |= 1 << offset;
34900 + else
34901 + dat &= ~(1 << offset);
34902 +
34903 + __raw_writel(dat, base + OFF_GPDAT);
34904 + __raw_writel(con, regcon);
34905 + __raw_writel(dat, base + OFF_GPDAT);
34906 +
34907 + gpio_dbg("%s: %p: CON %08lx, DAT %08lx\n", __func__, base, con, dat);
34908 +
34909 + return 0;
34910 +}
34911 +
34912 +static struct s3c_gpio_cfg gpio_4bit_cfg_noint = {
34913 + .set_config = s3c_gpio_setcfg_s3c64xx_4bit,
34914 + .set_pull = s3c_gpio_setpull_updown,
34915 + .get_pull = s3c_gpio_getpull_updown,
34916 +};
34917 +
34918 +static struct s3c_gpio_cfg gpio_4bit_cfg_eint0111 = {
34919 + .cfg_eint = 7,
34920 + .set_config = s3c_gpio_setcfg_s3c64xx_4bit,
34921 + .set_pull = s3c_gpio_setpull_updown,
34922 + .get_pull = s3c_gpio_getpull_updown,
34923 +};
34924 +
34925 +static struct s3c_gpio_cfg gpio_4bit_cfg_eint0011 = {
34926 + .cfg_eint = 3,
34927 + .set_config = s3c_gpio_setcfg_s3c64xx_4bit,
34928 + .set_pull = s3c_gpio_setpull_updown,
34929 + .get_pull = s3c_gpio_getpull_updown,
34930 +};
34931 +
34932 +static struct s3c_gpio_chip gpio_4bit[] = {
34933 + {
34934 + .base = S3C64XX_GPA_BASE,
34935 + .config = &gpio_4bit_cfg_eint0111,
34936 + .chip = {
34937 + .base = S3C64XX_GPA(0),
34938 + .ngpio = S3C64XX_GPIO_A_NR,
34939 + .label = "GPA",
34940 + },
34941 + }, {
34942 + .base = S3C64XX_GPB_BASE,
34943 + .config = &gpio_4bit_cfg_eint0111,
34944 + .chip = {
34945 + .base = S3C64XX_GPB(0),
34946 + .ngpio = S3C64XX_GPIO_B_NR,
34947 + .label = "GPB",
34948 + },
34949 + }, {
34950 + .base = S3C64XX_GPC_BASE,
34951 + .config = &gpio_4bit_cfg_eint0111,
34952 + .chip = {
34953 + .base = S3C64XX_GPC(0),
34954 + .ngpio = S3C64XX_GPIO_C_NR,
34955 + .label = "GPC",
34956 + },
34957 + }, {
34958 + .base = S3C64XX_GPD_BASE,
34959 + .config = &gpio_4bit_cfg_eint0111,
34960 + .chip = {
34961 + .base = S3C64XX_GPD(0),
34962 + .ngpio = S3C64XX_GPIO_D_NR,
34963 + .label = "GPD",
34964 + },
34965 + }, {
34966 + .base = S3C64XX_GPE_BASE,
34967 + .config = &gpio_4bit_cfg_noint,
34968 + .chip = {
34969 + .base = S3C64XX_GPE(0),
34970 + .ngpio = S3C64XX_GPIO_E_NR,
34971 + .label = "GPE",
34972 + },
34973 + }, {
34974 + .base = S3C64XX_GPG_BASE,
34975 + .config = &gpio_4bit_cfg_eint0111,
34976 + .chip = {
34977 + .base = S3C64XX_GPG(0),
34978 + .ngpio = S3C64XX_GPIO_G_NR,
34979 + .label = "GPG",
34980 + },
34981 + }, {
34982 + .base = S3C64XX_GPM_BASE,
34983 + .config = &gpio_4bit_cfg_eint0011,
34984 + .chip = {
34985 + .base = S3C64XX_GPM(0),
34986 + .ngpio = S3C64XX_GPIO_M_NR,
34987 + .label = "GPM",
34988 + },
34989 + },
34990 +};
34991 +
34992 +static struct s3c_gpio_chip gpio_4bit2[] = {
34993 + {
34994 + .base = S3C64XX_GPH_BASE + 0x4,
34995 + .config = &gpio_4bit_cfg_eint0111,
34996 + .chip = {
34997 + .base = S3C64XX_GPH(0),
34998 + .ngpio = S3C64XX_GPIO_H_NR,
34999 + .label = "GPH",
35000 + },
35001 + }, {
35002 + .base = S3C64XX_GPK_BASE + 0x4,
35003 + .config = &gpio_4bit_cfg_noint,
35004 + .chip = {
35005 + .base = S3C64XX_GPK(0),
35006 + .ngpio = S3C64XX_GPIO_K_NR,
35007 + .label = "GPK",
35008 + },
35009 + }, {
35010 + .base = S3C64XX_GPL_BASE + 0x4,
35011 + .config = &gpio_4bit_cfg_eint0011,
35012 + .chip = {
35013 + .base = S3C64XX_GPL(0),
35014 + .ngpio = S3C64XX_GPIO_L_NR,
35015 + .label = "GPL",
35016 + },
35017 + },
35018 +};
35019 +
35020 +static struct s3c_gpio_cfg gpio_2bit_cfg_noint = {
35021 + .set_config = s3c_gpio_setcfg_s3c24xx,
35022 + .set_pull = s3c_gpio_setpull_updown,
35023 + .get_pull = s3c_gpio_getpull_updown,
35024 +};
35025 +
35026 +static struct s3c_gpio_cfg gpio_2bit_cfg_eint10 = {
35027 + .cfg_eint = 2,
35028 + .set_config = s3c_gpio_setcfg_s3c24xx,
35029 + .set_pull = s3c_gpio_setpull_updown,
35030 + .get_pull = s3c_gpio_getpull_updown,
35031 +};
35032 +
35033 +static struct s3c_gpio_cfg gpio_2bit_cfg_eint11 = {
35034 + .cfg_eint = 3,
35035 + .set_config = s3c_gpio_setcfg_s3c24xx,
35036 + .set_pull = s3c_gpio_setpull_updown,
35037 + .get_pull = s3c_gpio_getpull_updown,
35038 +};
35039 +
35040 +static struct s3c_gpio_chip gpio_2bit[] = {
35041 + {
35042 + .base = S3C64XX_GPF_BASE,
35043 + .config = &gpio_2bit_cfg_eint11,
35044 + .chip = {
35045 + .base = S3C64XX_GPF(0),
35046 + .ngpio = S3C64XX_GPIO_F_NR,
35047 + .label = "GPF",
35048 + },
35049 + }, {
35050 + .base = S3C64XX_GPI_BASE,
35051 + .config = &gpio_2bit_cfg_noint,
35052 + .chip = {
35053 + .base = S3C64XX_GPI(0),
35054 + .ngpio = S3C64XX_GPIO_I_NR,
35055 + .label = "GPI",
35056 + },
35057 + }, {
35058 + .base = S3C64XX_GPJ_BASE,
35059 + .config = &gpio_2bit_cfg_noint,
35060 + .chip = {
35061 + .base = S3C64XX_GPJ(0),
35062 + .ngpio = S3C64XX_GPIO_J_NR,
35063 + .label = "GPJ",
35064 + },
35065 + }, {
35066 + .base = S3C64XX_GPN_BASE,
35067 + .config = &gpio_2bit_cfg_eint10,
35068 + .chip = {
35069 + .base = S3C64XX_GPN(0),
35070 + .ngpio = S3C64XX_GPIO_N_NR,
35071 + .label = "GPN",
35072 + },
35073 + }, {
35074 + .base = S3C64XX_GPO_BASE,
35075 + .config = &gpio_2bit_cfg_eint11,
35076 + .chip = {
35077 + .base = S3C64XX_GPO(0),
35078 + .ngpio = S3C64XX_GPIO_O_NR,
35079 + .label = "GPO",
35080 + },
35081 + }, {
35082 + .base = S3C64XX_GPP_BASE,
35083 + .config = &gpio_2bit_cfg_eint11,
35084 + .chip = {
35085 + .base = S3C64XX_GPP(0),
35086 + .ngpio = S3C64XX_GPIO_P_NR,
35087 + .label = "GPP",
35088 + },
35089 + }, {
35090 + .base = S3C64XX_GPQ_BASE,
35091 + .config = &gpio_2bit_cfg_eint11,
35092 + .chip = {
35093 + .base = S3C64XX_GPQ(0),
35094 + .ngpio = S3C64XX_GPIO_Q_NR,
35095 + .label = "GPQ",
35096 + },
35097 + },
35098 +};
35099 +
35100 +static __init void s3c64xx_gpiolib_add_4bit(struct s3c_gpio_chip *chip)
35101 +{
35102 + chip->chip.direction_input = s3c64xx_gpiolib_4bit_input;
35103 + chip->chip.direction_output = s3c64xx_gpiolib_4bit_output;
35104 + chip->pm = __gpio_pm(&s3c_gpio_pm_4bit);
35105 +}
35106 +
35107 +static __init void s3c64xx_gpiolib_add_4bit2(struct s3c_gpio_chip *chip)
35108 +{
35109 + chip->chip.direction_input = s3c64xx_gpiolib_4bit2_input;
35110 + chip->chip.direction_output = s3c64xx_gpiolib_4bit2_output;
35111 + chip->pm = __gpio_pm(&s3c_gpio_pm_4bit);
35112 +}
35113 +
35114 +static __init void s3c64xx_gpiolib_add_2bit(struct s3c_gpio_chip *chip)
35115 +{
35116 + chip->pm = __gpio_pm(&s3c_gpio_pm_2bit);
35117 +}
35118 +
35119 +static __init void s3c64xx_gpiolib_add(struct s3c_gpio_chip *chips,
35120 + int nr_chips,
35121 + void (*fn)(struct s3c_gpio_chip *))
35122 +{
35123 + for (; nr_chips > 0; nr_chips--, chips++) {
35124 + if (fn)
35125 + (fn)(chips);
35126 + s3c_gpiolib_add(chips);
35127 + }
35128 +}
35129 +
35130 +static __init int s3c64xx_gpiolib_init(void)
35131 +{
35132 + s3c64xx_gpiolib_add(gpio_4bit, ARRAY_SIZE(gpio_4bit),
35133 + s3c64xx_gpiolib_add_4bit);
35134 +
35135 + s3c64xx_gpiolib_add(gpio_4bit2, ARRAY_SIZE(gpio_4bit2),
35136 + s3c64xx_gpiolib_add_4bit2);
35137 +
35138 + s3c64xx_gpiolib_add(gpio_2bit, ARRAY_SIZE(gpio_2bit),
35139 + s3c64xx_gpiolib_add_2bit);
35140 +
35141 + return 0;
35142 +}
35143 +
35144 +arch_initcall(s3c64xx_gpiolib_init);
35145 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-a.h
35146 ===================================================================
35147 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35148 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-a.h 2009-01-02 00:01:56.000000000 +0100
35149 @@ -0,0 +1,48 @@
35150 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-a.h
35151 + *
35152 + * Copyright 2008 Openmoko, Inc.
35153 + * Copyright 2008 Simtec Electronics
35154 + * Ben Dooks <ben@simtec.co.uk>
35155 + * http://armlinux.simtec.co.uk/
35156 + *
35157 + * GPIO Bank A register and configuration definitions
35158 + *
35159 + * This program is free software; you can redistribute it and/or modify
35160 + * it under the terms of the GNU General Public License version 2 as
35161 + * published by the Free Software Foundation.
35162 +*/
35163 +
35164 +#define S3C64XX_GPACON (S3C64XX_GPA_BASE + 0x00)
35165 +#define S3C64XX_GPADAT (S3C64XX_GPA_BASE + 0x04)
35166 +#define S3C64XX_GPAPUD (S3C64XX_GPA_BASE + 0x08)
35167 +#define S3C64XX_GPACONSLP (S3C64XX_GPA_BASE + 0x0c)
35168 +#define S3C64XX_GPAPUDSLP (S3C64XX_GPA_BASE + 0x10)
35169 +
35170 +#define S3C64XX_GPA_CONMASK(__gpio) (0xf << ((__gpio) * 4))
35171 +#define S3C64XX_GPA_INPUT(__gpio) (0x0 << ((__gpio) * 4))
35172 +#define S3C64XX_GPA_OUTPUT(__gpio) (0x1 << ((__gpio) * 4))
35173 +
35174 +#define S3C64XX_GPA0_UART_RXD0 (0x02 << 0)
35175 +#define S3C64XX_GPA0_EINT_G1_0 (0x07 << 0)
35176 +
35177 +#define S3C64XX_GPA1_UART_TXD0 (0x02 << 4)
35178 +#define S3C64XX_GPA1_EINT_G1_1 (0x07 << 4)
35179 +
35180 +#define S3C64XX_GPA2_UART_nCTS0 (0x02 << 8)
35181 +#define S3C64XX_GPA2_EINT_G1_2 (0x07 << 8)
35182 +
35183 +#define S3C64XX_GPA3_UART_nRTS0 (0x02 << 12)
35184 +#define S3C64XX_GPA3_EINT_G1_3 (0x07 << 12)
35185 +
35186 +#define S3C64XX_GPA4_UART_RXD1 (0x02 << 16)
35187 +#define S3C64XX_GPA4_EINT_G1_4 (0x07 << 16)
35188 +
35189 +#define S3C64XX_GPA5_UART_TXD1 (0x02 << 20)
35190 +#define S3C64XX_GPA5_EINT_G1_5 (0x07 << 20)
35191 +
35192 +#define S3C64XX_GPA6_UART_nCTS1 (0x02 << 24)
35193 +#define S3C64XX_GPA6_EINT_G1_6 (0x07 << 24)
35194 +
35195 +#define S3C64XX_GPA7_UART_nRTS1 (0x02 << 28)
35196 +#define S3C64XX_GPA7_EINT_G1_7 (0x07 << 28)
35197 +
35198 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-b.h
35199 ===================================================================
35200 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35201 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-b.h 2009-01-02 00:01:56.000000000 +0100
35202 @@ -0,0 +1,60 @@
35203 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-b.h
35204 + *
35205 + * Copyright 2008 Openmoko, Inc.
35206 + * Copyright 2008 Simtec Electronics
35207 + * Ben Dooks <ben@simtec.co.uk>
35208 + * http://armlinux.simtec.co.uk/
35209 + *
35210 + * GPIO Bank B register and configuration definitions
35211 + *
35212 + * This program is free software; you can redistribute it and/or modify
35213 + * it under the terms of the GNU General Public License version 2 as
35214 + * published by the Free Software Foundation.
35215 +*/
35216 +
35217 +#define S3C64XX_GPBCON (S3C64XX_GPB_BASE + 0x00)
35218 +#define S3C64XX_GPBDAT (S3C64XX_GPB_BASE + 0x04)
35219 +#define S3C64XX_GPBPUD (S3C64XX_GPB_BASE + 0x08)
35220 +#define S3C64XX_GPBCONSLP (S3C64XX_GPB_BASE + 0x0c)
35221 +#define S3C64XX_GPBPUDSLP (S3C64XX_GPB_BASE + 0x10)
35222 +
35223 +#define S3C64XX_GPB_CONMASK(__gpio) (0xf << ((__gpio) * 4))
35224 +#define S3C64XX_GPB_INPUT(__gpio) (0x0 << ((__gpio) * 4))
35225 +#define S3C64XX_GPB_OUTPUT(__gpio) (0x1 << ((__gpio) * 4))
35226 +
35227 +#define S3C64XX_GPB0_UART_RXD2 (0x02 << 0)
35228 +#define S3C64XX_GPB0_EXTDMA_REQ (0x03 << 0)
35229 +#define S3C64XX_GPB0_IrDA_RXD (0x04 << 0)
35230 +#define S3C64XX_GPB0_ADDR_CF0 (0x05 << 0)
35231 +#define S3C64XX_GPB0_EINT_G1_8 (0x07 << 0)
35232 +
35233 +#define S3C64XX_GPB1_UART_TXD2 (0x02 << 4)
35234 +#define S3C64XX_GPB1_EXTDMA_ACK (0x03 << 4)
35235 +#define S3C64XX_GPB1_IrDA_TXD (0x04 << 4)
35236 +#define S3C64XX_GPB1_ADDR_CF1 (0x05 << 4)
35237 +#define S3C64XX_GPB1_EINT_G1_9 (0x07 << 4)
35238 +
35239 +#define S3C64XX_GPB2_UART_RXD3 (0x02 << 8)
35240 +#define S3C64XX_GPB2_IrDA_RXD (0x03 << 8)
35241 +#define S3C64XX_GPB2_EXTDMA_REQ (0x04 << 8)
35242 +#define S3C64XX_GPB2_ADDR_CF2 (0x05 << 8)
35243 +#define S3C64XX_GPB2_I2C_SCL1 (0x06 << 8)
35244 +#define S3C64XX_GPB2_EINT_G1_10 (0x07 << 8)
35245 +
35246 +#define S3C64XX_GPB3_UART_TXD3 (0x02 << 12)
35247 +#define S3C64XX_GPB3_IrDA_TXD (0x03 << 12)
35248 +#define S3C64XX_GPB3_EXTDMA_ACK (0x04 << 12)
35249 +#define S3C64XX_GPB3_I2C_SDA1 (0x06 << 12)
35250 +#define S3C64XX_GPB3_EINT_G1_11 (0x07 << 12)
35251 +
35252 +#define S3C64XX_GPB4_IrDA_SDBW (0x02 << 16)
35253 +#define S3C64XX_GPB4_CAM_FIELD (0x03 << 16)
35254 +#define S3C64XX_GPB4_CF_DATA_DIR (0x04 << 16)
35255 +#define S3C64XX_GPB4_EINT_G1_12 (0x07 << 16)
35256 +
35257 +#define S3C64XX_GPB5_I2C_SCL0 (0x02 << 20)
35258 +#define S3C64XX_GPB5_EINT_G1_13 (0x07 << 20)
35259 +
35260 +#define S3C64XX_GPB6_I2C_SDA0 (0x02 << 24)
35261 +#define S3C64XX_GPB6_EINT_G1_14 (0x07 << 24)
35262 +
35263 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-c.h
35264 ===================================================================
35265 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35266 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-c.h 2009-01-02 00:01:56.000000000 +0100
35267 @@ -0,0 +1,53 @@
35268 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-c.h
35269 + *
35270 + * Copyright 2008 Openmoko, Inc.
35271 + * Copyright 2008 Simtec Electronics
35272 + * Ben Dooks <ben@simtec.co.uk>
35273 + * http://armlinux.simtec.co.uk/
35274 + *
35275 + * GPIO Bank C register and configuration definitions
35276 + *
35277 + * This program is free software; you can redistribute it and/or modify
35278 + * it under the terms of the GNU General Public License version 2 as
35279 + * published by the Free Software Foundation.
35280 +*/
35281 +
35282 +#define S3C64XX_GPCCON (S3C64XX_GPC_BASE + 0x00)
35283 +#define S3C64XX_GPCDAT (S3C64XX_GPC_BASE + 0x04)
35284 +#define S3C64XX_GPCPUD (S3C64XX_GPC_BASE + 0x08)
35285 +#define S3C64XX_GPCCONSLP (S3C64XX_GPC_BASE + 0x0c)
35286 +#define S3C64XX_GPCPUDSLP (S3C64XX_GPC_BASE + 0x10)
35287 +
35288 +#define S3C64XX_GPC_CONMASK(__gpio) (0xf << ((__gpio) * 4))
35289 +#define S3C64XX_GPC_INPUT(__gpio) (0x0 << ((__gpio) * 4))
35290 +#define S3C64XX_GPC_OUTPUT(__gpio) (0x1 << ((__gpio) * 4))
35291 +
35292 +#define S3C64XX_GPC0_SPI_MISO0 (0x02 << 0)
35293 +#define S3C64XX_GPC0_EINT_G2_0 (0x07 << 0)
35294 +
35295 +#define S3C64XX_GPC1_SPI_CLKO (0x02 << 4)
35296 +#define S3C64XX_GPC1_EINT_G2_1 (0x07 << 4)
35297 +
35298 +#define S3C64XX_GPC2_SPI_MOSIO (0x02 << 8)
35299 +#define S3C64XX_GPC2_EINT_G2_2 (0x07 << 8)
35300 +
35301 +#define S3C64XX_GPC3_SPI_nCSO (0x02 << 12)
35302 +#define S3C64XX_GPC3_EINT_G2_3 (0x07 << 12)
35303 +
35304 +#define S3C64XX_GPC4_SPI_MISO1 (0x02 << 16)
35305 +#define S3C64XX_GPC4_MMC2_CMD (0x03 << 16)
35306 +#define S3C64XX_GPC4_I2S0_V40_DO (0x05 << 16)
35307 +#define S3C64XX_GPC4_EINT_G2_4 (0x07 << 16)
35308 +
35309 +#define S3C64XX_GPC5_SPI_CLK1 (0x02 << 20)
35310 +#define S3C64XX_GPC5_MMC2_CLK (0x03 << 20)
35311 +#define S3C64XX_GPC5_I2S1_V40_DO (0x05 << 20)
35312 +#define S3C64XX_GPC5_EINT_G2_5 (0x07 << 20)
35313 +
35314 +#define S3C64XX_GPC6_SPI_MOSI1 (0x02 << 24)
35315 +#define S3C64XX_GPC6_EINT_G2_6 (0x07 << 24)
35316 +
35317 +#define S3C64XX_GPC7_SPI_nCS1 (0x02 << 28)
35318 +#define S3C64XX_GPC7_I2S2_V40_DO (0x05 << 28)
35319 +#define S3C64XX_GPC7_EINT_G2_7 (0x07 << 28)
35320 +
35321 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-d.h
35322 ===================================================================
35323 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35324 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-d.h 2009-01-02 00:01:56.000000000 +0100
35325 @@ -0,0 +1,49 @@
35326 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-d.h
35327 + *
35328 + * Copyright 2008 Openmoko, Inc.
35329 + * Copyright 2008 Simtec Electronics
35330 + * Ben Dooks <ben@simtec.co.uk>
35331 + * http://armlinux.simtec.co.uk/
35332 + *
35333 + * GPIO Bank D register and configuration definitions
35334 + *
35335 + * This program is free software; you can redistribute it and/or modify
35336 + * it under the terms of the GNU General Public License version 2 as
35337 + * published by the Free Software Foundation.
35338 +*/
35339 +
35340 +#define S3C64XX_GPDCON (S3C64XX_GPD_BASE + 0x00)
35341 +#define S3C64XX_GPDDAT (S3C64XX_GPD_BASE + 0x04)
35342 +#define S3C64XX_GPDPUD (S3C64XX_GPD_BASE + 0x08)
35343 +#define S3C64XX_GPDCONSLP (S3C64XX_GPD_BASE + 0x0c)
35344 +#define S3C64XX_GPDPUDSLP (S3C64XX_GPD_BASE + 0x10)
35345 +
35346 +#define S3C64XX_GPD_CONMASK(__gpio) (0xf << ((__gpio) * 4))
35347 +#define S3C64XX_GPD_INPUT(__gpio) (0x0 << ((__gpio) * 4))
35348 +#define S3C64XX_GPD_OUTPUT(__gpio) (0x1 << ((__gpio) * 4))
35349 +
35350 +#define S3C64XX_GPD0_PCM0_SCLK (0x02 << 0)
35351 +#define S3C64XX_GPD0_I2S0_CLK (0x03 << 0)
35352 +#define S3C64XX_GPD0_AC97_BITCLK (0x04 << 0)
35353 +#define S3C64XX_GPD0_EINT_G3_0 (0x07 << 0)
35354 +
35355 +#define S3C64XX_GPD1_PCM0_EXTCLK (0x02 << 4)
35356 +#define S3C64XX_GPD1_I2S0_CDCLK (0x03 << 4)
35357 +#define S3C64XX_GPD1_AC97_nRESET (0x04 << 4)
35358 +#define S3C64XX_GPD1_EINT_G3_1 (0x07 << 4)
35359 +
35360 +#define S3C64XX_GPD2_PCM0_FSYNC (0x02 << 8)
35361 +#define S3C64XX_GPD2_I2S0_LRCLK (0x03 << 8)
35362 +#define S3C64XX_GPD2_AC97_SYNC (0x04 << 8)
35363 +#define S3C64XX_GPD2_EINT_G3_2 (0x07 << 8)
35364 +
35365 +#define S3C64XX_GPD3_PCM0_SIN (0x02 << 12)
35366 +#define S3C64XX_GPD3_I2S0_DI (0x03 << 12)
35367 +#define S3C64XX_GPD3_AC97_SDI (0x04 << 12)
35368 +#define S3C64XX_GPD3_EINT_G3_3 (0x07 << 12)
35369 +
35370 +#define S3C64XX_GPD4_PCM0_SOUT (0x02 << 16)
35371 +#define S3C64XX_GPD4_I2S0_D0 (0x03 << 16)
35372 +#define S3C64XX_GPD4_AC97_SDO (0x04 << 16)
35373 +#define S3C64XX_GPD4_EINT_G3_4 (0x07 << 16)
35374 +
35375 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-e.h
35376 ===================================================================
35377 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35378 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-e.h 2009-01-02 00:01:56.000000000 +0100
35379 @@ -0,0 +1,44 @@
35380 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-e.h
35381 + *
35382 + * Copyright 2008 Openmoko, Inc.
35383 + * Copyright 2008 Simtec Electronics
35384 + * Ben Dooks <ben@simtec.co.uk>
35385 + * http://armlinux.simtec.co.uk/
35386 + *
35387 + * GPIO Bank E register and configuration definitions
35388 + *
35389 + * This program is free software; you can redistribute it and/or modify
35390 + * it under the terms of the GNU General Public License version 2 as
35391 + * published by the Free Software Foundation.
35392 +*/
35393 +
35394 +#define S3C64XX_GPECON (S3C64XX_GPE_BASE + 0x00)
35395 +#define S3C64XX_GPEDAT (S3C64XX_GPE_BASE + 0x04)
35396 +#define S3C64XX_GPEPUD (S3C64XX_GPE_BASE + 0x08)
35397 +#define S3C64XX_GPECONSLP (S3C64XX_GPE_BASE + 0x0c)
35398 +#define S3C64XX_GPEPUDSLP (S3C64XX_GPE_BASE + 0x10)
35399 +
35400 +#define S3C64XX_GPE_CONMASK(__gpio) (0xf << ((__gpio) * 4))
35401 +#define S3C64XX_GPE_INPUT(__gpio) (0x0 << ((__gpio) * 4))
35402 +#define S3C64XX_GPE_OUTPUT(__gpio) (0x1 << ((__gpio) * 4))
35403 +
35404 +#define S3C64XX_GPE0_PCM1_SCLK (0x02 << 0)
35405 +#define S3C64XX_GPE0_I2S1_CLK (0x03 << 0)
35406 +#define S3C64XX_GPE0_AC97_BITCLK (0x04 << 0)
35407 +
35408 +#define S3C64XX_GPE1_PCM1_EXTCLK (0x02 << 4)
35409 +#define S3C64XX_GPE1_I2S1_CDCLK (0x03 << 4)
35410 +#define S3C64XX_GPE1_AC97_nRESET (0x04 << 4)
35411 +
35412 +#define S3C64XX_GPE2_PCM1_FSYNC (0x02 << 8)
35413 +#define S3C64XX_GPE2_I2S1_LRCLK (0x03 << 8)
35414 +#define S3C64XX_GPE2_AC97_SYNC (0x04 << 8)
35415 +
35416 +#define S3C64XX_GPE3_PCM1_SIN (0x02 << 12)
35417 +#define S3C64XX_GPE3_I2S1_DI (0x03 << 12)
35418 +#define S3C64XX_GPE3_AC97_SDI (0x04 << 12)
35419 +
35420 +#define S3C64XX_GPE4_PCM1_SOUT (0x02 << 16)
35421 +#define S3C64XX_GPE4_I2S1_D0 (0x03 << 16)
35422 +#define S3C64XX_GPE4_AC97_SDO (0x04 << 16)
35423 +
35424 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-f.h
35425 ===================================================================
35426 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35427 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-f.h 2009-01-02 00:01:56.000000000 +0100
35428 @@ -0,0 +1,71 @@
35429 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-f.h
35430 + *
35431 + * Copyright 2008 Openmoko, Inc.
35432 + * Copyright 2008 Simtec Electronics
35433 + * Ben Dooks <ben@simtec.co.uk>
35434 + * http://armlinux.simtec.co.uk/
35435 + *
35436 + * GPIO Bank F register and configuration definitions
35437 + *
35438 + * This program is free software; you can redistribute it and/or modify
35439 + * it under the terms of the GNU General Public License version 2 as
35440 + * published by the Free Software Foundation.
35441 +*/
35442 +
35443 +#define S3C64XX_GPFCON (S3C64XX_GPF_BASE + 0x00)
35444 +#define S3C64XX_GPFDAT (S3C64XX_GPF_BASE + 0x04)
35445 +#define S3C64XX_GPFPUD (S3C64XX_GPF_BASE + 0x08)
35446 +#define S3C64XX_GPFCONSLP (S3C64XX_GPF_BASE + 0x0c)
35447 +#define S3C64XX_GPFPUDSLP (S3C64XX_GPF_BASE + 0x10)
35448 +
35449 +#define S3C64XX_GPF_CONMASK(__gpio) (0x3 << ((__gpio) * 2))
35450 +#define S3C64XX_GPF_INPUT(__gpio) (0x0 << ((__gpio) * 2))
35451 +#define S3C64XX_GPF_OUTPUT(__gpio) (0x1 << ((__gpio) * 2))
35452 +
35453 +#define S3C64XX_GPF0_CAMIF_CLK (0x02 << 0)
35454 +#define S3C64XX_GPF0_EINT_G4_0 (0x03 << 0)
35455 +
35456 +#define S3C64XX_GPF1_CAMIF_HREF (0x02 << 2)
35457 +#define S3C64XX_GPF1_EINT_G4_1 (0x03 << 2)
35458 +
35459 +#define S3C64XX_GPF2_CAMIF_PCLK (0x02 << 4)
35460 +#define S3C64XX_GPF2_EINT_G4_2 (0x03 << 4)
35461 +
35462 +#define S3C64XX_GPF3_CAMIF_nRST (0x02 << 6)
35463 +#define S3C64XX_GPF3_EINT_G4_3 (0x03 << 6)
35464 +
35465 +#define S3C64XX_GPF4_CAMIF_VSYNC (0x02 << 8)
35466 +#define S3C64XX_GPF4_EINT_G4_4 (0x03 << 8)
35467 +
35468 +#define S3C64XX_GPF5_CAMIF_YDATA0 (0x02 << 10)
35469 +#define S3C64XX_GPF5_EINT_G4_5 (0x03 << 10)
35470 +
35471 +#define S3C64XX_GPF6_CAMIF_YDATA1 (0x02 << 12)
35472 +#define S3C64XX_GPF6_EINT_G4_6 (0x03 << 12)
35473 +
35474 +#define S3C64XX_GPF7_CAMIF_YDATA2 (0x02 << 14)
35475 +#define S3C64XX_GPF7_EINT_G4_7 (0x03 << 14)
35476 +
35477 +#define S3C64XX_GPF8_CAMIF_YDATA3 (0x02 << 16)
35478 +#define S3C64XX_GPF8_EINT_G4_8 (0x03 << 16)
35479 +
35480 +#define S3C64XX_GPF9_CAMIF_YDATA4 (0x02 << 18)
35481 +#define S3C64XX_GPF9_EINT_G4_9 (0x03 << 18)
35482 +
35483 +#define S3C64XX_GPF10_CAMIF_YDATA5 (0x02 << 20)
35484 +#define S3C64XX_GPF10_EINT_G4_10 (0x03 << 20)
35485 +
35486 +#define S3C64XX_GPF11_CAMIF_YDATA6 (0x02 << 22)
35487 +#define S3C64XX_GPF11_EINT_G4_11 (0x03 << 22)
35488 +
35489 +#define S3C64XX_GPF12_CAMIF_YDATA7 (0x02 << 24)
35490 +#define S3C64XX_GPF12_EINT_G4_12 (0x03 << 24)
35491 +
35492 +#define S3C64XX_GPF13_PWM_ECLK (0x02 << 26)
35493 +#define S3C64XX_GPF13_EINT_G4_13 (0x03 << 26)
35494 +
35495 +#define S3C64XX_GPF14_PWM_TOUT0 (0x02 << 28)
35496 +#define S3C64XX_GPF14_CLKOUT0 (0x03 << 28)
35497 +
35498 +#define S3C64XX_GPF15_PWM_TOUT1 (0x02 << 30)
35499 +
35500 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-g.h
35501 ===================================================================
35502 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35503 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-g.h 2009-01-02 00:01:56.000000000 +0100
35504 @@ -0,0 +1,42 @@
35505 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-g.h
35506 + *
35507 + * Copyright 2008 Openmoko, Inc.
35508 + * Copyright 2008 Simtec Electronics
35509 + * Ben Dooks <ben@simtec.co.uk>
35510 + * http://armlinux.simtec.co.uk/
35511 + *
35512 + * GPIO Bank G register and configuration definitions
35513 + *
35514 + * This program is free software; you can redistribute it and/or modify
35515 + * it under the terms of the GNU General Public License version 2 as
35516 + * published by the Free Software Foundation.
35517 +*/
35518 +
35519 +#define S3C64XX_GPGCON (S3C64XX_GPG_BASE + 0x00)
35520 +#define S3C64XX_GPGDAT (S3C64XX_GPG_BASE + 0x04)
35521 +#define S3C64XX_GPGPUD (S3C64XX_GPG_BASE + 0x08)
35522 +#define S3C64XX_GPGCONSLP (S3C64XX_GPG_BASE + 0x0c)
35523 +#define S3C64XX_GPGPUDSLP (S3C64XX_GPG_BASE + 0x10)
35524 +
35525 +#define S3C64XX_GPG_CONMASK(__gpio) (0xf << ((__gpio) * 4))
35526 +#define S3C64XX_GPG_INPUT(__gpio) (0x0 << ((__gpio) * 4))
35527 +#define S3C64XX_GPG_OUTPUT(__gpio) (0x1 << ((__gpio) * 4))
35528 +
35529 +#define S3C64XX_GPG0_MMC0_CLK (0x02 << 0)
35530 +#define S3C64XX_GPG0_EINT_G5_0 (0x07 << 0)
35531 +
35532 +#define S3C64XX_GPG1_MMC0_CMD (0x02 << 4)
35533 +#define S3C64XX_GPG1_EINT_G5_1 (0x07 << 4)
35534 +
35535 +#define S3C64XX_GPG2_MMC0_DATA0 (0x02 << 8)
35536 +#define S3C64XX_GPG2_EINT_G5_2 (0x07 << 8)
35537 +
35538 +#define S3C64XX_GPG3_MMC0_DATA1 (0x02 << 12)
35539 +#define S3C64XX_GPG3_EINT_G5_3 (0x07 << 12)
35540 +
35541 +#define S3C64XX_GPG4_MMC0_DATA2 (0x02 << 16)
35542 +#define S3C64XX_GPG4_EINT_G5_4 (0x07 << 16)
35543 +
35544 +#define S3C64XX_GPG5_MMC0_DATA3 (0x02 << 20)
35545 +#define S3C64XX_GPG5_EINT_G5_5 (0x07 << 20)
35546 +
35547 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-h.h
35548 ===================================================================
35549 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35550 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-h.h 2009-01-02 00:01:56.000000000 +0100
35551 @@ -0,0 +1,74 @@
35552 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-h.h
35553 + *
35554 + * Copyright 2008 Openmoko, Inc.
35555 + * Copyright 2008 Simtec Electronics
35556 + * Ben Dooks <ben@simtec.co.uk>
35557 + * http://armlinux.simtec.co.uk/
35558 + *
35559 + * GPIO Bank H register and configuration definitions
35560 + *
35561 + * This program is free software; you can redistribute it and/or modify
35562 + * it under the terms of the GNU General Public License version 2 as
35563 + * published by the Free Software Foundation.
35564 +*/
35565 +
35566 +#define S3C64XX_GPHCON0 (S3C64XX_GPH_BASE + 0x00)
35567 +#define S3C64XX_GPHCON1 (S3C64XX_GPH_BASE + 0x04)
35568 +#define S3C64XX_GPHDAT (S3C64XX_GPH_BASE + 0x08)
35569 +#define S3C64XX_GPHPUD (S3C64XX_GPH_BASE + 0x0c)
35570 +#define S3C64XX_GPHCONSLP (S3C64XX_GPH_BASE + 0x10)
35571 +#define S3C64XX_GPHPUDSLP (S3C64XX_GPH_BASE + 0x14)
35572 +
35573 +#define S3C64XX_GPH_CONMASK(__gpio) (0xf << ((__gpio) * 4))
35574 +#define S3C64XX_GPH_INPUT(__gpio) (0x0 << ((__gpio) * 4))
35575 +#define S3C64XX_GPH_OUTPUT(__gpio) (0x1 << ((__gpio) * 4))
35576 +
35577 +#define S3C64XX_GPH0_MMC1_CLK (0x02 << 0)
35578 +#define S3C64XX_GPH0_KP_COL0 (0x04 << 0)
35579 +#define S3C64XX_GPH0_EINT_G6_0 (0x07 << 0)
35580 +
35581 +#define S3C64XX_GPH1_MMC1_CMD (0x02 << 4)
35582 +#define S3C64XX_GPH1_KP_COL1 (0x04 << 4)
35583 +#define S3C64XX_GPH1_EINT_G6_1 (0x07 << 4)
35584 +
35585 +#define S3C64XX_GPH2_MMC1_DATA0 (0x02 << 8)
35586 +#define S3C64XX_GPH2_KP_COL2 (0x04 << 8)
35587 +#define S3C64XX_GPH2_EINT_G6_2 (0x07 << 8)
35588 +
35589 +#define S3C64XX_GPH3_MMC1_DATA1 (0x02 << 12)
35590 +#define S3C64XX_GPH3_KP_COL3 (0x04 << 12)
35591 +#define S3C64XX_GPH3_EINT_G6_3 (0x07 << 12)
35592 +
35593 +#define S3C64XX_GPH4_MMC1_DATA2 (0x02 << 16)
35594 +#define S3C64XX_GPH4_KP_COL4 (0x04 << 16)
35595 +#define S3C64XX_GPH4_EINT_G6_4 (0x07 << 16)
35596 +
35597 +#define S3C64XX_GPH5_MMC1_DATA3 (0x02 << 20)
35598 +#define S3C64XX_GPH5_KP_COL5 (0x04 << 20)
35599 +#define S3C64XX_GPH5_EINT_G6_5 (0x07 << 20)
35600 +
35601 +#define S3C64XX_GPH6_MMC1_DATA4 (0x02 << 24)
35602 +#define S3C64XX_GPH6_MMC2_DATA0 (0x03 << 24)
35603 +#define S3C64XX_GPH6_KP_COL6 (0x04 << 24)
35604 +#define S3C64XX_GPH6_I2S_V40_BCLK (0x05 << 24)
35605 +#define S3C64XX_GPH6_ADDR_CF0 (0x06 << 24)
35606 +#define S3C64XX_GPH6_EINT_G6_6 (0x07 << 24)
35607 +
35608 +#define S3C64XX_GPH7_MMC1_DATA5 (0x02 << 28)
35609 +#define S3C64XX_GPH7_MMC2_DATA1 (0x03 << 28)
35610 +#define S3C64XX_GPH7_KP_COL7 (0x04 << 28)
35611 +#define S3C64XX_GPH7_I2S_V40_CDCLK (0x05 << 28)
35612 +#define S3C64XX_GPH7_ADDR_CF1 (0x06 << 28)
35613 +#define S3C64XX_GPH7_EINT_G6_7 (0x07 << 28)
35614 +
35615 +#define S3C64XX_GPH8_MMC1_DATA6 (0x02 << 32)
35616 +#define S3C64XX_GPH8_MMC2_DATA2 (0x03 << 32)
35617 +#define S3C64XX_GPH8_I2S_V40_LRCLK (0x05 << 32)
35618 +#define S3C64XX_GPH8_ADDR_CF2 (0x06 << 32)
35619 +#define S3C64XX_GPH8_EINT_G6_8 (0x07 << 32)
35620 +
35621 +#define S3C64XX_GPH9_MMC1_DATA7 (0x02 << 36)
35622 +#define S3C64XX_GPH9_MMC2_DATA3 (0x03 << 36)
35623 +#define S3C64XX_GPH9_I2S_V40_DI (0x05 << 36)
35624 +#define S3C64XX_GPH9_EINT_G6_9 (0x07 << 36)
35625 +
35626 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-i.h
35627 ===================================================================
35628 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35629 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-i.h 2009-01-02 00:01:56.000000000 +0100
35630 @@ -0,0 +1,40 @@
35631 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-i.h
35632 + *
35633 + * Copyright 2008 Openmoko, Inc.
35634 + * Copyright 2008 Simtec Electronics
35635 + * Ben Dooks <ben@simtec.co.uk>
35636 + * http://armlinux.simtec.co.uk/
35637 + *
35638 + * GPIO Bank I register and configuration definitions
35639 + *
35640 + * This program is free software; you can redistribute it and/or modify
35641 + * it under the terms of the GNU General Public License version 2 as
35642 + * published by the Free Software Foundation.
35643 +*/
35644 +
35645 +#define S3C64XX_GPICON (S3C64XX_GPI_BASE + 0x00)
35646 +#define S3C64XX_GPIDAT (S3C64XX_GPI_BASE + 0x04)
35647 +#define S3C64XX_GPIPUD (S3C64XX_GPI_BASE + 0x08)
35648 +#define S3C64XX_GPICONSLP (S3C64XX_GPI_BASE + 0x0c)
35649 +#define S3C64XX_GPIPUDSLP (S3C64XX_GPI_BASE + 0x10)
35650 +
35651 +#define S3C64XX_GPI_CONMASK(__gpio) (0x3 << ((__gpio) * 2))
35652 +#define S3C64XX_GPI_INPUT(__gpio) (0x0 << ((__gpio) * 2))
35653 +#define S3C64XX_GPI_OUTPUT(__gpio) (0x1 << ((__gpio) * 2))
35654 +
35655 +#define S3C64XX_GPI0_VD0 (0x02 << 0)
35656 +#define S3C64XX_GPI1_VD1 (0x02 << 2)
35657 +#define S3C64XX_GPI2_VD2 (0x02 << 4)
35658 +#define S3C64XX_GPI3_VD3 (0x02 << 6)
35659 +#define S3C64XX_GPI4_VD4 (0x02 << 8)
35660 +#define S3C64XX_GPI5_VD5 (0x02 << 10)
35661 +#define S3C64XX_GPI6_VD6 (0x02 << 12)
35662 +#define S3C64XX_GPI7_VD7 (0x02 << 14)
35663 +#define S3C64XX_GPI8_VD8 (0x02 << 16)
35664 +#define S3C64XX_GPI9_VD9 (0x02 << 18)
35665 +#define S3C64XX_GPI10_VD10 (0x02 << 20)
35666 +#define S3C64XX_GPI11_VD11 (0x02 << 22)
35667 +#define S3C64XX_GPI12_VD12 (0x02 << 24)
35668 +#define S3C64XX_GPI13_VD13 (0x02 << 26)
35669 +#define S3C64XX_GPI14_VD14 (0x02 << 28)
35670 +#define S3C64XX_GPI15_VD15 (0x02 << 30)
35671 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-j.h
35672 ===================================================================
35673 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35674 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-j.h 2009-01-02 00:01:56.000000000 +0100
35675 @@ -0,0 +1,36 @@
35676 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-j.h
35677 + *
35678 + * Copyright 2008 Openmoko, Inc.
35679 + * Copyright 2008 Simtec Electronics
35680 + * Ben Dooks <ben@simtec.co.uk>
35681 + * http://armlinux.simtec.co.uk/
35682 + *
35683 + * GPIO Bank J register and configuration definitions
35684 + *
35685 + * This program is free software; you can redistribute it and/or modify
35686 + * it under the terms of the GNU General Public License version 2 as
35687 + * published by the Free Software Foundation.
35688 +*/
35689 +
35690 +#define S3C64XX_GPJCON (S3C64XX_GPJ_BASE + 0x00)
35691 +#define S3C64XX_GPJDAT (S3C64XX_GPJ_BASE + 0x04)
35692 +#define S3C64XX_GPJPUD (S3C64XX_GPJ_BASE + 0x08)
35693 +#define S3C64XX_GPJCONSLP (S3C64XX_GPJ_BASE + 0x0c)
35694 +#define S3C64XX_GPJPUDSLP (S3C64XX_GPJ_BASE + 0x10)
35695 +
35696 +#define S3C64XX_GPJ_CONMASK(__gpio) (0x3 << ((__gpio) * 2))
35697 +#define S3C64XX_GPJ_INPUT(__gpio) (0x0 << ((__gpio) * 2))
35698 +#define S3C64XX_GPJ_OUTPUT(__gpio) (0x1 << ((__gpio) * 2))
35699 +
35700 +#define S3C64XX_GPJ0_VD16 (0x02 << 0)
35701 +#define S3C64XX_GPJ1_VD17 (0x02 << 2)
35702 +#define S3C64XX_GPJ2_VD18 (0x02 << 4)
35703 +#define S3C64XX_GPJ3_VD19 (0x02 << 6)
35704 +#define S3C64XX_GPJ4_VD20 (0x02 << 8)
35705 +#define S3C64XX_GPJ5_VD21 (0x02 << 10)
35706 +#define S3C64XX_GPJ6_VD22 (0x02 << 12)
35707 +#define S3C64XX_GPJ7_VD23 (0x02 << 14)
35708 +#define S3C64XX_GPJ8_LCD_HSYNC (0x02 << 16)
35709 +#define S3C64XX_GPJ9_LCD_VSYNC (0x02 << 18)
35710 +#define S3C64XX_GPJ10_LCD_VDEN (0x02 << 20)
35711 +#define S3C64XX_GPJ11_LCD_VCLK (0x02 << 22)
35712 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-n.h
35713 ===================================================================
35714 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35715 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-n.h 2009-01-02 00:01:56.000000000 +0100
35716 @@ -0,0 +1,54 @@
35717 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-n.h
35718 + *
35719 + * Copyright 2008 Openmoko, Inc.
35720 + * Copyright 2008 Simtec Electronics
35721 + * Ben Dooks <ben@simtec.co.uk>
35722 + * http://armlinux.simtec.co.uk/
35723 + *
35724 + * GPIO Bank N register and configuration definitions
35725 + *
35726 + * This program is free software; you can redistribute it and/or modify
35727 + * it under the terms of the GNU General Public License version 2 as
35728 + * published by the Free Software Foundation.
35729 +*/
35730 +
35731 +#define S3C64XX_GPNCON (S3C64XX_GPN_BASE + 0x00)
35732 +#define S3C64XX_GPNDAT (S3C64XX_GPN_BASE + 0x04)
35733 +#define S3C64XX_GPNPUD (S3C64XX_GPN_BASE + 0x08)
35734 +
35735 +#define S3C64XX_GPN_CONMASK(__gpio) (0x3 << ((__gpio) * 2))
35736 +#define S3C64XX_GPN_INPUT(__gpio) (0x0 << ((__gpio) * 2))
35737 +#define S3C64XX_GPN_OUTPUT(__gpio) (0x1 << ((__gpio) * 2))
35738 +
35739 +#define S3C64XX_GPN0_EINT0 (0x02 << 0)
35740 +#define S3C64XX_GPN0_KP_ROW0 (0x03 << 0)
35741 +
35742 +#define S3C64XX_GPN1_EINT1 (0x02 << 2)
35743 +#define S3C64XX_GPN1_KP_ROW1 (0x03 << 2)
35744 +
35745 +#define S3C64XX_GPN2_EINT2 (0x02 << 4)
35746 +#define S3C64XX_GPN2_KP_ROW2 (0x03 << 4)
35747 +
35748 +#define S3C64XX_GPN3_EINT3 (0x02 << 6)
35749 +#define S3C64XX_GPN3_KP_ROW3 (0x03 << 6)
35750 +
35751 +#define S3C64XX_GPN4_EINT4 (0x02 << 8)
35752 +#define S3C64XX_GPN4_KP_ROW4 (0x03 << 8)
35753 +
35754 +#define S3C64XX_GPN5_EINT5 (0x02 << 10)
35755 +#define S3C64XX_GPN5_KP_ROW5 (0x03 << 10)
35756 +
35757 +#define S3C64XX_GPN6_EINT6 (0x02 << 12)
35758 +#define S3C64XX_GPN6_KP_ROW6 (0x03 << 12)
35759 +
35760 +#define S3C64XX_GPN7_EINT7 (0x02 << 14)
35761 +#define S3C64XX_GPN7_KP_ROW7 (0x03 << 14)
35762 +
35763 +#define S3C64XX_GPN8_EINT8 (0x02 << 16)
35764 +#define S3C64XX_GPN9_EINT9 (0x02 << 18)
35765 +#define S3C64XX_GPN10_EINT10 (0x02 << 20)
35766 +#define S3C64XX_GPN11_EINT11 (0x02 << 22)
35767 +#define S3C64XX_GPN12_EINT12 (0x02 << 24)
35768 +#define S3C64XX_GPN13_EINT13 (0x02 << 26)
35769 +#define S3C64XX_GPN14_EINT14 (0x02 << 28)
35770 +#define S3C64XX_GPN15_EINT15 (0x02 << 30)
35771 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-o.h
35772 ===================================================================
35773 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35774 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-o.h 2009-01-02 00:01:56.000000000 +0100
35775 @@ -0,0 +1,70 @@
35776 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-o.h
35777 + *
35778 + * Copyright 2008 Openmoko, Inc.
35779 + * Copyright 2008 Simtec Electronics
35780 + * Ben Dooks <ben@simtec.co.uk>
35781 + * http://armlinux.simtec.co.uk/
35782 + *
35783 + * GPIO Bank O register and configuration definitions
35784 + *
35785 + * This program is free software; you can redistribute it and/or modify
35786 + * it under the terms of the GNU General Public License version 2 as
35787 + * published by the Free Software Foundation.
35788 +*/
35789 +
35790 +#define S3C64XX_GPOCON (S3C64XX_GPO_BASE + 0x00)
35791 +#define S3C64XX_GPODAT (S3C64XX_GPO_BASE + 0x04)
35792 +#define S3C64XX_GPOPUD (S3C64XX_GPO_BASE + 0x08)
35793 +#define S3C64XX_GPOCONSLP (S3C64XX_GPO_BASE + 0x0c)
35794 +#define S3C64XX_GPOPUDSLP (S3C64XX_GPO_BASE + 0x10)
35795 +
35796 +#define S3C64XX_GPO_CONMASK(__gpio) (0x3 << ((__gpio) * 2))
35797 +#define S3C64XX_GPO_INPUT(__gpio) (0x0 << ((__gpio) * 2))
35798 +#define S3C64XX_GPO_OUTPUT(__gpio) (0x1 << ((__gpio) * 2))
35799 +
35800 +#define S3C64XX_GPO0_MEM0_nCS2 (0x02 << 0)
35801 +#define S3C64XX_GPO0_EINT_G7_0 (0x03 << 0)
35802 +
35803 +#define S3C64XX_GPO1_MEM0_nCS3 (0x02 << 2)
35804 +#define S3C64XX_GPO1_EINT_G7_1 (0x03 << 2)
35805 +
35806 +#define S3C64XX_GPO2_MEM0_nCS4 (0x02 << 4)
35807 +#define S3C64XX_GPO2_EINT_G7_2 (0x03 << 4)
35808 +
35809 +#define S3C64XX_GPO3_MEM0_nCS5 (0x02 << 6)
35810 +#define S3C64XX_GPO3_EINT_G7_3 (0x03 << 6)
35811 +
35812 +#define S3C64XX_GPO4_EINT_G7_4 (0x03 << 8)
35813 +
35814 +#define S3C64XX_GPO5_EINT_G7_5 (0x03 << 10)
35815 +
35816 +#define S3C64XX_GPO6_MEM0_ADDR6 (0x02 << 12)
35817 +#define S3C64XX_GPO6_EINT_G7_6 (0x03 << 12)
35818 +
35819 +#define S3C64XX_GPO7_MEM0_ADDR7 (0x02 << 14)
35820 +#define S3C64XX_GPO7_EINT_G7_7 (0x03 << 14)
35821 +
35822 +#define S3C64XX_GPO8_MEM0_ADDR8 (0x02 << 16)
35823 +#define S3C64XX_GPO8_EINT_G7_8 (0x03 << 16)
35824 +
35825 +#define S3C64XX_GPO9_MEM0_ADDR9 (0x02 << 18)
35826 +#define S3C64XX_GPO9_EINT_G7_9 (0x03 << 18)
35827 +
35828 +#define S3C64XX_GPO10_MEM0_ADDR10 (0x02 << 20)
35829 +#define S3C64XX_GPO10_EINT_G7_10 (0x03 << 20)
35830 +
35831 +#define S3C64XX_GPO11_MEM0_ADDR11 (0x02 << 22)
35832 +#define S3C64XX_GPO11_EINT_G7_11 (0x03 << 22)
35833 +
35834 +#define S3C64XX_GPO12_MEM0_ADDR12 (0x02 << 24)
35835 +#define S3C64XX_GPO12_EINT_G7_12 (0x03 << 24)
35836 +
35837 +#define S3C64XX_GPO13_MEM0_ADDR13 (0x02 << 26)
35838 +#define S3C64XX_GPO13_EINT_G7_13 (0x03 << 26)
35839 +
35840 +#define S3C64XX_GPO14_MEM0_ADDR14 (0x02 << 28)
35841 +#define S3C64XX_GPO14_EINT_G7_14 (0x03 << 28)
35842 +
35843 +#define S3C64XX_GPO15_MEM0_ADDR15 (0x02 << 30)
35844 +#define S3C64XX_GPO15_EINT_G7_15 (0x03 << 30)
35845 +
35846 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-p.h
35847 ===================================================================
35848 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35849 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-p.h 2009-01-02 00:01:56.000000000 +0100
35850 @@ -0,0 +1,69 @@
35851 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-p.h
35852 + *
35853 + * Copyright 2008 Openmoko, Inc.
35854 + * Copyright 2008 Simtec Electronics
35855 + * Ben Dooks <ben@simtec.co.uk>
35856 + * http://armlinux.simtec.co.uk/
35857 + *
35858 + * GPIO Bank P register and configuration definitions
35859 + *
35860 + * This program is free software; you can redistribute it and/or modify
35861 + * it under the terms of the GNU General Public License version 2 as
35862 + * published by the Free Software Foundation.
35863 +*/
35864 +
35865 +#define S3C64XX_GPPCON (S3C64XX_GPP_BASE + 0x00)
35866 +#define S3C64XX_GPPDAT (S3C64XX_GPP_BASE + 0x04)
35867 +#define S3C64XX_GPPPUD (S3C64XX_GPP_BASE + 0x08)
35868 +#define S3C64XX_GPPCONSLP (S3C64XX_GPP_BASE + 0x0c)
35869 +#define S3C64XX_GPPPUDSLP (S3C64XX_GPP_BASE + 0x10)
35870 +
35871 +#define S3C64XX_GPP_CONMASK(__gpio) (0x3 << ((__gpio) * 2))
35872 +#define S3C64XX_GPP_INPUT(__gpio) (0x0 << ((__gpio) * 2))
35873 +#define S3C64XX_GPP_OUTPUT(__gpio) (0x1 << ((__gpio) * 2))
35874 +
35875 +#define S3C64XX_GPP0_MEM0_ADDRV (0x02 << 0)
35876 +#define S3C64XX_GPP0_EINT_G8_0 (0x03 << 0)
35877 +
35878 +#define S3C64XX_GPP1_MEM0_SMCLK (0x02 << 2)
35879 +#define S3C64XX_GPP1_EINT_G8_1 (0x03 << 2)
35880 +
35881 +#define S3C64XX_GPP2_MEM0_nWAIT (0x02 << 4)
35882 +#define S3C64XX_GPP2_EINT_G8_2 (0x03 << 4)
35883 +
35884 +#define S3C64XX_GPP3_MEM0_RDY0_ALE (0x02 << 6)
35885 +#define S3C64XX_GPP3_EINT_G8_3 (0x03 << 6)
35886 +
35887 +#define S3C64XX_GPP4_MEM0_RDY1_CLE (0x02 << 8)
35888 +#define S3C64XX_GPP4_EINT_G8_4 (0x03 << 8)
35889 +
35890 +#define S3C64XX_GPP5_MEM0_INTsm0_FWE (0x02 << 10)
35891 +#define S3C64XX_GPP5_EINT_G8_5 (0x03 << 10)
35892 +
35893 +#define S3C64XX_GPP6_MEM0_(null) (0x02 << 12)
35894 +#define S3C64XX_GPP6_EINT_G8_6 (0x03 << 12)
35895 +
35896 +#define S3C64XX_GPP7_MEM0_INTsm1_FRE (0x02 << 14)
35897 +#define S3C64XX_GPP7_EINT_G8_7 (0x03 << 14)
35898 +
35899 +#define S3C64XX_GPP8_MEM0_RPn_RnB (0x02 << 16)
35900 +#define S3C64XX_GPP8_EINT_G8_8 (0x03 << 16)
35901 +
35902 +#define S3C64XX_GPP9_MEM0_ATA_RESET (0x02 << 18)
35903 +#define S3C64XX_GPP9_EINT_G8_9 (0x03 << 18)
35904 +
35905 +#define S3C64XX_GPP10_MEM0_ATA_INPACK (0x02 << 20)
35906 +#define S3C64XX_GPP10_EINT_G8_10 (0x03 << 20)
35907 +
35908 +#define S3C64XX_GPP11_MEM0_ATA_REG (0x02 << 22)
35909 +#define S3C64XX_GPP11_EINT_G8_11 (0x03 << 22)
35910 +
35911 +#define S3C64XX_GPP12_MEM0_ATA_WE (0x02 << 24)
35912 +#define S3C64XX_GPP12_EINT_G8_12 (0x03 << 24)
35913 +
35914 +#define S3C64XX_GPP13_MEM0_ATA_OE (0x02 << 26)
35915 +#define S3C64XX_GPP13_EINT_G8_13 (0x03 << 26)
35916 +
35917 +#define S3C64XX_GPP14_MEM0_ATA_CD (0x02 << 28)
35918 +#define S3C64XX_GPP14_EINT_G8_14 (0x03 << 28)
35919 +
35920 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-q.h
35921 ===================================================================
35922 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35923 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/gpio-bank-q.h 2009-01-02 00:01:56.000000000 +0100
35924 @@ -0,0 +1,46 @@
35925 +/* linux/arch/arm/plat-s3c64xx/include/plat/gpio-bank-q.h
35926 + *
35927 + * Copyright 2008 Openmoko, Inc.
35928 + * Copyright 2008 Simtec Electronics
35929 + * Ben Dooks <ben@simtec.co.uk>
35930 + * http://armlinux.simtec.co.uk/
35931 + *
35932 + * GPIO Bank Q register and configuration definitions
35933 + *
35934 + * This program is free software; you can redistribute it and/or modify
35935 + * it under the terms of the GNU General Public License version 2 as
35936 + * published by the Free Software Foundation.
35937 +*/
35938 +
35939 +#define S3C64XX_GPQCON (S3C64XX_GPQ_BASE + 0x00)
35940 +#define S3C64XX_GPQDAT (S3C64XX_GPQ_BASE + 0x04)
35941 +#define S3C64XX_GPQPUD (S3C64XX_GPQ_BASE + 0x08)
35942 +#define S3C64XX_GPQCONSLP (S3C64XX_GPQ_BASE + 0x0c)
35943 +#define S3C64XX_GPQPUDSLP (S3C64XX_GPQ_BASE + 0x10)
35944 +
35945 +#define S3C64XX_GPQ_CONMASK(__gpio) (0x3 << ((__gpio) * 2))
35946 +#define S3C64XX_GPQ_INPUT(__gpio) (0x0 << ((__gpio) * 2))
35947 +#define S3C64XX_GPQ_OUTPUT(__gpio) (0x1 << ((__gpio) * 2))
35948 +
35949 +#define S3C64XX_GPQ0_MEM0_ADDR18_RAS (0x02 << 0)
35950 +#define S3C64XX_GPQ0_EINT_G9_0 (0x03 << 0)
35951 +
35952 +#define S3C64XX_GPQ1_MEM0_ADDR19_CAS (0x02 << 2)
35953 +#define S3C64XX_GPQ1_EINT_G9_1 (0x03 << 2)
35954 +
35955 +#define S3C64XX_GPQ2_EINT_G9_2 (0x03 << 4)
35956 +
35957 +#define S3C64XX_GPQ3_EINT_G9_3 (0x03 << 6)
35958 +
35959 +#define S3C64XX_GPQ4_EINT_G9_4 (0x03 << 8)
35960 +
35961 +#define S3C64XX_GPQ5_EINT_G9_5 (0x03 << 10)
35962 +
35963 +#define S3C64XX_GPQ6_EINT_G9_6 (0x03 << 12)
35964 +
35965 +#define S3C64XX_GPQ7_MEM0_ADDR17_WENDMC (0x02 << 14)
35966 +#define S3C64XX_GPQ7_EINT_G9_7 (0x03 << 14)
35967 +
35968 +#define S3C64XX_GPQ8_MEM0_ADDR16_APDMC (0x02 << 16)
35969 +#define S3C64XX_GPQ8_EINT_G9_8 (0x03 << 16)
35970 +
35971 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/irqs.h
35972 ===================================================================
35973 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
35974 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/irqs.h 2009-01-02 00:01:56.000000000 +0100
35975 @@ -0,0 +1,202 @@
35976 +/* linux/arch/arm/plat-s3c64xx/include/mach/irqs.h
35977 + *
35978 + * Copyright 2008 Openmoko, Inc.
35979 + * Copyright 2008 Simtec Electronics
35980 + * Ben Dooks <ben@simtec.co.uk>
35981 + * http://armlinux.simtec.co.uk/
35982 + *
35983 + * S3C64XX - Common IRQ support
35984 + */
35985 +
35986 +#ifndef __ASM_PLAT_S3C64XX_IRQS_H
35987 +#define __ASM_PLAT_S3C64XX_IRQS_H __FILE__
35988 +
35989 +/* we keep the first set of CPU IRQs out of the range of
35990 + * the ISA space, so that the PC104 has them to itself
35991 + * and we don't end up having to do horrible things to the
35992 + * standard ISA drivers....
35993 + *
35994 + * note, since we're using the VICs, our start must be a
35995 + * mulitple of 32 to allow the common code to work
35996 + */
35997 +
35998 +#define S3C_IRQ_OFFSET (32)
35999 +
36000 +#define S3C_IRQ(x) ((x) + S3C_IRQ_OFFSET)
36001 +
36002 +#define S3C_VIC0_BASE S3C_IRQ(0)
36003 +#define S3C_VIC1_BASE S3C_IRQ(32)
36004 +
36005 +/* UART interrupts, each UART has 4 intterupts per channel so
36006 + * use the space between the ISA and S3C main interrupts. Note, these
36007 + * are not in the same order as the S3C24XX series! */
36008 +
36009 +#define IRQ_S3CUART_BASE0 (16)
36010 +#define IRQ_S3CUART_BASE1 (20)
36011 +#define IRQ_S3CUART_BASE2 (24)
36012 +#define IRQ_S3CUART_BASE3 (28)
36013 +
36014 +#define UART_IRQ_RXD (0)
36015 +#define UART_IRQ_ERR (1)
36016 +#define UART_IRQ_TXD (2)
36017 +#define UART_IRQ_MODEM (3)
36018 +
36019 +#define IRQ_S3CUART_RX0 (IRQ_S3CUART_BASE0 + UART_IRQ_RXD)
36020 +#define IRQ_S3CUART_TX0 (IRQ_S3CUART_BASE0 + UART_IRQ_TXD)
36021 +#define IRQ_S3CUART_ERR0 (IRQ_S3CUART_BASE0 + UART_IRQ_ERR)
36022 +
36023 +#define IRQ_S3CUART_RX1 (IRQ_S3CUART_BASE1 + UART_IRQ_RXD)
36024 +#define IRQ_S3CUART_TX1 (IRQ_S3CUART_BASE1 + UART_IRQ_TXD)
36025 +#define IRQ_S3CUART_ERR1 (IRQ_S3CUART_BASE1 + UART_IRQ_ERR)
36026 +
36027 +#define IRQ_S3CUART_RX2 (IRQ_S3CUART_BASE2 + UART_IRQ_RXD)
36028 +#define IRQ_S3CUART_TX2 (IRQ_S3CUART_BASE2 + UART_IRQ_TXD)
36029 +#define IRQ_S3CUART_ERR2 (IRQ_S3CUART_BASE2 + UART_IRQ_ERR)
36030 +
36031 +#define IRQ_S3CUART_RX3 (IRQ_S3CUART_BASE3 + UART_IRQ_RXD)
36032 +#define IRQ_S3CUART_TX3 (IRQ_S3CUART_BASE3 + UART_IRQ_TXD)
36033 +#define IRQ_S3CUART_ERR3 (IRQ_S3CUART_BASE3 + UART_IRQ_ERR)
36034 +
36035 +/* VIC based IRQs */
36036 +
36037 +#define S3C64XX_IRQ_VIC0(x) (S3C_VIC0_BASE + (x))
36038 +#define S3C64XX_IRQ_VIC1(x) (S3C_VIC1_BASE + (x))
36039 +
36040 +/* VIC0 */
36041 +
36042 +#define IRQ_EINT0_3 S3C64XX_IRQ_VIC0(0)
36043 +#define IRQ_EINT4_11 S3C64XX_IRQ_VIC0(1)
36044 +#define IRQ_RTC_TIC S3C64XX_IRQ_VIC0(2)
36045 +#define IRQ_CAMIF_C S3C64XX_IRQ_VIC0(3)
36046 +#define IRQ_CAMIF_P S3C64XX_IRQ_VIC0(4)
36047 +#define IRQ_CAMIF_MC S3C64XX_IRQ_VIC0(5)
36048 +#define IRQ_S3C6410_IIC1 S3C64XX_IRQ_VIC0(5)
36049 +#define IRQ_S3C6410_IIS S3C64XX_IRQ_VIC0(6)
36050 +#define IRQ_S3C6400_CAMIF_MP S3C64XX_IRQ_VIC0(6)
36051 +#define IRQ_CAMIF_WE_C S3C64XX_IRQ_VIC0(7)
36052 +#define IRQ_S3C6410_G3D S3C64XX_IRQ_VIC0(8)
36053 +#define IRQ_S3C6400_CAMIF_WE_P S3C64XX_IRQ_VIC0(8)
36054 +#define IRQ_POST0 S3C64XX_IRQ_VIC0(9)
36055 +#define IRQ_ROTATOR S3C64XX_IRQ_VIC0(10)
36056 +#define IRQ_2D S3C64XX_IRQ_VIC0(11)
36057 +#define IRQ_TVENC S3C64XX_IRQ_VIC0(12)
36058 +#define IRQ_SCALER S3C64XX_IRQ_VIC0(13)
36059 +#define IRQ_BATF S3C64XX_IRQ_VIC0(14)
36060 +#define IRQ_JPEG S3C64XX_IRQ_VIC0(15)
36061 +#define IRQ_MFC S3C64XX_IRQ_VIC0(16)
36062 +#define IRQ_SDMA0 S3C64XX_IRQ_VIC0(17)
36063 +#define IRQ_SDMA1 S3C64XX_IRQ_VIC0(18)
36064 +#define IRQ_ARM_DMAERR S3C64XX_IRQ_VIC0(19)
36065 +#define IRQ_ARM_DMA S3C64XX_IRQ_VIC0(20)
36066 +#define IRQ_ARM_DMAS S3C64XX_IRQ_VIC0(21)
36067 +#define IRQ_KEYPAD S3C64XX_IRQ_VIC0(22)
36068 +#define IRQ_TIMER0_VIC S3C64XX_IRQ_VIC0(23)
36069 +#define IRQ_TIMER1_VIC S3C64XX_IRQ_VIC0(24)
36070 +#define IRQ_TIMER2_VIC S3C64XX_IRQ_VIC0(25)
36071 +#define IRQ_WDT S3C64XX_IRQ_VIC0(26)
36072 +#define IRQ_TIMER3_VIC S3C64XX_IRQ_VIC0(27)
36073 +#define IRQ_TIMER4_VIC S3C64XX_IRQ_VIC0(28)
36074 +#define IRQ_LCD_FIFO S3C64XX_IRQ_VIC0(29)
36075 +#define IRQ_LCD_VSYNC S3C64XX_IRQ_VIC0(30)
36076 +#define IRQ_LCD_SYSTEM S3C64XX_IRQ_VIC0(31)
36077 +
36078 +/* VIC1 */
36079 +
36080 +#define IRQ_EINT12_19 S3C64XX_IRQ_VIC1(0)
36081 +#define IRQ_EINT20_27 S3C64XX_IRQ_VIC1(1)
36082 +#define IRQ_PCM0 S3C64XX_IRQ_VIC1(2)
36083 +#define IRQ_PCM1 S3C64XX_IRQ_VIC1(3)
36084 +#define IRQ_AC97 S3C64XX_IRQ_VIC1(4)
36085 +#define IRQ_UART0 S3C64XX_IRQ_VIC1(5)
36086 +#define IRQ_UART1 S3C64XX_IRQ_VIC1(6)
36087 +#define IRQ_UART2 S3C64XX_IRQ_VIC1(7)
36088 +#define IRQ_UART3 S3C64XX_IRQ_VIC1(8)
36089 +#define IRQ_DMA0 S3C64XX_IRQ_VIC1(9)
36090 +#define IRQ_DMA1 S3C64XX_IRQ_VIC1(10)
36091 +#define IRQ_ONENAND0 S3C64XX_IRQ_VIC1(11)
36092 +#define IRQ_ONENAND1 S3C64XX_IRQ_VIC1(12)
36093 +#define IRQ_NFC S3C64XX_IRQ_VIC1(13)
36094 +#define IRQ_CFCON S3C64XX_IRQ_VIC1(14)
36095 +#define IRQ_UHOST S3C64XX_IRQ_VIC1(15)
36096 +#define IRQ_SPI0 S3C64XX_IRQ_VIC1(16)
36097 +#define IRQ_SPI1 S3C64XX_IRQ_VIC1(17)
36098 +#define IRQ_IIC S3C64XX_IRQ_VIC1(18)
36099 +#define IRQ_HSItx S3C64XX_IRQ_VIC1(19)
36100 +#define IRQ_HSIrx S3C64XX_IRQ_VIC1(20)
36101 +#define IRQ_RESERVED S3C64XX_IRQ_VIC1(21)
36102 +#define IRQ_MSM S3C64XX_IRQ_VIC1(22)
36103 +#define IRQ_HOSTIF S3C64XX_IRQ_VIC1(23)
36104 +#define IRQ_HSMMC0 S3C64XX_IRQ_VIC1(24)
36105 +#define IRQ_HSMMC1 S3C64XX_IRQ_VIC1(25)
36106 +#define IRQ_HSMMC2 IRQ_SPI1 /* shared with SPI1 */
36107 +#define IRQ_OTG S3C64XX_IRQ_VIC1(26)
36108 +#define IRQ_IRDA S3C64XX_IRQ_VIC1(27)
36109 +#define IRQ_RTC_ALARM S3C64XX_IRQ_VIC1(28)
36110 +#define IRQ_SEC S3C64XX_IRQ_VIC1(29)
36111 +#define IRQ_PENDN S3C64XX_IRQ_VIC1(30)
36112 +#define IRQ_TC IRQ_PENDN
36113 +#define IRQ_ADC S3C64XX_IRQ_VIC1(31)
36114 +
36115 +#define S3C64XX_TIMER_IRQ(x) S3C_IRQ(64 + (x))
36116 +
36117 +#define IRQ_TIMER0 S3C64XX_TIMER_IRQ(0)
36118 +#define IRQ_TIMER1 S3C64XX_TIMER_IRQ(1)
36119 +#define IRQ_TIMER2 S3C64XX_TIMER_IRQ(2)
36120 +#define IRQ_TIMER3 S3C64XX_TIMER_IRQ(3)
36121 +#define IRQ_TIMER4 S3C64XX_TIMER_IRQ(4)
36122 +
36123 +/* compatibility for device defines */
36124 +
36125 +#define IRQ_IIC1 IRQ_S3C6410_IIC1
36126 +
36127 +/* Since the IRQ_EINT(x) are a linear mapping on current s3c64xx series
36128 + * we just defined them as an IRQ_EINT(x) macro from S3C_IRQ_EINT_BASE
36129 + * which we place after the pair of VICs. */
36130 +
36131 +#define S3C_IRQ_EINT_BASE S3C_IRQ(64+5)
36132 +
36133 +#define S3C_EINT(x) ((x) + S3C_IRQ_EINT_BASE)
36134 +#define IRQ_EINT(x) S3C_EINT(x)
36135 +#define IRQ_EINT_BIT(x) ((x) - S3C_EINT(0))
36136 +
36137 +/* Next the external interrupt groups. These are similar to the IRQ_EINT(x)
36138 + * that they are sourced from the GPIO pins but with a different scheme for
36139 + * priority and source indication.
36140 + *
36141 + * The IRQ_EINT(x) can be thought of as 'group 0' of the available GPIO
36142 + * interrupts, but for historical reasons they are kept apart from these
36143 + * next interrupts.
36144 + *
36145 + * Use IRQ_EINT_GROUP(group, offset) to get the number for use in the
36146 + * machine specific support files.
36147 + */
36148 +
36149 +#define IRQ_EINT_GROUP1_NR (15)
36150 +#define IRQ_EINT_GROUP2_NR (8)
36151 +#define IRQ_EINT_GROUP3_NR (5)
36152 +#define IRQ_EINT_GROUP4_NR (14)
36153 +#define IRQ_EINT_GROUP5_NR (7)
36154 +#define IRQ_EINT_GROUP6_NR (10)
36155 +#define IRQ_EINT_GROUP7_NR (16)
36156 +#define IRQ_EINT_GROUP8_NR (15)
36157 +#define IRQ_EINT_GROUP9_NR (9)
36158 +
36159 +#define IRQ_EINT_GROUP_BASE S3C_EINT(28)
36160 +#define IRQ_EINT_GROUP1_BASE (IRQ_EINT_GROUP_BASE + 0x00)
36161 +#define IRQ_EINT_GROUP2_BASE (IRQ_EINT_GROUP1_BASE + IRQ_EINT_GROUP1_NR)
36162 +#define IRQ_EINT_GROUP3_BASE (IRQ_EINT_GROUP2_BASE + IRQ_EINT_GROUP2_NR)
36163 +#define IRQ_EINT_GROUP4_BASE (IRQ_EINT_GROUP3_BASE + IRQ_EINT_GROUP3_NR)
36164 +#define IRQ_EINT_GROUP5_BASE (IRQ_EINT_GROUP4_BASE + IRQ_EINT_GROUP4_NR)
36165 +#define IRQ_EINT_GROUP6_BASE (IRQ_EINT_GROUP5_BASE + IRQ_EINT_GROUP5_NR)
36166 +#define IRQ_EINT_GROUP7_BASE (IRQ_EINT_GROUP6_BASE + IRQ_EINT_GROUP6_NR)
36167 +#define IRQ_EINT_GROUP8_BASE (IRQ_EINT_GROUP7_BASE + IRQ_EINT_GROUP7_NR)
36168 +#define IRQ_EINT_GROUP9_BASE (IRQ_EINT_GROUP8_BASE + IRQ_EINT_GROUP8_NR)
36169 +
36170 +#define IRQ_EINT_GROUP(group, no) (IRQ_EINT_GROUP##group##__BASE + (x))
36171 +
36172 +/* Set the default NR_IRQS */
36173 +
36174 +#define NR_IRQS (IRQ_EINT_GROUP9_BASE + IRQ_EINT_GROUP9_NR + 1)
36175 +
36176 +#endif /* __ASM_PLAT_S3C64XX_IRQS_H */
36177 +
36178 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/pll.h
36179 ===================================================================
36180 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
36181 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/pll.h 2009-01-02 00:01:56.000000000 +0100
36182 @@ -0,0 +1,74 @@
36183 +/* arch/arm/plat-s3c64xx/include/plat/pll.h
36184 + *
36185 + * Copyright 2008 Openmoko, Inc.
36186 + * Copyright 2008 Simtec Electronics
36187 + * Ben Dooks <ben@simtec.co.uk>
36188 + * http://armlinux.simtec.co.uk/
36189 + *
36190 + * S3C64XX PLL code
36191 + *
36192 + * This program is free software; you can redistribute it and/or modify
36193 + * it under the terms of the GNU General Public License version 2 as
36194 + * published by the Free Software Foundation.
36195 +*/
36196 +
36197 +#define S3C6400_PLL_MDIV_MASK ((1 << (25-16+1)) - 1)
36198 +#define S3C6400_PLL_PDIV_MASK ((1 << (13-8+1)) - 1)
36199 +#define S3C6400_PLL_SDIV_MASK ((1 << (2-0+1)) - 1)
36200 +#define S3C6400_PLL_MDIV_SHIFT (16)
36201 +#define S3C6400_PLL_PDIV_SHIFT (8)
36202 +#define S3C6400_PLL_SDIV_SHIFT (0)
36203 +
36204 +#include <asm/div64.h>
36205 +
36206 +static inline unsigned long s3c6400_get_pll(unsigned long baseclk,
36207 + u32 pllcon)
36208 +{
36209 + u32 mdiv, pdiv, sdiv;
36210 + u64 fvco = baseclk;
36211 +
36212 + mdiv = (pllcon >> S3C6400_PLL_MDIV_SHIFT) & S3C6400_PLL_MDIV_MASK;
36213 + pdiv = (pllcon >> S3C6400_PLL_PDIV_SHIFT) & S3C6400_PLL_PDIV_MASK;
36214 + sdiv = (pllcon >> S3C6400_PLL_SDIV_SHIFT) & S3C6400_PLL_SDIV_MASK;
36215 +
36216 + fvco *= mdiv;
36217 + do_div(fvco, (pdiv << sdiv));
36218 +
36219 + return (unsigned long)fvco;
36220 +}
36221 +
36222 +#define S3C6400_EPLL_MDIV_MASK ((1 << (23-16)) - 1)
36223 +#define S3C6400_EPLL_PDIV_MASK ((1 << (13-8)) - 1)
36224 +#define S3C6400_EPLL_SDIV_MASK ((1 << (2-0)) - 1)
36225 +#define S3C6400_EPLL_MDIV_SHIFT (16)
36226 +#define S3C6400_EPLL_PDIV_SHIFT (8)
36227 +#define S3C6400_EPLL_SDIV_SHIFT (0)
36228 +#define S3C6400_EPLL_KDIV_MASK (0xffff)
36229 +
36230 +static inline unsigned long s3c6400_get_epll(unsigned long baseclk)
36231 +{
36232 + unsigned long result;
36233 + u32 epll0 = __raw_readl(S3C_EPLL_CON0);
36234 + u32 epll1 = __raw_readl(S3C_EPLL_CON1);
36235 + u32 mdiv, pdiv, sdiv, kdiv;
36236 + u64 tmp;
36237 +
36238 + mdiv = (epll0 >> S3C6400_EPLL_MDIV_SHIFT) & S3C6400_EPLL_MDIV_MASK;
36239 + pdiv = (epll0 >> S3C6400_EPLL_PDIV_SHIFT) & S3C6400_EPLL_PDIV_MASK;
36240 + sdiv = (epll0 >> S3C6400_EPLL_SDIV_SHIFT) & S3C6400_EPLL_SDIV_MASK;
36241 + kdiv = epll1 & S3C6400_EPLL_KDIV_MASK;
36242 +
36243 + /* We need to multiple baseclk by mdiv (the integer part) and kdiv
36244 + * which is in 2^16ths, so shift mdiv up (does not overflow) and
36245 + * add kdiv before multiplying. The use of tmp is to avoid any
36246 + * overflows before shifting bac down into result when multipling
36247 + * by the mdiv and kdiv pair.
36248 + */
36249 +
36250 + tmp = baseclk;
36251 + tmp *= (mdiv << 16) + kdiv;
36252 + do_div(tmp, (pdiv << sdiv));
36253 + result = tmp >> 16;
36254 +
36255 + return result;
36256 +}
36257 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/pm-core.h
36258 ===================================================================
36259 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
36260 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/pm-core.h 2009-01-02 00:01:56.000000000 +0100
36261 @@ -0,0 +1,106 @@
36262 +/* linux/arch/arm/plat-s3c64xx/include/plat/pm-core.h
36263 + *
36264 + * Copyright 2008 Openmoko, Inc.
36265 + * Copyright 2008 Simtec Electronics
36266 + * Ben Dooks <ben@simtec.co.uk>
36267 + * http://armlinux.simtec.co.uk/
36268 + *
36269 + * S3C64XX - PM core support for arch/arm/plat-s3c/pm.c
36270 + *
36271 + * This program is free software; you can redistribute it and/or modify
36272 + * it under the terms of the GNU General Public License version 2 as
36273 + * published by the Free Software Foundation.
36274 + */
36275 +
36276 +#include <plat/regs-gpio.h>
36277 +
36278 +static inline void s3c_pm_debug_init_uart(void)
36279 +{
36280 + u32 tmp = __raw_readl(S3C_PCLK_GATE);
36281 +
36282 + /* As a note, since the S3C64XX UARTs generally have multiple
36283 + * clock sources, we simply enable PCLK at the moment and hope
36284 + * that the resume settings for the UART are suitable for the
36285 + * use with PCLK.
36286 + */
36287 +
36288 + tmp |= S3C_CLKCON_PCLK_UART0;
36289 + tmp |= S3C_CLKCON_PCLK_UART1;
36290 + tmp |= S3C_CLKCON_PCLK_UART2;
36291 + tmp |= S3C_CLKCON_PCLK_UART3;
36292 +
36293 + __raw_writel(tmp, S3C_PCLK_GATE);
36294 + udelay(10);
36295 +}
36296 +
36297 +static inline void s3c_pm_arch_clear_vic(void __iomem *base)
36298 +{
36299 + __raw_writel(~0, base + VIC_INT_ENABLE_CLEAR);
36300 + __raw_writel(~0, base + VIC_INT_SOFT_CLEAR);
36301 +}
36302 +
36303 +static inline void s3c_pm_arch_prepare_irqs(void)
36304 +{
36305 + /* shutdown the VICs */
36306 + s3c_pm_arch_clear_vic(S3C_VA_VIC0);
36307 + s3c_pm_arch_clear_vic(S3C_VA_VIC1);
36308 +
36309 + /* clear any pending EINT0 interrupts */
36310 + __raw_writel(__raw_readl(S3C64XX_EINT0PEND), S3C64XX_EINT0PEND);
36311 +}
36312 +
36313 +static inline void s3c_pm_arch_stop_clocks(void)
36314 +{
36315 +}
36316 +
36317 +static inline void s3c_pm_arch_show_resume_irqs(void)
36318 +{
36319 +}
36320 +
36321 +/* make these defines, we currently do not have any need to change
36322 + * the IRQ wake controls depending on the CPU we are running on */
36323 +
36324 +#define s3c_irqwake_eintallow ((1 << 28) - 1)
36325 +#define s3c_irqwake_intallow (0)
36326 +
36327 +static inline void s3c_pm_arch_update_uart(void __iomem *regs,
36328 + struct pm_uart_save *save)
36329 +{
36330 + u32 ucon = __raw_readl(regs + S3C2410_UCON);
36331 + u32 ucon_clk = ucon & S3C6400_UCON_CLKMASK;
36332 + u32 save_clk = save->ucon & S3C6400_UCON_CLKMASK;
36333 + u32 new_ucon;
36334 + u32 delta;
36335 +
36336 + /* S3C64XX UART blocks only support level interrupts, so ensure that
36337 + * when we restore unused UART blocks we force the level interrupt
36338 + * settigs. */
36339 + save->ucon |= S3C2410_UCON_TXILEVEL | S3C2410_UCON_RXILEVEL;
36340 +
36341 + /* We have a constraint on changing the clock type of the UART
36342 + * between UCLKx and PCLK, so ensure that when we restore UCON
36343 + * that the CLK field is correctly modified if the bootloader
36344 + * has changed anything.
36345 + */
36346 + if (ucon_clk != save_clk) {
36347 + new_ucon = save->ucon;
36348 + delta = ucon_clk ^ save_clk;
36349 +
36350 + /* change from UCLKx => wrong PCLK,
36351 + * either UCLK can be tested for by a bit-test
36352 + * with UCLK0 */
36353 + if (ucon_clk & S3C6400_UCON_UCLK0 &&
36354 + !(save_clk & S3C6400_UCON_UCLK0) &&
36355 + delta & S3C6400_UCON_PCLK2) {
36356 + new_ucon &= ~S3C6400_UCON_UCLK0;
36357 + } else if (delta == S3C6400_UCON_PCLK2) {
36358 + /* as an precaution, don't change from
36359 + * PCLK2 => PCLK or vice-versa */
36360 + new_ucon ^= S3C6400_UCON_PCLK2;
36361 + }
36362 +
36363 + S3C_PMDBG("ucon change %04x => %04x (save=%04x)\n",
36364 + ucon, new_ucon, save->ucon);
36365 + save->ucon = new_ucon;
36366 + }
36367 +}
36368 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-clock.h
36369 ===================================================================
36370 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
36371 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-clock.h 2009-01-02 00:01:56.000000000 +0100
36372 @@ -0,0 +1,225 @@
36373 +/* arch/arm/plat-s3c64xx/include/plat/regs-clock.h
36374 + *
36375 + * Copyright 2008 Openmoko, Inc.
36376 + * Copyright 2008 Simtec Electronics
36377 + * Ben Dooks <ben@simtec.co.uk>
36378 + * http://armlinux.simtec.co.uk/
36379 + *
36380 + * S3C64XX clock register definitions
36381 + *
36382 + * This program is free software; you can redistribute it and/or modify
36383 + * it under the terms of the GNU General Public License version 2 as
36384 + * published by the Free Software Foundation.
36385 +*/
36386 +
36387 +#ifndef __PLAT_REGS_CLOCK_H
36388 +#define __PLAT_REGS_CLOCK_H __FILE__
36389 +
36390 +#define S3C_CLKREG(x) (S3C_VA_SYS + (x))
36391 +
36392 +#define S3C_APLL_LOCK S3C_CLKREG(0x00)
36393 +#define S3C_MPLL_LOCK S3C_CLKREG(0x04)
36394 +#define S3C_EPLL_LOCK S3C_CLKREG(0x08)
36395 +#define S3C_APLL_CON S3C_CLKREG(0x0C)
36396 +#define S3C_MPLL_CON S3C_CLKREG(0x10)
36397 +#define S3C_EPLL_CON0 S3C_CLKREG(0x14)
36398 +#define S3C_EPLL_CON1 S3C_CLKREG(0x18)
36399 +#define S3C_CLK_SRC S3C_CLKREG(0x1C)
36400 +#define S3C_CLK_DIV0 S3C_CLKREG(0x20)
36401 +#define S3C_CLK_DIV1 S3C_CLKREG(0x24)
36402 +#define S3C_CLK_DIV2 S3C_CLKREG(0x28)
36403 +#define S3C_CLK_OUT S3C_CLKREG(0x2C)
36404 +#define S3C_HCLK_GATE S3C_CLKREG(0x30)
36405 +#define S3C_PCLK_GATE S3C_CLKREG(0x34)
36406 +#define S3C_SCLK_GATE S3C_CLKREG(0x38)
36407 +#define S3C_MEM0_GATE S3C_CLKREG(0x3C)
36408 +
36409 +/* CLKDIV0 */
36410 +#define S3C6400_CLKDIV0_MFC_MASK (0xf << 28)
36411 +#define S3C6400_CLKDIV0_MFC_SHIFT (28)
36412 +#define S3C6400_CLKDIV0_JPEG_MASK (0xf << 24)
36413 +#define S3C6400_CLKDIV0_JPEG_SHIFT (24)
36414 +#define S3C6400_CLKDIV0_CAM_MASK (0xf << 20)
36415 +#define S3C6400_CLKDIV0_CAM_SHIFT (20)
36416 +#define S3C6400_CLKDIV0_SECURITY_MASK (0x3 << 18)
36417 +#define S3C6400_CLKDIV0_SECURITY_SHIFT (18)
36418 +#define S3C6400_CLKDIV0_PCLK_MASK (0xf << 12)
36419 +#define S3C6400_CLKDIV0_PCLK_SHIFT (12)
36420 +#define S3C6400_CLKDIV0_HCLK2_MASK (0x7 << 9)
36421 +#define S3C6400_CLKDIV0_HCLK2_SHIFT (9)
36422 +#define S3C6400_CLKDIV0_HCLK_MASK (0x1 << 8)
36423 +#define S3C6400_CLKDIV0_HCLK_SHIFT (8)
36424 +#define S3C6400_CLKDIV0_MPLL_MASK (0x1 << 4)
36425 +#define S3C6400_CLKDIV0_MPLL_SHIFT (4)
36426 +#define S3C6400_CLKDIV0_ARM_MASK (0x3 << 0)
36427 +#define S3C6410_CLKDIV0_ARM_MASK (0x7 << 0)
36428 +#define S3C6400_CLKDIV0_ARM_SHIFT (0)
36429 +
36430 +/* CLKDIV1 */
36431 +#define S3C6410_CLKDIV1_FIMC_MASK (0xf << 24)
36432 +#define S3C6410_CLKDIV1_FIMC_SHIFT (24)
36433 +#define S3C6400_CLKDIV1_UHOST_MASK (0xf << 20)
36434 +#define S3C6400_CLKDIV1_UHOST_SHIFT (20)
36435 +#define S3C6400_CLKDIV1_SCALER_MASK (0xf << 16)
36436 +#define S3C6400_CLKDIV1_SCALER_SHIFT (16)
36437 +#define S3C6400_CLKDIV1_LCD_MASK (0xf << 12)
36438 +#define S3C6400_CLKDIV1_LCD_SHIFT (12)
36439 +#define S3C6400_CLKDIV1_MMC2_MASK (0xf << 8)
36440 +#define S3C6400_CLKDIV1_MMC2_SHIFT (8)
36441 +#define S3C6400_CLKDIV1_MMC1_MASK (0xf << 4)
36442 +#define S3C6400_CLKDIV1_MMC1_SHIFT (4)
36443 +#define S3C6400_CLKDIV1_MMC0_MASK (0xf << 0)
36444 +#define S3C6400_CLKDIV1_MMC0_SHIFT (0)
36445 +
36446 +/* CLKDIV2 */
36447 +#define S3C6410_CLKDIV2_AUDIO2_MASK (0xf << 24)
36448 +#define S3C6410_CLKDIV2_AUDIO2_SHIFT (24)
36449 +#define S3C6400_CLKDIV2_IRDA_MASK (0xf << 20)
36450 +#define S3C6400_CLKDIV2_IRDA_SHIFT (20)
36451 +#define S3C6400_CLKDIV2_UART_MASK (0xf << 16)
36452 +#define S3C6400_CLKDIV2_UART_SHIFT (16)
36453 +#define S3C6400_CLKDIV2_AUDIO1_MASK (0xf << 12)
36454 +#define S3C6400_CLKDIV2_AUDIO1_SHIFT (12)
36455 +#define S3C6400_CLKDIV2_AUDIO0_MASK (0xf << 8)
36456 +#define S3C6400_CLKDIV2_AUDIO0_SHIFT (8)
36457 +#define S3C6400_CLKDIV2_SPI1_MASK (0xf << 4)
36458 +#define S3C6400_CLKDIV2_SPI1_SHIFT (4)
36459 +#define S3C6400_CLKDIV2_SPI0_MASK (0xf << 0)
36460 +#define S3C6400_CLKDIV2_SPI0_SHIFT (0)
36461 +
36462 +/* HCLK GATE Registers */
36463 +#define S3C_CLKCON_HCLK_BUS (1<<30)
36464 +#define S3C_CLKCON_HCLK_SECUR (1<<29)
36465 +#define S3C_CLKCON_HCLK_SDMA1 (1<<28)
36466 +#define S3C_CLKCON_HCLK_SDMA2 (1<<27)
36467 +#define S3C_CLKCON_HCLK_UHOST (1<<26)
36468 +#define S3C_CLKCON_HCLK_IROM (1<<25)
36469 +#define S3C_CLKCON_HCLK_DDR1 (1<<24)
36470 +#define S3C_CLKCON_HCLK_DDR0 (1<<23)
36471 +#define S3C_CLKCON_HCLK_MEM1 (1<<22)
36472 +#define S3C_CLKCON_HCLK_MEM0 (1<<21)
36473 +#define S3C_CLKCON_HCLK_USB (1<<20)
36474 +#define S3C_CLKCON_HCLK_HSMMC2 (1<<19)
36475 +#define S3C_CLKCON_HCLK_HSMMC1 (1<<18)
36476 +#define S3C_CLKCON_HCLK_HSMMC0 (1<<17)
36477 +#define S3C_CLKCON_HCLK_MDP (1<<16)
36478 +#define S3C_CLKCON_HCLK_DHOST (1<<15)
36479 +#define S3C_CLKCON_HCLK_IHOST (1<<14)
36480 +#define S3C_CLKCON_HCLK_DMA1 (1<<13)
36481 +#define S3C_CLKCON_HCLK_DMA0 (1<<12)
36482 +#define S3C_CLKCON_HCLK_JPEG (1<<11)
36483 +#define S3C_CLKCON_HCLK_CAMIF (1<<10)
36484 +#define S3C_CLKCON_HCLK_SCALER (1<<9)
36485 +#define S3C_CLKCON_HCLK_2D (1<<8)
36486 +#define S3C_CLKCON_HCLK_TV (1<<7)
36487 +#define S3C_CLKCON_HCLK_POST0 (1<<5)
36488 +#define S3C_CLKCON_HCLK_ROT (1<<4)
36489 +#define S3C_CLKCON_HCLK_LCD (1<<3)
36490 +#define S3C_CLKCON_HCLK_TZIC (1<<2)
36491 +#define S3C_CLKCON_HCLK_INTC (1<<1)
36492 +#define S3C_CLKCON_HCLK_MFC (1<<0)
36493 +
36494 +/* PCLK GATE Registers */
36495 +#define S3C6410_CLKCON_PCLK_I2C1 (1<<27)
36496 +#define S3C6410_CLKCON_PCLK_IIS2 (1<<26)
36497 +#define S3C_CLKCON_PCLK_SKEY (1<<24)
36498 +#define S3C_CLKCON_PCLK_CHIPID (1<<23)
36499 +#define S3C_CLKCON_PCLK_SPI1 (1<<22)
36500 +#define S3C_CLKCON_PCLK_SPI0 (1<<21)
36501 +#define S3C_CLKCON_PCLK_HSIRX (1<<20)
36502 +#define S3C_CLKCON_PCLK_HSITX (1<<19)
36503 +#define S3C_CLKCON_PCLK_GPIO (1<<18)
36504 +#define S3C_CLKCON_PCLK_IIC (1<<17)
36505 +#define S3C_CLKCON_PCLK_IIS1 (1<<16)
36506 +#define S3C_CLKCON_PCLK_IIS0 (1<<15)
36507 +#define S3C_CLKCON_PCLK_AC97 (1<<14)
36508 +#define S3C_CLKCON_PCLK_TZPC (1<<13)
36509 +#define S3C_CLKCON_PCLK_TSADC (1<<12)
36510 +#define S3C_CLKCON_PCLK_KEYPAD (1<<11)
36511 +#define S3C_CLKCON_PCLK_IRDA (1<<10)
36512 +#define S3C_CLKCON_PCLK_PCM1 (1<<9)
36513 +#define S3C_CLKCON_PCLK_PCM0 (1<<8)
36514 +#define S3C_CLKCON_PCLK_PWM (1<<7)
36515 +#define S3C_CLKCON_PCLK_RTC (1<<6)
36516 +#define S3C_CLKCON_PCLK_WDT (1<<5)
36517 +#define S3C_CLKCON_PCLK_UART3 (1<<4)
36518 +#define S3C_CLKCON_PCLK_UART2 (1<<3)
36519 +#define S3C_CLKCON_PCLK_UART1 (1<<2)
36520 +#define S3C_CLKCON_PCLK_UART0 (1<<1)
36521 +#define S3C_CLKCON_PCLK_MFC (1<<0)
36522 +
36523 +/* SCLK GATE Registers */
36524 +#define S3C_CLKCON_SCLK_UHOST (1<<30)
36525 +#define S3C_CLKCON_SCLK_MMC2_48 (1<<29)
36526 +#define S3C_CLKCON_SCLK_MMC1_48 (1<<28)
36527 +#define S3C_CLKCON_SCLK_MMC0_48 (1<<27)
36528 +#define S3C_CLKCON_SCLK_MMC2 (1<<26)
36529 +#define S3C_CLKCON_SCLK_MMC1 (1<<25)
36530 +#define S3C_CLKCON_SCLK_MMC0 (1<<24)
36531 +#define S3C_CLKCON_SCLK_SPI1_48 (1<<23)
36532 +#define S3C_CLKCON_SCLK_SPI0_48 (1<<22)
36533 +#define S3C_CLKCON_SCLK_SPI1 (1<<21)
36534 +#define S3C_CLKCON_SCLK_SPI0 (1<<20)
36535 +#define S3C_CLKCON_SCLK_DAC27 (1<<19)
36536 +#define S3C_CLKCON_SCLK_TV27 (1<<18)
36537 +#define S3C_CLKCON_SCLK_SCALER27 (1<<17)
36538 +#define S3C_CLKCON_SCLK_SCALER (1<<16)
36539 +#define S3C_CLKCON_SCLK_LCD27 (1<<15)
36540 +#define S3C_CLKCON_SCLK_LCD (1<<14)
36541 +#define S3C6400_CLKCON_SCLK_POST1_27 (1<<13)
36542 +#define S3C6410_CLKCON_FIMC (1<<13)
36543 +#define S3C_CLKCON_SCLK_POST0_27 (1<<12)
36544 +#define S3C6400_CLKCON_SCLK_POST1 (1<<11)
36545 +#define S3C6410_CLKCON_SCLK_AUDIO2 (1<<11)
36546 +#define S3C_CLKCON_SCLK_POST0 (1<<10)
36547 +#define S3C_CLKCON_SCLK_AUDIO1 (1<<9)
36548 +#define S3C_CLKCON_SCLK_AUDIO0 (1<<8)
36549 +#define S3C_CLKCON_SCLK_SECUR (1<<7)
36550 +#define S3C_CLKCON_SCLK_IRDA (1<<6)
36551 +#define S3C_CLKCON_SCLK_UART (1<<5)
36552 +#define S3C_CLKCON_SCLK_ONENAND (1<<4)
36553 +#define S3C_CLKCON_SCLK_MFC (1<<3)
36554 +#define S3C_CLKCON_SCLK_CAM (1<<2)
36555 +#define S3C_CLKCON_SCLK_JPEG (1<<1)
36556 +
36557 +/* CLKSRC */
36558 +
36559 +#define S3C6400_CLKSRC_APLL_MOUT (1 << 0)
36560 +#define S3C6400_CLKSRC_MPLL_MOUT (1 << 1)
36561 +#define S3C6400_CLKSRC_EPLL_MOUT (1 << 2)
36562 +#define S3C6400_CLKSRC_APLL_MOUT_SHIFT (0)
36563 +#define S3C6400_CLKSRC_MPLL_MOUT_SHIFT (1)
36564 +#define S3C6400_CLKSRC_EPLL_MOUT_SHIFT (2)
36565 +#define S3C6400_CLKSRC_MFC (1 << 4)
36566 +
36567 +#define S3C6410_CLKSRC_TV27_MASK (0x1 << 31)
36568 +#define S3C6410_CLKSRC_TV27_SHIFT (31)
36569 +#define S3C6410_CLKSRC_DAC27_MASK (0x1 << 30)
36570 +#define S3C6410_CLKSRC_DAC27_SHIFT (30)
36571 +#define S3C6400_CLKSRC_SCALER_MASK (0x3 << 28)
36572 +#define S3C6400_CLKSRC_SCALER_SHIFT (28)
36573 +#define S3C6400_CLKSRC_LCD_MASK (0x3 << 26)
36574 +#define S3C6400_CLKSRC_LCD_SHIFT (26)
36575 +#define S3C6400_CLKSRC_IRDA_MASK (0x3 << 24)
36576 +#define S3C6400_CLKSRC_IRDA_SHIFT (24)
36577 +#define S3C6400_CLKSRC_MMC2_MASK (0x3 << 22)
36578 +#define S3C6400_CLKSRC_MMC2_SHIFT (22)
36579 +#define S3C6400_CLKSRC_MMC1_MASK (0x3 << 20)
36580 +#define S3C6400_CLKSRC_MMC1_SHIFT (20)
36581 +#define S3C6400_CLKSRC_MMC0_MASK (0x3 << 18)
36582 +#define S3C6400_CLKSRC_MMC0_SHIFT (18)
36583 +#define S3C6400_CLKSRC_SPI1_MASK (0x3 << 16)
36584 +#define S3C6400_CLKSRC_SPI1_SHIFT (16)
36585 +#define S3C6400_CLKSRC_SPI0_MASK (0x3 << 14)
36586 +#define S3C6400_CLKSRC_SPI0_SHIFT (14)
36587 +#define S3C6400_CLKSRC_UART_MASK (0x1 << 13)
36588 +#define S3C6400_CLKSRC_UART_SHIFT (13)
36589 +#define S3C6400_CLKSRC_AUDIO1_MASK (0x7 << 10)
36590 +#define S3C6400_CLKSRC_AUDIO1_SHIFT (10)
36591 +#define S3C6400_CLKSRC_AUDIO0_MASK (0x7 << 7)
36592 +#define S3C6400_CLKSRC_AUDIO0_SHIFT (7)
36593 +#define S3C6400_CLKSRC_UHOST_MASK (0x3 << 5)
36594 +#define S3C6400_CLKSRC_UHOST_SHIFT (5)
36595 +
36596 +
36597 +#endif /* _PLAT_REGS_CLOCK_H */
36598 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-gpio.h
36599 ===================================================================
36600 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
36601 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-gpio.h 2009-01-02 00:01:56.000000000 +0100
36602 @@ -0,0 +1,187 @@
36603 +/* linux/arch/arm/plat-s3c64xx/include/mach/regs-gpio.h
36604 + *
36605 + * Copyright 2008 Openmoko, Inc.
36606 + * Copyright 2008 Simtec Electronics
36607 + * Ben Dooks <ben@simtec.co.uk>
36608 + * http://armlinux.simtec.co.uk/
36609 + *
36610 + * S3C64XX - GPIO register definitions
36611 + */
36612 +
36613 +#ifndef __ASM_PLAT_S3C64XX_REGS_GPIO_H
36614 +#define __ASM_PLAT_S3C64XX_REGS_GPIO_H __FILE__
36615 +
36616 +/* Base addresses for each of the banks */
36617 +
36618 +#define S3C64XX_GPIOREG(reg) (S3C64XX_VA_GPIO + (reg))
36619 +
36620 +#define S3C64XX_GPA_BASE S3C64XX_GPIOREG(0x0000)
36621 +#define S3C64XX_GPB_BASE S3C64XX_GPIOREG(0x0020)
36622 +#define S3C64XX_GPC_BASE S3C64XX_GPIOREG(0x0040)
36623 +#define S3C64XX_GPD_BASE S3C64XX_GPIOREG(0x0060)
36624 +#define S3C64XX_GPE_BASE S3C64XX_GPIOREG(0x0080)
36625 +#define S3C64XX_GPF_BASE S3C64XX_GPIOREG(0x00A0)
36626 +#define S3C64XX_GPG_BASE S3C64XX_GPIOREG(0x00C0)
36627 +#define S3C64XX_GPH_BASE S3C64XX_GPIOREG(0x00E0)
36628 +#define S3C64XX_GPI_BASE S3C64XX_GPIOREG(0x0100)
36629 +#define S3C64XX_GPJ_BASE S3C64XX_GPIOREG(0x0120)
36630 +#define S3C64XX_GPK_BASE S3C64XX_GPIOREG(0x0800)
36631 +#define S3C64XX_GPL_BASE S3C64XX_GPIOREG(0x0810)
36632 +#define S3C64XX_GPM_BASE S3C64XX_GPIOREG(0x0820)
36633 +#define S3C64XX_GPN_BASE S3C64XX_GPIOREG(0x0830)
36634 +#define S3C64XX_GPO_BASE S3C64XX_GPIOREG(0x0140)
36635 +#define S3C64XX_GPP_BASE S3C64XX_GPIOREG(0x0160)
36636 +#define S3C64XX_GPQ_BASE S3C64XX_GPIOREG(0x0180)
36637 +
36638 +/* SPCON */
36639 +
36640 +#define S3C64XX_SPCON S3C64XX_GPIOREG(0x1A0)
36641 +
36642 +#define S3C64XX_SPCON_DRVCON_CAM_MASK (0x3 << 30)
36643 +#define S3C64XX_SPCON_DRVCON_CAM_SHIFT (30)
36644 +#define S3C64XX_SPCON_DRVCON_CAM_2mA (0x0 << 30)
36645 +#define S3C64XX_SPCON_DRVCON_CAM_4mA (0x1 << 30)
36646 +#define S3C64XX_SPCON_DRVCON_CAM_7mA (0x2 << 30)
36647 +#define S3C64XX_SPCON_DRVCON_CAM_9mA (0x3 << 30)
36648 +
36649 +#define S3C64XX_SPCON_DRVCON_HSSPI_MASK (0x3 << 28)
36650 +#define S3C64XX_SPCON_DRVCON_HSSPI_SHIFT (28)
36651 +#define S3C64XX_SPCON_DRVCON_HSSPI_2mA (0x0 << 28)
36652 +#define S3C64XX_SPCON_DRVCON_HSSPI_4mA (0x1 << 28)
36653 +#define S3C64XX_SPCON_DRVCON_HSSPI_7mA (0x2 << 28)
36654 +#define S3C64XX_SPCON_DRVCON_HSSPI_9mA (0x3 << 28)
36655 +
36656 +#define S3C64XX_SPCON_DRVCON_HSMMC_MASK (0x3 << 26)
36657 +#define S3C64XX_SPCON_DRVCON_HSMMC_SHIFT (26)
36658 +#define S3C64XX_SPCON_DRVCON_HSMMC_2mA (0x0 << 26)
36659 +#define S3C64XX_SPCON_DRVCON_HSMMC_4mA (0x1 << 26)
36660 +#define S3C64XX_SPCON_DRVCON_HSMMC_7mA (0x2 << 26)
36661 +#define S3C64XX_SPCON_DRVCON_HSMMC_9mA (0x3 << 26)
36662 +
36663 +#define S3C64XX_SPCON_DRVCON_LCD_MASK (0x3 << 24)
36664 +#define S3C64XX_SPCON_DRVCON_LCD_SHIFT (24)
36665 +#define S3C64XX_SPCON_DRVCON_LCD_2mA (0x0 << 24)
36666 +#define S3C64XX_SPCON_DRVCON_LCD_4mA (0x1 << 24)
36667 +#define S3C64XX_SPCON_DRVCON_LCD_7mA (0x2 << 24)
36668 +#define S3C64XX_SPCON_DRVCON_LCD_9mA (0x3 << 24)
36669 +
36670 +#define S3C64XX_SPCON_DRVCON_MODEM_MASK (0x3 << 22)
36671 +#define S3C64XX_SPCON_DRVCON_MODEM_SHIFT (22)
36672 +#define S3C64XX_SPCON_DRVCON_MODEM_2mA (0x0 << 22)
36673 +#define S3C64XX_SPCON_DRVCON_MODEM_4mA (0x1 << 22)
36674 +#define S3C64XX_SPCON_DRVCON_MODEM_7mA (0x2 << 22)
36675 +#define S3C64XX_SPCON_DRVCON_MODEM_9mA (0x3 << 22)
36676 +
36677 +#define S3C64XX_SPCON_nRSTOUT_OEN (1 << 21)
36678 +
36679 +#define S3C64XX_SPCON_DRVCON_SPICLK1_MASK (0x3 << 18)
36680 +#define S3C64XX_SPCON_DRVCON_SPICLK1_SHIFT (18)
36681 +#define S3C64XX_SPCON_DRVCON_SPICLK1_2mA (0x0 << 18)
36682 +#define S3C64XX_SPCON_DRVCON_SPICLK1_4mA (0x1 << 18)
36683 +#define S3C64XX_SPCON_DRVCON_SPICLK1_7mA (0x2 << 18)
36684 +#define S3C64XX_SPCON_DRVCON_SPICLK1_9mA (0x3 << 18)
36685 +
36686 +#define S3C64XX_SPCON_MEM1_DQS_PUD_MASK (0x3 << 16)
36687 +#define S3C64XX_SPCON_MEM1_DQS_PUD_SHIFT (16)
36688 +#define S3C64XX_SPCON_MEM1_DQS_PUD_DISABLED (0x0 << 16)
36689 +#define S3C64XX_SPCON_MEM1_DQS_PUD_DOWN (0x1 << 16)
36690 +#define S3C64XX_SPCON_MEM1_DQS_PUD_UP (0x2 << 16)
36691 +
36692 +#define S3C64XX_SPCON_MEM1_D_PUD1_MASK (0x3 << 14)
36693 +#define S3C64XX_SPCON_MEM1_D_PUD1_SHIFT (14)
36694 +#define S3C64XX_SPCON_MEM1_D_PUD1_DISABLED (0x0 << 14)
36695 +#define S3C64XX_SPCON_MEM1_D_PUD1_DOWN (0x1 << 14)
36696 +#define S3C64XX_SPCON_MEM1_D_PUD1_UP (0x2 << 14)
36697 +
36698 +#define S3C64XX_SPCON_MEM1_D_PUD0_MASK (0x3 << 12)
36699 +#define S3C64XX_SPCON_MEM1_D_PUD0_SHIFT (12)
36700 +#define S3C64XX_SPCON_MEM1_D_PUD0_DISABLED (0x0 << 12)
36701 +#define S3C64XX_SPCON_MEM1_D_PUD0_DOWN (0x1 << 12)
36702 +#define S3C64XX_SPCON_MEM1_D_PUD0_UP (0x2 << 12)
36703 +
36704 +#define S3C64XX_SPCON_MEM0_D_PUD_MASK (0x3 << 8)
36705 +#define S3C64XX_SPCON_MEM0_D_PUD_SHIFT (8)
36706 +#define S3C64XX_SPCON_MEM0_D_PUD_DISABLED (0x0 << 8)
36707 +#define S3C64XX_SPCON_MEM0_D_PUD_DOWN (0x1 << 8)
36708 +#define S3C64XX_SPCON_MEM0_D_PUD_UP (0x2 << 8)
36709 +
36710 +#define S3C64XX_SPCON_USBH_DMPD (1 << 7)
36711 +#define S3C64XX_SPCON_USBH_DPPD (1 << 6)
36712 +#define S3C64XX_SPCON_USBH_PUSW2 (1 << 5)
36713 +#define S3C64XX_SPCON_USBH_PUSW1 (1 << 4)
36714 +#define S3C64XX_SPCON_USBH_SUSPND (1 << 3)
36715 +
36716 +#define S3C64XX_SPCON_LCD_SEL_MASK (0x3 << 0)
36717 +#define S3C64XX_SPCON_LCD_SEL_SHIFT (0)
36718 +#define S3C64XX_SPCON_LCD_SEL_HOST (0x0 << 0)
36719 +#define S3C64XX_SPCON_LCD_SEL_RGB (0x1 << 0)
36720 +#define S3C64XX_SPCON_LCD_SEL_606_656 (0x2 << 0)
36721 +
36722 +
36723 +/* External interrupt registers */
36724 +
36725 +#define S3C64XX_EINT12CON S3C64XX_GPIOREG(0x200)
36726 +#define S3C64XX_EINT34CON S3C64XX_GPIOREG(0x204)
36727 +#define S3C64XX_EINT56CON S3C64XX_GPIOREG(0x208)
36728 +#define S3C64XX_EINT78CON S3C64XX_GPIOREG(0x20C)
36729 +#define S3C64XX_EINT9CON S3C64XX_GPIOREG(0x210)
36730 +
36731 +#define S3C64XX_EINT12FLTCON S3C64XX_GPIOREG(0x220)
36732 +#define S3C64XX_EINT34FLTCON S3C64XX_GPIOREG(0x224)
36733 +#define S3C64XX_EINT56FLTCON S3C64XX_GPIOREG(0x228)
36734 +#define S3C64XX_EINT78FLTCON S3C64XX_GPIOREG(0x22C)
36735 +#define S3C64XX_EINT9FLTCON S3C64XX_GPIOREG(0x230)
36736 +
36737 +#define S3C64XX_EINT12MASK S3C64XX_GPIOREG(0x240)
36738 +#define S3C64XX_EINT34MASK S3C64XX_GPIOREG(0x244)
36739 +#define S3C64XX_EINT56MASK S3C64XX_GPIOREG(0x248)
36740 +#define S3C64XX_EINT78MASK S3C64XX_GPIOREG(0x24C)
36741 +#define S3C64XX_EINT9MASK S3C64XX_GPIOREG(0x250)
36742 +
36743 +#define S3C64XX_EINT12PEND S3C64XX_GPIOREG(0x260)
36744 +#define S3C64XX_EINT34PEND S3C64XX_GPIOREG(0x264)
36745 +#define S3C64XX_EINT56PEND S3C64XX_GPIOREG(0x268)
36746 +#define S3C64XX_EINT78PEND S3C64XX_GPIOREG(0x26C)
36747 +#define S3C64XX_EINT9PEND S3C64XX_GPIOREG(0x270)
36748 +
36749 +#define S3C64XX_PRIORITY S3C64XX_GPIOREG(0x280)
36750 +#define S3C64XX_PRIORITY_ARB(x) (1 << (x))
36751 +
36752 +#define S3C64XX_SERVICE S3C64XX_GPIOREG(0x284)
36753 +#define S3C64XX_SERVICEPEND S3C64XX_GPIOREG(0x288)
36754 +
36755 +#define S3C64XX_EINT0CON0 S3C64XX_GPIOREG(0x900)
36756 +#define S3C64XX_EINT0CON1 S3C64XX_GPIOREG(0x904)
36757 +#define S3C64XX_EINT0FLTCON0 S3C64XX_GPIOREG(0x910)
36758 +#define S3C64XX_EINT0FLTCON1 S3C64XX_GPIOREG(0x914)
36759 +#define S3C64XX_EINT0FLTCON2 S3C64XX_GPIOREG(0x918)
36760 +#define S3C64XX_EINT0FLTCON3 S3C64XX_GPIOREG(0x91C)
36761 +
36762 +#define S3C64XX_EINT0MASK S3C64XX_GPIOREG(0x920)
36763 +#define S3C64XX_EINT0PEND S3C64XX_GPIOREG(0x924)
36764 +
36765 +/* GPIO sleep configuration */
36766 +
36767 +#define S3C64XX_SPCONSLP S3C64XX_GPIOREG(0x880)
36768 +
36769 +#define S3C64XX_SPCONSLP_TDO_PULLDOWN (1 << 14)
36770 +#define S3C64XX_SPCONSLP_CKE1INIT (1 << 5)
36771 +
36772 +#define S3C64XX_SPCONSLP_RSTOUT_MASK (0x3 << 12)
36773 +#define S3C64XX_SPCONSLP_RSTOUT_OUT0 (0x0 << 12)
36774 +#define S3C64XX_SPCONSLP_RSTOUT_OUT1 (0x1 << 12)
36775 +#define S3C64XX_SPCONSLP_RSTOUT_HIZ (0x2 << 12)
36776 +
36777 +#define S3C64XX_SPCONSLP_KPCOL_MASK (0x3 << 0)
36778 +#define S3C64XX_SPCONSLP_KPCOL_OUT0 (0x0 << 0)
36779 +#define S3C64XX_SPCONSLP_KPCOL_OUT1 (0x1 << 0)
36780 +#define S3C64XX_SPCONSLP_KPCOL_INP (0x2 << 0)
36781 +
36782 +
36783 +#define S3C64XX_SLPEN S3C64XX_GPIOREG(0x930)
36784 +
36785 +#define S3C64XX_SLPEN_USE_xSLP (1 << 0)
36786 +#define S3C64XX_SLPEN_CFG_BYSLPEN (1 << 1)
36787 +
36788 +#endif /* __ASM_PLAT_S3C64XX_REGS_GPIO_H */
36789 +
36790 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-gpio-memport.h
36791 ===================================================================
36792 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
36793 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-gpio-memport.h 2009-01-02 00:01:56.000000000 +0100
36794 @@ -0,0 +1,25 @@
36795 +/* linux/arch/arm/plat-s3c64xx/include/mach/regs-gpio-memport.h
36796 + *
36797 + * Copyright 2008 Openmoko, Inc.
36798 + * Copyright 2008 Simtec Electronics
36799 + * Ben Dooks <ben@simtec.co.uk>
36800 + * http://armlinux.simtec.co.uk/
36801 + *
36802 + * S3C64XX - GPIO memory port register definitions
36803 + */
36804 +
36805 +#ifndef __ASM_PLAT_S3C64XX_REGS_GPIO_MEMPORT_H
36806 +#define __ASM_PLAT_S3C64XX_REGS_GPIO_MEMPORT_H __FILE__
36807 +
36808 +#define S3C64XX_MEM0CONSTOP S3C64XX_GPIOREG(0x1B0)
36809 +#define S3C64XX_MEM1CONSTOP S3C64XX_GPIOREG(0x1B4)
36810 +
36811 +#define S3C64XX_MEM0CONSLP0 S3C64XX_GPIOREG(0x1C0)
36812 +#define S3C64XX_MEM0CONSLP1 S3C64XX_GPIOREG(0x1C4)
36813 +#define S3C64XX_MEM1CONSLP S3C64XX_GPIOREG(0x1C8)
36814 +
36815 +#define S3C64XX_MEM0DRVCON S3C64XX_GPIOREG(0x1D0)
36816 +#define S3C64XX_MEM1DRVCON S3C64XX_GPIOREG(0x1D4)
36817 +
36818 +#endif /* __ASM_PLAT_S3C64XX_REGS_GPIO_MEMPORT_H */
36819 +
36820 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-modem.h
36821 ===================================================================
36822 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
36823 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-modem.h 2009-01-02 00:01:56.000000000 +0100
36824 @@ -0,0 +1,31 @@
36825 +/* arch/arm/plat-s3c64xx/include/plat/regs-modem.h
36826 + *
36827 + * Copyright 2008 Openmoko, Inc.
36828 + * Copyright 2008 Simtec Electronics
36829 + * http://armlinux.simtec.co.uk/
36830 + * Ben Dooks <ben@simtec.co.uk>
36831 + *
36832 + * S3C64XX - modem block registers
36833 + *
36834 + * This program is free software; you can redistribute it and/or modify
36835 + * it under the terms of the GNU General Public License version 2 as
36836 + * published by the Free Software Foundation.
36837 +*/
36838 +
36839 +#ifndef __PLAT_S3C64XX_REGS_MODEM_H
36840 +#define __PLAT_S3C64XX_REGS_MODEM_H __FILE__
36841 +
36842 +#define S3C64XX_MODEMREG(x) (S3C64XX_VA_MODEM + (x))
36843 +
36844 +#define S3C64XX_MODEM_INT2AP S3C64XX_MODEMREG(0x0)
36845 +#define S3C64XX_MODEM_INT2MODEM S3C64XX_MODEMREG(0x4)
36846 +#define S3C64XX_MODEM_MIFCON S3C64XX_MODEMREG(0x8)
36847 +#define S3C64XX_MODEM_MIFPCON S3C64XX_MODEMREG(0xC)
36848 +#define S3C64XX_MODEM_INTCLR S3C64XX_MODEMREG(0x10)
36849 +#define S3C64XX_MODEM_DMA_TXADDR S3C64XX_MODEMREG(0x14)
36850 +#define S3C64XX_MODEM_DMA_RXADDR S3C64XX_MODEMREG(0x18)
36851 +
36852 +#define MIFPCON_INT2M_LEVEL (1 << 4)
36853 +#define MIFPCON_LCD_BYPASS (1 << 3)
36854 +
36855 +#endif /* __PLAT_S3C64XX_REGS_MODEM_H */
36856 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-syscon-power.h
36857 ===================================================================
36858 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
36859 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-syscon-power.h 2009-01-02 00:01:56.000000000 +0100
36860 @@ -0,0 +1,116 @@
36861 +/* arch/arm/plat-s3c64xx/include/plat/regs-syscon-power.h
36862 + *
36863 + * Copyright 2008 Openmoko, Inc.
36864 + * Copyright 2008 Simtec Electronics
36865 + * http://armlinux.simtec.co.uk/
36866 + * Ben Dooks <ben@simtec.co.uk>
36867 + *
36868 + * S3C64XX - syscon power and sleep control registers
36869 + *
36870 + * This program is free software; you can redistribute it and/or modify
36871 + * it under the terms of the GNU General Public License version 2 as
36872 + * published by the Free Software Foundation.
36873 +*/
36874 +
36875 +#ifndef __PLAT_S3C64XX_REGS_SYSCON_POWER_H
36876 +#define __PLAT_S3C64XX_REGS_SYSCON_POWER_H __FILE__
36877 +
36878 +#define S3C64XX_PWR_CFG S3C_SYSREG(0x804)
36879 +
36880 +#define S3C64XX_PWRCFG_OSC_OTG_DISABLE (1 << 17)
36881 +#define S3C64XX_PWRCFG_MMC2_DISABLE (1 << 16)
36882 +#define S3C64XX_PWRCFG_MMC1_DISABLE (1 << 15)
36883 +#define S3C64XX_PWRCFG_MMC0_DISABLE (1 << 14)
36884 +#define S3C64XX_PWRCFG_HSI_DISABLE (1 << 13)
36885 +#define S3C64XX_PWRCFG_TS_DISABLE (1 << 12)
36886 +#define S3C64XX_PWRCFG_RTC_TICK_DISABLE (1 << 11)
36887 +#define S3C64XX_PWRCFG_RTC_ALARM_DISABLE (1 << 10)
36888 +#define S3C64XX_PWRCFG_MSM_DISABLE (1 << 9)
36889 +#define S3C64XX_PWRCFG_KEY_DISABLE (1 << 8)
36890 +#define S3C64XX_PWRCFG_BATF_DISABLE (1 << 7)
36891 +
36892 +#define S3C64XX_PWRCFG_CFG_WFI_MASK (0x3 << 5)
36893 +#define S3C64XX_PWRCFG_CFG_WFI_SHIFT (5)
36894 +#define S3C64XX_PWRCFG_CFG_WFI_IGNORE (0x0 << 5)
36895 +#define S3C64XX_PWRCFG_CFG_WFI_IDLE (0x1 << 5)
36896 +#define S3C64XX_PWRCFG_CFG_WFI_STOP (0x2 << 5)
36897 +#define S3C64XX_PWRCFG_CFG_WFI_SLEEP (0x3 << 5)
36898 +
36899 +#define S3C64XX_PWRCFG_CFG_BATFLT_MASK (0x3 << 3)
36900 +#define S3C64XX_PWRCFG_CFG_BATFLT_SHIFT (3)
36901 +#define S3C64XX_PWRCFG_CFG_BATFLT_IGNORE (0x0 << 3)
36902 +#define S3C64XX_PWRCFG_CFG_BATFLT_IRQ (0x1 << 3)
36903 +#define S3C64XX_PWRCFG_CFG_BATFLT_SLEEP (0x3 << 3)
36904 +
36905 +#define S3C64XX_PWRCFG_CFG_BAT_WAKE (1 << 2)
36906 +#define S3C64XX_PWRCFG_OSC27_EN (1 << 0)
36907 +
36908 +#define S3C64XX_EINT_MASK S3C_SYSREG(0x808)
36909 +
36910 +#define S3C64XX_NORMAL_CFG S3C_SYSREG(0x810)
36911 +
36912 +#define S3C64XX_NORMALCFG_IROM_ON (1 << 30)
36913 +#define S3C64XX_NORMALCFG_DOMAIN_ETM_ON (1 << 16)
36914 +#define S3C64XX_NORMALCFG_DOMAIN_S_ON (1 << 15)
36915 +#define S3C64XX_NORMALCFG_DOMAIN_F_ON (1 << 14)
36916 +#define S3C64XX_NORMALCFG_DOMAIN_P_ON (1 << 13)
36917 +#define S3C64XX_NORMALCFG_DOMAIN_I_ON (1 << 12)
36918 +#define S3C64XX_NORMALCFG_DOMAIN_G_ON (1 << 10)
36919 +#define S3C64XX_NORMALCFG_DOMAIN_V_ON (1 << 9)
36920 +
36921 +#define S3C64XX_STOP_CFG S3C_SYSREG(0x814)
36922 +
36923 +#define S3C64XX_STOPCFG_MEMORY_ARM_ON (1 << 29)
36924 +#define S3C64XX_STOPCFG_TOP_MEMORY_ON (1 << 20)
36925 +#define S3C64XX_STOPCFG_ARM_LOGIC_ON (1 << 17)
36926 +#define S3C64XX_STOPCFG_TOP_LOGIC_ON (1 << 8)
36927 +#define S3C64XX_STOPCFG_OSC_EN (1 << 0)
36928 +
36929 +#define S3C64XX_SLEEP_CFG S3C_SYSREG(0x818)
36930 +
36931 +#define S3C64XX_SLEEPCFG_OSC_EN (1 << 0)
36932 +
36933 +#define S3C64XX_STOP_MEM_CFG S3C_SYSREG(0x81c)
36934 +
36935 +#define S3C64XX_STOPMEMCFG_MODEMIF_RETAIN (1 << 6)
36936 +#define S3C64XX_STOPMEMCFG_HOSTIF_RETAIN (1 << 5)
36937 +#define S3C64XX_STOPMEMCFG_OTG_RETAIN (1 << 4)
36938 +#define S3C64XX_STOPMEMCFG_HSMCC_RETAIN (1 << 3)
36939 +#define S3C64XX_STOPMEMCFG_IROM_RETAIN (1 << 2)
36940 +#define S3C64XX_STOPMEMCFG_IRDA_RETAIN (1 << 1)
36941 +#define S3C64XX_STOPMEMCFG_NFCON_RETAIN (1 << 0)
36942 +
36943 +#define S3C64XX_OSC_STABLE S3C_SYSREG(0x824)
36944 +#define S3C64XX_PWR_STABLE S3C_SYSREG(0x828)
36945 +
36946 +#define S3C64XX_WAKEUP_STAT S3C_SYSREG(0x908)
36947 +
36948 +#define S3C64XX_WAKEUPSTAT_MMC2 (1 << 11)
36949 +#define S3C64XX_WAKEUPSTAT_MMC1 (1 << 10)
36950 +#define S3C64XX_WAKEUPSTAT_MMC0 (1 << 9)
36951 +#define S3C64XX_WAKEUPSTAT_HSI (1 << 8)
36952 +#define S3C64XX_WAKEUPSTAT_BATFLT (1 << 6)
36953 +#define S3C64XX_WAKEUPSTAT_MSM (1 << 5)
36954 +#define S3C64XX_WAKEUPSTAT_KEY (1 << 4)
36955 +#define S3C64XX_WAKEUPSTAT_TS (1 << 3)
36956 +#define S3C64XX_WAKEUPSTAT_RTC_TICK (1 << 2)
36957 +#define S3C64XX_WAKEUPSTAT_RTC_ALARM (1 << 1)
36958 +#define S3C64XX_WAKEUPSTAT_EINT (1 << 0)
36959 +
36960 +#define S3C64XX_BLK_PWR_STAT S3C_SYSREG(0x90c)
36961 +
36962 +#define S3C64XX_BLKPWRSTAT_G (1 << 7)
36963 +#define S3C64XX_BLKPWRSTAT_ETM (1 << 6)
36964 +#define S3C64XX_BLKPWRSTAT_S (1 << 5)
36965 +#define S3C64XX_BLKPWRSTAT_F (1 << 4)
36966 +#define S3C64XX_BLKPWRSTAT_P (1 << 3)
36967 +#define S3C64XX_BLKPWRSTAT_I (1 << 2)
36968 +#define S3C64XX_BLKPWRSTAT_V (1 << 1)
36969 +#define S3C64XX_BLKPWRSTAT_TOP (1 << 0)
36970 +
36971 +#define S3C64XX_INFORM0 S3C_SYSREG(0xA00)
36972 +#define S3C64XX_INFORM1 S3C_SYSREG(0xA04)
36973 +#define S3C64XX_INFORM2 S3C_SYSREG(0xA08)
36974 +#define S3C64XX_INFORM3 S3C_SYSREG(0xA0C)
36975 +
36976 +#endif /* __PLAT_S3C64XX_REGS_SYSCON_POWER_H */
36977 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-sys.h
36978 ===================================================================
36979 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
36980 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/regs-sys.h 2009-01-02 00:01:56.000000000 +0100
36981 @@ -0,0 +1,28 @@
36982 +/* arch/arm/plat-s3c64xx/include/plat/regs-sys.h
36983 + *
36984 + * Copyright 2008 Openmoko, Inc.
36985 + * Copyright 2008 Simtec Electronics
36986 + * Ben Dooks <ben@simtec.co.uk>
36987 + * http://armlinux.simtec.co.uk/
36988 + *
36989 + * S3C64XX system register definitions
36990 + *
36991 + * This program is free software; you can redistribute it and/or modify
36992 + * it under the terms of the GNU General Public License version 2 as
36993 + * published by the Free Software Foundation.
36994 +*/
36995 +
36996 +#ifndef __PLAT_REGS_SYS_H
36997 +#define __PLAT_REGS_SYS_H __FILE__
36998 +
36999 +#define S3C_SYSREG(x) (S3C_VA_SYS + (x))
37000 +
37001 +#define S3C64XX_AHB_CON0 S3C_SYSREG(0x100)
37002 +#define S3C64XX_AHB_CON1 S3C_SYSREG(0x104)
37003 +#define S3C64XX_AHB_CON2 S3C_SYSREG(0x108)
37004 +
37005 +#define S3C64XX_OTHERS S3C_SYSREG(0x900)
37006 +
37007 +#define S3C64XX_OTHERS_USBMASK (1 << 16)
37008 +
37009 +#endif /* _PLAT_REGS_SYS_H */
37010 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/s3c6400.h
37011 ===================================================================
37012 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
37013 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/s3c6400.h 2009-01-02 00:01:56.000000000 +0100
37014 @@ -0,0 +1,35 @@
37015 +/* arch/arm/plat-s3c64xx/include/plat/s3c6400.h
37016 + *
37017 + * Copyright 2008 Openmoko, Inc.
37018 + * Copyright 2008 Simtec Electronics
37019 + * Ben Dooks <ben@simtec.co.uk>
37020 + * http://armlinux.simtec.co.uk/
37021 + *
37022 + * Header file for s3c6400 cpu support
37023 + *
37024 + * This program is free software; you can redistribute it and/or modify
37025 + * it under the terms of the GNU General Public License version 2 as
37026 + * published by the Free Software Foundation.
37027 +*/
37028 +
37029 +/* Common init code for S3C6400 related SoCs */
37030 +
37031 +extern void s3c6400_common_init_uarts(struct s3c2410_uartcfg *cfg, int no);
37032 +extern void s3c6400_register_clocks(void);
37033 +extern void s3c6400_setup_clocks(void);
37034 +
37035 +#ifdef CONFIG_CPU_S3C6400
37036 +
37037 +extern int s3c6400_init(void);
37038 +extern void s3c6400_map_io(void);
37039 +extern void s3c6400_init_clocks(int xtal);
37040 +
37041 +#define s3c6400_init_uarts s3c6400_common_init_uarts
37042 +
37043 +#else
37044 +#define s3c6400_init_clocks NULL
37045 +#define s3c6400_init_uarts NULL
37046 +#define s3c6400_map_io NULL
37047 +#define s3c6400_init NULL
37048 +#endif
37049 +
37050 Index: linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/s3c6410.h
37051 ===================================================================
37052 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
37053 +++ linux-2.6.28/arch/arm/plat-s3c64xx/include/plat/s3c6410.h 2009-01-02 00:01:56.000000000 +0100
37054 @@ -0,0 +1,29 @@
37055 +/* arch/arm/plat-s3c64xx/include/plat/s3c6410.h
37056 + *
37057 + * Copyright 2008 Openmoko, Inc.
37058 + * Copyright 2008 Simtec Electronics
37059 + * Ben Dooks <ben@simtec.co.uk>
37060 + * http://armlinux.simtec.co.uk/
37061 + *
37062 + * Header file for s3c6410 cpu support
37063 + *
37064 + * This program is free software; you can redistribute it and/or modify
37065 + * it under the terms of the GNU General Public License version 2 as
37066 + * published by the Free Software Foundation.
37067 +*/
37068 +
37069 +#ifdef CONFIG_CPU_S3C6410
37070 +
37071 +extern int s3c6410_init(void);
37072 +extern void s3c6410_init_irq(void);
37073 +extern void s3c6410_map_io(void);
37074 +extern void s3c6410_init_clocks(int xtal);
37075 +
37076 +#define s3c6410_init_uarts s3c6400_common_init_uarts
37077 +
37078 +#else
37079 +#define s3c6410_init_clocks NULL
37080 +#define s3c6410_init_uarts NULL
37081 +#define s3c6410_map_io NULL
37082 +#define s3c6410_init NULL
37083 +#endif
37084 Index: linux-2.6.28/arch/arm/plat-s3c64xx/irq.c
37085 ===================================================================
37086 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
37087 +++ linux-2.6.28/arch/arm/plat-s3c64xx/irq.c 2009-01-02 00:01:56.000000000 +0100
37088 @@ -0,0 +1,256 @@
37089 +/* arch/arm/plat-s3c64xx/irq.c
37090 + *
37091 + * Copyright 2008 Openmoko, Inc.
37092 + * Copyright 2008 Simtec Electronics
37093 + * Ben Dooks <ben@simtec.co.uk>
37094 + * http://armlinux.simtec.co.uk/
37095 + *
37096 + * S3C64XX - Interrupt handling
37097 + *
37098 + * This program is free software; you can redistribute it and/or modify
37099 + * it under the terms of the GNU General Public License version 2 as
37100 + * published by the Free Software Foundation.
37101 + */
37102 +
37103 +#include <linux/kernel.h>
37104 +#include <linux/interrupt.h>
37105 +#include <linux/serial_core.h>
37106 +#include <linux/irq.h>
37107 +#include <linux/io.h>
37108 +
37109 +#include <asm/hardware/vic.h>
37110 +
37111 +#include <mach/map.h>
37112 +#include <plat/regs-serial.h>
37113 +#include <plat/regs-timer.h>
37114 +#include <plat/cpu.h>
37115 +
37116 +/* Timer interrupt handling */
37117 +
37118 +static void s3c_irq_demux_timer(unsigned int base_irq, unsigned int sub_irq)
37119 +{
37120 + generic_handle_irq(sub_irq);
37121 +}
37122 +
37123 +static void s3c_irq_demux_timer0(unsigned int irq, struct irq_desc *desc)
37124 +{
37125 + s3c_irq_demux_timer(irq, IRQ_TIMER0);
37126 +}
37127 +
37128 +static void s3c_irq_demux_timer1(unsigned int irq, struct irq_desc *desc)
37129 +{
37130 + s3c_irq_demux_timer(irq, IRQ_TIMER1);
37131 +}
37132 +
37133 +static void s3c_irq_demux_timer2(unsigned int irq, struct irq_desc *desc)
37134 +{
37135 + s3c_irq_demux_timer(irq, IRQ_TIMER2);
37136 +}
37137 +
37138 +static void s3c_irq_demux_timer3(unsigned int irq, struct irq_desc *desc)
37139 +{
37140 + s3c_irq_demux_timer(irq, IRQ_TIMER3);
37141 +}
37142 +
37143 +static void s3c_irq_demux_timer4(unsigned int irq, struct irq_desc *desc)
37144 +{
37145 + s3c_irq_demux_timer(irq, IRQ_TIMER4);
37146 +}
37147 +
37148 +/* We assume the IRQ_TIMER0..IRQ_TIMER4 range is continuous. */
37149 +
37150 +static void s3c_irq_timer_mask(unsigned int irq)
37151 +{
37152 + u32 reg = __raw_readl(S3C64XX_TINT_CSTAT);
37153 +
37154 + reg &= 0x1f; /* mask out pending interrupts */
37155 + reg &= ~(1 << (irq - IRQ_TIMER0));
37156 + __raw_writel(reg, S3C64XX_TINT_CSTAT);
37157 +}
37158 +
37159 +static void s3c_irq_timer_unmask(unsigned int irq)
37160 +{
37161 + u32 reg = __raw_readl(S3C64XX_TINT_CSTAT);
37162 +
37163 + reg &= 0x1f; /* mask out pending interrupts */
37164 + reg |= 1 << (irq - IRQ_TIMER0);
37165 + __raw_writel(reg, S3C64XX_TINT_CSTAT);
37166 +}
37167 +
37168 +static void s3c_irq_timer_ack(unsigned int irq)
37169 +{
37170 + u32 reg = __raw_readl(S3C64XX_TINT_CSTAT);
37171 +
37172 + reg &= 0x1f;
37173 + reg |= (1 << 5) << (irq - IRQ_TIMER0);
37174 + __raw_writel(reg, S3C64XX_TINT_CSTAT);
37175 +}
37176 +
37177 +static struct irq_chip s3c_irq_timer = {
37178 + .name = "s3c-timer",
37179 + .mask = s3c_irq_timer_mask,
37180 + .unmask = s3c_irq_timer_unmask,
37181 + .ack = s3c_irq_timer_ack,
37182 +};
37183 +
37184 +struct uart_irq {
37185 + void __iomem *regs;
37186 + unsigned int base_irq;
37187 + unsigned int parent_irq;
37188 +};
37189 +
37190 +/* Note, we make use of the fact that the parent IRQs, IRQ_UART[0..3]
37191 + * are consecutive when looking up the interrupt in the demux routines.
37192 + */
37193 +static struct uart_irq uart_irqs[] = {
37194 + [0] = {
37195 + .regs = S3C_VA_UART0,
37196 + .base_irq = IRQ_S3CUART_BASE0,
37197 + .parent_irq = IRQ_UART0,
37198 + },
37199 + [1] = {
37200 + .regs = S3C_VA_UART1,
37201 + .base_irq = IRQ_S3CUART_BASE1,
37202 + .parent_irq = IRQ_UART1,
37203 + },
37204 + [2] = {
37205 + .regs = S3C_VA_UART2,
37206 + .base_irq = IRQ_S3CUART_BASE2,
37207 + .parent_irq = IRQ_UART2,
37208 + },
37209 + [3] = {
37210 + .regs = S3C_VA_UART3,
37211 + .base_irq = IRQ_S3CUART_BASE3,
37212 + .parent_irq = IRQ_UART3,
37213 + },
37214 +};
37215 +
37216 +static inline void __iomem *s3c_irq_uart_base(unsigned int irq)
37217 +{
37218 + struct uart_irq *uirq = get_irq_chip_data(irq);
37219 + return uirq->regs;
37220 +}
37221 +
37222 +static inline unsigned int s3c_irq_uart_bit(unsigned int irq)
37223 +{
37224 + return irq & 3;
37225 +}
37226 +
37227 +/* UART interrupt registers, not worth adding to seperate include header */
37228 +
37229 +static void s3c_irq_uart_mask(unsigned int irq)
37230 +{
37231 + void __iomem *regs = s3c_irq_uart_base(irq);
37232 + unsigned int bit = s3c_irq_uart_bit(irq);
37233 + u32 reg;
37234 +
37235 + reg = __raw_readl(regs + S3C64XX_UINTM);
37236 + reg |= (1 << bit);
37237 + __raw_writel(reg, regs + S3C64XX_UINTM);
37238 +}
37239 +
37240 +static void s3c_irq_uart_maskack(unsigned int irq)
37241 +{
37242 + void __iomem *regs = s3c_irq_uart_base(irq);
37243 + unsigned int bit = s3c_irq_uart_bit(irq);
37244 + u32 reg;
37245 +
37246 + reg = __raw_readl(regs + S3C64XX_UINTM);
37247 + reg |= (1 << bit);
37248 + __raw_writel(reg, regs + S3C64XX_UINTM);
37249 + __raw_writel(1 << bit, regs + S3C64XX_UINTP);
37250 +}
37251 +
37252 +static void s3c_irq_uart_unmask(unsigned int irq)
37253 +{
37254 + void __iomem *regs = s3c_irq_uart_base(irq);
37255 + unsigned int bit = s3c_irq_uart_bit(irq);
37256 + u32 reg;
37257 +
37258 + reg = __raw_readl(regs + S3C64XX_UINTM);
37259 + reg &= ~(1 << bit);
37260 + __raw_writel(reg, regs + S3C64XX_UINTM);
37261 +}
37262 +
37263 +static void s3c_irq_uart_ack(unsigned int irq)
37264 +{
37265 + void __iomem *regs = s3c_irq_uart_base(irq);
37266 + unsigned int bit = s3c_irq_uart_bit(irq);
37267 +
37268 + __raw_writel(1 << bit, regs + S3C64XX_UINTP);
37269 +}
37270 +
37271 +static void s3c_irq_demux_uart(unsigned int irq, struct irq_desc *desc)
37272 +{
37273 + struct uart_irq *uirq = &uart_irqs[irq - IRQ_UART0];
37274 + u32 pend = __raw_readl(uirq->regs + S3C64XX_UINTP);
37275 + int base = uirq->base_irq;
37276 +
37277 + if (pend & (1 << 0))
37278 + generic_handle_irq(base);
37279 + if (pend & (1 << 1))
37280 + generic_handle_irq(base + 1);
37281 + if (pend & (1 << 2))
37282 + generic_handle_irq(base + 2);
37283 + if (pend & (1 << 3))
37284 + generic_handle_irq(base + 3);
37285 +}
37286 +
37287 +static struct irq_chip s3c_irq_uart = {
37288 + .name = "s3c-uart",
37289 + .mask = s3c_irq_uart_mask,
37290 + .unmask = s3c_irq_uart_unmask,
37291 + .mask_ack = s3c_irq_uart_maskack,
37292 + .ack = s3c_irq_uart_ack,
37293 +};
37294 +
37295 +static void __init s3c64xx_uart_irq(struct uart_irq *uirq)
37296 +{
37297 + void *reg_base = uirq->regs;
37298 + unsigned int irq;
37299 + int offs;
37300 +
37301 + /* mask all interrupts at the start. */
37302 + __raw_writel(0xf, reg_base + S3C64XX_UINTM);
37303 +
37304 + for (offs = 0; offs < 3; offs++) {
37305 + irq = uirq->base_irq + offs;
37306 +
37307 + set_irq_chip(irq, &s3c_irq_uart);
37308 + set_irq_chip_data(irq, uirq);
37309 + set_irq_handler(irq, handle_level_irq);
37310 + set_irq_flags(irq, IRQF_VALID);
37311 + }
37312 +
37313 + set_irq_chained_handler(uirq->parent_irq, s3c_irq_demux_uart);
37314 +}
37315 +
37316 +void __init s3c64xx_init_irq(u32 vic0_valid, u32 vic1_valid)
37317 +{
37318 + int uart, irq;
37319 +
37320 + printk(KERN_DEBUG "%s: initialising interrupts\n", __func__);
37321 +
37322 + /* initialise the pair of VICs */
37323 + vic_init(S3C_VA_VIC0, S3C_VIC0_BASE, vic0_valid);
37324 + vic_init(S3C_VA_VIC1, S3C_VIC1_BASE, vic1_valid);
37325 +
37326 + /* add the timer sub-irqs */
37327 +
37328 + set_irq_chained_handler(IRQ_TIMER0_VIC, s3c_irq_demux_timer0);
37329 + set_irq_chained_handler(IRQ_TIMER1_VIC, s3c_irq_demux_timer1);
37330 + set_irq_chained_handler(IRQ_TIMER2_VIC, s3c_irq_demux_timer2);
37331 + set_irq_chained_handler(IRQ_TIMER3_VIC, s3c_irq_demux_timer3);
37332 + set_irq_chained_handler(IRQ_TIMER4_VIC, s3c_irq_demux_timer4);
37333 +
37334 + for (irq = IRQ_TIMER0; irq <= IRQ_TIMER4; irq++) {
37335 + set_irq_chip(irq, &s3c_irq_timer);
37336 + set_irq_handler(irq, handle_level_irq);
37337 + set_irq_flags(irq, IRQF_VALID);
37338 + }
37339 +
37340 + for (uart = 0; uart < ARRAY_SIZE(uart_irqs); uart++)
37341 + s3c64xx_uart_irq(&uart_irqs[uart]);
37342 +}
37343 +
37344 +
37345 Index: linux-2.6.28/arch/arm/plat-s3c64xx/irq-eint.c
37346 ===================================================================
37347 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
37348 +++ linux-2.6.28/arch/arm/plat-s3c64xx/irq-eint.c 2009-01-02 00:01:56.000000000 +0100
37349 @@ -0,0 +1,204 @@
37350 +/* arch/arm/plat-s3c64xx/irq-eint.c
37351 + *
37352 + * Copyright 2008 Openmoko, Inc.
37353 + * Copyright 2008 Simtec Electronics
37354 + * Ben Dooks <ben@simtec.co.uk>
37355 + * http://armlinux.simtec.co.uk/
37356 + *
37357 + * S3C64XX - Interrupt handling for IRQ_EINT(x)
37358 + *
37359 + * This program is free software; you can redistribute it and/or modify
37360 + * it under the terms of the GNU General Public License version 2 as
37361 + * published by the Free Software Foundation.
37362 + */
37363 +
37364 +#include <linux/kernel.h>
37365 +#include <linux/interrupt.h>
37366 +#include <linux/gpio.h>
37367 +#include <linux/irq.h>
37368 +#include <linux/io.h>
37369 +#include <linux/gpio.h>
37370 +
37371 +#include <asm/hardware/vic.h>
37372 +
37373 +#include <plat/regs-irqtype.h>
37374 +#include <plat/regs-gpio.h>
37375 +#include <plat/gpio-cfg.h>
37376 +
37377 +#include <mach/map.h>
37378 +#include <plat/cpu.h>
37379 +#include <plat/pm.h>
37380 +
37381 +#define eint_offset(irq) ((irq) - IRQ_EINT(0))
37382 +#define eint_irq_to_bit(irq) (1 << eint_offset(irq))
37383 +
37384 +static inline void s3c_irq_eint_mask(unsigned int irq)
37385 +{
37386 + u32 mask;
37387 +
37388 + mask = __raw_readl(S3C64XX_EINT0MASK);
37389 + mask |= eint_irq_to_bit(irq);
37390 + __raw_writel(mask, S3C64XX_EINT0MASK);
37391 +}
37392 +
37393 +static void s3c_irq_eint_unmask(unsigned int irq)
37394 +{
37395 + u32 mask;
37396 +
37397 + mask = __raw_readl(S3C64XX_EINT0MASK);
37398 + mask &= ~eint_irq_to_bit(irq);
37399 + __raw_writel(mask, S3C64XX_EINT0MASK);
37400 +}
37401 +
37402 +static inline void s3c_irq_eint_ack(unsigned int irq)
37403 +{
37404 + __raw_writel(eint_irq_to_bit(irq), S3C64XX_EINT0PEND);
37405 +}
37406 +
37407 +static void s3c_irq_eint_maskack(unsigned int irq)
37408 +{
37409 + /* compiler should in-line these */
37410 + s3c_irq_eint_mask(irq);
37411 + s3c_irq_eint_ack(irq);
37412 +}
37413 +
37414 +static int s3c_irq_eint_set_type(unsigned int irq, unsigned int type)
37415 +{
37416 + int offs = eint_offset(irq);
37417 + int pin;
37418 + int shift;
37419 + u32 ctrl, mask;
37420 + u32 newvalue = 0;
37421 + void __iomem *reg;
37422 +
37423 + if (offs > 27)
37424 + return -EINVAL;
37425 +
37426 + if (offs <= 15)
37427 + reg = S3C64XX_EINT0CON0;
37428 + else
37429 + reg = S3C64XX_EINT0CON1;
37430 +
37431 + switch (type) {
37432 + case IRQ_TYPE_NONE:
37433 + printk(KERN_WARNING "No edge setting!\n");
37434 + break;
37435 +
37436 + case IRQ_TYPE_EDGE_RISING:
37437 + newvalue = S3C2410_EXTINT_RISEEDGE;
37438 + break;
37439 +
37440 + case IRQ_TYPE_EDGE_FALLING:
37441 + newvalue = S3C2410_EXTINT_FALLEDGE;
37442 + break;
37443 +
37444 + case IRQ_TYPE_EDGE_BOTH:
37445 + newvalue = S3C2410_EXTINT_BOTHEDGE;
37446 + break;
37447 +
37448 + case IRQ_TYPE_LEVEL_LOW:
37449 + newvalue = S3C2410_EXTINT_LOWLEV;
37450 + break;
37451 +
37452 + case IRQ_TYPE_LEVEL_HIGH:
37453 + newvalue = S3C2410_EXTINT_HILEV;
37454 + break;
37455 +
37456 + default:
37457 + printk(KERN_ERR "No such irq type %d", type);
37458 + return -1;
37459 + }
37460 +
37461 + shift = (offs / 2) * 4;
37462 + mask = 0x7 << shift;
37463 +
37464 + ctrl = __raw_readl(reg);
37465 + ctrl &= ~mask;
37466 + ctrl |= newvalue << shift;
37467 + __raw_writel(ctrl, reg);
37468 +
37469 + /* set the GPIO pin appropriately */
37470 +
37471 + if (offs < 23)
37472 + pin = S3C64XX_GPN(offs);
37473 + else
37474 + pin = S3C64XX_GPM(offs - 23);
37475 +
37476 + s3c_gpio_cfgpin(pin, S3C_GPIO_SFN(2));
37477 +
37478 + return 0;
37479 +}
37480 +
37481 +static struct irq_chip s3c_irq_eint = {
37482 + .name = "s3c-eint",
37483 + .mask = s3c_irq_eint_mask,
37484 + .unmask = s3c_irq_eint_unmask,
37485 + .mask_ack = s3c_irq_eint_maskack,
37486 + .ack = s3c_irq_eint_ack,
37487 + .set_type = s3c_irq_eint_set_type,
37488 + .set_wake = s3c_irqext_wake,
37489 +};
37490 +
37491 +/* s3c_irq_demux_eint
37492 + *
37493 + * This function demuxes the IRQ from the group0 external interrupts,
37494 + * from IRQ_EINT(0) to IRQ_EINT(27). It is designed to be inlined into
37495 + * the specific handlers s3c_irq_demux_eintX_Y.
37496 + */
37497 +static inline void s3c_irq_demux_eint(unsigned int start, unsigned int end)
37498 +{
37499 + u32 status = __raw_readl(S3C64XX_EINT0PEND);
37500 + u32 mask = __raw_readl(S3C64XX_EINT0MASK);
37501 + unsigned int irq;
37502 +
37503 + status &= ~mask;
37504 + status >>= start;
37505 + status &= (1 << (end - start + 1)) - 1;
37506 +
37507 + for (irq = IRQ_EINT(start); irq <= IRQ_EINT(end); irq++) {
37508 + if (status & 1)
37509 + generic_handle_irq(irq);
37510 +
37511 + status >>= 1;
37512 + }
37513 +}
37514 +
37515 +static void s3c_irq_demux_eint0_3(unsigned int irq, struct irq_desc *desc)
37516 +{
37517 + s3c_irq_demux_eint(0, 3);
37518 +}
37519 +
37520 +static void s3c_irq_demux_eint4_11(unsigned int irq, struct irq_desc *desc)
37521 +{
37522 + s3c_irq_demux_eint(4, 11);
37523 +}
37524 +
37525 +static void s3c_irq_demux_eint12_19(unsigned int irq, struct irq_desc *desc)
37526 +{
37527 + s3c_irq_demux_eint(12, 19);
37528 +}
37529 +
37530 +static void s3c_irq_demux_eint20_27(unsigned int irq, struct irq_desc *desc)
37531 +{
37532 + s3c_irq_demux_eint(20, 27);
37533 +}
37534 +
37535 +int __init s3c64xx_init_irq_eint(void)
37536 +{
37537 + int irq;
37538 +
37539 + for (irq = IRQ_EINT(0); irq <= IRQ_EINT(27); irq++) {
37540 + set_irq_chip(irq, &s3c_irq_eint);
37541 + set_irq_handler(irq, handle_level_irq);
37542 + set_irq_flags(irq, IRQF_VALID);
37543 + }
37544 +
37545 + set_irq_chained_handler(IRQ_EINT0_3, s3c_irq_demux_eint0_3);
37546 + set_irq_chained_handler(IRQ_EINT4_11, s3c_irq_demux_eint4_11);
37547 + set_irq_chained_handler(IRQ_EINT12_19, s3c_irq_demux_eint12_19);
37548 + set_irq_chained_handler(IRQ_EINT20_27, s3c_irq_demux_eint20_27);
37549 +
37550 + return 0;
37551 +}
37552 +
37553 +arch_initcall(s3c64xx_init_irq_eint);
37554 Index: linux-2.6.28/arch/arm/plat-s3c64xx/irq-pm.c
37555 ===================================================================
37556 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
37557 +++ linux-2.6.28/arch/arm/plat-s3c64xx/irq-pm.c 2009-01-02 00:01:56.000000000 +0100
37558 @@ -0,0 +1,173 @@
37559 +/* arch/arm/plat-s3c64xx/irq-pm.c
37560 + *
37561 + * Copyright 2008 Openmoko, Inc.
37562 + * Copyright 2008 Simtec Electronics
37563 + * Ben Dooks <ben@simtec.co.uk>
37564 + * http://armlinux.simtec.co.uk/
37565 + *
37566 + * S3C64XX - Interrupt handling Power Management
37567 + *
37568 + * This program is free software; you can redistribute it and/or modify
37569 + * it under the terms of the GNU General Public License version 2 as
37570 + * published by the Free Software Foundation.
37571 + */
37572 +
37573 +#include <linux/kernel.h>
37574 +#include <linux/sysdev.h>
37575 +#include <linux/interrupt.h>
37576 +#include <linux/serial_core.h>
37577 +#include <linux/irq.h>
37578 +#include <linux/io.h>
37579 +
37580 +#include <asm/hardware/vic.h>
37581 +
37582 +#include <mach/map.h>
37583 +
37584 +#include <plat/regs-serial.h>
37585 +#include <plat/regs-timer.h>
37586 +#include <plat/regs-gpio.h>
37587 +#include <plat/cpu.h>
37588 +#include <plat/pm.h>
37589 +
37590 +/* We handled all the IRQ types in this code, to save having to make several
37591 + * small files to handle each different type separately. Having the EINT_GRP
37592 + * code here shouldn't be as much bloat as the IRQ table space needed when
37593 + * they are enabled. The added benefit is we ensure that these registers are
37594 + * in the same state as we suspended.
37595 + */
37596 +
37597 +static struct sleep_save irq_save[] = {
37598 + SAVE_ITEM(S3C64XX_PRIORITY),
37599 + SAVE_ITEM(S3C64XX_EINT0CON0),
37600 + SAVE_ITEM(S3C64XX_EINT0CON1),
37601 + SAVE_ITEM(S3C64XX_EINT0FLTCON0),
37602 + SAVE_ITEM(S3C64XX_EINT0FLTCON1),
37603 + SAVE_ITEM(S3C64XX_EINT0FLTCON2),
37604 + SAVE_ITEM(S3C64XX_EINT0FLTCON3),
37605 + SAVE_ITEM(S3C64XX_EINT0MASK),
37606 + SAVE_ITEM(S3C64XX_TINT_CSTAT),
37607 +};
37608 +
37609 +static struct irq_grp_save {
37610 + u32 fltcon;
37611 + u32 con;
37612 + u32 mask;
37613 +} eint_grp_save[5];
37614 +
37615 +struct irq_vic_save {
37616 + u32 int_select;
37617 + u32 int_enable;
37618 + u32 soft_int;
37619 + u32 protect;
37620 + u32 vect_addr[32];
37621 + u32 vect_cntl[32];
37622 +};
37623 +
37624 +static struct irq_vic_save irq_pm_vic0_save;
37625 +static struct irq_vic_save irq_pm_vic1_save;
37626 +
37627 +static u32 irq_uart_mask[CONFIG_SERIAL_SAMSUNG_UARTS];
37628 +
37629 +static void s3c64xx_vic_save(void __iomem *base, struct irq_vic_save *save)
37630 +{
37631 + int v;
37632 +
37633 + save->int_select = readl(base + VIC_INT_SELECT);
37634 + save->int_enable = readl(base + VIC_INT_ENABLE);
37635 + save->soft_int = readl(base + VIC_INT_SOFT);
37636 + save->protect = readl(base + VIC_PROTECT);
37637 +
37638 + S3C_PMDBG("%s: select=%08x, enable=%08x, protect=%08x\n", __func__,
37639 + save->int_select, save->int_enable, save->protect);
37640 +
37641 + for (v = 0; v < ARRAY_SIZE(save->vect_addr); v++) {
37642 + save->vect_addr[v] = readl(base + VIC_VECT_ADDR0 + (v * 4));
37643 + save->vect_cntl[v] = readl(base + VIC_VECT_CNTL0 + (v * 4));
37644 + }
37645 +}
37646 +
37647 +static void s3c64xx_vic_restore(void __iomem *base, struct irq_vic_save *save)
37648 +{
37649 + int v;
37650 +
37651 + writel(save->int_select, base + VIC_INT_SELECT);
37652 + writel(save->protect, base + VIC_PROTECT);
37653 +
37654 + /* set the enabled ints and then clear the non-enabled */
37655 + writel(save->int_enable, base + VIC_INT_ENABLE);
37656 + writel(~save->int_enable, base + VIC_INT_ENABLE_CLEAR);
37657 +
37658 + /* and the same for the soft-int register */
37659 +
37660 + writel(save->soft_int, base + VIC_INT_SOFT);
37661 + writel(~save->soft_int, base + VIC_INT_SOFT_CLEAR);
37662 +
37663 + S3C_PMDBG("%s: vic int_enable=%08x\n", __func__, readl(base + VIC_INT_ENABLE));
37664 +
37665 + for (v = 0; v < ARRAY_SIZE(save->vect_addr); v++) {
37666 + writel(save->vect_addr[v], base + VIC_VECT_ADDR0 + (v * 4));
37667 + writel(save->vect_cntl[v], base + VIC_VECT_CNTL0 + (v * 4));
37668 + }
37669 +}
37670 +
37671 +static int s3c64xx_irq_pm_suspend(struct sys_device *dev, pm_message_t state)
37672 +{
37673 + struct irq_grp_save *grp = eint_grp_save;
37674 + int i;
37675 +
37676 + S3C_PMDBG("%s: suspending IRQs\n", __func__);
37677 +
37678 + s3c64xx_vic_save(S3C_VA_VIC0, &irq_pm_vic0_save);
37679 + s3c64xx_vic_save(S3C_VA_VIC1, &irq_pm_vic1_save);
37680 +
37681 + s3c_pm_do_save(irq_save, ARRAY_SIZE(irq_save));
37682 +
37683 + for (i = 0; i < CONFIG_SERIAL_SAMSUNG_UARTS; i++)
37684 + irq_uart_mask[i] = __raw_readl(S3C_VA_UARTx(i) + S3C64XX_UINTM);
37685 +
37686 + for (i = 0; i < ARRAY_SIZE(eint_grp_save); i++, grp++) {
37687 + grp->con = __raw_readl(S3C64XX_EINT12CON + (i * 4));
37688 + grp->mask = __raw_readl(S3C64XX_EINT12MASK + (i * 4));
37689 + grp->fltcon = __raw_readl(S3C64XX_EINT12FLTCON + (i * 4));
37690 + }
37691 +
37692 + return 0;
37693 +}
37694 +
37695 +static int s3c64xx_irq_pm_resume(struct sys_device *dev)
37696 +{
37697 + struct irq_grp_save *grp = eint_grp_save;
37698 + int i;
37699 +
37700 + S3C_PMDBG("%s: resuming IRQs\n", __func__);
37701 +
37702 + s3c_pm_do_restore(irq_save, ARRAY_SIZE(irq_save));
37703 +
37704 + s3c64xx_vic_restore(S3C_VA_VIC0, &irq_pm_vic0_save);
37705 + s3c64xx_vic_restore(S3C_VA_VIC1, &irq_pm_vic1_save);
37706 +
37707 + for (i = 0; i < CONFIG_SERIAL_SAMSUNG_UARTS; i++)
37708 + __raw_writel(irq_uart_mask[i], S3C_VA_UARTx(i) + S3C64XX_UINTM);
37709 +
37710 + for (i = 0; i < ARRAY_SIZE(eint_grp_save); i++, grp++) {
37711 + __raw_writel(grp->con, S3C64XX_EINT12CON + (i * 4));
37712 + __raw_writel(grp->mask, S3C64XX_EINT12MASK + (i * 4));
37713 + __raw_writel(grp->fltcon, S3C64XX_EINT12FLTCON + (i * 4));
37714 + }
37715 +
37716 + S3C_PMDBG("%s: IRQ configuration restored\n", __func__);
37717 + return 0;
37718 +}
37719 +
37720 +static struct sysdev_driver s3c64xx_irq_driver = {
37721 + .suspend = s3c64xx_irq_pm_suspend,
37722 + .resume = s3c64xx_irq_pm_resume,
37723 +};
37724 +
37725 +static int __init s3c64xx_irq_pm_init(void)
37726 +{
37727 + return sysdev_driver_register(&s3c64xx_sysclass, &s3c64xx_irq_driver);
37728 +}
37729 +
37730 +arch_initcall(s3c64xx_irq_pm_init);
37731 +
37732 Index: linux-2.6.28/arch/arm/plat-s3c64xx/Kconfig
37733 ===================================================================
37734 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
37735 +++ linux-2.6.28/arch/arm/plat-s3c64xx/Kconfig 2009-01-02 00:01:56.000000000 +0100
37736 @@ -0,0 +1,61 @@
37737 +# arch/arm/plat-s3c64xx/Kconfig
37738 +#
37739 +# Copyright 2008 Openmoko, Inc.
37740 +# Copyright 2008 Simtec Electronics
37741 +# Ben Dooks <ben@simtec.co.uk>
37742 +#
37743 +# Licensed under GPLv2
37744 +
37745 +config PLAT_S3C64XX
37746 + bool
37747 + depends on ARCH_S3C64XX
37748 + select PLAT_S3C
37749 + select ARM_VIC
37750 + default y
37751 + select NO_IOPORT
37752 + select ARCH_REQUIRE_GPIOLIB
37753 + select S3C_GPIO_TRACK
37754 + select S3C_GPIO_PULL_UPDOWN
37755 + select S3C_GPIO_CFG_S3C24XX
37756 + select S3C_GPIO_CFG_S3C64XX
37757 + help
37758 + Base platform code for any Samsung S3C64XX device
37759 +
37760 +if PLAT_S3C64XX
37761 +
37762 +# Configuration options shared by all S3C64XX implementations
37763 +
37764 +config CPU_S3C6400_INIT
37765 + bool
37766 + help
37767 + Common initialisation code for the S3C6400 that is shared
37768 + by other CPUs in the series, such as the S3C6410.
37769 +
37770 +config CPU_S3C6400_CLOCK
37771 + bool
37772 + help
37773 + Common clock support code for the S3C6400 that is shared
37774 + by other CPUs in the series, such as the S3C6410.
37775 +
37776 +# platform specific device setup
37777 +
37778 +config S3C64XX_SETUP_I2C0
37779 + bool
37780 + default y
37781 + help
37782 + Common setup code for i2c bus 0.
37783 +
37784 + Note, currently since i2c0 is always compiled, this setup helper
37785 + is always compiled with it.
37786 +
37787 +config S3C64XX_SETUP_I2C1
37788 + bool
37789 + help
37790 + Common setup code for i2c bus 1.
37791 +
37792 +config S3C64XX_SETUP_FB_24BPP
37793 + bool
37794 + help
37795 + Common setup code for S3C64XX with an 24bpp RGB display helper.
37796 +
37797 +endif
37798 Index: linux-2.6.28/arch/arm/plat-s3c64xx/Makefile
37799 ===================================================================
37800 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
37801 +++ linux-2.6.28/arch/arm/plat-s3c64xx/Makefile 2009-01-02 00:01:56.000000000 +0100
37802 @@ -0,0 +1,37 @@
37803 +# arch/arm/plat-s3c64xx/Makefile
37804 +#
37805 +# Copyright 2008 Openmoko, Inc.
37806 +# Copyright 2008 Simtec Electronics
37807 +#
37808 +# Licensed under GPLv2
37809 +
37810 +obj-y :=
37811 +obj-m :=
37812 +obj-n := dummy.o
37813 +obj- :=
37814 +
37815 +# Core files
37816 +
37817 +obj-y += dev-uart.o
37818 +obj-y += cpu.o
37819 +obj-y += irq.o
37820 +obj-y += irq-eint.o
37821 +obj-y += clock.o
37822 +obj-y += gpiolib.o
37823 +
37824 +# CPU support
37825 +
37826 +obj-$(CONFIG_CPU_S3C6400_INIT) += s3c6400-init.o
37827 +obj-$(CONFIG_CPU_S3C6400_CLOCK) += s3c6400-clock.o
37828 +
37829 +# PM support
37830 +
37831 +obj-$(CONFIG_PM) += pm.o
37832 +obj-$(CONFIG_PM) += sleep.o
37833 +obj-$(CONFIG_PM) += irq-pm.o
37834 +
37835 +# Device setup
37836 +
37837 +obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o
37838 +obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1.o
37839 +obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o
37840 Index: linux-2.6.28/arch/arm/plat-s3c64xx/pm.c
37841 ===================================================================
37842 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
37843 +++ linux-2.6.28/arch/arm/plat-s3c64xx/pm.c 2009-01-02 00:01:56.000000000 +0100
37844 @@ -0,0 +1,177 @@
37845 +/* linux/arch/arm/plat-s3c64xx/pm.c
37846 + *
37847 + * Copyright 2008 Openmoko, Inc.
37848 + * Copyright 2008 Simtec Electronics
37849 + * Ben Dooks <ben@simtec.co.uk>
37850 + * http://armlinux.simtec.co.uk/
37851 + *
37852 + * S3C64XX CPU PM support.
37853 + *
37854 + * This program is free software; you can redistribute it and/or modify
37855 + * it under the terms of the GNU General Public License version 2 as
37856 + * published by the Free Software Foundation.
37857 +*/
37858 +
37859 +#include <linux/init.h>
37860 +#include <linux/suspend.h>
37861 +#include <linux/serial_core.h>
37862 +#include <linux/io.h>
37863 +
37864 +#include <mach/map.h>
37865 +
37866 +#include <plat/pm.h>
37867 +#include <plat/regs-sys.h>
37868 +#include <plat/regs-gpio.h>
37869 +#include <plat/regs-clock.h>
37870 +#include <plat/regs-modem.h>
37871 +#include <plat/regs-syscon-power.h>
37872 +#include <plat/regs-gpio-memport.h>
37873 +
37874 +#ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK
37875 +#include <plat/gpio-bank-n.h>
37876 +
37877 +void s3c_pm_debug_smdkled(u32 set, u32 clear)
37878 +{
37879 + unsigned long flags;
37880 + u32 reg;
37881 +
37882 + local_irq_save(flags);
37883 + reg = __raw_readl(S3C64XX_GPNCON);
37884 + reg &= ~(S3C64XX_GPN_CONMASK(12) | S3C64XX_GPN_CONMASK(13) |
37885 + S3C64XX_GPN_CONMASK(14) | S3C64XX_GPN_CONMASK(15));
37886 + reg |= S3C64XX_GPN_OUTPUT(12) | S3C64XX_GPN_OUTPUT(13) |
37887 + S3C64XX_GPN_OUTPUT(14) | S3C64XX_GPN_OUTPUT(15);
37888 + __raw_writel(reg, S3C64XX_GPNCON);
37889 +
37890 + reg = __raw_readl(S3C64XX_GPNDAT);
37891 + reg &= ~(clear << 12);
37892 + reg |= set << 12;
37893 + __raw_writel(reg, S3C64XX_GPNDAT);
37894 +
37895 + local_irq_restore(flags);
37896 +}
37897 +#endif
37898 +
37899 +static struct sleep_save core_save[] = {
37900 + SAVE_ITEM(S3C_APLL_LOCK),
37901 + SAVE_ITEM(S3C_MPLL_LOCK),
37902 + SAVE_ITEM(S3C_EPLL_LOCK),
37903 + SAVE_ITEM(S3C_CLK_SRC),
37904 + SAVE_ITEM(S3C_CLK_DIV0),
37905 + SAVE_ITEM(S3C_CLK_DIV1),
37906 + SAVE_ITEM(S3C_CLK_DIV2),
37907 + SAVE_ITEM(S3C_CLK_OUT),
37908 + SAVE_ITEM(S3C_HCLK_GATE),
37909 + SAVE_ITEM(S3C_PCLK_GATE),
37910 + SAVE_ITEM(S3C_SCLK_GATE),
37911 + SAVE_ITEM(S3C_MEM0_GATE),
37912 +
37913 + SAVE_ITEM(S3C_EPLL_CON1),
37914 + SAVE_ITEM(S3C_EPLL_CON0),
37915 +
37916 + SAVE_ITEM(S3C64XX_MEM0DRVCON),
37917 + SAVE_ITEM(S3C64XX_MEM1DRVCON),
37918 +
37919 +#ifndef CONFIG_CPU_FREQ
37920 + SAVE_ITEM(S3C_APLL_CON),
37921 + SAVE_ITEM(S3C_MPLL_CON),
37922 +#endif
37923 +};
37924 +
37925 +static struct sleep_save misc_save[] = {
37926 + SAVE_ITEM(S3C64XX_AHB_CON0),
37927 + SAVE_ITEM(S3C64XX_AHB_CON1),
37928 + SAVE_ITEM(S3C64XX_AHB_CON2),
37929 +
37930 + SAVE_ITEM(S3C64XX_MODEM_MIFPCON),
37931 + SAVE_ITEM(S3C64XX_SPCON),
37932 +
37933 + SAVE_ITEM(S3C64XX_MEM0CONSTOP),
37934 + SAVE_ITEM(S3C64XX_MEM1CONSTOP),
37935 + SAVE_ITEM(S3C64XX_MEM0CONSLP0),
37936 + SAVE_ITEM(S3C64XX_MEM0CONSLP1),
37937 + SAVE_ITEM(S3C64XX_MEM1CONSLP),
37938 +};
37939 +
37940 +void s3c_pm_configure_extint(void)
37941 +{
37942 + __raw_writel(s3c_irqwake_eintmask, S3C64XX_EINT_MASK);
37943 +}
37944 +
37945 +void s3c_pm_restore_core(void)
37946 +{
37947 + __raw_writel(0, S3C64XX_EINT_MASK);
37948 +
37949 + s3c_pm_debug_smdkled(1 << 2, 0);
37950 +
37951 + s3c_pm_do_restore_core(core_save, ARRAY_SIZE(core_save));
37952 + s3c_pm_do_restore(misc_save, ARRAY_SIZE(misc_save));
37953 +}
37954 +
37955 +void s3c_pm_save_core(void)
37956 +{
37957 + s3c_pm_do_save(misc_save, ARRAY_SIZE(misc_save));
37958 + s3c_pm_do_save(core_save, ARRAY_SIZE(core_save));
37959 +}
37960 +
37961 +/* since both s3c6400 and s3c6410 share the same sleep pm calls, we
37962 + * put the per-cpu code in here until any new cpu comes along and changes
37963 + * this.
37964 + */
37965 +
37966 +#include <plat/regs-gpio.h>
37967 +
37968 +static void s3c64xx_cpu_suspend(void)
37969 +{
37970 + unsigned long tmp;
37971 +
37972 + /* set our standby method to sleep */
37973 +
37974 + tmp = __raw_readl(S3C64XX_PWR_CFG);
37975 + tmp &= ~S3C64XX_PWRCFG_CFG_WFI_MASK;
37976 + tmp |= S3C64XX_PWRCFG_CFG_WFI_SLEEP;
37977 + __raw_writel(tmp, S3C64XX_PWR_CFG);
37978 +
37979 + /* clear any old wakeup */
37980 +
37981 + __raw_writel(__raw_readl(S3C64XX_WAKEUP_STAT),
37982 + S3C64XX_WAKEUP_STAT);
37983 +
37984 + /* set the LED state to 0110 over sleep */
37985 + s3c_pm_debug_smdkled(3 << 1, 0xf);
37986 +
37987 + /* issue the standby signal into the pm unit. Note, we
37988 + * issue a write-buffer drain just in case */
37989 +
37990 + tmp = 0;
37991 +
37992 + asm("b 1f\n\t"
37993 + ".align 5\n\t"
37994 + "1:\n\t"
37995 + "mcr p15, 0, %0, c7, c10, 5\n\t"
37996 + "mcr p15, 0, %0, c7, c10, 4\n\t"
37997 + "mcr p15, 0, %0, c7, c0, 4" :: "r" (tmp));
37998 +
37999 + /* we should never get past here */
38000 +
38001 + panic("sleep resumed to originator?");
38002 +}
38003 +
38004 +static void s3c64xx_pm_prepare(void)
38005 +{
38006 + /* store address of resume. */
38007 + __raw_writel(virt_to_phys(s3c_cpu_resume), S3C64XX_INFORM0);
38008 +
38009 + /* ensure previous wakeup state is cleared before sleeping */
38010 + __raw_writel(__raw_readl(S3C64XX_WAKEUP_STAT), S3C64XX_WAKEUP_STAT);
38011 +}
38012 +
38013 +static int s3c64xx_pm_init(void)
38014 +{
38015 + pm_cpu_prep = s3c64xx_pm_prepare;
38016 + pm_cpu_sleep = s3c64xx_cpu_suspend;
38017 + pm_uart_udivslot = 1;
38018 + return 0;
38019 +}
38020 +
38021 +arch_initcall(s3c64xx_pm_init);
38022 Index: linux-2.6.28/arch/arm/plat-s3c64xx/s3c6400-clock.c
38023 ===================================================================
38024 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
38025 +++ linux-2.6.28/arch/arm/plat-s3c64xx/s3c6400-clock.c 2009-01-02 00:01:56.000000000 +0100
38026 @@ -0,0 +1,654 @@
38027 +/* linux/arch/arm/plat-s3c64xx/s3c6400-clock.c
38028 + *
38029 + * Copyright 2008 Openmoko, Inc.
38030 + * Copyright 2008 Simtec Electronics
38031 + * Ben Dooks <ben@simtec.co.uk>
38032 + * http://armlinux.simtec.co.uk/
38033 + *
38034 + * S3C6400 based common clock support
38035 + *
38036 + * This program is free software; you can redistribute it and/or modify
38037 + * it under the terms of the GNU General Public License version 2 as
38038 + * published by the Free Software Foundation.
38039 +*/
38040 +
38041 +#include <linux/init.h>
38042 +#include <linux/module.h>
38043 +#include <linux/kernel.h>
38044 +#include <linux/list.h>
38045 +#include <linux/errno.h>
38046 +#include <linux/err.h>
38047 +#include <linux/clk.h>
38048 +#include <linux/sysdev.h>
38049 +#include <linux/io.h>
38050 +
38051 +#include <mach/hardware.h>
38052 +#include <mach/map.h>
38053 +
38054 +#include <plat/cpu-freq.h>
38055 +
38056 +#include <plat/regs-clock.h>
38057 +#include <plat/clock.h>
38058 +#include <plat/cpu.h>
38059 +#include <plat/pll.h>
38060 +
38061 +/* fin_apll, fin_mpll and fin_epll are all the same clock, which we call
38062 + * ext_xtal_mux for want of an actual name from the manual.
38063 +*/
38064 +
38065 +struct clk clk_ext_xtal_mux = {
38066 + .name = "ext_xtal",
38067 + .id = -1,
38068 +};
38069 +
38070 +#define clk_fin_apll clk_ext_xtal_mux
38071 +#define clk_fin_mpll clk_ext_xtal_mux
38072 +#define clk_fin_epll clk_ext_xtal_mux
38073 +
38074 +#define clk_fout_mpll clk_mpll
38075 +
38076 +struct clk_sources {
38077 + unsigned int nr_sources;
38078 + struct clk **sources;
38079 +};
38080 +
38081 +struct clksrc_clk {
38082 + struct clk clk;
38083 + unsigned int mask;
38084 + unsigned int shift;
38085 +
38086 + struct clk_sources *sources;
38087 +
38088 + unsigned int divider_shift;
38089 + void __iomem *reg_divider;
38090 +};
38091 +
38092 +struct clk clk_fout_apll = {
38093 + .name = "fout_apll",
38094 + .id = -1,
38095 +};
38096 +
38097 +static struct clk *clk_src_apll_list[] = {
38098 + [0] = &clk_fin_apll,
38099 + [1] = &clk_fout_apll,
38100 +};
38101 +
38102 +static struct clk_sources clk_src_apll = {
38103 + .sources = clk_src_apll_list,
38104 + .nr_sources = ARRAY_SIZE(clk_src_apll_list),
38105 +};
38106 +
38107 +struct clksrc_clk clk_mout_apll = {
38108 + .clk = {
38109 + .name = "mout_apll",
38110 + .id = -1,
38111 + },
38112 + .shift = S3C6400_CLKSRC_APLL_MOUT_SHIFT,
38113 + .mask = S3C6400_CLKSRC_APLL_MOUT,
38114 + .sources = &clk_src_apll,
38115 +};
38116 +
38117 +struct clk clk_fout_epll = {
38118 + .name = "fout_epll",
38119 + .id = -1,
38120 +};
38121 +
38122 +static struct clk *clk_src_epll_list[] = {
38123 + [0] = &clk_fin_epll,
38124 + [1] = &clk_fout_epll,
38125 +};
38126 +
38127 +static struct clk_sources clk_src_epll = {
38128 + .sources = clk_src_epll_list,
38129 + .nr_sources = ARRAY_SIZE(clk_src_epll_list),
38130 +};
38131 +
38132 +struct clksrc_clk clk_mout_epll = {
38133 + .clk = {
38134 + .name = "mout_epll",
38135 + .id = -1,
38136 + },
38137 + .shift = S3C6400_CLKSRC_EPLL_MOUT_SHIFT,
38138 + .mask = S3C6400_CLKSRC_EPLL_MOUT,
38139 + .sources = &clk_src_epll,
38140 +};
38141 +
38142 +static struct clk *clk_src_mpll_list[] = {
38143 + [0] = &clk_fin_mpll,
38144 + [1] = &clk_fout_mpll,
38145 +};
38146 +
38147 +static struct clk_sources clk_src_mpll = {
38148 + .sources = clk_src_mpll_list,
38149 + .nr_sources = ARRAY_SIZE(clk_src_mpll_list),
38150 +};
38151 +
38152 +struct clksrc_clk clk_mout_mpll = {
38153 + .clk = {
38154 + .name = "mout_mpll",
38155 + .id = -1,
38156 + },
38157 + .shift = S3C6400_CLKSRC_MPLL_MOUT_SHIFT,
38158 + .mask = S3C6400_CLKSRC_MPLL_MOUT,
38159 + .sources = &clk_src_mpll,
38160 +};
38161 +
38162 +static unsigned long s3c64xx_clk_doutmpll_get_rate(struct clk *clk)
38163 +{
38164 + unsigned long rate = clk_get_rate(clk->parent);
38165 +
38166 + printk(KERN_DEBUG "%s: parent is %ld\n", __func__, rate);
38167 +
38168 + if (__raw_readl(S3C_CLK_DIV0) & S3C6400_CLKDIV0_MPLL_MASK)
38169 + rate /= 2;
38170 +
38171 + return rate;
38172 +}
38173 +
38174 +struct clk clk_dout_mpll = {
38175 + .name = "dout_mpll",
38176 + .id = -1,
38177 + .parent = &clk_mout_mpll.clk,
38178 + .get_rate = s3c64xx_clk_doutmpll_get_rate,
38179 +};
38180 +
38181 +static struct clk *clkset_spi_mmc_list[] = {
38182 + &clk_mout_epll.clk,
38183 + &clk_dout_mpll,
38184 + &clk_fin_epll,
38185 + &clk_27m,
38186 +};
38187 +
38188 +static struct clk_sources clkset_spi_mmc = {
38189 + .sources = clkset_spi_mmc_list,
38190 + .nr_sources = ARRAY_SIZE(clkset_spi_mmc_list),
38191 +};
38192 +
38193 +static struct clk *clkset_irda_list[] = {
38194 + &clk_mout_epll.clk,
38195 + &clk_dout_mpll,
38196 + NULL,
38197 + &clk_27m,
38198 +};
38199 +
38200 +static struct clk_sources clkset_irda = {
38201 + .sources = clkset_irda_list,
38202 + .nr_sources = ARRAY_SIZE(clkset_irda_list),
38203 +};
38204 +
38205 +static struct clk *clkset_uart_list[] = {
38206 + &clk_mout_epll.clk,
38207 + &clk_dout_mpll,
38208 + NULL,
38209 + NULL
38210 +};
38211 +
38212 +static struct clk_sources clkset_uart = {
38213 + .sources = clkset_uart_list,
38214 + .nr_sources = ARRAY_SIZE(clkset_uart_list),
38215 +};
38216 +
38217 +static struct clk *clkset_uhost_list[] = {
38218 + &clk_mout_epll.clk,
38219 + &clk_dout_mpll,
38220 + &clk_fin_epll,
38221 + &clk_48m,
38222 +};
38223 +
38224 +static struct clk_sources clkset_uhost = {
38225 + .sources = clkset_uhost_list,
38226 + .nr_sources = ARRAY_SIZE(clkset_uhost_list),
38227 +};
38228 +
38229 +
38230 +/* The peripheral clocks are all controlled via clocksource followed
38231 + * by an optional divider and gate stage. We currently roll this into
38232 + * one clock which hides the intermediate clock from the mux.
38233 + *
38234 + * Note, the JPEG clock can only be an even divider...
38235 + *
38236 + * The scaler and LCD clocks depend on the S3C64XX version, and also
38237 + * have a common parent divisor so are not included here.
38238 + */
38239 +
38240 +static inline struct clksrc_clk *to_clksrc(struct clk *clk)
38241 +{
38242 + return container_of(clk, struct clksrc_clk, clk);
38243 +}
38244 +
38245 +static unsigned long s3c64xx_getrate_clksrc(struct clk *clk)
38246 +{
38247 + struct clksrc_clk *sclk = to_clksrc(clk);
38248 + unsigned long rate = clk_get_rate(clk->parent);
38249 + u32 clkdiv = __raw_readl(sclk->reg_divider);
38250 +
38251 + clkdiv >>= sclk->divider_shift;
38252 + clkdiv &= 0xf;
38253 + clkdiv++;
38254 +
38255 + rate /= clkdiv;
38256 + return rate;
38257 +}
38258 +
38259 +static int s3c64xx_setrate_clksrc(struct clk *clk, unsigned long rate)
38260 +{
38261 + struct clksrc_clk *sclk = to_clksrc(clk);
38262 + void __iomem *reg = sclk->reg_divider;
38263 + unsigned int div;
38264 + u32 val;
38265 +
38266 + rate = clk_round_rate(clk, rate);
38267 + div = clk_get_rate(clk->parent) / rate;
38268 +
38269 + val = __raw_readl(reg);
38270 + val &= ~sclk->mask;
38271 + val |= (rate - 1) << sclk->shift;
38272 + __raw_writel(val, reg);
38273 +
38274 + return 0;
38275 +}
38276 +
38277 +static int s3c64xx_setparent_clksrc(struct clk *clk, struct clk *parent)
38278 +{
38279 + struct clksrc_clk *sclk = to_clksrc(clk);
38280 + struct clk_sources *srcs = sclk->sources;
38281 + u32 clksrc = __raw_readl(S3C_CLK_SRC);
38282 + int src_nr = -1;
38283 + int ptr;
38284 +
38285 + for (ptr = 0; ptr < srcs->nr_sources; ptr++)
38286 + if (srcs->sources[ptr] == parent) {
38287 + src_nr = ptr;
38288 + break;
38289 + }
38290 +
38291 + if (src_nr >= 0) {
38292 + clksrc &= ~sclk->mask;
38293 + clksrc |= src_nr << sclk->shift;
38294 +
38295 + __raw_writel(clksrc, S3C_CLK_SRC);
38296 + return 0;
38297 + }
38298 +
38299 + return -EINVAL;
38300 +}
38301 +
38302 +static unsigned long s3c64xx_roundrate_clksrc(struct clk *clk,
38303 + unsigned long rate)
38304 +{
38305 + unsigned long parent_rate = clk_get_rate(clk->parent);
38306 + int div;
38307 +
38308 + if (rate > parent_rate)
38309 + rate = parent_rate;
38310 + else {
38311 + div = rate / parent_rate;
38312 +
38313 + if (div == 0)
38314 + div = 1;
38315 + if (div > 16)
38316 + div = 16;
38317 +
38318 + rate = parent_rate / div;
38319 + }
38320 +
38321 + return rate;
38322 +}
38323 +
38324 +static struct clksrc_clk clk_mmc0 = {
38325 + .clk = {
38326 + .name = "mmc_bus",
38327 + .id = 0,
38328 + .ctrlbit = S3C_CLKCON_SCLK_MMC0,
38329 + .enable = s3c64xx_sclk_ctrl,
38330 + .set_parent = s3c64xx_setparent_clksrc,
38331 + .get_rate = s3c64xx_getrate_clksrc,
38332 + .set_rate = s3c64xx_setrate_clksrc,
38333 + .round_rate = s3c64xx_roundrate_clksrc,
38334 + },
38335 + .shift = S3C6400_CLKSRC_MMC0_SHIFT,
38336 + .mask = S3C6400_CLKSRC_MMC0_MASK,
38337 + .sources = &clkset_spi_mmc,
38338 + .divider_shift = S3C6400_CLKDIV1_MMC0_SHIFT,
38339 + .reg_divider = S3C_CLK_DIV1,
38340 +};
38341 +
38342 +static struct clksrc_clk clk_mmc1 = {
38343 + .clk = {
38344 + .name = "mmc_bus",
38345 + .id = 1,
38346 + .ctrlbit = S3C_CLKCON_SCLK_MMC1,
38347 + .enable = s3c64xx_sclk_ctrl,
38348 + .get_rate = s3c64xx_getrate_clksrc,
38349 + .set_rate = s3c64xx_setrate_clksrc,
38350 + .set_parent = s3c64xx_setparent_clksrc,
38351 + .round_rate = s3c64xx_roundrate_clksrc,
38352 + },
38353 + .shift = S3C6400_CLKSRC_MMC1_SHIFT,
38354 + .mask = S3C6400_CLKSRC_MMC1_MASK,
38355 + .sources = &clkset_spi_mmc,
38356 + .divider_shift = S3C6400_CLKDIV1_MMC1_SHIFT,
38357 + .reg_divider = S3C_CLK_DIV1,
38358 +};
38359 +
38360 +static struct clksrc_clk clk_mmc2 = {
38361 + .clk = {
38362 + .name = "mmc_bus",
38363 + .id = 2,
38364 + .ctrlbit = S3C_CLKCON_SCLK_MMC2,
38365 + .enable = s3c64xx_sclk_ctrl,
38366 + .get_rate = s3c64xx_getrate_clksrc,
38367 + .set_rate = s3c64xx_setrate_clksrc,
38368 + .set_parent = s3c64xx_setparent_clksrc,
38369 + .round_rate = s3c64xx_roundrate_clksrc,
38370 + },
38371 + .shift = S3C6400_CLKSRC_MMC2_SHIFT,
38372 + .mask = S3C6400_CLKSRC_MMC2_MASK,
38373 + .sources = &clkset_spi_mmc,
38374 + .divider_shift = S3C6400_CLKDIV1_MMC2_SHIFT,
38375 + .reg_divider = S3C_CLK_DIV1,
38376 +};
38377 +
38378 +static struct clksrc_clk clk_usbhost = {
38379 + .clk = {
38380 + .name = "usb-host-bus",
38381 + .id = -1,
38382 + .ctrlbit = S3C_CLKCON_SCLK_UHOST,
38383 + .enable = s3c64xx_sclk_ctrl,
38384 + .set_parent = s3c64xx_setparent_clksrc,
38385 + .get_rate = s3c64xx_getrate_clksrc,
38386 + .set_rate = s3c64xx_setrate_clksrc,
38387 + .round_rate = s3c64xx_roundrate_clksrc,
38388 + },
38389 + .shift = S3C6400_CLKSRC_UHOST_SHIFT,
38390 + .mask = S3C6400_CLKSRC_UHOST_MASK,
38391 + .sources = &clkset_uhost,
38392 + .divider_shift = S3C6400_CLKDIV1_UHOST_SHIFT,
38393 + .reg_divider = S3C_CLK_DIV1,
38394 +};
38395 +
38396 +static struct clksrc_clk clk_uart_uclk1 = {
38397 + .clk = {
38398 + .name = "uclk1",
38399 + .id = -1,
38400 + .ctrlbit = S3C_CLKCON_SCLK_UART,
38401 + .enable = s3c64xx_sclk_ctrl,
38402 + .set_parent = s3c64xx_setparent_clksrc,
38403 + .get_rate = s3c64xx_getrate_clksrc,
38404 + .set_rate = s3c64xx_setrate_clksrc,
38405 + .round_rate = s3c64xx_roundrate_clksrc,
38406 + },
38407 + .shift = S3C6400_CLKSRC_UART_SHIFT,
38408 + .mask = S3C6400_CLKSRC_UART_MASK,
38409 + .sources = &clkset_uart,
38410 + .divider_shift = S3C6400_CLKDIV2_UART_SHIFT,
38411 + .reg_divider = S3C_CLK_DIV2,
38412 +};
38413 +
38414 +/* Where does UCLK0 come from? */
38415 +
38416 +static struct clksrc_clk clk_spi0 = {
38417 + .clk = {
38418 + .name = "spi-bus",
38419 + .id = 0,
38420 + .ctrlbit = S3C_CLKCON_SCLK_SPI0,
38421 + .enable = s3c64xx_sclk_ctrl,
38422 + .set_parent = s3c64xx_setparent_clksrc,
38423 + .get_rate = s3c64xx_getrate_clksrc,
38424 + .set_rate = s3c64xx_setrate_clksrc,
38425 + .round_rate = s3c64xx_roundrate_clksrc,
38426 + },
38427 + .shift = S3C6400_CLKSRC_SPI0_SHIFT,
38428 + .mask = S3C6400_CLKSRC_SPI0_MASK,
38429 + .sources = &clkset_spi_mmc,
38430 + .divider_shift = S3C6400_CLKDIV2_SPI0_SHIFT,
38431 + .reg_divider = S3C_CLK_DIV2,
38432 +};
38433 +
38434 +static struct clksrc_clk clk_spi1 = {
38435 + .clk = {
38436 + .name = "spi-bus",
38437 + .id = 1,
38438 + .ctrlbit = S3C_CLKCON_SCLK_SPI1,
38439 + .enable = s3c64xx_sclk_ctrl,
38440 + .set_parent = s3c64xx_setparent_clksrc,
38441 + .get_rate = s3c64xx_getrate_clksrc,
38442 + .set_rate = s3c64xx_setrate_clksrc,
38443 + .round_rate = s3c64xx_roundrate_clksrc,
38444 + },
38445 + .shift = S3C6400_CLKSRC_SPI1_SHIFT,
38446 + .mask = S3C6400_CLKSRC_SPI1_MASK,
38447 + .sources = &clkset_spi_mmc,
38448 + .divider_shift = S3C6400_CLKDIV2_SPI1_SHIFT,
38449 + .reg_divider = S3C_CLK_DIV2,
38450 +};
38451 +
38452 +static struct clk clk_iis_cd0 = {
38453 + .name = "iis_cdclk0",
38454 + .id = -1,
38455 +};
38456 +
38457 +static struct clk clk_iis_cd1 = {
38458 + .name = "iis_cdclk1",
38459 + .id = -1,
38460 +};
38461 +
38462 +static struct clk clk_pcm_cd = {
38463 + .name = "pcm_cdclk",
38464 + .id = -1,
38465 +};
38466 +
38467 +static struct clk *clkset_audio0_list[] = {
38468 + [0] = &clk_mout_epll.clk,
38469 + [1] = &clk_dout_mpll,
38470 + [2] = &clk_fin_epll,
38471 + [3] = &clk_iis_cd0,
38472 + [4] = &clk_pcm_cd,
38473 +};
38474 +
38475 +static struct clk_sources clkset_audio0 = {
38476 + .sources = clkset_audio0_list,
38477 + .nr_sources = ARRAY_SIZE(clkset_audio0_list),
38478 +};
38479 +
38480 +static struct clksrc_clk clk_audio0 = {
38481 + .clk = {
38482 + .name = "audio-bus",
38483 + .id = 0,
38484 + .ctrlbit = S3C_CLKCON_SCLK_AUDIO0,
38485 + .enable = s3c64xx_sclk_ctrl,
38486 + .set_parent = s3c64xx_setparent_clksrc,
38487 + .get_rate = s3c64xx_getrate_clksrc,
38488 + .set_rate = s3c64xx_setrate_clksrc,
38489 + .round_rate = s3c64xx_roundrate_clksrc,
38490 + },
38491 + .shift = S3C6400_CLKSRC_AUDIO0_SHIFT,
38492 + .mask = S3C6400_CLKSRC_AUDIO0_MASK,
38493 + .sources = &clkset_audio0,
38494 + .divider_shift = S3C6400_CLKDIV2_AUDIO0_SHIFT,
38495 + .reg_divider = S3C_CLK_DIV2,
38496 +};
38497 +
38498 +static struct clk *clkset_audio1_list[] = {
38499 + [0] = &clk_mout_epll.clk,
38500 + [1] = &clk_dout_mpll,
38501 + [2] = &clk_fin_epll,
38502 + [3] = &clk_iis_cd1,
38503 + [4] = &clk_pcm_cd,
38504 +};
38505 +
38506 +static struct clk_sources clkset_audio1 = {
38507 + .sources = clkset_audio1_list,
38508 + .nr_sources = ARRAY_SIZE(clkset_audio1_list),
38509 +};
38510 +
38511 +static struct clksrc_clk clk_audio1 = {
38512 + .clk = {
38513 + .name = "audio-bus",
38514 + .id = 1,
38515 + .ctrlbit = S3C_CLKCON_SCLK_AUDIO1,
38516 + .enable = s3c64xx_sclk_ctrl,
38517 + .set_parent = s3c64xx_setparent_clksrc,
38518 + .get_rate = s3c64xx_getrate_clksrc,
38519 + .set_rate = s3c64xx_setrate_clksrc,
38520 + .round_rate = s3c64xx_roundrate_clksrc,
38521 + },
38522 + .shift = S3C6400_CLKSRC_AUDIO1_SHIFT,
38523 + .mask = S3C6400_CLKSRC_AUDIO1_MASK,
38524 + .sources = &clkset_audio1,
38525 + .divider_shift = S3C6400_CLKDIV2_AUDIO1_SHIFT,
38526 + .reg_divider = S3C_CLK_DIV2,
38527 +};
38528 +
38529 +static struct clksrc_clk clk_irda = {
38530 + .clk = {
38531 + .name = "irda-bus",
38532 + .id = 0,
38533 + .ctrlbit = S3C_CLKCON_SCLK_IRDA,
38534 + .enable = s3c64xx_sclk_ctrl,
38535 + .set_parent = s3c64xx_setparent_clksrc,
38536 + .get_rate = s3c64xx_getrate_clksrc,
38537 + .set_rate = s3c64xx_setrate_clksrc,
38538 + .round_rate = s3c64xx_roundrate_clksrc,
38539 + },
38540 + .shift = S3C6400_CLKSRC_IRDA_SHIFT,
38541 + .mask = S3C6400_CLKSRC_IRDA_MASK,
38542 + .sources = &clkset_irda,
38543 + .divider_shift = S3C6400_CLKDIV2_IRDA_SHIFT,
38544 + .reg_divider = S3C_CLK_DIV2,
38545 +};
38546 +
38547 +/* Clock initialisation code */
38548 +
38549 +static struct clksrc_clk *init_parents[] = {
38550 + &clk_mout_apll,
38551 + &clk_mout_epll,
38552 + &clk_mout_mpll,
38553 + &clk_mmc0,
38554 + &clk_mmc1,
38555 + &clk_mmc2,
38556 + &clk_usbhost,
38557 + &clk_uart_uclk1,
38558 + &clk_spi0,
38559 + &clk_spi1,
38560 + &clk_audio0,
38561 + &clk_audio1,
38562 + &clk_irda,
38563 +};
38564 +
38565 +static void __init_or_cpufreq s3c6400_set_clksrc(struct clksrc_clk *clk)
38566 +{
38567 + struct clk_sources *srcs = clk->sources;
38568 + u32 clksrc = __raw_readl(S3C_CLK_SRC);
38569 +
38570 + clksrc &= clk->mask;
38571 + clksrc >>= clk->shift;
38572 +
38573 + if (clksrc > srcs->nr_sources || !srcs->sources[clksrc]) {
38574 + printk(KERN_ERR "%s: bad source %d\n",
38575 + clk->clk.name, clksrc);
38576 + return;
38577 + }
38578 +
38579 + clk->clk.parent = srcs->sources[clksrc];
38580 +
38581 + printk(KERN_INFO "%s: source is %s (%d), rate is %ld\n",
38582 + clk->clk.name, clk->clk.parent->name, clksrc,
38583 + clk_get_rate(&clk->clk));
38584 +}
38585 +
38586 +#define GET_DIV(clk, field) ((((clk) & field##_MASK) >> field##_SHIFT) + 1)
38587 +
38588 +void __init_or_cpufreq s3c6400_setup_clocks(void)
38589 +{
38590 + struct clk *xtal_clk;
38591 + unsigned long xtal;
38592 + unsigned long fclk;
38593 + unsigned long hclk;
38594 + unsigned long hclk2;
38595 + unsigned long pclk;
38596 + unsigned long epll;
38597 + unsigned long apll;
38598 + unsigned long mpll;
38599 + unsigned int ptr;
38600 + u32 clkdiv0;
38601 +
38602 + printk(KERN_DEBUG "%s: registering clocks\n", __func__);
38603 +
38604 + clkdiv0 = __raw_readl(S3C_CLK_DIV0);
38605 + printk(KERN_DEBUG "%s: clkdiv0 = %08x\n", __func__, clkdiv0);
38606 +
38607 + xtal_clk = clk_get(NULL, "xtal");
38608 + BUG_ON(IS_ERR(xtal_clk));
38609 +
38610 + xtal = clk_get_rate(xtal_clk);
38611 + clk_put(xtal_clk);
38612 +
38613 + printk(KERN_DEBUG "%s: xtal is %ld\n", __func__, xtal);
38614 +
38615 + epll = s3c6400_get_epll(xtal);
38616 + mpll = s3c6400_get_pll(xtal, __raw_readl(S3C_MPLL_CON));
38617 + apll = s3c6400_get_pll(xtal, __raw_readl(S3C_APLL_CON));
38618 +
38619 + fclk = mpll;
38620 +
38621 + printk(KERN_INFO "S3C64XX: PLL settings, A=%ld, M=%ld, E=%ld\n",
38622 + apll, mpll, epll);
38623 +
38624 + hclk2 = mpll / GET_DIV(clkdiv0, S3C6400_CLKDIV0_HCLK2);
38625 + hclk = hclk2 / GET_DIV(clkdiv0, S3C6400_CLKDIV0_HCLK);
38626 + pclk = hclk2 / GET_DIV(clkdiv0, S3C6400_CLKDIV0_PCLK);
38627 +
38628 + printk(KERN_INFO "S3C64XX: HCLK2=%ld, HCLK=%ld, PCLK=%ld\n",
38629 + hclk2, hclk, pclk);
38630 +
38631 + clk_fout_mpll.rate = mpll;
38632 + clk_fout_epll.rate = epll;
38633 + clk_fout_apll.rate = apll;
38634 +
38635 + clk_h.rate = hclk;
38636 + clk_p.rate = pclk;
38637 + clk_f.rate = fclk;
38638 +
38639 + for (ptr = 0; ptr < ARRAY_SIZE(init_parents); ptr++)
38640 + s3c6400_set_clksrc(init_parents[ptr]);
38641 +}
38642 +
38643 +static struct clk *clks[] __initdata = {
38644 + &clk_ext_xtal_mux,
38645 + &clk_iis_cd0,
38646 + &clk_iis_cd1,
38647 + &clk_pcm_cd,
38648 + &clk_mout_epll.clk,
38649 + &clk_fout_epll,
38650 + &clk_mout_mpll.clk,
38651 + &clk_dout_mpll,
38652 + &clk_mmc0.clk,
38653 + &clk_mmc1.clk,
38654 + &clk_mmc2.clk,
38655 + &clk_usbhost.clk,
38656 + &clk_uart_uclk1.clk,
38657 + &clk_spi0.clk,
38658 + &clk_spi1.clk,
38659 + &clk_audio0.clk,
38660 + &clk_audio1.clk,
38661 + &clk_irda.clk,
38662 +};
38663 +
38664 +void __init s3c6400_register_clocks(void)
38665 +{
38666 + struct clk *clkp;
38667 + int ret;
38668 + int ptr;
38669 +
38670 + for (ptr = 0; ptr < ARRAY_SIZE(clks); ptr++) {
38671 + clkp = clks[ptr];
38672 + ret = s3c24xx_register_clock(clkp);
38673 + if (ret < 0) {
38674 + printk(KERN_ERR "Failed to register clock %s (%d)\n",
38675 + clkp->name, ret);
38676 + }
38677 + }
38678 +
38679 + clk_epll.parent = &clk_mout_epll.clk;
38680 +}
38681 Index: linux-2.6.28/arch/arm/plat-s3c64xx/s3c6400-init.c
38682 ===================================================================
38683 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
38684 +++ linux-2.6.28/arch/arm/plat-s3c64xx/s3c6400-init.c 2009-01-02 00:01:56.000000000 +0100
38685 @@ -0,0 +1,29 @@
38686 +/* linux/arch/arm/plat-s3c64xx/s3c6400-init.c
38687 + *
38688 + * Copyright 2008 Openmoko, Inc.
38689 + * Copyright 2008 Simtec Electronics
38690 + * Ben Dooks <ben@simtec.co.uk>
38691 + * http://armlinux.simtec.co.uk/
38692 + *
38693 + * S3C6400 - CPU initialisation (common with other S3C64XX chips)
38694 + *
38695 + * This program is free software; you can redistribute it and/or modify
38696 + * it under the terms of the GNU General Public License version 2 as
38697 + * published by the Free Software Foundation.
38698 + */
38699 +
38700 +#include <linux/kernel.h>
38701 +#include <linux/types.h>
38702 +#include <linux/init.h>
38703 +
38704 +#include <plat/cpu.h>
38705 +#include <plat/devs.h>
38706 +#include <plat/s3c6400.h>
38707 +#include <plat/s3c6410.h>
38708 +
38709 +/* uart registration process */
38710 +
38711 +void __init s3c6400_common_init_uarts(struct s3c2410_uartcfg *cfg, int no)
38712 +{
38713 + s3c24xx_init_uartdevs("s3c6400-uart", s3c64xx_uart_resources, cfg, no);
38714 +}
38715 Index: linux-2.6.28/arch/arm/plat-s3c64xx/setup-fb-24bpp.c
38716 ===================================================================
38717 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
38718 +++ linux-2.6.28/arch/arm/plat-s3c64xx/setup-fb-24bpp.c 2009-01-02 00:01:56.000000000 +0100
38719 @@ -0,0 +1,37 @@
38720 +/* linux/arch/arm/plat-s3c64xx/setup-fb-24bpp.c
38721 + *
38722 + * Copyright 2008 Openmoko, Inc.
38723 + * Copyright 2008 Simtec Electronics
38724 + * Ben Dooks <ben@simtec.co.uk>
38725 + * http://armlinux.simtec.co.uk/
38726 + *
38727 + * Base S3C64XX setup information for 24bpp LCD framebuffer
38728 + *
38729 + * This program is free software; you can redistribute it and/or modify
38730 + * it under the terms of the GNU General Public License version 2 as
38731 + * published by the Free Software Foundation.
38732 +*/
38733 +
38734 +#include <linux/kernel.h>
38735 +#include <linux/types.h>
38736 +#include <linux/fb.h>
38737 +
38738 +#include <mach/regs-fb.h>
38739 +#include <mach/gpio.h>
38740 +#include <plat/fb.h>
38741 +#include <plat/gpio-cfg.h>
38742 +
38743 +extern void s3c64xx_fb_gpio_setup_24bpp(void)
38744 +{
38745 + unsigned int gpio;
38746 +
38747 + for (gpio = S3C64XX_GPI(0); gpio <= S3C64XX_GPI(15); gpio++) {
38748 + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
38749 + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
38750 + }
38751 +
38752 + for (gpio = S3C64XX_GPJ(0); gpio <= S3C64XX_GPJ(11); gpio++) {
38753 + s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2));
38754 + s3c_gpio_setpull(gpio, S3C_GPIO_PULL_NONE);
38755 + }
38756 +}
38757 Index: linux-2.6.28/arch/arm/plat-s3c64xx/setup-i2c0.c
38758 ===================================================================
38759 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
38760 +++ linux-2.6.28/arch/arm/plat-s3c64xx/setup-i2c0.c 2009-01-02 00:01:56.000000000 +0100
38761 @@ -0,0 +1,31 @@
38762 +/* linux/arch/arm/plat-s3c64xx/setup-i2c0.c
38763 + *
38764 + * Copyright 2008 Openmoko, Inc.
38765 + * Copyright 2008 Simtec Electronics
38766 + * Ben Dooks <ben@simtec.co.uk>
38767 + * http://armlinux.simtec.co.uk/
38768 + *
38769 + * Base S3C64XX I2C bus 0 gpio configuration
38770 + *
38771 + * This program is free software; you can redistribute it and/or modify
38772 + * it under the terms of the GNU General Public License version 2 as
38773 + * published by the Free Software Foundation.
38774 +*/
38775 +
38776 +#include <linux/kernel.h>
38777 +#include <linux/types.h>
38778 +
38779 +struct platform_device; /* don't need the contents */
38780 +
38781 +#include <mach/gpio.h>
38782 +#include <plat/iic.h>
38783 +#include <plat/gpio-bank-b.h>
38784 +#include <plat/gpio-cfg.h>
38785 +
38786 +void s3c_i2c0_cfg_gpio(struct platform_device *dev)
38787 +{
38788 + s3c_gpio_cfgpin(S3C64XX_GPB(5), S3C64XX_GPB5_I2C_SCL0);
38789 + s3c_gpio_cfgpin(S3C64XX_GPB(6), S3C64XX_GPB6_I2C_SDA0);
38790 + s3c_gpio_setpull(S3C64XX_GPB(5), S3C_GPIO_PULL_UP);
38791 + s3c_gpio_setpull(S3C64XX_GPB(6), S3C_GPIO_PULL_UP);
38792 +}
38793 Index: linux-2.6.28/arch/arm/plat-s3c64xx/setup-i2c1.c
38794 ===================================================================
38795 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
38796 +++ linux-2.6.28/arch/arm/plat-s3c64xx/setup-i2c1.c 2009-01-02 00:01:56.000000000 +0100
38797 @@ -0,0 +1,31 @@
38798 +/* linux/arch/arm/plat-s3c64xx/setup-i2c1.c
38799 + *
38800 + * Copyright 2008 Openmoko, Inc.
38801 + * Copyright 2008 Simtec Electronics
38802 + * Ben Dooks <ben@simtec.co.uk>
38803 + * http://armlinux.simtec.co.uk/
38804 + *
38805 + * Base S3C64XX I2C bus 1 gpio configuration
38806 + *
38807 + * This program is free software; you can redistribute it and/or modify
38808 + * it under the terms of the GNU General Public License version 2 as
38809 + * published by the Free Software Foundation.
38810 +*/
38811 +
38812 +#include <linux/kernel.h>
38813 +#include <linux/types.h>
38814 +
38815 +struct platform_device; /* don't need the contents */
38816 +
38817 +#include <mach/gpio.h>
38818 +#include <plat/iic.h>
38819 +#include <plat/gpio-bank-b.h>
38820 +#include <plat/gpio-cfg.h>
38821 +
38822 +void s3c_i2c1_cfg_gpio(struct platform_device *dev)
38823 +{
38824 + s3c_gpio_cfgpin(S3C64XX_GPB(2), S3C64XX_GPB2_I2C_SCL1);
38825 + s3c_gpio_cfgpin(S3C64XX_GPB(3), S3C64XX_GPB3_I2C_SDA1);
38826 + s3c_gpio_setpull(S3C64XX_GPB(2), S3C_GPIO_PULL_UP);
38827 + s3c_gpio_setpull(S3C64XX_GPB(3), S3C_GPIO_PULL_UP);
38828 +}
38829 Index: linux-2.6.28/arch/arm/plat-s3c64xx/sleep.S
38830 ===================================================================
38831 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
38832 +++ linux-2.6.28/arch/arm/plat-s3c64xx/sleep.S 2009-01-02 00:01:56.000000000 +0100
38833 @@ -0,0 +1,143 @@
38834 +/* linux/0arch/arm/plat-s3c64xx/sleep.S
38835 + *
38836 + * Copyright 2008 Openmoko, Inc.
38837 + * Copyright 2008 Simtec Electronics
38838 + * Ben Dooks <ben@simtec.co.uk>
38839 + * http://armlinux.simtec.co.uk/
38840 + *
38841 + * S3C64XX CPU sleep code
38842 + *
38843 + * This program is free software; you can redistribute it and/or modify
38844 + * it under the terms of the GNU General Public License version 2 as
38845 + * published by the Free Software Foundation.
38846 +*/
38847 +
38848 +#include <linux/linkage.h>
38849 +#include <asm/assembler.h>
38850 +#include <mach/map.h>
38851 +
38852 +#undef S3C64XX_VA_GPIO
38853 +#define S3C64XX_VA_GPIO (0x0)
38854 +
38855 +#include <plat/regs-gpio.h>
38856 +#include <plat/gpio-bank-n.h>
38857 +
38858 +#define LL_UART (S3C_PA_UART + (0x400 * CONFIG_S3C_LOWLEVEL_UART_PORT))
38859 +
38860 + .text
38861 +
38862 + /* s3c_cpu_save
38863 + *
38864 + * Save enough processor state to allow the restart of the pm.c
38865 + * code after resume.
38866 + *
38867 + * entry:
38868 + * r0 = pointer to the save block
38869 + * exit:
38870 + * r0 = exit code: 1 => stored data
38871 + * 0 => resumed from sleep
38872 + */
38873 +
38874 +ENTRY(s3c_cpu_save)
38875 + stmfd sp!, { r4 - r12, lr }
38876 +
38877 + mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID
38878 + mrc p15, 0, r5, c3, c0, 0 @ Domain ID
38879 + mrc p15, 0, r6, c2, c0, 0 @ Translation Table BASE0
38880 + mrc p15, 0, r7, c2, c0, 1 @ Translation Table BASE1
38881 + mrc p15, 0, r8, c2, c0, 2 @ Translation Table Control
38882 + mrc p15, 0, r9, c1, c0, 0 @ Control register
38883 + mrc p15, 0, r10, c1, c0, 1 @ Auxiliary control register
38884 + mrc p15, 0, r11, c1, c0, 2 @ Co-processor access controls
38885 +
38886 + stmia r0, { r4 - r13 } @ Save CP registers and SP
38887 + mov r0, #0
38888 + ldmfd sp, { r4 - r12, pc } @ return, not disturbing SP
38889 +
38890 + @@ return to the caller, after the MMU is turned on.
38891 + @@ restore the last bits of the stack and return.
38892 +resume_with_mmu:
38893 + mov r0, #1
38894 + ldmfd sp!, { r4 - r12, pc } @ return, from sp from s3c_cpu_save
38895 +
38896 + .data
38897 +
38898 + /* the next bit is code, but it requires easy access to the
38899 + * s3c_sleep_save_phys data before the MMU is switched on, so
38900 + * we store the code that needs this variable in the .data where
38901 + * the value can be written to (the .text segment is RO).
38902 + */
38903 +
38904 + .global s3c_sleep_save_phys
38905 +s3c_sleep_save_phys:
38906 + .word 0
38907 +
38908 + /* Sleep magic, the word before the resume entry point so that the
38909 + * bootloader can check for a resumeable image. */
38910 +
38911 + .word 0x2bedf00d
38912 +
38913 + /* s3c_cpu_reusme
38914 + *
38915 + * This is the entry point, stored by whatever method the bootloader
38916 + * requires to get the kernel runnign again. This code expects to be
38917 + * entered with no caches live and the MMU disabled. It will then
38918 + * restore the MMU and other basic CP registers saved and restart
38919 + * the kernel C code to finish the resume code.
38920 + */
38921 +
38922 +ENTRY(s3c_cpu_resume)
38923 + msr cpsr_c, #PSR_I_BIT | PSR_F_BIT | SVC_MODE
38924 + ldr r2, =LL_UART /* for debug */
38925 +
38926 +#ifdef CONFIG_S3C_PM_DEBUG_LED_SMDK
38927 + /* Initialise the GPIO state if we are debugging via the SMDK LEDs,
38928 + * as the uboot version supplied resets these to inputs during the
38929 + * resume checks.
38930 + */
38931 +
38932 + ldr r3, =S3C64XX_PA_GPIO
38933 + ldr r0, [ r3, #S3C64XX_GPNCON ]
38934 + bic r0, r0, #(S3C64XX_GPN_CONMASK(12) | S3C64XX_GPN_CONMASK(13) | \
38935 + S3C64XX_GPN_CONMASK(14) | S3C64XX_GPN_CONMASK(15))
38936 + orr r0, r0, #(S3C64XX_GPN_OUTPUT(12) | S3C64XX_GPN_OUTPUT(13) | \
38937 + S3C64XX_GPN_OUTPUT(14) | S3C64XX_GPN_OUTPUT(15))
38938 + str r0, [ r3, #S3C64XX_GPNCON ]
38939 +
38940 + ldr r0, [ r3, #S3C64XX_GPNDAT ]
38941 + bic r0, r0, #0xf << 12 @ GPN12..15
38942 + orr r0, r0, #1 << 15 @ GPN15
38943 + str r0, [ r3, #S3C64XX_GPNDAT ]
38944 +#endif
38945 +
38946 + /* __v6_setup from arch/arm/mm/proc-v6.S, ensure that the caches
38947 + * are thoroughly cleaned just in case the bootloader didn't do it
38948 + * for us. */
38949 + mov r0, #0
38950 + mcr p15, 0, r0, c7, c14, 0 @ clean+invalidate D cache
38951 + mcr p15, 0, r0, c7, c5, 0 @ invalidate I cache
38952 + mcr p15, 0, r0, c7, c15, 0 @ clean+invalidate cache
38953 + mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
38954 + @@mcr p15, 0, r0, c8, c7, 0 @ invalidate I + D TLBs
38955 + @@mcr p15, 0, r0, c7, c7, 0 @ Invalidate I + D caches
38956 +
38957 + ldr r0, s3c_sleep_save_phys
38958 + ldmia r0, { r4 - r13 }
38959 +
38960 + mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID
38961 + mcr p15, 0, r5, c3, c0, 0 @ Domain ID
38962 + mcr p15, 0, r6, c2, c0, 0 @ Translation Table BASE0
38963 + mcr p15, 0, r7, c2, c0, 1 @ Translation Table BASE1
38964 + mcr p15, 0, r8, c2, c0, 2 @ Translation Table Control
38965 + mcr p15, 0, r10, c1, c0, 1 @ Auxiliary control register
38966 +
38967 + mov r0, #0 @ restore copro access controls
38968 + mcr p15, 0, r11, c1, c0, 2 @ Co-processor access controls
38969 + mcr p15, 0, r0, c7, c5, 4
38970 +
38971 + ldr r2, =resume_with_mmu
38972 + mcr p15, 0, r9, c1, c0, 0 /* turn mmu back on */
38973 + nop
38974 + mov pc, r2 /* jump back */
38975 +
38976 + .end
38977 Index: linux-2.6.28/dfu-kern
38978 ===================================================================
38979 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
38980 +++ linux-2.6.28/dfu-kern 2009-01-02 00:01:56.000000000 +0100
38981 @@ -0,0 +1,14 @@
38982 +#!/bin/bash
38983 +
38984 +if [ -z "$1" ] ; then
38985 + echo "Usage: $0 <DEVICE> eg, $0 GTA02"
38986 + exit 1
38987 +fi
38988 +
38989 +../../dfu-util/src/dfu-util -a 3 -d 0x1d50:0x5119 -D uImage-$1.bin
38990 +if [ $? -eq 1 ] ; then
38991 +../../dfu-util/src/dfu-util -a 3 -d 0x1d50:0x5120 -D uImage-$1.bin
38992 +../../dfu-util/src/dfu-util -a 3 -d 0x1d50:0x5119 -D uImage-$1.bin
38993 +fi
38994 +
38995 +
38996 Index: linux-2.6.28/Documentation/arm/Samsung-S3C24XX/Suspend.txt
38997 ===================================================================
38998 --- linux-2.6.28.orig/Documentation/arm/Samsung-S3C24XX/Suspend.txt 2008-12-25 00:26:37.000000000 +0100
38999 +++ linux-2.6.28/Documentation/arm/Samsung-S3C24XX/Suspend.txt 2009-01-02 00:01:56.000000000 +0100
39000 @@ -40,13 +40,13 @@ Resuming
39001 Machine Support
39002 ---------------
39003
39004 - The machine specific functions must call the s3c2410_pm_init() function
39005 + The machine specific functions must call the s3c_pm_init() function
39006 to say that its bootloader is capable of resuming. This can be as
39007 simple as adding the following to the machine's definition:
39008
39009 - INITMACHINE(s3c2410_pm_init)
39010 + INITMACHINE(s3c_pm_init)
39011
39012 - A board can do its own setup before calling s3c2410_pm_init, if it
39013 + A board can do its own setup before calling s3c_pm_init, if it
39014 needs to setup anything else for power management support.
39015
39016 There is currently no support for over-riding the default method of
39017 @@ -74,7 +74,7 @@ statuc void __init machine_init(void)
39018
39019 enable_irq_wake(IRQ_EINT0);
39020
39021 - s3c2410_pm_init();
39022 + s3c_pm_init();
39023 }
39024
39025
39026 Index: linux-2.6.28/drivers/android/alarm.c
39027 ===================================================================
39028 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
39029 +++ linux-2.6.28/drivers/android/alarm.c 2009-01-02 00:01:56.000000000 +0100
39030 @@ -0,0 +1,542 @@
39031 +/* drivers/android/alarm.c
39032 + *
39033 + * Copyright (C) 2007 Google, Inc.
39034 + *
39035 + * This software is licensed under the terms of the GNU General Public
39036 + * License version 2, as published by the Free Software Foundation, and
39037 + * may be copied, distributed, and modified under those terms.
39038 + *
39039 + * This program is distributed in the hope that it will be useful,
39040 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
39041 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39042 + * GNU General Public License for more details.
39043 + *
39044 + */
39045 +
39046 +#include <asm/mach/time.h>
39047 +#include <linux/android_alarm.h>
39048 +#include <linux/android_power.h>
39049 +#include <linux/device.h>
39050 +#include <linux/miscdevice.h>
39051 +#include <linux/platform_device.h>
39052 +#include <linux/rtc.h>
39053 +#include <linux/spinlock.h>
39054 +#include <linux/sysdev.h>
39055 +
39056 +#define ANDROID_ALARM_PRINT_ERRORS (1U << 0)
39057 +#define ANDROID_ALARM_PRINT_INIT_STATUS (1U << 1)
39058 +#define ANDROID_ALARM_PRINT_INFO (1U << 2)
39059 +#define ANDROID_ALARM_PRINT_IO (1U << 3)
39060 +#define ANDROID_ALARM_PRINT_INT (1U << 4)
39061 +#define ANDROID_ALARM_PRINT_FLOW (1U << 5)
39062 +
39063 +#if 0
39064 +#define ANDROID_ALARM_DPRINTF_MASK (~0)
39065 +#define ANDROID_ALARM_DPRINTF(debug_level_mask, args...) \
39066 + do { \
39067 + if(ANDROID_ALARM_DPRINTF_MASK & debug_level_mask) { \
39068 + printk(args); \
39069 + } \
39070 + } while(0)
39071 +#else
39072 +#define ANDROID_ALARM_DPRINTF(args...)
39073 +#endif
39074 +
39075 +// support old usespace code
39076 +#define ANDROID_ALARM_SET_OLD _IOW('a', 2, time_t) // set alarm
39077 +#define ANDROID_ALARM_SET_AND_WAIT_OLD _IOW('a', 3, time_t)
39078 +
39079 +static struct rtc_device *alarm_rtc_dev;
39080 +static int alarm_opened;
39081 +static DEFINE_SPINLOCK(alarm_slock);
39082 +static DEFINE_MUTEX(alarm_setrtc_mutex);
39083 +static android_suspend_lock_t alarm_suspend_lock = {
39084 + .name = "android_alarm"
39085 +};
39086 +static android_suspend_lock_t alarm_rtc_suspend_lock = {
39087 + .name = "android_alarm_rtc"
39088 +};
39089 +static DECLARE_WAIT_QUEUE_HEAD(alarm_wait_queue);
39090 +static uint32_t alarm_pending;
39091 +static uint32_t alarm_enabled;
39092 +static uint32_t wait_pending;
39093 +static struct platform_device *alarm_platform_dev;
39094 +static struct hrtimer alarm_timer[ANDROID_ALARM_TYPE_COUNT];
39095 +static struct timespec alarm_time[ANDROID_ALARM_TYPE_COUNT];
39096 +static struct timespec elapsed_rtc_delta;
39097 +
39098 +static void alarm_start_hrtimer(android_alarm_type_t alarm_type)
39099 +{
39100 + struct timespec hr_alarm_time;
39101 + if(!(alarm_enabled & (1U << alarm_type)))
39102 + return;
39103 + hr_alarm_time = alarm_time[alarm_type];
39104 + if(alarm_type == ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP || alarm_type == ANDROID_ALARM_ELAPSED_REALTIME)
39105 + set_normalized_timespec(&hr_alarm_time, hr_alarm_time.tv_sec + elapsed_rtc_delta.tv_sec,
39106 + hr_alarm_time.tv_nsec + elapsed_rtc_delta.tv_nsec);
39107 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_FLOW, "alarm start hrtimer %d at %ld.%09ld\n", alarm_type, hr_alarm_time.tv_sec, hr_alarm_time.tv_nsec);
39108 + hrtimer_start(&alarm_timer[alarm_type], timespec_to_ktime(hr_alarm_time), HRTIMER_MODE_ABS);
39109 +}
39110 +
39111 +static long alarm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
39112 +{
39113 + int rv = 0;
39114 + unsigned long flags;
39115 + int i;
39116 + struct timespec new_alarm_time;
39117 + struct timespec new_rtc_time;
39118 + struct timespec tmp_time;
39119 + struct rtc_time rtc_new_rtc_time;
39120 + android_alarm_type_t alarm_type = ANDROID_ALARM_IOCTL_TO_TYPE(cmd);
39121 + uint32_t alarm_type_mask = 1U << alarm_type;
39122 +
39123 + if(alarm_type >= ANDROID_ALARM_TYPE_COUNT)
39124 + return -EINVAL;
39125 +
39126 + if(ANDROID_ALARM_BASE_CMD(cmd) != ANDROID_ALARM_GET_TIME(0)) {
39127 + if ((file->f_flags & O_ACCMODE) == O_RDONLY)
39128 + return -EPERM;
39129 + if(file->private_data == NULL && cmd != ANDROID_ALARM_SET_RTC) {
39130 + spin_lock_irqsave(&alarm_slock, flags);
39131 + if(alarm_opened) {
39132 + spin_unlock_irqrestore(&alarm_slock, flags);
39133 + return -EBUSY;
39134 + }
39135 + alarm_opened = 1;
39136 + file->private_data = (void *)1;
39137 + spin_unlock_irqrestore(&alarm_slock, flags);
39138 + }
39139 + }
39140 +
39141 + switch(ANDROID_ALARM_BASE_CMD(cmd)) {
39142 + //case ANDROID_ALARM_CLEAR_OLD: // same as ANDROID_ALARM_CLEAR(0)
39143 + case ANDROID_ALARM_CLEAR(0):
39144 + spin_lock_irqsave(&alarm_slock, flags);
39145 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_IO, "alarm %d clear\n", alarm_type);
39146 + hrtimer_try_to_cancel(&alarm_timer[alarm_type]);
39147 + if(alarm_pending) {
39148 + alarm_pending &= ~alarm_type_mask;
39149 + if(!alarm_pending && !wait_pending) {
39150 + android_unlock_suspend(&alarm_suspend_lock);
39151 + }
39152 + }
39153 + alarm_enabled &= ~alarm_type_mask;
39154 + spin_unlock_irqrestore(&alarm_slock, flags);
39155 + break;
39156 +
39157 + case ANDROID_ALARM_SET_OLD:
39158 + case ANDROID_ALARM_SET_AND_WAIT_OLD:
39159 + if(get_user(new_alarm_time.tv_sec, (int __user *)arg)) {
39160 + rv = -EFAULT;
39161 + goto err1;
39162 + }
39163 + new_alarm_time.tv_nsec = 0;
39164 + goto from_old_alarm_set;
39165 +
39166 + case ANDROID_ALARM_SET_AND_WAIT(0):
39167 + case ANDROID_ALARM_SET(0):
39168 + if(copy_from_user(&new_alarm_time, (void __user *)arg, sizeof(new_alarm_time))) {
39169 + rv = -EFAULT;
39170 + goto err1;
39171 + }
39172 +from_old_alarm_set:
39173 + spin_lock_irqsave(&alarm_slock, flags);
39174 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_IO, "alarm %d set %ld.%09ld\n", alarm_type, new_alarm_time.tv_sec, new_alarm_time.tv_nsec);
39175 + alarm_time[alarm_type] = new_alarm_time;
39176 + alarm_enabled |= alarm_type_mask;
39177 + alarm_start_hrtimer(alarm_type);
39178 + spin_unlock_irqrestore(&alarm_slock, flags);
39179 + if(ANDROID_ALARM_BASE_CMD(cmd) != ANDROID_ALARM_SET_AND_WAIT(0) && cmd != ANDROID_ALARM_SET_AND_WAIT_OLD)
39180 + break;
39181 + // fall though
39182 + case ANDROID_ALARM_WAIT:
39183 + spin_lock_irqsave(&alarm_slock, flags);
39184 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_IO, "alarm wait\n");
39185 + if(!alarm_pending && wait_pending) {
39186 + android_unlock_suspend(&alarm_suspend_lock);
39187 + wait_pending = 0;
39188 + }
39189 + spin_unlock_irqrestore(&alarm_slock, flags);
39190 + rv = wait_event_interruptible(alarm_wait_queue, alarm_pending);
39191 + if(rv)
39192 + goto err1;
39193 + spin_lock_irqsave(&alarm_slock, flags);
39194 + rv = alarm_pending;
39195 + wait_pending = 1;
39196 + alarm_pending = 0;
39197 + if(rv & (ANDROID_ALARM_RTC_WAKEUP_MASK | ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP_MASK)) {
39198 + android_unlock_suspend(&alarm_rtc_suspend_lock);
39199 + }
39200 + spin_unlock_irqrestore(&alarm_slock, flags);
39201 + break;
39202 + case ANDROID_ALARM_SET_RTC:
39203 + if(copy_from_user(&new_rtc_time, (void __user *)arg, sizeof(new_rtc_time))) {
39204 + rv = -EFAULT;
39205 + goto err1;
39206 + }
39207 + rtc_time_to_tm(new_rtc_time.tv_sec, &rtc_new_rtc_time);
39208 +
39209 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_IO,
39210 + "set rtc %ld %ld - rtc %02d:%02d:%02d %02d/%02d/%04d\n",
39211 + new_rtc_time.tv_sec, new_rtc_time.tv_nsec,
39212 + rtc_new_rtc_time.tm_hour, rtc_new_rtc_time.tm_min,
39213 + rtc_new_rtc_time.tm_sec, rtc_new_rtc_time.tm_mon + 1,
39214 + rtc_new_rtc_time.tm_mday, rtc_new_rtc_time.tm_year + 1900);
39215 +
39216 + mutex_lock(&alarm_setrtc_mutex);
39217 + spin_lock_irqsave(&alarm_slock, flags);
39218 + for (i = 0; i < ANDROID_ALARM_SYSTEMTIME; i++)
39219 + hrtimer_try_to_cancel(&alarm_timer[i]);
39220 + getnstimeofday(&tmp_time);
39221 + elapsed_rtc_delta = timespec_sub(elapsed_rtc_delta, timespec_sub(tmp_time, new_rtc_time));
39222 + spin_unlock_irqrestore(&alarm_slock, flags);
39223 + rv = do_settimeofday(&new_rtc_time);
39224 + spin_lock_irqsave(&alarm_slock, flags);
39225 + for (i = 0; i < ANDROID_ALARM_SYSTEMTIME; i++)
39226 + alarm_start_hrtimer(i);
39227 + spin_unlock_irqrestore(&alarm_slock, flags);
39228 + if(rv < 0) {
39229 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_ERRORS, "Failed to set time\n");
39230 + mutex_unlock(&alarm_setrtc_mutex);
39231 + goto err1;
39232 + }
39233 + rv = rtc_set_time(alarm_rtc_dev, &rtc_new_rtc_time);
39234 + spin_lock_irqsave(&alarm_slock, flags);
39235 + alarm_pending |= ANDROID_ALARM_TIME_CHANGE_MASK;
39236 + wake_up(&alarm_wait_queue);
39237 + spin_unlock_irqrestore(&alarm_slock, flags);
39238 + mutex_unlock(&alarm_setrtc_mutex);
39239 + if(rv < 0) {
39240 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_ERRORS, "Failed to set RTC, time will be lost on reboot\n");
39241 + goto err1;
39242 + }
39243 + break;
39244 + case ANDROID_ALARM_GET_TIME(0):
39245 + mutex_lock(&alarm_setrtc_mutex);
39246 + spin_lock_irqsave(&alarm_slock, flags);
39247 + if(alarm_type != ANDROID_ALARM_SYSTEMTIME) {
39248 + getnstimeofday(&tmp_time);
39249 + if(alarm_type >= ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP) {
39250 + tmp_time = timespec_sub(tmp_time, elapsed_rtc_delta);
39251 + }
39252 + }
39253 + else
39254 + ktime_get_ts(&tmp_time);
39255 + spin_unlock_irqrestore(&alarm_slock, flags);
39256 + mutex_unlock(&alarm_setrtc_mutex);
39257 + if(copy_to_user((void __user *)arg, &tmp_time, sizeof(tmp_time))) {
39258 + rv = -EFAULT;
39259 + goto err1;
39260 + }
39261 + break;
39262 +
39263 + default:
39264 + rv = -EINVAL;
39265 + goto err1;
39266 + }
39267 +err1:
39268 + return rv;
39269 +}
39270 +
39271 +static int alarm_open(struct inode *inode, struct file *file)
39272 +{
39273 + file->private_data = NULL;
39274 + return 0;
39275 +}
39276 +
39277 +static int alarm_release(struct inode *inode, struct file *file)
39278 +{
39279 + int i;
39280 + unsigned long flags;
39281 +
39282 + spin_lock_irqsave(&alarm_slock, flags);
39283 + if(file->private_data != 0) {
39284 + for(i = 0; i < ANDROID_ALARM_TYPE_COUNT; i++) {
39285 + uint32_t alarm_type_mask = 1U << i;
39286 + if(alarm_enabled & alarm_type_mask) {
39287 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INFO, "alarm_release: clear alarm, pending %d\n", !!(alarm_pending & alarm_type_mask));
39288 + alarm_enabled &= ~alarm_type_mask;
39289 + }
39290 + spin_unlock_irqrestore(&alarm_slock, flags);
39291 + hrtimer_cancel(&alarm_timer[i]);
39292 + spin_lock_irqsave(&alarm_slock, flags);
39293 + }
39294 + if(alarm_pending | wait_pending) {
39295 + if(alarm_pending)
39296 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INFO, "alarm_release: clear pending alarms %x\n", alarm_pending);
39297 + android_unlock_suspend(&alarm_suspend_lock);
39298 + wait_pending = 0;
39299 + alarm_pending = 0;
39300 + }
39301 + alarm_opened = 0;
39302 + }
39303 + spin_unlock_irqrestore(&alarm_slock, flags);
39304 + return 0;
39305 +}
39306 +
39307 +static enum hrtimer_restart alarm_timer_triggered(struct hrtimer *timer)
39308 +{
39309 + unsigned long flags;
39310 + android_alarm_type_t alarm_type = (timer - alarm_timer);
39311 + uint32_t alarm_type_mask = 1U << alarm_type;
39312 +
39313 +
39314 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INT, "alarm_timer_triggered type %d\n", alarm_type);
39315 + spin_lock_irqsave(&alarm_slock, flags);
39316 + if (alarm_enabled & alarm_type_mask) {
39317 + android_lock_suspend_auto_expire(&alarm_suspend_lock, 5 * HZ);
39318 + alarm_enabled &= ~alarm_type_mask;
39319 + alarm_pending |= alarm_type_mask;
39320 + wake_up(&alarm_wait_queue);
39321 + }
39322 + spin_unlock_irqrestore(&alarm_slock, flags);
39323 + return HRTIMER_NORESTART;
39324 +}
39325 +
39326 +static void alarm_triggered_func(void *p)
39327 +{
39328 +// unsigned long flags;
39329 +
39330 + struct rtc_device *rtc = alarm_rtc_dev;
39331 + if(rtc->irq_data & RTC_AF) {
39332 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INT, "alarm_triggered_func:\n");
39333 + android_lock_suspend_auto_expire(&alarm_rtc_suspend_lock, 1 * HZ);
39334 + }
39335 +}
39336 +
39337 +int alarm_suspend(struct platform_device *pdev, pm_message_t state)
39338 +{
39339 + int err = 0;
39340 + unsigned long flags;
39341 + struct rtc_wkalrm rtc_alarm;
39342 + struct rtc_time rtc_current_rtc_time;
39343 + unsigned long rtc_current_time;
39344 + unsigned long rtc_alarm_time;
39345 + struct timespec rtc_current_timespec;
39346 + struct timespec rtc_delta;
39347 + struct timespec elapsed_realtime_alarm_time;
39348 +
39349 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_FLOW, "alarm_suspend(%p, %d)\n", pdev, state.event);
39350 + spin_lock_irqsave(&alarm_slock, flags);
39351 + if(alarm_pending && (alarm_suspend_lock.flags & ANDROID_SUSPEND_LOCK_AUTO_EXPIRE)) {
39352 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INFO, "alarm pending\n");
39353 + err = -EBUSY;
39354 + goto err1;
39355 + }
39356 + if(alarm_enabled & (ANDROID_ALARM_RTC_WAKEUP_MASK | ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP_MASK)) {
39357 + spin_unlock_irqrestore(&alarm_slock, flags);
39358 + if(alarm_enabled & ANDROID_ALARM_RTC_WAKEUP_MASK)
39359 + hrtimer_cancel(&alarm_timer[ANDROID_ALARM_RTC_WAKEUP]);
39360 + if(alarm_enabled & ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP_MASK)
39361 + hrtimer_cancel(&alarm_timer[ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP]);
39362 +
39363 + rtc_read_time(alarm_rtc_dev, &rtc_current_rtc_time);
39364 + rtc_current_timespec.tv_nsec = 0;
39365 + rtc_tm_to_time(&rtc_current_rtc_time, &rtc_current_timespec.tv_sec);
39366 + save_time_delta(&rtc_delta, &rtc_current_timespec);
39367 + set_normalized_timespec(&elapsed_realtime_alarm_time,
39368 + alarm_time[ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP].tv_sec + elapsed_rtc_delta.tv_sec,
39369 + alarm_time[ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP].tv_nsec + elapsed_rtc_delta.tv_nsec);
39370 + if((alarm_enabled & ANDROID_ALARM_RTC_WAKEUP_MASK) &&
39371 + (!(alarm_enabled & ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP_MASK)
39372 + || timespec_compare(&alarm_time[ANDROID_ALARM_RTC_WAKEUP], &elapsed_realtime_alarm_time) < 0))
39373 + rtc_alarm_time = timespec_sub(alarm_time[ANDROID_ALARM_RTC_WAKEUP], rtc_delta).tv_sec;
39374 + else {
39375 + rtc_alarm_time = timespec_sub(elapsed_realtime_alarm_time, rtc_delta).tv_sec;
39376 + }
39377 + rtc_time_to_tm(rtc_alarm_time, &rtc_alarm.time);
39378 + rtc_alarm.enabled = 1;
39379 + rtc_set_alarm(alarm_rtc_dev, &rtc_alarm);
39380 + rtc_read_time(alarm_rtc_dev, &rtc_current_rtc_time);
39381 + rtc_tm_to_time(&rtc_current_rtc_time, &rtc_current_time);
39382 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INFO,
39383 + "rtc alarm set at %ld, now %ld, rtc delta %ld.%09ld\n",
39384 + rtc_alarm_time, rtc_current_time,
39385 + rtc_delta.tv_sec, rtc_delta.tv_nsec);
39386 + if(rtc_current_time + 1 >= rtc_alarm_time) {
39387 + //spin_lock_irqsave(&alarm_slock, flags);
39388 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INFO, "alarm about to go off\n");
39389 + memset(&rtc_alarm, 0, sizeof(rtc_alarm));
39390 + rtc_alarm.enabled = 0;
39391 + rtc_set_alarm(alarm_rtc_dev, &rtc_alarm);
39392 +
39393 + spin_lock_irqsave(&alarm_slock, flags);
39394 + android_lock_suspend_auto_expire(&alarm_rtc_suspend_lock, 2 * HZ); // trigger a wakeup
39395 + alarm_start_hrtimer(ANDROID_ALARM_RTC_WAKEUP);
39396 + alarm_start_hrtimer(ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP);
39397 + err = -EBUSY;
39398 + spin_unlock_irqrestore(&alarm_slock, flags);
39399 + }
39400 + }
39401 + else {
39402 +err1:
39403 + spin_unlock_irqrestore(&alarm_slock, flags);
39404 + }
39405 + return err;
39406 +}
39407 +
39408 +int alarm_resume(struct platform_device *pdev)
39409 +{
39410 + struct rtc_wkalrm alarm;
39411 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_FLOW, "alarm_resume(%p)\n", pdev);
39412 + if(alarm_enabled & (ANDROID_ALARM_RTC_WAKEUP_MASK | ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP_MASK)) {
39413 + memset(&alarm, 0, sizeof(alarm));
39414 + alarm.enabled = 0;
39415 + rtc_set_alarm(alarm_rtc_dev, &alarm);
39416 + alarm_start_hrtimer(ANDROID_ALARM_RTC_WAKEUP);
39417 + alarm_start_hrtimer(ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP);
39418 + }
39419 + return 0;
39420 +}
39421 +
39422 +static struct rtc_task alarm_rtc_task = {
39423 + .func = alarm_triggered_func
39424 +};
39425 +
39426 +static struct file_operations alarm_fops = {
39427 + .owner = THIS_MODULE,
39428 + .unlocked_ioctl = alarm_ioctl,
39429 + .open = alarm_open,
39430 + .release = alarm_release,
39431 +};
39432 +
39433 +static struct miscdevice alarm_device = {
39434 + .minor = MISC_DYNAMIC_MINOR,
39435 + .name = "alarm",
39436 + .fops = &alarm_fops,
39437 +};
39438 +
39439 +static int rtc_alarm_add_device(struct device *dev,
39440 + struct class_interface *class_intf)
39441 +{
39442 + int err;
39443 + struct rtc_device *rtc = to_rtc_device(dev);
39444 +
39445 + mutex_lock(&alarm_setrtc_mutex);
39446 +
39447 + if(alarm_rtc_dev) {
39448 + err = -EBUSY;
39449 + goto err1;
39450 + }
39451 +
39452 + err = misc_register(&alarm_device);
39453 + if(err)
39454 + goto err1;
39455 + alarm_platform_dev = platform_device_register_simple("alarm", -1, NULL, 0);
39456 + if(IS_ERR(alarm_platform_dev)) {
39457 + err = PTR_ERR(alarm_platform_dev);
39458 + goto err2;
39459 + }
39460 + err = rtc_irq_register(rtc, &alarm_rtc_task);
39461 + if(err)
39462 + goto err3;
39463 + alarm_rtc_dev = rtc;
39464 + mutex_unlock(&alarm_setrtc_mutex);
39465 +
39466 + //device_pm_set_parent(&alarm_platform_dev->dev, dev); // currently useless, drivers are suspended in reverse creation order
39467 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INFO, "alarm: parent %p\n", alarm_platform_dev->dev.power.pm_parent);
39468 + return 0;
39469 +
39470 +err3:
39471 + platform_device_unregister(alarm_platform_dev);
39472 +err2:
39473 + misc_deregister(&alarm_device);
39474 +err1:
39475 + mutex_unlock(&alarm_setrtc_mutex);
39476 + return err;
39477 +}
39478 +
39479 +static void rtc_alarm_remove_device(struct device *dev,
39480 + struct class_interface *class_intf)
39481 +{
39482 + if(dev == &alarm_rtc_dev->dev) {
39483 + rtc_irq_unregister(alarm_rtc_dev, &alarm_rtc_task);
39484 + platform_device_unregister(alarm_platform_dev);
39485 + misc_deregister(&alarm_device);
39486 + alarm_rtc_dev = NULL;
39487 + }
39488 +}
39489 +
39490 +static struct class_interface rtc_alarm_interface = {
39491 + .add_dev = &rtc_alarm_add_device,
39492 + .remove_dev = &rtc_alarm_remove_device,
39493 +};
39494 +
39495 +static struct platform_driver alarm_driver = {
39496 + .suspend = alarm_suspend,
39497 + .resume = alarm_resume,
39498 + .driver = {
39499 + .name = "alarm"
39500 + }
39501 +};
39502 +
39503 +static int __init alarm_late_init(void)
39504 +{
39505 + unsigned long flags;
39506 + struct timespec system_time;
39507 +
39508 + // this needs to run after the rtc is read at boot
39509 + spin_lock_irqsave(&alarm_slock, flags);
39510 + // We read the current rtc and system time so we can later calulate
39511 + // elasped realtime to be (boot_systemtime + rtc - boot_rtc) ==
39512 + // (rtc - (boot_rtc - boot_systemtime))
39513 + getnstimeofday(&elapsed_rtc_delta);
39514 + ktime_get_ts(&system_time);
39515 + elapsed_rtc_delta = timespec_sub(elapsed_rtc_delta, system_time);
39516 + spin_unlock_irqrestore(&alarm_slock, flags);
39517 +
39518 + ANDROID_ALARM_DPRINTF(ANDROID_ALARM_PRINT_INFO,
39519 + "alarm_late_init: rtc to elapsed realtime delta %ld.%09ld\n",
39520 + elapsed_rtc_delta.tv_sec, elapsed_rtc_delta.tv_nsec);
39521 + return 0;
39522 +}
39523 +
39524 +static int __init alarm_init(void)
39525 +{
39526 + int err;
39527 + int i;
39528 +
39529 + for(i = 0; i < ANDROID_ALARM_SYSTEMTIME; i++) {
39530 + hrtimer_init(&alarm_timer[i], CLOCK_REALTIME, HRTIMER_MODE_ABS);
39531 + alarm_timer[i].function = alarm_timer_triggered;
39532 + }
39533 + hrtimer_init(&alarm_timer[ANDROID_ALARM_SYSTEMTIME], CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
39534 + alarm_timer[ANDROID_ALARM_SYSTEMTIME].function = alarm_timer_triggered;
39535 + err = platform_driver_register(&alarm_driver);
39536 + if(err < 0)
39537 + goto err1;
39538 + err = android_init_suspend_lock(&alarm_suspend_lock);
39539 + if(err < 0)
39540 + goto err2;
39541 + err = android_init_suspend_lock(&alarm_rtc_suspend_lock);
39542 + if(err < 0)
39543 + goto err3;
39544 + rtc_alarm_interface.class = rtc_class;
39545 + err = class_interface_register(&rtc_alarm_interface);
39546 + if(err < 0)
39547 + goto err4;
39548 +
39549 + return 0;
39550 +
39551 +err4:
39552 + android_uninit_suspend_lock(&alarm_rtc_suspend_lock);
39553 +err3:
39554 + android_uninit_suspend_lock(&alarm_suspend_lock);
39555 +err2:
39556 + platform_driver_unregister(&alarm_driver);
39557 +err1:
39558 + return err;
39559 +}
39560 +
39561 +static void __exit alarm_exit(void)
39562 +{
39563 + class_interface_unregister(&rtc_alarm_interface);
39564 + android_uninit_suspend_lock(&alarm_rtc_suspend_lock);
39565 + android_uninit_suspend_lock(&alarm_suspend_lock);
39566 + platform_driver_unregister(&alarm_driver);
39567 +}
39568 +
39569 +late_initcall(alarm_late_init);
39570 +module_init(alarm_init);
39571 +module_exit(alarm_exit);
39572 +
39573 Index: linux-2.6.28/drivers/android/binder.c
39574 ===================================================================
39575 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
39576 +++ linux-2.6.28/drivers/android/binder.c 2009-01-02 00:01:56.000000000 +0100
39577 @@ -0,0 +1,3495 @@
39578 +/* drivers/android/binder.c
39579 + *
39580 + * Android IPC Subsystem
39581 + *
39582 + * Copyright (C) 2007-2008 Google, Inc.
39583 + *
39584 + * This software is licensed under the terms of the GNU General Public
39585 + * License version 2, as published by the Free Software Foundation, and
39586 + * may be copied, distributed, and modified under those terms.
39587 + *
39588 + * This program is distributed in the hope that it will be useful,
39589 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
39590 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39591 + * GNU General Public License for more details.
39592 + *
39593 + */
39594 +
39595 +#include <asm/cacheflush.h>
39596 +#include <linux/binder.h>
39597 +#include <linux/fdtable.h>
39598 +#include <linux/file.h>
39599 +#include <linux/fs.h>
39600 +#include <linux/list.h>
39601 +#include <linux/miscdevice.h>
39602 +#include <linux/mm.h>
39603 +#include <linux/module.h>
39604 +#include <linux/mutex.h>
39605 +#include <linux/nsproxy.h>
39606 +#include <linux/poll.h>
39607 +#include <linux/proc_fs.h>
39608 +#include <linux/rbtree.h>
39609 +#include <linux/sched.h>
39610 +#include <linux/uaccess.h>
39611 +#include <linux/vmalloc.h>
39612 +
39613 +static DEFINE_MUTEX(binder_lock);
39614 +static HLIST_HEAD(binder_procs);
39615 +static struct binder_node *binder_context_mgr_node;
39616 +static uid_t binder_context_mgr_uid = -1;
39617 +static int binder_last_id;
39618 +static struct proc_dir_entry *binder_proc_dir_entry_root;
39619 +static struct proc_dir_entry *binder_proc_dir_entry_proc;
39620 +static struct hlist_head binder_dead_nodes;
39621 +
39622 +static int binder_read_proc_proc(
39623 + char *page, char **start, off_t off, int count, int *eof, void *data);
39624 +
39625 +/* This is only defined in include/asm-arm/sizes.h */
39626 +#ifndef SZ_1K
39627 +#define SZ_1K 0x400
39628 +#endif
39629 +
39630 +#ifndef SZ_4M
39631 +#define SZ_4M 0x400000
39632 +#endif
39633 +
39634 +#define FORBIDDEN_MMAP_FLAGS (VM_WRITE)
39635 +
39636 +#define BINDER_SMALL_BUF_SIZE (PAGE_SIZE * 64)
39637 +
39638 +enum {
39639 + BINDER_DEBUG_USER_ERROR = 1U << 0,
39640 + BINDER_DEBUG_FAILED_TRANSACTION = 1U << 1,
39641 + BINDER_DEBUG_DEAD_TRANSACTION = 1U << 2,
39642 + BINDER_DEBUG_OPEN_CLOSE = 1U << 3,
39643 + BINDER_DEBUG_DEAD_BINDER = 1U << 4,
39644 + BINDER_DEBUG_DEATH_NOTIFICATION = 1U << 5,
39645 + BINDER_DEBUG_READ_WRITE = 1U << 6,
39646 + BINDER_DEBUG_USER_REFS = 1U << 7,
39647 + BINDER_DEBUG_THREADS = 1U << 8,
39648 + BINDER_DEBUG_TRANSACTION = 1U << 9,
39649 + BINDER_DEBUG_TRANSACTION_COMPLETE = 1U << 10,
39650 + BINDER_DEBUG_FREE_BUFFER = 1U << 11,
39651 + BINDER_DEBUG_INTERNAL_REFS = 1U << 12,
39652 + BINDER_DEBUG_BUFFER_ALLOC = 1U << 13,
39653 + BINDER_DEBUG_PRIORITY_CAP = 1U << 14,
39654 + BINDER_DEBUG_BUFFER_ALLOC_ASYNC = 1U << 15,
39655 +};
39656 +static uint32_t binder_debug_mask = BINDER_DEBUG_USER_ERROR |
39657 + BINDER_DEBUG_FAILED_TRANSACTION | BINDER_DEBUG_DEAD_TRANSACTION;
39658 +module_param_named(debug_mask, binder_debug_mask, uint, S_IWUSR | S_IRUGO)
39659 +static int binder_debug_no_lock;
39660 +module_param_named(proc_no_lock, binder_debug_no_lock, bool, S_IWUSR | S_IRUGO)
39661 +static DECLARE_WAIT_QUEUE_HEAD(binder_user_error_wait);
39662 +static int binder_stop_on_user_error;
39663 +static int binder_set_stop_on_user_error(
39664 + const char *val, struct kernel_param *kp)
39665 +{
39666 + int ret;
39667 + ret = param_set_int(val, kp);
39668 + if (binder_stop_on_user_error < 2)
39669 + wake_up(&binder_user_error_wait);
39670 + return ret;
39671 +}
39672 +module_param_call(stop_on_user_error, binder_set_stop_on_user_error,
39673 + param_get_int, &binder_stop_on_user_error, S_IWUSR | S_IRUGO);
39674 +
39675 +#define binder_user_error(x...) \
39676 + do { \
39677 + if (binder_debug_mask & BINDER_DEBUG_USER_ERROR) \
39678 + printk(KERN_INFO x); \
39679 + if (binder_stop_on_user_error) \
39680 + binder_stop_on_user_error = 2; \
39681 + } while (0)
39682 +
39683 +enum {
39684 + BINDER_STAT_PROC,
39685 + BINDER_STAT_THREAD,
39686 + BINDER_STAT_NODE,
39687 + BINDER_STAT_REF,
39688 + BINDER_STAT_DEATH,
39689 + BINDER_STAT_TRANSACTION,
39690 + BINDER_STAT_TRANSACTION_COMPLETE,
39691 + BINDER_STAT_COUNT
39692 +};
39693 +
39694 +struct binder_stats {
39695 + int br[_IOC_NR(BR_FAILED_REPLY) + 1];
39696 + int bc[_IOC_NR(BC_DEAD_BINDER_DONE) + 1];
39697 + int obj_created[BINDER_STAT_COUNT];
39698 + int obj_deleted[BINDER_STAT_COUNT];
39699 +};
39700 +
39701 +static struct binder_stats binder_stats;
39702 +
39703 +struct binder_transaction_log_entry {
39704 + int debug_id;
39705 + int call_type;
39706 + int from_proc;
39707 + int from_thread;
39708 + int target_handle;
39709 + int to_proc;
39710 + int to_thread;
39711 + int to_node;
39712 + int data_size;
39713 + int offsets_size;
39714 +};
39715 +struct binder_transaction_log {
39716 + int next;
39717 + int full;
39718 + struct binder_transaction_log_entry entry[32];
39719 +};
39720 +struct binder_transaction_log binder_transaction_log;
39721 +struct binder_transaction_log binder_transaction_log_failed;
39722 +
39723 +static struct binder_transaction_log_entry *binder_transaction_log_add(
39724 + struct binder_transaction_log *log)
39725 +{
39726 + struct binder_transaction_log_entry *e;
39727 + e = &log->entry[log->next];
39728 + memset(e, 0, sizeof(*e));
39729 + log->next++;
39730 + if (log->next == ARRAY_SIZE(log->entry)) {
39731 + log->next = 0;
39732 + log->full = 1;
39733 + }
39734 + return e;
39735 +}
39736 +
39737 +struct binder_work {
39738 + struct list_head entry;
39739 + enum {
39740 + BINDER_WORK_TRANSACTION = 1,
39741 + BINDER_WORK_TRANSACTION_COMPLETE,
39742 + BINDER_WORK_NODE,
39743 + BINDER_WORK_DEAD_BINDER,
39744 + BINDER_WORK_DEAD_BINDER_AND_CLEAR,
39745 + BINDER_WORK_CLEAR_DEATH_NOTIFICATION,
39746 + } type;
39747 +};
39748 +
39749 +struct binder_node {
39750 + int debug_id;
39751 + struct binder_work work;
39752 + union {
39753 + struct rb_node rb_node;
39754 + struct hlist_node dead_node;
39755 + };
39756 + struct binder_proc *proc;
39757 + struct hlist_head refs;
39758 + int internal_strong_refs;
39759 + int local_weak_refs;
39760 + int local_strong_refs;
39761 + void __user *ptr;
39762 + void __user *cookie;
39763 + unsigned has_strong_ref : 1;
39764 + unsigned pending_strong_ref : 1;
39765 + unsigned has_weak_ref : 1;
39766 + unsigned pending_weak_ref : 1;
39767 + unsigned has_async_transaction : 1;
39768 + unsigned accept_fds : 1;
39769 + int min_priority : 8;
39770 + struct list_head async_todo;
39771 +};
39772 +
39773 +struct binder_ref_death {
39774 + struct binder_work work;
39775 + void __user *cookie;
39776 +};
39777 +
39778 +struct binder_ref {
39779 + /* Lookups needed: */
39780 + /* node + proc => ref (transaction) */
39781 + /* desc + proc => ref (transaction, inc/dec ref) */
39782 + /* node => refs + procs (proc exit) */
39783 + int debug_id;
39784 + struct rb_node rb_node_desc;
39785 + struct rb_node rb_node_node;
39786 + struct hlist_node node_entry;
39787 + struct binder_proc *proc;
39788 + struct binder_node *node;
39789 + uint32_t desc;
39790 + int strong;
39791 + int weak;
39792 + struct binder_ref_death *death;
39793 +};
39794 +
39795 +struct binder_buffer {
39796 + struct list_head entry; /* free and allocated entries by addesss */
39797 + struct rb_node rb_node; /* free entry by size or allocated entry */
39798 + /* by address */
39799 + unsigned free : 1;
39800 + unsigned allow_user_free : 1;
39801 + unsigned async_transaction : 1;
39802 + unsigned debug_id : 29;
39803 +
39804 + struct binder_transaction *transaction;
39805 +
39806 + struct binder_node *target_node;
39807 + size_t data_size;
39808 + size_t offsets_size;
39809 + uint8_t data[0];
39810 +};
39811 +
39812 +struct binder_proc {
39813 + struct hlist_node proc_node;
39814 + struct rb_root threads;
39815 + struct rb_root nodes;
39816 + struct rb_root refs_by_desc;
39817 + struct rb_root refs_by_node;
39818 + int pid;
39819 + struct vm_area_struct *vma;
39820 + struct task_struct *tsk;
39821 + void *buffer;
39822 + size_t user_buffer_offset;
39823 +
39824 + struct list_head buffers;
39825 + struct rb_root free_buffers;
39826 + struct rb_root allocated_buffers;
39827 + size_t free_async_space;
39828 +
39829 + struct page **pages;
39830 + size_t buffer_size;
39831 + uint32_t buffer_free;
39832 + struct list_head todo;
39833 + wait_queue_head_t wait;
39834 + struct binder_stats stats;
39835 + struct list_head delivered_death;
39836 + int max_threads;
39837 + int requested_threads;
39838 + int requested_threads_started;
39839 + int ready_threads;
39840 + long default_priority;
39841 +};
39842 +
39843 +enum {
39844 + BINDER_LOOPER_STATE_REGISTERED = 0x01,
39845 + BINDER_LOOPER_STATE_ENTERED = 0x02,
39846 + BINDER_LOOPER_STATE_EXITED = 0x04,
39847 + BINDER_LOOPER_STATE_INVALID = 0x08,
39848 + BINDER_LOOPER_STATE_WAITING = 0x10,
39849 + BINDER_LOOPER_STATE_NEED_RETURN = 0x20
39850 +};
39851 +
39852 +struct binder_thread {
39853 + struct binder_proc *proc;
39854 + struct rb_node rb_node;
39855 + int pid;
39856 + int looper;
39857 + struct binder_transaction *transaction_stack;
39858 + struct list_head todo;
39859 + uint32_t return_error; /* Write failed, return error code in read buf */
39860 + uint32_t return_error2; /* Write failed, return error code in read */
39861 + /* buffer. Used when sending a reply to a dead process that */
39862 + /* we are also waiting on */
39863 + wait_queue_head_t wait;
39864 + struct binder_stats stats;
39865 +};
39866 +
39867 +struct binder_transaction {
39868 + int debug_id;
39869 + struct binder_work work;
39870 + struct binder_thread *from;
39871 + struct binder_transaction *from_parent;
39872 + struct binder_proc *to_proc;
39873 + struct binder_thread *to_thread;
39874 + struct binder_transaction *to_parent;
39875 + unsigned need_reply : 1;
39876 + /*unsigned is_dead : 1;*/ /* not used at the moment */
39877 +
39878 + struct binder_buffer *buffer;
39879 + unsigned int code;
39880 + unsigned int flags;
39881 + long priority;
39882 + long saved_priority;
39883 + uid_t sender_euid;
39884 +};
39885 +
39886 +/*
39887 + * copied from get_unused_fd_flags
39888 + */
39889 +int task_get_unused_fd_flags(struct task_struct *tsk, int flags)
39890 +{
39891 + struct files_struct *files = get_files_struct(tsk);
39892 + int fd, error;
39893 + struct fdtable *fdt;
39894 + unsigned long rlim_cur;
39895 +
39896 + if (files == NULL)
39897 + return -ESRCH;
39898 +
39899 + error = -EMFILE;
39900 + spin_lock(&files->file_lock);
39901 +
39902 +repeat:
39903 + fdt = files_fdtable(files);
39904 + fd = find_next_zero_bit(fdt->open_fds->fds_bits, fdt->max_fds,
39905 + files->next_fd);
39906 +
39907 + /*
39908 + * N.B. For clone tasks sharing a files structure, this test
39909 + * will limit the total number of files that can be opened.
39910 + */
39911 + rcu_read_lock();
39912 + if (tsk->signal)
39913 + rlim_cur = tsk->signal->rlim[RLIMIT_NOFILE].rlim_cur;
39914 + else
39915 + rlim_cur = 0;
39916 + rcu_read_unlock();
39917 + if (fd >= rlim_cur)
39918 + goto out;
39919 +
39920 + /* Do we need to expand the fd array or fd set? */
39921 + error = expand_files(files, fd);
39922 + if (error < 0)
39923 + goto out;
39924 +
39925 + if (error) {
39926 + /*
39927 + * If we needed to expand the fs array we
39928 + * might have blocked - try again.
39929 + */
39930 + error = -EMFILE;
39931 + goto repeat;
39932 + }
39933 +
39934 + FD_SET(fd, fdt->open_fds);
39935 + if (flags & O_CLOEXEC)
39936 + FD_SET(fd, fdt->close_on_exec);
39937 + else
39938 + FD_CLR(fd, fdt->close_on_exec);
39939 + files->next_fd = fd + 1;
39940 +#if 1
39941 + /* Sanity check */
39942 + if (fdt->fd[fd] != NULL) {
39943 + printk(KERN_WARNING "get_unused_fd: slot %d not NULL!\n", fd);
39944 + fdt->fd[fd] = NULL;
39945 + }
39946 +#endif
39947 + error = fd;
39948 +
39949 +out:
39950 + spin_unlock(&files->file_lock);
39951 + put_files_struct(files);
39952 + return error;
39953 +}
39954 +
39955 +/*
39956 + * copied from fd_install
39957 + */
39958 +static void task_fd_install(
39959 + struct task_struct *tsk, unsigned int fd, struct file *file)
39960 +{
39961 + struct files_struct *files = get_files_struct(tsk);
39962 + struct fdtable *fdt;
39963 +
39964 + if (files == NULL)
39965 + return;
39966 +
39967 + spin_lock(&files->file_lock);
39968 + fdt = files_fdtable(files);
39969 + BUG_ON(fdt->fd[fd] != NULL);
39970 + rcu_assign_pointer(fdt->fd[fd], file);
39971 + spin_unlock(&files->file_lock);
39972 + put_files_struct(files);
39973 +}
39974 +
39975 +/*
39976 + * copied from __put_unused_fd in open.c
39977 + */
39978 +static void __put_unused_fd(struct files_struct *files, unsigned int fd)
39979 +{
39980 + struct fdtable *fdt = files_fdtable(files);
39981 + __FD_CLR(fd, fdt->open_fds);
39982 + if (fd < files->next_fd)
39983 + files->next_fd = fd;
39984 +}
39985 +
39986 +/*
39987 + * copied from sys_close
39988 + */
39989 +static long task_close_fd(struct task_struct *tsk, unsigned int fd)
39990 +{
39991 + struct file *filp;
39992 + struct files_struct *files = get_files_struct(tsk);
39993 + struct fdtable *fdt;
39994 + int retval;
39995 +
39996 + if (files == NULL)
39997 + return -ESRCH;
39998 +
39999 + spin_lock(&files->file_lock);
40000 + fdt = files_fdtable(files);
40001 + if (fd >= fdt->max_fds)
40002 + goto out_unlock;
40003 + filp = fdt->fd[fd];
40004 + if (!filp)
40005 + goto out_unlock;
40006 + rcu_assign_pointer(fdt->fd[fd], NULL);
40007 + FD_CLR(fd, fdt->close_on_exec);
40008 + __put_unused_fd(files, fd);
40009 + spin_unlock(&files->file_lock);
40010 + retval = filp_close(filp, files);
40011 +
40012 + /* can't restart close syscall because file table entry was cleared */
40013 + if (unlikely(retval == -ERESTARTSYS ||
40014 + retval == -ERESTARTNOINTR ||
40015 + retval == -ERESTARTNOHAND ||
40016 + retval == -ERESTART_RESTARTBLOCK))
40017 + retval = -EINTR;
40018 +
40019 + put_files_struct(files);
40020 + return retval;
40021 +
40022 +out_unlock:
40023 + spin_unlock(&files->file_lock);
40024 + put_files_struct(files);
40025 + return -EBADF;
40026 +}
40027 +
40028 +static void binder_set_nice(long nice)
40029 +{
40030 + long min_nice;
40031 + if (can_nice(current, nice)) {
40032 + set_user_nice(current, nice);
40033 + return;
40034 + }
40035 + min_nice = 20 - current->signal->rlim[RLIMIT_NICE].rlim_cur;
40036 + if (binder_debug_mask & BINDER_DEBUG_PRIORITY_CAP)
40037 + printk(KERN_INFO "binder: %d: nice value %ld not allowed use "
40038 + "%ld instead\n", current->pid, nice, min_nice);
40039 + set_user_nice(current, min_nice);
40040 + if (min_nice < 20)
40041 + return;
40042 + binder_user_error("binder: %d RLIMIT_NICE not set\n", current->pid);
40043 +}
40044 +
40045 +static size_t binder_buffer_size(
40046 + struct binder_proc *proc, struct binder_buffer *buffer)
40047 +{
40048 + if (list_is_last(&buffer->entry, &proc->buffers))
40049 + return proc->buffer + proc->buffer_size - (void *)buffer->data;
40050 + else
40051 + return (size_t)list_entry(buffer->entry.next,
40052 + struct binder_buffer, entry) - (size_t)buffer->data;
40053 +}
40054 +
40055 +static void binder_insert_free_buffer(
40056 + struct binder_proc *proc, struct binder_buffer *new_buffer)
40057 +{
40058 + struct rb_node **p = &proc->free_buffers.rb_node;
40059 + struct rb_node *parent = NULL;
40060 + struct binder_buffer *buffer;
40061 + size_t buffer_size;
40062 + size_t new_buffer_size;
40063 +
40064 + BUG_ON(!new_buffer->free);
40065 +
40066 + new_buffer_size = binder_buffer_size(proc, new_buffer);
40067 +
40068 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40069 + printk(KERN_INFO "binder: %d: add free buffer, size %d, "
40070 + "at %p\n", proc->pid, new_buffer_size, new_buffer);
40071 +
40072 + while (*p) {
40073 + parent = *p;
40074 + buffer = rb_entry(parent, struct binder_buffer, rb_node);
40075 + BUG_ON(!buffer->free);
40076 +
40077 + buffer_size = binder_buffer_size(proc, buffer);
40078 +
40079 + if (new_buffer_size < buffer_size)
40080 + p = &parent->rb_left;
40081 + else
40082 + p = &parent->rb_right;
40083 + }
40084 + rb_link_node(&new_buffer->rb_node, parent, p);
40085 + rb_insert_color(&new_buffer->rb_node, &proc->free_buffers);
40086 +}
40087 +
40088 +static void binder_insert_allocated_buffer(
40089 + struct binder_proc *proc, struct binder_buffer *new_buffer)
40090 +{
40091 + struct rb_node **p = &proc->allocated_buffers.rb_node;
40092 + struct rb_node *parent = NULL;
40093 + struct binder_buffer *buffer;
40094 +
40095 + BUG_ON(new_buffer->free);
40096 +
40097 + while (*p) {
40098 + parent = *p;
40099 + buffer = rb_entry(parent, struct binder_buffer, rb_node);
40100 + BUG_ON(buffer->free);
40101 +
40102 + if (new_buffer < buffer)
40103 + p = &parent->rb_left;
40104 + else if (new_buffer > buffer)
40105 + p = &parent->rb_right;
40106 + else
40107 + BUG();
40108 + }
40109 + rb_link_node(&new_buffer->rb_node, parent, p);
40110 + rb_insert_color(&new_buffer->rb_node, &proc->allocated_buffers);
40111 +}
40112 +
40113 +static struct binder_buffer *binder_buffer_lookup(
40114 + struct binder_proc *proc, void __user *user_ptr)
40115 +{
40116 + struct rb_node *n = proc->allocated_buffers.rb_node;
40117 + struct binder_buffer *buffer;
40118 + struct binder_buffer *kern_ptr;
40119 +
40120 + kern_ptr = user_ptr - proc->user_buffer_offset
40121 + - offsetof(struct binder_buffer, data);
40122 +
40123 + while (n) {
40124 + buffer = rb_entry(n, struct binder_buffer, rb_node);
40125 + BUG_ON(buffer->free);
40126 +
40127 + if (kern_ptr < buffer)
40128 + n = n->rb_left;
40129 + else if (kern_ptr > buffer)
40130 + n = n->rb_right;
40131 + else
40132 + return buffer;
40133 + }
40134 + return NULL;
40135 +}
40136 +
40137 +static int binder_update_page_range(struct binder_proc *proc, int allocate,
40138 + void *start, void *end, struct vm_area_struct *vma)
40139 +{
40140 + void *page_addr;
40141 + unsigned long user_page_addr;
40142 + struct vm_struct tmp_area;
40143 + struct page **page;
40144 + struct mm_struct *mm;
40145 +
40146 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40147 + printk(KERN_INFO "binder: %d: %s pages %p-%p\n",
40148 + proc->pid, allocate ? "allocate" : "free", start, end);
40149 +
40150 + if (end <= start)
40151 + return 0;
40152 +
40153 + if (vma)
40154 + mm = NULL;
40155 + else
40156 + mm = get_task_mm(proc->tsk);
40157 +
40158 + if (mm) {
40159 + down_write(&mm->mmap_sem);
40160 + vma = proc->vma;
40161 + }
40162 +
40163 + if (allocate == 0)
40164 + goto free_range;
40165 +
40166 + if (vma == NULL) {
40167 + printk(KERN_ERR "binder: %d: binder_alloc_buf failed to "
40168 + "map pages in userspace, no vma\n", proc->pid);
40169 + goto err_no_vma;
40170 + }
40171 +
40172 + for (page_addr = start; page_addr < end; page_addr += PAGE_SIZE) {
40173 + int ret;
40174 + struct page **page_array_ptr;
40175 + page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE];
40176 +
40177 + BUG_ON(*page);
40178 + *page = alloc_page(GFP_KERNEL | __GFP_ZERO);
40179 + if (*page == NULL) {
40180 + printk(KERN_ERR "binder: %d: binder_alloc_buf failed "
40181 + "for page at %p\n", proc->pid, page_addr);
40182 + goto err_alloc_page_failed;
40183 + }
40184 + tmp_area.addr = page_addr;
40185 + tmp_area.size = PAGE_SIZE + PAGE_SIZE /* guard page? */;
40186 + page_array_ptr = page;
40187 + ret = map_vm_area(&tmp_area, PAGE_KERNEL, &page_array_ptr);
40188 + if (ret) {
40189 + printk(KERN_ERR "binder: %d: binder_alloc_buf failed "
40190 + "to map page at %p in kernel\n",
40191 + proc->pid, page_addr);
40192 + goto err_map_kernel_failed;
40193 + }
40194 + user_page_addr = (size_t)page_addr + proc->user_buffer_offset;
40195 + ret = vm_insert_page(vma, user_page_addr, page[0]);
40196 + if (ret) {
40197 + printk(KERN_ERR "binder: %d: binder_alloc_buf failed "
40198 + "to map page at %lx in userspace\n",
40199 + proc->pid, user_page_addr);
40200 + goto err_vm_insert_page_failed;
40201 + }
40202 + /* vm_insert_page does not seem to increment the refcount */
40203 + }
40204 + if (mm) {
40205 + up_write(&mm->mmap_sem);
40206 + mmput(mm);
40207 + }
40208 + return 0;
40209 +
40210 +free_range:
40211 + for (page_addr = end - PAGE_SIZE; page_addr >= start;
40212 + page_addr -= PAGE_SIZE) {
40213 + page = &proc->pages[(page_addr - proc->buffer) / PAGE_SIZE];
40214 + if (vma)
40215 + zap_page_range(vma, (size_t)page_addr +
40216 + proc->user_buffer_offset, PAGE_SIZE, NULL);
40217 +err_vm_insert_page_failed:
40218 + unmap_kernel_range((unsigned long)page_addr, PAGE_SIZE);
40219 +err_map_kernel_failed:
40220 + __free_page(*page);
40221 + *page = NULL;
40222 +err_alloc_page_failed:
40223 + ;
40224 + }
40225 +err_no_vma:
40226 + if (mm) {
40227 + up_write(&mm->mmap_sem);
40228 + mmput(mm);
40229 + }
40230 + return -ENOMEM;
40231 +}
40232 +
40233 +static struct binder_buffer *binder_alloc_buf(struct binder_proc *proc,
40234 + size_t data_size, size_t offsets_size, int is_async)
40235 +{
40236 + struct rb_node *n = proc->free_buffers.rb_node;
40237 + struct binder_buffer *buffer;
40238 + size_t buffer_size;
40239 + struct rb_node *best_fit = NULL;
40240 + void *has_page_addr;
40241 + void *end_page_addr;
40242 + size_t size;
40243 +
40244 + if (proc->vma == NULL) {
40245 + printk(KERN_ERR "binder: %d: binder_alloc_buf, no vma\n",
40246 + proc->pid);
40247 + return NULL;
40248 + }
40249 +
40250 + size = ALIGN(data_size, sizeof(void *)) +
40251 + ALIGN(offsets_size, sizeof(void *));
40252 +
40253 + if (size < data_size || size < offsets_size) {
40254 + binder_user_error("binder: %d: got transaction with invalid "
40255 + "size %d-%d\n", proc->pid, data_size, offsets_size);
40256 + return NULL;
40257 + }
40258 +
40259 + if (is_async &&
40260 + proc->free_async_space < size + sizeof(struct binder_buffer)) {
40261 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40262 + printk(KERN_ERR "binder: %d: binder_alloc_buf size %d f"
40263 + "ailed, no async space left\n", proc->pid, size);
40264 + return NULL;
40265 + }
40266 +
40267 + while (n) {
40268 + buffer = rb_entry(n, struct binder_buffer, rb_node);
40269 + BUG_ON(!buffer->free);
40270 + buffer_size = binder_buffer_size(proc, buffer);
40271 +
40272 + if (size < buffer_size) {
40273 + best_fit = n;
40274 + n = n->rb_left;
40275 + } else if (size > buffer_size)
40276 + n = n->rb_right;
40277 + else {
40278 + best_fit = n;
40279 + break;
40280 + }
40281 + }
40282 + if (best_fit == NULL) {
40283 + printk(KERN_ERR "binder: %d: binder_alloc_buf size %d failed, "
40284 + "no address space\n", proc->pid, size);
40285 + return NULL;
40286 + }
40287 + if (n == NULL) {
40288 + buffer = rb_entry(best_fit, struct binder_buffer, rb_node);
40289 + buffer_size = binder_buffer_size(proc, buffer);
40290 + }
40291 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40292 + printk(KERN_INFO "binder: %d: binder_alloc_buf size %d got buff"
40293 + "er %p size %d\n", proc->pid, size, buffer, buffer_size);
40294 +
40295 + has_page_addr =
40296 + (void *)(((size_t)buffer->data + buffer_size) & PAGE_MASK);
40297 + if (n == NULL) {
40298 + if (size + sizeof(struct binder_buffer) + 4 >= buffer_size)
40299 + buffer_size = size; /* no room for other buffers */
40300 + else
40301 + buffer_size = size + sizeof(struct binder_buffer);
40302 + }
40303 + end_page_addr = (void *)PAGE_ALIGN((size_t)buffer->data + buffer_size);
40304 + if (end_page_addr > has_page_addr)
40305 + end_page_addr = has_page_addr;
40306 + if (binder_update_page_range(proc, 1,
40307 + (void *)PAGE_ALIGN((size_t)buffer->data), end_page_addr, NULL))
40308 + return NULL;
40309 +
40310 + rb_erase(best_fit, &proc->free_buffers);
40311 + buffer->free = 0;
40312 + binder_insert_allocated_buffer(proc, buffer);
40313 + if (buffer_size != size) {
40314 + struct binder_buffer *new_buffer = (void *)buffer->data + size;
40315 + list_add(&new_buffer->entry, &buffer->entry);
40316 + new_buffer->free = 1;
40317 + binder_insert_free_buffer(proc, new_buffer);
40318 + }
40319 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40320 + printk(KERN_INFO "binder: %d: binder_alloc_buf size %d got "
40321 + "%p\n", proc->pid, size, buffer);
40322 + buffer->data_size = data_size;
40323 + buffer->offsets_size = offsets_size;
40324 + buffer->async_transaction = is_async;
40325 + if (is_async) {
40326 + proc->free_async_space -= size + sizeof(struct binder_buffer);
40327 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC_ASYNC)
40328 + printk(KERN_INFO "binder: %d: binder_alloc_buf size %d "
40329 + "async free %d\n", proc->pid, size,
40330 + proc->free_async_space);
40331 + }
40332 +
40333 + return buffer;
40334 +}
40335 +
40336 +static void *buffer_start_page(struct binder_buffer *buffer)
40337 +{
40338 + return (void *)((size_t)buffer & PAGE_MASK);
40339 +}
40340 +
40341 +static void *buffer_end_page(struct binder_buffer *buffer)
40342 +{
40343 + return (void *)(((size_t)(buffer + 1) - 1) & PAGE_MASK);
40344 +}
40345 +
40346 +static void binder_delete_free_buffer(
40347 + struct binder_proc *proc, struct binder_buffer *buffer)
40348 +{
40349 + struct binder_buffer *prev, *next = NULL;
40350 + int free_page_end = 1;
40351 + int free_page_start = 1;
40352 +
40353 + BUG_ON(proc->buffers.next == &buffer->entry);
40354 + prev = list_entry(buffer->entry.prev, struct binder_buffer, entry);
40355 + BUG_ON(!prev->free);
40356 + if (buffer_end_page(prev) == buffer_start_page(buffer)) {
40357 + free_page_start = 0;
40358 + if (buffer_end_page(prev) == buffer_end_page(buffer))
40359 + free_page_end = 0;
40360 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40361 + printk(KERN_INFO "binder: %d: merge free, buffer %p "
40362 + "share page with %p\n", proc->pid, buffer, prev);
40363 + }
40364 +
40365 + if (!list_is_last(&buffer->entry, &proc->buffers)) {
40366 + next = list_entry(buffer->entry.next,
40367 + struct binder_buffer, entry);
40368 + if (buffer_start_page(next) == buffer_end_page(buffer)) {
40369 + free_page_end = 0;
40370 + if (buffer_start_page(next) ==
40371 + buffer_start_page(buffer))
40372 + free_page_start = 0;
40373 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40374 + printk(KERN_INFO "binder: %d: merge free, "
40375 + "buffer %p share page with %p\n",
40376 + proc->pid, buffer, prev);
40377 + }
40378 + }
40379 + list_del(&buffer->entry);
40380 + if (free_page_start || free_page_end) {
40381 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40382 + printk(KERN_INFO "binder: %d: merge free, buffer %p do "
40383 + "not share page%s%s with with %p or %p\n",
40384 + proc->pid, buffer, free_page_start ? "" : " end",
40385 + free_page_end ? "" : " start", prev, next);
40386 + binder_update_page_range(proc, 0, free_page_start ?
40387 + buffer_start_page(buffer) : buffer_end_page(buffer),
40388 + (free_page_end ? buffer_end_page(buffer) :
40389 + buffer_start_page(buffer)) + PAGE_SIZE, NULL);
40390 + }
40391 +}
40392 +
40393 +static void binder_free_buf(
40394 + struct binder_proc *proc, struct binder_buffer *buffer)
40395 +{
40396 + size_t size, buffer_size;
40397 +
40398 + buffer_size = binder_buffer_size(proc, buffer);
40399 +
40400 + size = ALIGN(buffer->data_size, sizeof(void *)) +
40401 + ALIGN(buffer->offsets_size, sizeof(void *));
40402 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
40403 + printk(KERN_INFO "binder: %d: binder_free_buf %p size %d buffer"
40404 + "_size %d\n", proc->pid, buffer, size, buffer_size);
40405 +
40406 + BUG_ON(buffer->free);
40407 + BUG_ON(size > buffer_size);
40408 + BUG_ON(buffer->transaction != NULL);
40409 + BUG_ON((void *)buffer < proc->buffer);
40410 + BUG_ON((void *)buffer > proc->buffer + proc->buffer_size);
40411 +
40412 + if (buffer->async_transaction) {
40413 + proc->free_async_space += size + sizeof(struct binder_buffer);
40414 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC_ASYNC)
40415 + printk(KERN_INFO "binder: %d: binder_free_buf size %d "
40416 + "async free %d\n", proc->pid, size,
40417 + proc->free_async_space);
40418 + }
40419 +
40420 + binder_update_page_range(proc, 0,
40421 + (void *)PAGE_ALIGN((size_t)buffer->data),
40422 + (void *)(((size_t)buffer->data + buffer_size) & PAGE_MASK),
40423 + NULL);
40424 + rb_erase(&buffer->rb_node, &proc->allocated_buffers);
40425 + buffer->free = 1;
40426 + if (!list_is_last(&buffer->entry, &proc->buffers)) {
40427 + struct binder_buffer *next = list_entry(buffer->entry.next,
40428 + struct binder_buffer, entry);
40429 + if (next->free) {
40430 + rb_erase(&next->rb_node, &proc->free_buffers);
40431 + binder_delete_free_buffer(proc, next);
40432 + }
40433 + }
40434 + if (proc->buffers.next != &buffer->entry) {
40435 + struct binder_buffer *prev = list_entry(buffer->entry.prev,
40436 + struct binder_buffer, entry);
40437 + if (prev->free) {
40438 + binder_delete_free_buffer(proc, buffer);
40439 + rb_erase(&prev->rb_node, &proc->free_buffers);
40440 + buffer = prev;
40441 + }
40442 + }
40443 + binder_insert_free_buffer(proc, buffer);
40444 +}
40445 +
40446 +static struct binder_node *
40447 +binder_get_node(struct binder_proc *proc, void __user *ptr)
40448 +{
40449 + struct rb_node *n = proc->nodes.rb_node;
40450 + struct binder_node *node;
40451 +
40452 + while (n) {
40453 + node = rb_entry(n, struct binder_node, rb_node);
40454 +
40455 + if (ptr < node->ptr)
40456 + n = n->rb_left;
40457 + else if (ptr > node->ptr)
40458 + n = n->rb_right;
40459 + else
40460 + return node;
40461 + }
40462 + return NULL;
40463 +}
40464 +
40465 +static struct binder_node *
40466 +binder_new_node(struct binder_proc *proc, void __user *ptr, void __user *cookie)
40467 +{
40468 + struct rb_node **p = &proc->nodes.rb_node;
40469 + struct rb_node *parent = NULL;
40470 + struct binder_node *node;
40471 +
40472 + while (*p) {
40473 + parent = *p;
40474 + node = rb_entry(parent, struct binder_node, rb_node);
40475 +
40476 + if (ptr < node->ptr)
40477 + p = &(*p)->rb_left;
40478 + else if (ptr > node->ptr)
40479 + p = &(*p)->rb_right;
40480 + else
40481 + return NULL;
40482 + }
40483 +
40484 + node = kzalloc(sizeof(*node), GFP_KERNEL);
40485 + if (node == NULL)
40486 + return NULL;
40487 + binder_stats.obj_created[BINDER_STAT_NODE]++;
40488 + rb_link_node(&node->rb_node, parent, p);
40489 + rb_insert_color(&node->rb_node, &proc->nodes);
40490 + node->debug_id = ++binder_last_id;
40491 + node->proc = proc;
40492 + node->ptr = ptr;
40493 + node->cookie = cookie;
40494 + node->work.type = BINDER_WORK_NODE;
40495 + INIT_LIST_HEAD(&node->work.entry);
40496 + INIT_LIST_HEAD(&node->async_todo);
40497 + if (binder_debug_mask & BINDER_DEBUG_INTERNAL_REFS)
40498 + printk(KERN_INFO "binder: %d:%d node %d u%p c%p created\n",
40499 + proc->pid, current->pid, node->debug_id,
40500 + node->ptr, node->cookie);
40501 + return node;
40502 +}
40503 +
40504 +static int
40505 +binder_inc_node(struct binder_node *node, int strong, int internal,
40506 + struct list_head *target_list)
40507 +{
40508 + if (strong) {
40509 + if (internal) {
40510 + if (target_list == NULL &&
40511 + node->internal_strong_refs == 0 &&
40512 + !(node == binder_context_mgr_node &&
40513 + node->has_strong_ref)) {
40514 + printk(KERN_ERR "binder: invalid inc strong "
40515 + "node for %d\n", node->debug_id);
40516 + return -EINVAL;
40517 + }
40518 + node->internal_strong_refs++;
40519 + } else
40520 + node->local_strong_refs++;
40521 + if (!node->has_strong_ref && target_list) {
40522 + list_del_init(&node->work.entry);
40523 + list_add_tail(&node->work.entry, target_list);
40524 + }
40525 + } else {
40526 + if (!internal)
40527 + node->local_weak_refs++;
40528 + if (!node->has_weak_ref && list_empty(&node->work.entry)) {
40529 + if (target_list == NULL) {
40530 + printk(KERN_ERR "binder: invalid inc weak node "
40531 + "for %d\n", node->debug_id);
40532 + return -EINVAL;
40533 + }
40534 + list_add_tail(&node->work.entry, target_list);
40535 + }
40536 + }
40537 + return 0;
40538 +}
40539 +
40540 +static int
40541 +binder_dec_node(struct binder_node *node, int strong, int internal)
40542 +{
40543 + if (strong) {
40544 + if (internal)
40545 + node->internal_strong_refs--;
40546 + else
40547 + node->local_strong_refs--;
40548 + if (node->local_strong_refs || node->internal_strong_refs)
40549 + return 0;
40550 + } else {
40551 + if (!internal)
40552 + node->local_weak_refs--;
40553 + if (node->local_weak_refs || !hlist_empty(&node->refs))
40554 + return 0;
40555 + }
40556 + if (node->proc && (node->has_strong_ref || node->has_weak_ref)) {
40557 + if (list_empty(&node->work.entry)) {
40558 + list_add_tail(&node->work.entry, &node->proc->todo);
40559 + wake_up_interruptible(&node->proc->wait);
40560 + }
40561 + } else {
40562 + if (hlist_empty(&node->refs) && !node->local_strong_refs &&
40563 + !node->local_weak_refs) {
40564 + list_del_init(&node->work.entry);
40565 + if (node->proc) {
40566 + rb_erase(&node->rb_node, &node->proc->nodes);
40567 + if (binder_debug_mask & BINDER_DEBUG_INTERNAL_REFS)
40568 + printk(KERN_INFO "binder: refless node %d deleted\n", node->debug_id);
40569 + } else {
40570 + hlist_del(&node->dead_node);
40571 + if (binder_debug_mask & BINDER_DEBUG_INTERNAL_REFS)
40572 + printk(KERN_INFO "binder: dead node %d deleted\n", node->debug_id);
40573 + }
40574 + kfree(node);
40575 + binder_stats.obj_deleted[BINDER_STAT_NODE]++;
40576 + }
40577 + }
40578 +
40579 + return 0;
40580 +}
40581 +
40582 +
40583 +static struct binder_ref *
40584 +binder_get_ref(struct binder_proc *proc, uint32_t desc)
40585 +{
40586 + struct rb_node *n = proc->refs_by_desc.rb_node;
40587 + struct binder_ref *ref;
40588 +
40589 + while (n) {
40590 + ref = rb_entry(n, struct binder_ref, rb_node_desc);
40591 +
40592 + if (desc < ref->desc)
40593 + n = n->rb_left;
40594 + else if (desc > ref->desc)
40595 + n = n->rb_right;
40596 + else
40597 + return ref;
40598 + }
40599 + return NULL;
40600 +}
40601 +
40602 +static struct binder_ref *
40603 +binder_get_ref_for_node(struct binder_proc *proc, struct binder_node *node)
40604 +{
40605 + struct rb_node *n;
40606 + struct rb_node **p = &proc->refs_by_node.rb_node;
40607 + struct rb_node *parent = NULL;
40608 + struct binder_ref *ref, *new_ref;
40609 +
40610 + while (*p) {
40611 + parent = *p;
40612 + ref = rb_entry(parent, struct binder_ref, rb_node_node);
40613 +
40614 + if (node < ref->node)
40615 + p = &(*p)->rb_left;
40616 + else if (node > ref->node)
40617 + p = &(*p)->rb_right;
40618 + else
40619 + return ref;
40620 + }
40621 + new_ref = kzalloc(sizeof(*ref), GFP_KERNEL);
40622 + if (new_ref == NULL)
40623 + return NULL;
40624 + binder_stats.obj_created[BINDER_STAT_REF]++;
40625 + new_ref->debug_id = ++binder_last_id;
40626 + new_ref->proc = proc;
40627 + new_ref->node = node;
40628 + rb_link_node(&new_ref->rb_node_node, parent, p);
40629 + rb_insert_color(&new_ref->rb_node_node, &proc->refs_by_node);
40630 +
40631 + new_ref->desc = (node == binder_context_mgr_node) ? 0 : 1;
40632 + for (n = rb_first(&proc->refs_by_desc); n != NULL; n = rb_next(n)) {
40633 + ref = rb_entry(n, struct binder_ref, rb_node_desc);
40634 + if (ref->desc > new_ref->desc)
40635 + break;
40636 + new_ref->desc = ref->desc + 1;
40637 + }
40638 +
40639 + p = &proc->refs_by_desc.rb_node;
40640 + while (*p) {
40641 + parent = *p;
40642 + ref = rb_entry(parent, struct binder_ref, rb_node_desc);
40643 +
40644 + if (new_ref->desc < ref->desc)
40645 + p = &(*p)->rb_left;
40646 + else if (new_ref->desc > ref->desc)
40647 + p = &(*p)->rb_right;
40648 + else
40649 + BUG();
40650 + }
40651 + rb_link_node(&new_ref->rb_node_desc, parent, p);
40652 + rb_insert_color(&new_ref->rb_node_desc, &proc->refs_by_desc);
40653 + if (node) {
40654 + hlist_add_head(&new_ref->node_entry, &node->refs);
40655 + if (binder_debug_mask & BINDER_DEBUG_INTERNAL_REFS)
40656 + printk(KERN_INFO "binder: %d new ref %d desc %d for "
40657 + "node %d\n", proc->pid, new_ref->debug_id,
40658 + new_ref->desc, node->debug_id);
40659 + } else {
40660 + if (binder_debug_mask & BINDER_DEBUG_INTERNAL_REFS)
40661 + printk(KERN_INFO "binder: %d new ref %d desc %d for "
40662 + "dead node\n", proc->pid, new_ref->debug_id,
40663 + new_ref->desc);
40664 + }
40665 + return new_ref;
40666 +}
40667 +
40668 +static void
40669 +binder_delete_ref(struct binder_ref *ref)
40670 +{
40671 + if (binder_debug_mask & BINDER_DEBUG_INTERNAL_REFS)
40672 + printk(KERN_INFO "binder: %d delete ref %d desc %d for "
40673 + "node %d\n", ref->proc->pid, ref->debug_id,
40674 + ref->desc, ref->node->debug_id);
40675 + rb_erase(&ref->rb_node_desc, &ref->proc->refs_by_desc);
40676 + rb_erase(&ref->rb_node_node, &ref->proc->refs_by_node);
40677 + if (ref->strong)
40678 + binder_dec_node(ref->node, 1, 1);
40679 + hlist_del(&ref->node_entry);
40680 + binder_dec_node(ref->node, 0, 1);
40681 + if (ref->death) {
40682 + if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER)
40683 + printk(KERN_INFO "binder: %d delete ref %d desc %d "
40684 + "has death notification\n", ref->proc->pid,
40685 + ref->debug_id, ref->desc);
40686 + list_del(&ref->death->work.entry);
40687 + kfree(ref->death);
40688 + binder_stats.obj_deleted[BINDER_STAT_DEATH]++;
40689 + }
40690 + kfree(ref);
40691 + binder_stats.obj_deleted[BINDER_STAT_REF]++;
40692 +}
40693 +
40694 +static int
40695 +binder_inc_ref(
40696 + struct binder_ref *ref, int strong, struct list_head *target_list)
40697 +{
40698 + int ret;
40699 + if (strong) {
40700 + if (ref->strong == 0) {
40701 + ret = binder_inc_node(ref->node, 1, 1, target_list);
40702 + if (ret)
40703 + return ret;
40704 + }
40705 + ref->strong++;
40706 + } else {
40707 + if (ref->weak == 0) {
40708 + ret = binder_inc_node(ref->node, 0, 1, target_list);
40709 + if (ret)
40710 + return ret;
40711 + }
40712 + ref->weak++;
40713 + }
40714 + return 0;
40715 +}
40716 +
40717 +
40718 +static int
40719 +binder_dec_ref(struct binder_ref *ref, int strong)
40720 +{
40721 + if (strong) {
40722 + if (ref->strong == 0) {
40723 + binder_user_error("binder: %d invalid dec strong, "
40724 + "ref %d desc %d s %d w %d\n",
40725 + ref->proc->pid, ref->debug_id,
40726 + ref->desc, ref->strong, ref->weak);
40727 + return -EINVAL;
40728 + }
40729 + ref->strong--;
40730 + if (ref->strong == 0) {
40731 + int ret;
40732 + ret = binder_dec_node(ref->node, strong, 1);
40733 + if (ret)
40734 + return ret;
40735 + }
40736 + } else {
40737 + if (ref->weak == 0) {
40738 + binder_user_error("binder: %d invalid dec weak, "
40739 + "ref %d desc %d s %d w %d\n",
40740 + ref->proc->pid, ref->debug_id,
40741 + ref->desc, ref->strong, ref->weak);
40742 + return -EINVAL;
40743 + }
40744 + ref->weak--;
40745 + }
40746 + if (ref->strong == 0 && ref->weak == 0)
40747 + binder_delete_ref(ref);
40748 + return 0;
40749 +}
40750 +
40751 +static void
40752 +binder_pop_transaction(
40753 + struct binder_thread *target_thread, struct binder_transaction *t)
40754 +{
40755 + if (target_thread) {
40756 + BUG_ON(target_thread->transaction_stack != t);
40757 + BUG_ON(target_thread->transaction_stack->from != target_thread);
40758 + target_thread->transaction_stack =
40759 + target_thread->transaction_stack->from_parent;
40760 + t->from = NULL;
40761 + }
40762 + t->need_reply = 0;
40763 + if (t->buffer)
40764 + t->buffer->transaction = NULL;
40765 + kfree(t);
40766 + binder_stats.obj_deleted[BINDER_STAT_TRANSACTION]++;
40767 +}
40768 +
40769 +static void
40770 +binder_send_failed_reply(struct binder_transaction *t, uint32_t error_code)
40771 +{
40772 + struct binder_thread *target_thread;
40773 + BUG_ON(t->flags & TF_ONE_WAY);
40774 + while (1) {
40775 + target_thread = t->from;
40776 + if (target_thread) {
40777 + if (target_thread->return_error != BR_OK &&
40778 + target_thread->return_error2 == BR_OK) {
40779 + target_thread->return_error2 =
40780 + target_thread->return_error;
40781 + target_thread->return_error = BR_OK;
40782 + }
40783 + if (target_thread->return_error == BR_OK) {
40784 + if (binder_debug_mask & BINDER_DEBUG_FAILED_TRANSACTION)
40785 + printk(KERN_INFO "binder: send failed reply for transaction %d to %d:%d\n",
40786 + t->debug_id, target_thread->proc->pid, target_thread->pid);
40787 +
40788 + binder_pop_transaction(target_thread, t);
40789 + target_thread->return_error = error_code;
40790 + wake_up_interruptible(&target_thread->wait);
40791 + } else {
40792 + printk(KERN_ERR "binder: reply failed, target "
40793 + "thread, %d:%d, has error code %d "
40794 + "already\n", target_thread->proc->pid,
40795 + target_thread->pid,
40796 + target_thread->return_error);
40797 + }
40798 + return;
40799 + } else {
40800 + struct binder_transaction *next = t->from_parent;
40801 +
40802 + if (binder_debug_mask & BINDER_DEBUG_FAILED_TRANSACTION)
40803 + printk(KERN_INFO "binder: send failed reply "
40804 + "for transaction %d, target dead\n",
40805 + t->debug_id);
40806 +
40807 + binder_pop_transaction(target_thread, t);
40808 + if (next == NULL) {
40809 + if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER)
40810 + printk(KERN_INFO "binder: reply failed,"
40811 + " no target thread at root\n");
40812 + return;
40813 + }
40814 + t = next;
40815 + if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER)
40816 + printk(KERN_INFO "binder: reply failed, no targ"
40817 + "et thread -- retry %d\n", t->debug_id);
40818 + }
40819 + }
40820 +}
40821 +
40822 +static void
40823 +binder_transaction_buffer_release(struct binder_proc *proc,
40824 + struct binder_buffer *buffer, size_t *failed_at);
40825 +
40826 +static void
40827 +binder_transaction(struct binder_proc *proc, struct binder_thread *thread,
40828 + struct binder_transaction_data *tr, int reply)
40829 +{
40830 + struct binder_transaction *t;
40831 + struct binder_work *tcomplete;
40832 + size_t *offp, *off_end;
40833 + struct binder_proc *target_proc;
40834 + struct binder_thread *target_thread = NULL;
40835 + struct binder_node *target_node = NULL;
40836 + struct list_head *target_list;
40837 + wait_queue_head_t *target_wait;
40838 + struct binder_transaction *in_reply_to = NULL;
40839 + struct binder_transaction_log_entry *e;
40840 + uint32_t return_error;
40841 +
40842 + e = binder_transaction_log_add(&binder_transaction_log);
40843 + e->call_type = reply ? 2 : !!(tr->flags & TF_ONE_WAY);
40844 + e->from_proc = proc->pid;
40845 + e->from_thread = thread->pid;
40846 + e->target_handle = tr->target.handle;
40847 + e->data_size = tr->data_size;
40848 + e->offsets_size = tr->offsets_size;
40849 +
40850 + if (reply) {
40851 + in_reply_to = thread->transaction_stack;
40852 + if (in_reply_to == NULL) {
40853 + binder_user_error("binder: %d:%d got reply transaction "
40854 + "with no transaction stack\n",
40855 + proc->pid, thread->pid);
40856 + return_error = BR_FAILED_REPLY;
40857 + goto err_empty_call_stack;
40858 + }
40859 + binder_set_nice(in_reply_to->saved_priority);
40860 + if (in_reply_to->to_thread != thread) {
40861 + binder_user_error("binder: %d:%d got reply transaction "
40862 + "with bad transaction stack,"
40863 + " transaction %d has target %d:%d\n",
40864 + proc->pid, thread->pid, in_reply_to->debug_id,
40865 + in_reply_to->to_proc ?
40866 + in_reply_to->to_proc->pid : 0,
40867 + in_reply_to->to_thread ?
40868 + in_reply_to->to_thread->pid : 0);
40869 + return_error = BR_FAILED_REPLY;
40870 + in_reply_to = NULL;
40871 + goto err_bad_call_stack;
40872 + }
40873 + thread->transaction_stack = in_reply_to->to_parent;
40874 + target_thread = in_reply_to->from;
40875 + if (target_thread == NULL) {
40876 + return_error = BR_DEAD_REPLY;
40877 + goto err_dead_binder;
40878 + }
40879 + if (target_thread->transaction_stack != in_reply_to) {
40880 + binder_user_error("binder: %d:%d got reply transaction "
40881 + "with bad target transaction stack %d, "
40882 + "expected %d\n",
40883 + proc->pid, thread->pid,
40884 + target_thread->transaction_stack ?
40885 + target_thread->transaction_stack->debug_id : 0,
40886 + in_reply_to->debug_id);
40887 + return_error = BR_FAILED_REPLY;
40888 + in_reply_to = NULL;
40889 + target_thread = NULL;
40890 + goto err_dead_binder;
40891 + }
40892 + target_proc = target_thread->proc;
40893 + } else {
40894 + if (tr->target.handle) {
40895 + struct binder_ref *ref;
40896 + ref = binder_get_ref(proc, tr->target.handle);
40897 + if (ref == NULL) {
40898 + binder_user_error("binder: %d:%d got "
40899 + "transaction to invalid handle\n",
40900 + proc->pid, thread->pid);
40901 + return_error = BR_FAILED_REPLY;
40902 + goto err_invalid_target_handle;
40903 + }
40904 + target_node = ref->node;
40905 + } else {
40906 + target_node = binder_context_mgr_node;
40907 + if (target_node == NULL) {
40908 + return_error = BR_DEAD_REPLY;
40909 + goto err_no_context_mgr_node;
40910 + }
40911 + }
40912 + e->to_node = target_node->debug_id;
40913 + target_proc = target_node->proc;
40914 + if (target_proc == NULL) {
40915 + return_error = BR_DEAD_REPLY;
40916 + goto err_dead_binder;
40917 + }
40918 + if (!(tr->flags & TF_ONE_WAY) && thread->transaction_stack) {
40919 + struct binder_transaction *tmp;
40920 + tmp = thread->transaction_stack;
40921 + while (tmp) {
40922 + if (tmp->from && tmp->from->proc == target_proc)
40923 + target_thread = tmp->from;
40924 + tmp = tmp->from_parent;
40925 + }
40926 + }
40927 + }
40928 + if (target_thread) {
40929 + e->to_thread = target_thread->pid;
40930 + target_list = &target_thread->todo;
40931 + target_wait = &target_thread->wait;
40932 + } else {
40933 + target_list = &target_proc->todo;
40934 + target_wait = &target_proc->wait;
40935 + }
40936 + e->to_proc = target_proc->pid;
40937 +
40938 + /* TODO: reuse incoming transaction for reply */
40939 + t = kzalloc(sizeof(*t), GFP_KERNEL);
40940 + if (t == NULL) {
40941 + return_error = BR_FAILED_REPLY;
40942 + goto err_alloc_t_failed;
40943 + }
40944 + binder_stats.obj_created[BINDER_STAT_TRANSACTION]++;
40945 +
40946 + tcomplete = kzalloc(sizeof(*tcomplete), GFP_KERNEL);
40947 + if (tcomplete == NULL) {
40948 + return_error = BR_FAILED_REPLY;
40949 + goto err_alloc_tcomplete_failed;
40950 + }
40951 + binder_stats.obj_created[BINDER_STAT_TRANSACTION_COMPLETE]++;
40952 +
40953 + t->debug_id = ++binder_last_id;
40954 + e->debug_id = t->debug_id;
40955 +
40956 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION) {
40957 + if (reply)
40958 + printk(KERN_INFO "binder: %d:%d BC_REPLY %d -> %d:%d, "
40959 + "data %p-%p size %d-%d\n",
40960 + proc->pid, thread->pid, t->debug_id,
40961 + target_proc->pid, target_thread->pid,
40962 + tr->data.ptr.buffer, tr->data.ptr.offsets,
40963 + tr->data_size, tr->offsets_size);
40964 + else
40965 + printk(KERN_INFO "binder: %d:%d BC_TRANSACTION %d -> "
40966 + "%d - node %d, data %p-%p size %d-%d\n",
40967 + proc->pid, thread->pid, t->debug_id,
40968 + target_proc->pid, target_node->debug_id,
40969 + tr->data.ptr.buffer, tr->data.ptr.offsets,
40970 + tr->data_size, tr->offsets_size);
40971 + }
40972 +
40973 + if (!reply && !(tr->flags & TF_ONE_WAY))
40974 + t->from = thread;
40975 + else
40976 + t->from = NULL;
40977 + t->sender_euid = proc->tsk->euid;
40978 + t->to_proc = target_proc;
40979 + t->to_thread = target_thread;
40980 + t->code = tr->code;
40981 + t->flags = tr->flags;
40982 + t->priority = task_nice(current);
40983 + t->buffer = binder_alloc_buf(target_proc, tr->data_size,
40984 + tr->offsets_size, !reply && (t->flags & TF_ONE_WAY));
40985 + if (t->buffer == NULL) {
40986 + return_error = BR_FAILED_REPLY;
40987 + goto err_binder_alloc_buf_failed;
40988 + }
40989 + t->buffer->allow_user_free = 0;
40990 + t->buffer->debug_id = t->debug_id;
40991 + t->buffer->transaction = t;
40992 + t->buffer->target_node = target_node;
40993 + if (target_node)
40994 + binder_inc_node(target_node, 1, 0, NULL);
40995 +
40996 + offp = (size_t *)(t->buffer->data + ALIGN(tr->data_size, sizeof(void *)));
40997 +
40998 + if (copy_from_user(t->buffer->data, tr->data.ptr.buffer, tr->data_size)) {
40999 + binder_user_error("binder: %d:%d got transaction with invalid "
41000 + "data ptr\n", proc->pid, thread->pid);
41001 + return_error = BR_FAILED_REPLY;
41002 + goto err_copy_data_failed;
41003 + }
41004 + if (copy_from_user(offp, tr->data.ptr.offsets, tr->offsets_size)) {
41005 + binder_user_error("binder: %d:%d got transaction with invalid "
41006 + "offsets ptr\n", proc->pid, thread->pid);
41007 + return_error = BR_FAILED_REPLY;
41008 + goto err_copy_data_failed;
41009 + }
41010 + off_end = (void *)offp + tr->offsets_size;
41011 + for (; offp < off_end; offp++) {
41012 + struct flat_binder_object *fp;
41013 + if (*offp > t->buffer->data_size - sizeof(*fp)) {
41014 + binder_user_error("binder: %d:%d got transaction with "
41015 + "invalid offset, %d\n",
41016 + proc->pid, thread->pid, *offp);
41017 + return_error = BR_FAILED_REPLY;
41018 + goto err_bad_offset;
41019 + }
41020 + fp = (struct flat_binder_object *)(t->buffer->data + *offp);
41021 + switch (fp->type) {
41022 + case BINDER_TYPE_BINDER:
41023 + case BINDER_TYPE_WEAK_BINDER: {
41024 + struct binder_ref *ref;
41025 + struct binder_node *node = binder_get_node(proc, fp->binder);
41026 + if (node == NULL) {
41027 + node = binder_new_node(proc, fp->binder, fp->cookie);
41028 + if (node == NULL) {
41029 + return_error = BR_FAILED_REPLY;
41030 + goto err_binder_new_node_failed;
41031 + }
41032 + node->min_priority = fp->flags & FLAT_BINDER_FLAG_PRIORITY_MASK;
41033 + node->accept_fds = !!(fp->flags & FLAT_BINDER_FLAG_ACCEPTS_FDS);
41034 + }
41035 + if (fp->cookie != node->cookie) {
41036 + binder_user_error("binder: %d:%d sending u%p "
41037 + "node %d, cookie mismatch %p != %p\n",
41038 + proc->pid, thread->pid,
41039 + fp->binder, node->debug_id,
41040 + fp->cookie, node->cookie);
41041 + goto err_binder_get_ref_for_node_failed;
41042 + }
41043 + ref = binder_get_ref_for_node(target_proc, node);
41044 + if (ref == NULL) {
41045 + return_error = BR_FAILED_REPLY;
41046 + goto err_binder_get_ref_for_node_failed;
41047 + }
41048 + if (fp->type == BINDER_TYPE_BINDER)
41049 + fp->type = BINDER_TYPE_HANDLE;
41050 + else
41051 + fp->type = BINDER_TYPE_WEAK_HANDLE;
41052 + fp->handle = ref->desc;
41053 + binder_inc_ref(ref, fp->type == BINDER_TYPE_HANDLE, &thread->todo);
41054 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41055 + printk(KERN_INFO " node %d u%p -> ref %d desc %d\n",
41056 + node->debug_id, node->ptr, ref->debug_id, ref->desc);
41057 + } break;
41058 + case BINDER_TYPE_HANDLE:
41059 + case BINDER_TYPE_WEAK_HANDLE: {
41060 + struct binder_ref *ref = binder_get_ref(proc, fp->handle);
41061 + if (ref == NULL) {
41062 + binder_user_error("binder: %d:%d got "
41063 + "transaction with invalid "
41064 + "handle, %ld\n", proc->pid,
41065 + thread->pid, fp->handle);
41066 + return_error = BR_FAILED_REPLY;
41067 + goto err_binder_get_ref_failed;
41068 + }
41069 + if (ref->node->proc == target_proc) {
41070 + if (fp->type == BINDER_TYPE_HANDLE)
41071 + fp->type = BINDER_TYPE_BINDER;
41072 + else
41073 + fp->type = BINDER_TYPE_WEAK_BINDER;
41074 + fp->binder = ref->node->ptr;
41075 + fp->cookie = ref->node->cookie;
41076 + binder_inc_node(ref->node, fp->type == BINDER_TYPE_BINDER, 0, NULL);
41077 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41078 + printk(KERN_INFO " ref %d desc %d -> node %d u%p\n",
41079 + ref->debug_id, ref->desc, ref->node->debug_id, ref->node->ptr);
41080 + } else {
41081 + struct binder_ref *new_ref;
41082 + new_ref = binder_get_ref_for_node(target_proc, ref->node);
41083 + if (new_ref == NULL) {
41084 + return_error = BR_FAILED_REPLY;
41085 + goto err_binder_get_ref_for_node_failed;
41086 + }
41087 + fp->handle = new_ref->desc;
41088 + binder_inc_ref(new_ref, fp->type == BINDER_TYPE_HANDLE, NULL);
41089 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41090 + printk(KERN_INFO " ref %d desc %d -> ref %d desc %d (node %d)\n",
41091 + ref->debug_id, ref->desc, new_ref->debug_id, new_ref->desc, ref->node->debug_id);
41092 + }
41093 + } break;
41094 +
41095 + case BINDER_TYPE_FD: {
41096 + int target_fd;
41097 + struct file *file;
41098 +
41099 + if (reply) {
41100 + if (!(in_reply_to->flags & TF_ACCEPT_FDS)) {
41101 + binder_user_error("binder: %d:%d got reply with fd, %ld, but target does not allow fds\n",
41102 + proc->pid, thread->pid, fp->handle);
41103 + return_error = BR_FAILED_REPLY;
41104 + goto err_fd_not_allowed;
41105 + }
41106 + } else if (!target_node->accept_fds) {
41107 + binder_user_error("binder: %d:%d got transaction with fd, %ld, but target does not allow fds\n",
41108 + proc->pid, thread->pid, fp->handle);
41109 + return_error = BR_FAILED_REPLY;
41110 + goto err_fd_not_allowed;
41111 + }
41112 +
41113 + file = fget(fp->handle);
41114 + if (file == NULL) {
41115 + binder_user_error("binder: %d:%d got transaction with invalid fd, %ld\n",
41116 + proc->pid, thread->pid, fp->handle);
41117 + return_error = BR_FAILED_REPLY;
41118 + goto err_fget_failed;
41119 + }
41120 + target_fd = task_get_unused_fd_flags(target_proc->tsk, O_CLOEXEC);
41121 + if (target_fd < 0) {
41122 + fput(file);
41123 + return_error = BR_FAILED_REPLY;
41124 + goto err_get_unused_fd_failed;
41125 + }
41126 + task_fd_install(target_proc->tsk, target_fd, file);
41127 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41128 + printk(KERN_INFO " fd %ld -> %d\n", fp->handle, target_fd);
41129 + /* TODO: fput? */
41130 + fp->handle = target_fd;
41131 + } break;
41132 +
41133 + default:
41134 + binder_user_error("binder: %d:%d got transactio"
41135 + "n with invalid object type, %lx\n",
41136 + proc->pid, thread->pid, fp->type);
41137 + return_error = BR_FAILED_REPLY;
41138 + goto err_bad_object_type;
41139 + }
41140 + }
41141 + if (reply) {
41142 + BUG_ON(t->buffer->async_transaction != 0);
41143 + binder_pop_transaction(target_thread, in_reply_to);
41144 + } else if (!(t->flags & TF_ONE_WAY)) {
41145 + BUG_ON(t->buffer->async_transaction != 0);
41146 + t->need_reply = 1;
41147 + t->from_parent = thread->transaction_stack;
41148 + thread->transaction_stack = t;
41149 + } else {
41150 + BUG_ON(target_node == NULL);
41151 + BUG_ON(t->buffer->async_transaction != 1);
41152 + if (target_node->has_async_transaction) {
41153 + target_list = &target_node->async_todo;
41154 + target_wait = NULL;
41155 + } else
41156 + target_node->has_async_transaction = 1;
41157 + }
41158 + t->work.type = BINDER_WORK_TRANSACTION;
41159 + list_add_tail(&t->work.entry, target_list);
41160 + tcomplete->type = BINDER_WORK_TRANSACTION_COMPLETE;
41161 + list_add_tail(&tcomplete->entry, &thread->todo);
41162 + if (target_wait)
41163 + wake_up_interruptible(target_wait);
41164 + return;
41165 +
41166 +err_get_unused_fd_failed:
41167 +err_fget_failed:
41168 +err_fd_not_allowed:
41169 +err_binder_get_ref_for_node_failed:
41170 +err_binder_get_ref_failed:
41171 +err_binder_new_node_failed:
41172 +err_bad_object_type:
41173 +err_bad_offset:
41174 +err_copy_data_failed:
41175 + binder_transaction_buffer_release(target_proc, t->buffer, offp);
41176 + t->buffer->transaction = NULL;
41177 + binder_free_buf(target_proc, t->buffer);
41178 +err_binder_alloc_buf_failed:
41179 + kfree(tcomplete);
41180 + binder_stats.obj_deleted[BINDER_STAT_TRANSACTION_COMPLETE]++;
41181 +err_alloc_tcomplete_failed:
41182 + kfree(t);
41183 + binder_stats.obj_deleted[BINDER_STAT_TRANSACTION]++;
41184 +err_alloc_t_failed:
41185 +err_bad_call_stack:
41186 +err_empty_call_stack:
41187 +err_dead_binder:
41188 +err_invalid_target_handle:
41189 +err_no_context_mgr_node:
41190 + if (binder_debug_mask & BINDER_DEBUG_FAILED_TRANSACTION)
41191 + printk(KERN_INFO "binder: %d:%d transaction failed %d, size %d-%d\n",
41192 + proc->pid, thread->pid, return_error,
41193 + tr->data_size, tr->offsets_size);
41194 +
41195 + {
41196 + struct binder_transaction_log_entry *fe;
41197 + fe = binder_transaction_log_add(&binder_transaction_log_failed);
41198 + *fe = *e;
41199 + }
41200 +
41201 + BUG_ON(thread->return_error != BR_OK);
41202 + if (in_reply_to) {
41203 + thread->return_error = BR_TRANSACTION_COMPLETE;
41204 + binder_send_failed_reply(in_reply_to, return_error);
41205 + } else
41206 + thread->return_error = return_error;
41207 +}
41208 +
41209 +static void
41210 +binder_transaction_buffer_release(struct binder_proc *proc, struct binder_buffer *buffer, size_t *failed_at)
41211 +{
41212 + size_t *offp, *off_end;
41213 + int debug_id = buffer->debug_id;
41214 +
41215 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41216 + printk(KERN_INFO "binder: %d buffer release %d, size %d-%d, failed at %p\n",
41217 + proc->pid, buffer->debug_id,
41218 + buffer->data_size, buffer->offsets_size, failed_at);
41219 +
41220 + if (buffer->target_node)
41221 + binder_dec_node(buffer->target_node, 1, 0);
41222 +
41223 + offp = (size_t *)(buffer->data + ALIGN(buffer->data_size, sizeof(void *)));
41224 + if (failed_at)
41225 + off_end = failed_at;
41226 + else
41227 + off_end = (void *)offp + buffer->offsets_size;
41228 + for (; offp < off_end; offp++) {
41229 + struct flat_binder_object *fp;
41230 + if (*offp > buffer->data_size - sizeof(*fp)) {
41231 + printk(KERN_ERR "binder: transaction release %d bad offset %d, size %d\n", debug_id, *offp, buffer->data_size);
41232 + continue;
41233 + }
41234 + fp = (struct flat_binder_object *)(buffer->data + *offp);
41235 + switch (fp->type) {
41236 + case BINDER_TYPE_BINDER:
41237 + case BINDER_TYPE_WEAK_BINDER: {
41238 + struct binder_node *node = binder_get_node(proc, fp->binder);
41239 + if (node == NULL) {
41240 + printk(KERN_ERR "binder: transaction release %d bad node %p\n", debug_id, fp->binder);
41241 + break;
41242 + }
41243 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41244 + printk(KERN_INFO " node %d u%p\n",
41245 + node->debug_id, node->ptr);
41246 + binder_dec_node(node, fp->type == BINDER_TYPE_BINDER, 0);
41247 + } break;
41248 + case BINDER_TYPE_HANDLE:
41249 + case BINDER_TYPE_WEAK_HANDLE: {
41250 + struct binder_ref *ref = binder_get_ref(proc, fp->handle);
41251 + if (ref == NULL) {
41252 + printk(KERN_ERR "binder: transaction release %d bad handle %ld\n", debug_id, fp->handle);
41253 + break;
41254 + }
41255 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41256 + printk(KERN_INFO " ref %d desc %d (node %d)\n",
41257 + ref->debug_id, ref->desc, ref->node->debug_id);
41258 + binder_dec_ref(ref, fp->type == BINDER_TYPE_HANDLE);
41259 + } break;
41260 +
41261 + case BINDER_TYPE_FD:
41262 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41263 + printk(KERN_INFO " fd %ld\n", fp->handle);
41264 + if (failed_at)
41265 + task_close_fd(proc->tsk, fp->handle);
41266 + break;
41267 +
41268 + default:
41269 + printk(KERN_ERR "binder: transaction release %d bad object type %lx\n", debug_id, fp->type);
41270 + break;
41271 + }
41272 + }
41273 +}
41274 +
41275 +int
41276 +binder_thread_write(struct binder_proc *proc, struct binder_thread *thread,
41277 + void __user *buffer, int size, signed long *consumed)
41278 +{
41279 + uint32_t cmd;
41280 + void __user *ptr = buffer + *consumed;
41281 + void __user *end = buffer + size;
41282 +
41283 + while (ptr < end && thread->return_error == BR_OK) {
41284 + if (get_user(cmd, (uint32_t __user *)ptr))
41285 + return -EFAULT;
41286 + ptr += sizeof(uint32_t);
41287 + if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.bc)) {
41288 + binder_stats.bc[_IOC_NR(cmd)]++;
41289 + proc->stats.bc[_IOC_NR(cmd)]++;
41290 + thread->stats.bc[_IOC_NR(cmd)]++;
41291 + }
41292 + switch (cmd) {
41293 + case BC_INCREFS:
41294 + case BC_ACQUIRE:
41295 + case BC_RELEASE:
41296 + case BC_DECREFS: {
41297 + uint32_t target;
41298 + struct binder_ref *ref;
41299 + const char *debug_string;
41300 +
41301 + if (get_user(target, (uint32_t __user *)ptr))
41302 + return -EFAULT;
41303 + ptr += sizeof(uint32_t);
41304 + if (target == 0 && binder_context_mgr_node &&
41305 + (cmd == BC_INCREFS || cmd == BC_ACQUIRE)) {
41306 + ref = binder_get_ref_for_node(proc,
41307 + binder_context_mgr_node);
41308 + if (ref->desc != target) {
41309 + binder_user_error("binder: %d:"
41310 + "%d tried to acquire "
41311 + "reference to desc 0, "
41312 + "got %d instead\n",
41313 + proc->pid, thread->pid,
41314 + ref->desc);
41315 + }
41316 + } else
41317 + ref = binder_get_ref(proc, target);
41318 + if (ref == NULL) {
41319 + binder_user_error("binder: %d:%d refcou"
41320 + "nt change on invalid ref %d\n",
41321 + proc->pid, thread->pid, target);
41322 + break;
41323 + }
41324 + switch (cmd) {
41325 + case BC_INCREFS:
41326 + debug_string = "IncRefs";
41327 + binder_inc_ref(ref, 0, NULL);
41328 + break;
41329 + case BC_ACQUIRE:
41330 + debug_string = "Acquire";
41331 + binder_inc_ref(ref, 1, NULL);
41332 + break;
41333 + case BC_RELEASE:
41334 + debug_string = "Release";
41335 + binder_dec_ref(ref, 1);
41336 + break;
41337 + case BC_DECREFS:
41338 + default:
41339 + debug_string = "DecRefs";
41340 + binder_dec_ref(ref, 0);
41341 + break;
41342 + }
41343 + if (binder_debug_mask & BINDER_DEBUG_USER_REFS)
41344 + printk(KERN_INFO "binder: %d:%d %s ref %d desc %d s %d w %d for node %d\n",
41345 + proc->pid, thread->pid, debug_string, ref->debug_id, ref->desc, ref->strong, ref->weak, ref->node->debug_id);
41346 + break;
41347 + }
41348 + case BC_INCREFS_DONE:
41349 + case BC_ACQUIRE_DONE: {
41350 + void __user *node_ptr;
41351 + void *cookie;
41352 + struct binder_node *node;
41353 +
41354 + if (get_user(node_ptr, (void * __user *)ptr))
41355 + return -EFAULT;
41356 + ptr += sizeof(void *);
41357 + if (get_user(cookie, (void * __user *)ptr))
41358 + return -EFAULT;
41359 + ptr += sizeof(void *);
41360 + node = binder_get_node(proc, node_ptr);
41361 + if (node == NULL) {
41362 + binder_user_error("binder: %d:%d "
41363 + "%s u%p no match\n",
41364 + proc->pid, thread->pid,
41365 + cmd == BC_INCREFS_DONE ?
41366 + "BC_INCREFS_DONE" :
41367 + "BC_ACQUIRE_DONE",
41368 + node_ptr);
41369 + break;
41370 + }
41371 + if (cookie != node->cookie) {
41372 + binder_user_error("binder: %d:%d %s u%p node %d"
41373 + " cookie mismatch %p != %p\n",
41374 + proc->pid, thread->pid,
41375 + cmd == BC_INCREFS_DONE ?
41376 + "BC_INCREFS_DONE" : "BC_ACQUIRE_DONE",
41377 + node_ptr, node->debug_id,
41378 + cookie, node->cookie);
41379 + break;
41380 + }
41381 + if (cmd == BC_ACQUIRE_DONE) {
41382 + if (node->pending_strong_ref == 0) {
41383 + binder_user_error("binder: %d:%d "
41384 + "BC_ACQUIRE_DONE node %d has "
41385 + "no pending acquire request\n",
41386 + proc->pid, thread->pid,
41387 + node->debug_id);
41388 + break;
41389 + }
41390 + node->pending_strong_ref = 0;
41391 + } else {
41392 + if (node->pending_weak_ref == 0) {
41393 + binder_user_error("binder: %d:%d "
41394 + "BC_INCREFS_DONE node %d has "
41395 + "no pending increfs request\n",
41396 + proc->pid, thread->pid,
41397 + node->debug_id);
41398 + break;
41399 + }
41400 + node->pending_weak_ref = 0;
41401 + }
41402 + binder_dec_node(node, cmd == BC_ACQUIRE_DONE, 0);
41403 + if (binder_debug_mask & BINDER_DEBUG_USER_REFS)
41404 + printk(KERN_INFO "binder: %d:%d %s node %d ls %d lw %d\n",
41405 + proc->pid, thread->pid, cmd == BC_INCREFS_DONE ? "BC_INCREFS_DONE" : "BC_ACQUIRE_DONE", node->debug_id, node->local_strong_refs, node->local_weak_refs);
41406 + break;
41407 + }
41408 + case BC_ATTEMPT_ACQUIRE:
41409 + printk(KERN_ERR "binder: BC_ATTEMPT_ACQUIRE not supported\n");
41410 + return -EINVAL;
41411 + case BC_ACQUIRE_RESULT:
41412 + printk(KERN_ERR "binder: BC_ACQUIRE_RESULT not supported\n");
41413 + return -EINVAL;
41414 +
41415 + case BC_FREE_BUFFER: {
41416 + void __user *data_ptr;
41417 + struct binder_buffer *buffer;
41418 +
41419 + if (get_user(data_ptr, (void * __user *)ptr))
41420 + return -EFAULT;
41421 + ptr += sizeof(void *);
41422 +
41423 + buffer = binder_buffer_lookup(proc, data_ptr);
41424 + if (buffer == NULL) {
41425 + binder_user_error("binder: %d:%d "
41426 + "BC_FREE_BUFFER u%p no match\n",
41427 + proc->pid, thread->pid, data_ptr);
41428 + break;
41429 + }
41430 + if (!buffer->allow_user_free) {
41431 + binder_user_error("binder: %d:%d "
41432 + "BC_FREE_BUFFER u%p matched "
41433 + "unreturned buffer\n",
41434 + proc->pid, thread->pid, data_ptr);
41435 + break;
41436 + }
41437 + if (binder_debug_mask & BINDER_DEBUG_FREE_BUFFER)
41438 + printk(KERN_INFO "binder: %d:%d BC_FREE_BUFFER u%p found buffer %d for %s transaction\n",
41439 + proc->pid, thread->pid, data_ptr, buffer->debug_id,
41440 + buffer->transaction ? "active" : "finished");
41441 +
41442 + if (buffer->transaction) {
41443 + buffer->transaction->buffer = NULL;
41444 + buffer->transaction = NULL;
41445 + }
41446 + if (buffer->async_transaction && buffer->target_node) {
41447 + BUG_ON(!buffer->target_node->has_async_transaction);
41448 + if (list_empty(&buffer->target_node->async_todo))
41449 + buffer->target_node->has_async_transaction = 0;
41450 + else
41451 + list_move_tail(buffer->target_node->async_todo.next, &thread->todo);
41452 + }
41453 + binder_transaction_buffer_release(proc, buffer, NULL);
41454 + binder_free_buf(proc, buffer);
41455 + break;
41456 + }
41457 +
41458 + case BC_TRANSACTION:
41459 + case BC_REPLY: {
41460 + struct binder_transaction_data tr;
41461 +
41462 + if (copy_from_user(&tr, ptr, sizeof(tr)))
41463 + return -EFAULT;
41464 + ptr += sizeof(tr);
41465 + binder_transaction(proc, thread, &tr, cmd == BC_REPLY);
41466 + break;
41467 + }
41468 +
41469 + case BC_REGISTER_LOOPER:
41470 + if (binder_debug_mask & BINDER_DEBUG_THREADS)
41471 + printk(KERN_INFO "binder: %d:%d BC_REGISTER_LOOPER\n",
41472 + proc->pid, thread->pid);
41473 + if (thread->looper & BINDER_LOOPER_STATE_ENTERED) {
41474 + thread->looper |= BINDER_LOOPER_STATE_INVALID;
41475 + binder_user_error("binder: %d:%d ERROR:"
41476 + " BC_REGISTER_LOOPER called "
41477 + "after BC_ENTER_LOOPER\n",
41478 + proc->pid, thread->pid);
41479 + } else if (proc->requested_threads == 0) {
41480 + thread->looper |= BINDER_LOOPER_STATE_INVALID;
41481 + binder_user_error("binder: %d:%d ERROR:"
41482 + " BC_REGISTER_LOOPER called "
41483 + "without request\n",
41484 + proc->pid, thread->pid);
41485 + } else {
41486 + proc->requested_threads--;
41487 + proc->requested_threads_started++;
41488 + }
41489 + thread->looper |= BINDER_LOOPER_STATE_REGISTERED;
41490 + break;
41491 + case BC_ENTER_LOOPER:
41492 + if (binder_debug_mask & BINDER_DEBUG_THREADS)
41493 + printk(KERN_INFO "binder: %d:%d BC_ENTER_LOOPER\n",
41494 + proc->pid, thread->pid);
41495 + if (thread->looper & BINDER_LOOPER_STATE_REGISTERED) {
41496 + thread->looper |= BINDER_LOOPER_STATE_INVALID;
41497 + binder_user_error("binder: %d:%d ERROR:"
41498 + " BC_ENTER_LOOPER called after "
41499 + "BC_REGISTER_LOOPER\n",
41500 + proc->pid, thread->pid);
41501 + }
41502 + thread->looper |= BINDER_LOOPER_STATE_ENTERED;
41503 + break;
41504 + case BC_EXIT_LOOPER:
41505 + if (binder_debug_mask & BINDER_DEBUG_THREADS)
41506 + printk(KERN_INFO "binder: %d:%d BC_EXIT_LOOPER\n",
41507 + proc->pid, thread->pid);
41508 + thread->looper |= BINDER_LOOPER_STATE_EXITED;
41509 + break;
41510 +
41511 + case BC_REQUEST_DEATH_NOTIFICATION:
41512 + case BC_CLEAR_DEATH_NOTIFICATION: {
41513 + uint32_t target;
41514 + void __user *cookie;
41515 + struct binder_ref *ref;
41516 + struct binder_ref_death *death;
41517 +
41518 + if (get_user(target, (uint32_t __user *)ptr))
41519 + return -EFAULT;
41520 + ptr += sizeof(uint32_t);
41521 + if (get_user(cookie, (void __user * __user *)ptr))
41522 + return -EFAULT;
41523 + ptr += sizeof(void *);
41524 + ref = binder_get_ref(proc, target);
41525 + if (ref == NULL) {
41526 + binder_user_error("binder: %d:%d %s "
41527 + "invalid ref %d\n",
41528 + proc->pid, thread->pid,
41529 + cmd == BC_REQUEST_DEATH_NOTIFICATION ?
41530 + "BC_REQUEST_DEATH_NOTIFICATION" :
41531 + "BC_CLEAR_DEATH_NOTIFICATION",
41532 + target);
41533 + break;
41534 + }
41535 +
41536 + if (binder_debug_mask & BINDER_DEBUG_DEATH_NOTIFICATION)
41537 + printk(KERN_INFO "binder: %d:%d %s %p ref %d desc %d s %d w %d for node %d\n",
41538 + proc->pid, thread->pid,
41539 + cmd == BC_REQUEST_DEATH_NOTIFICATION ?
41540 + "BC_REQUEST_DEATH_NOTIFICATION" :
41541 + "BC_CLEAR_DEATH_NOTIFICATION",
41542 + cookie, ref->debug_id, ref->desc,
41543 + ref->strong, ref->weak, ref->node->debug_id);
41544 +
41545 + if (cmd == BC_REQUEST_DEATH_NOTIFICATION) {
41546 + if (ref->death) {
41547 + binder_user_error("binder: %d:%"
41548 + "d BC_REQUEST_DEATH_NOTI"
41549 + "FICATION death notific"
41550 + "ation already set\n",
41551 + proc->pid, thread->pid);
41552 + break;
41553 + }
41554 + death = kzalloc(sizeof(*death), GFP_KERNEL);
41555 + if (death == NULL) {
41556 + thread->return_error = BR_ERROR;
41557 + if (binder_debug_mask & BINDER_DEBUG_FAILED_TRANSACTION)
41558 + printk(KERN_INFO "binder: %d:%d "
41559 + "BC_REQUEST_DEATH_NOTIFICATION failed\n",
41560 + proc->pid, thread->pid);
41561 + break;
41562 + }
41563 + binder_stats.obj_created[BINDER_STAT_DEATH]++;
41564 + INIT_LIST_HEAD(&death->work.entry);
41565 + death->cookie = cookie;
41566 + ref->death = death;
41567 + if (ref->node->proc == NULL) {
41568 + ref->death->work.type = BINDER_WORK_DEAD_BINDER;
41569 + if (thread->looper & (BINDER_LOOPER_STATE_REGISTERED | BINDER_LOOPER_STATE_ENTERED)) {
41570 + list_add_tail(&ref->death->work.entry, &thread->todo);
41571 + } else {
41572 + list_add_tail(&ref->death->work.entry, &proc->todo);
41573 + wake_up_interruptible(&proc->wait);
41574 + }
41575 + }
41576 + } else {
41577 + if (ref->death == NULL) {
41578 + binder_user_error("binder: %d:%"
41579 + "d BC_CLEAR_DEATH_NOTIFI"
41580 + "CATION death notificat"
41581 + "ion not active\n",
41582 + proc->pid, thread->pid);
41583 + break;
41584 + }
41585 + death = ref->death;
41586 + if (death->cookie != cookie) {
41587 + binder_user_error("binder: %d:%"
41588 + "d BC_CLEAR_DEATH_NOTIFI"
41589 + "CATION death notificat"
41590 + "ion cookie mismatch "
41591 + "%p != %p\n",
41592 + proc->pid, thread->pid,
41593 + death->cookie, cookie);
41594 + break;
41595 + }
41596 + ref->death = NULL;
41597 + if (list_empty(&death->work.entry)) {
41598 + death->work.type = BINDER_WORK_CLEAR_DEATH_NOTIFICATION;
41599 + if (thread->looper & (BINDER_LOOPER_STATE_REGISTERED | BINDER_LOOPER_STATE_ENTERED)) {
41600 + list_add_tail(&death->work.entry, &thread->todo);
41601 + } else {
41602 + list_add_tail(&death->work.entry, &proc->todo);
41603 + wake_up_interruptible(&proc->wait);
41604 + }
41605 + } else {
41606 + BUG_ON(death->work.type != BINDER_WORK_DEAD_BINDER);
41607 + death->work.type = BINDER_WORK_DEAD_BINDER_AND_CLEAR;
41608 + }
41609 + }
41610 + } break;
41611 + case BC_DEAD_BINDER_DONE: {
41612 + struct binder_work *w;
41613 + void __user *cookie;
41614 + struct binder_ref_death *death = NULL;
41615 + if (get_user(cookie, (void __user * __user *)ptr))
41616 + return -EFAULT;
41617 +
41618 + ptr += sizeof(void *);
41619 + list_for_each_entry(w, &proc->delivered_death, entry) {
41620 + struct binder_ref_death *tmp_death = container_of(w, struct binder_ref_death, work);
41621 + if (tmp_death->cookie == cookie) {
41622 + death = tmp_death;
41623 + break;
41624 + }
41625 + }
41626 + if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER)
41627 + printk(KERN_INFO "binder: %d:%d BC_DEAD_BINDER_DONE %p found %p\n",
41628 + proc->pid, thread->pid, cookie, death);
41629 + if (death == NULL) {
41630 + binder_user_error("binder: %d:%d BC_DEAD"
41631 + "_BINDER_DONE %p not found\n",
41632 + proc->pid, thread->pid, cookie);
41633 + break;
41634 + }
41635 +
41636 + list_del_init(&death->work.entry);
41637 + if (death->work.type == BINDER_WORK_DEAD_BINDER_AND_CLEAR) {
41638 + death->work.type = BINDER_WORK_CLEAR_DEATH_NOTIFICATION;
41639 + if (thread->looper & (BINDER_LOOPER_STATE_REGISTERED | BINDER_LOOPER_STATE_ENTERED)) {
41640 + list_add_tail(&death->work.entry, &thread->todo);
41641 + } else {
41642 + list_add_tail(&death->work.entry, &proc->todo);
41643 + wake_up_interruptible(&proc->wait);
41644 + }
41645 + }
41646 + } break;
41647 +
41648 + default:
41649 + printk(KERN_ERR "binder: %d:%d unknown command %d\n", proc->pid, thread->pid, cmd);
41650 + return -EINVAL;
41651 + }
41652 + *consumed = ptr - buffer;
41653 + }
41654 + return 0;
41655 +}
41656 +
41657 +void
41658 +binder_stat_br(struct binder_proc *proc, struct binder_thread *thread, uint32_t cmd)
41659 +{
41660 + if (_IOC_NR(cmd) < ARRAY_SIZE(binder_stats.br)) {
41661 + binder_stats.br[_IOC_NR(cmd)]++;
41662 + proc->stats.br[_IOC_NR(cmd)]++;
41663 + thread->stats.br[_IOC_NR(cmd)]++;
41664 + }
41665 +}
41666 +
41667 +static int
41668 +binder_has_proc_work(struct binder_proc *proc, struct binder_thread *thread)
41669 +{
41670 + return !list_empty(&proc->todo) || (thread->looper & BINDER_LOOPER_STATE_NEED_RETURN);
41671 +}
41672 +
41673 +static int
41674 +binder_has_thread_work(struct binder_thread *thread)
41675 +{
41676 + return !list_empty(&thread->todo) || thread->return_error != BR_OK ||
41677 + (thread->looper & BINDER_LOOPER_STATE_NEED_RETURN);
41678 +}
41679 +
41680 +static int
41681 +binder_thread_read(struct binder_proc *proc, struct binder_thread *thread,
41682 + void __user *buffer, int size, signed long *consumed, int non_block)
41683 +{
41684 + void __user *ptr = buffer + *consumed;
41685 + void __user *end = buffer + size;
41686 +
41687 + int ret = 0;
41688 + int wait_for_proc_work;
41689 +
41690 + if (*consumed == 0) {
41691 + if (put_user(BR_NOOP, (uint32_t __user *)ptr))
41692 + return -EFAULT;
41693 + ptr += sizeof(uint32_t);
41694 + }
41695 +
41696 +retry:
41697 + wait_for_proc_work = thread->transaction_stack == NULL && list_empty(&thread->todo);
41698 +
41699 + if (thread->return_error != BR_OK && ptr < end) {
41700 + if (thread->return_error2 != BR_OK) {
41701 + if (put_user(thread->return_error2, (uint32_t __user *)ptr))
41702 + return -EFAULT;
41703 + ptr += sizeof(uint32_t);
41704 + if (ptr == end)
41705 + goto done;
41706 + thread->return_error2 = BR_OK;
41707 + }
41708 + if (put_user(thread->return_error, (uint32_t __user *)ptr))
41709 + return -EFAULT;
41710 + ptr += sizeof(uint32_t);
41711 + thread->return_error = BR_OK;
41712 + goto done;
41713 + }
41714 +
41715 +
41716 + thread->looper |= BINDER_LOOPER_STATE_WAITING;
41717 + if (wait_for_proc_work)
41718 + proc->ready_threads++;
41719 + mutex_unlock(&binder_lock);
41720 + if (wait_for_proc_work) {
41721 + if (!(thread->looper & (BINDER_LOOPER_STATE_REGISTERED |
41722 + BINDER_LOOPER_STATE_ENTERED))) {
41723 + binder_user_error("binder: %d:%d ERROR: Thread waiting "
41724 + "for process work before calling BC_REGISTER_"
41725 + "LOOPER or BC_ENTER_LOOPER (state %x)\n",
41726 + proc->pid, thread->pid, thread->looper);
41727 + wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2);
41728 + }
41729 + binder_set_nice(proc->default_priority);
41730 + if (non_block) {
41731 + if (!binder_has_proc_work(proc, thread))
41732 + ret = -EAGAIN;
41733 + } else
41734 + ret = wait_event_interruptible_exclusive(proc->wait, binder_has_proc_work(proc, thread));
41735 + } else {
41736 + if (non_block) {
41737 + if (!binder_has_thread_work(thread))
41738 + ret = -EAGAIN;
41739 + } else
41740 + ret = wait_event_interruptible(thread->wait, binder_has_thread_work(thread));
41741 + }
41742 + mutex_lock(&binder_lock);
41743 + if (wait_for_proc_work)
41744 + proc->ready_threads--;
41745 + thread->looper &= ~BINDER_LOOPER_STATE_WAITING;
41746 +
41747 + if (ret)
41748 + return ret;
41749 +
41750 + while (1) {
41751 + uint32_t cmd;
41752 + struct binder_transaction_data tr;
41753 + struct binder_work *w;
41754 + struct binder_transaction *t = NULL;
41755 +
41756 + if (!list_empty(&thread->todo))
41757 + w = list_first_entry(&thread->todo, struct binder_work, entry);
41758 + else if (!list_empty(&proc->todo) && wait_for_proc_work)
41759 + w = list_first_entry(&proc->todo, struct binder_work, entry);
41760 + else {
41761 + if (ptr - buffer == 4 && !(thread->looper & BINDER_LOOPER_STATE_NEED_RETURN)) /* no data added */
41762 + goto retry;
41763 + break;
41764 + }
41765 +
41766 + if (end - ptr < sizeof(tr) + 4)
41767 + break;
41768 +
41769 + switch (w->type) {
41770 + case BINDER_WORK_TRANSACTION: {
41771 + t = container_of(w, struct binder_transaction, work);
41772 + } break;
41773 + case BINDER_WORK_TRANSACTION_COMPLETE: {
41774 + cmd = BR_TRANSACTION_COMPLETE;
41775 + if (put_user(cmd, (uint32_t __user *)ptr))
41776 + return -EFAULT;
41777 + ptr += sizeof(uint32_t);
41778 +
41779 + binder_stat_br(proc, thread, cmd);
41780 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION_COMPLETE)
41781 + printk(KERN_INFO "binder: %d:%d BR_TRANSACTION_COMPLETE\n",
41782 + proc->pid, thread->pid);
41783 +
41784 + list_del(&w->entry);
41785 + kfree(w);
41786 + binder_stats.obj_deleted[BINDER_STAT_TRANSACTION_COMPLETE]++;
41787 + } break;
41788 + case BINDER_WORK_NODE: {
41789 + struct binder_node *node = container_of(w, struct binder_node, work);
41790 + uint32_t cmd = BR_NOOP;
41791 + const char *cmd_name;
41792 + int strong = node->internal_strong_refs || node->local_strong_refs;
41793 + int weak = !hlist_empty(&node->refs) || node->local_weak_refs || strong;
41794 + if (weak && !node->has_weak_ref) {
41795 + cmd = BR_INCREFS;
41796 + cmd_name = "BR_INCREFS";
41797 + node->has_weak_ref = 1;
41798 + node->pending_weak_ref = 1;
41799 + node->local_weak_refs++;
41800 + } else if (strong && !node->has_strong_ref) {
41801 + cmd = BR_ACQUIRE;
41802 + cmd_name = "BR_ACQUIRE";
41803 + node->has_strong_ref = 1;
41804 + node->pending_strong_ref = 1;
41805 + node->local_strong_refs++;
41806 + } else if (!strong && node->has_strong_ref) {
41807 + cmd = BR_RELEASE;
41808 + cmd_name = "BR_RELEASE";
41809 + node->has_strong_ref = 0;
41810 + } else if (!weak && node->has_weak_ref) {
41811 + cmd = BR_DECREFS;
41812 + cmd_name = "BR_DECREFS";
41813 + node->has_weak_ref = 0;
41814 + }
41815 + if (cmd != BR_NOOP) {
41816 + if (put_user(cmd, (uint32_t __user *)ptr))
41817 + return -EFAULT;
41818 + ptr += sizeof(uint32_t);
41819 + if (put_user(node->ptr, (void * __user *)ptr))
41820 + return -EFAULT;
41821 + ptr += sizeof(void *);
41822 + if (put_user(node->cookie, (void * __user *)ptr))
41823 + return -EFAULT;
41824 + ptr += sizeof(void *);
41825 +
41826 + binder_stat_br(proc, thread, cmd);
41827 + if (binder_debug_mask & BINDER_DEBUG_USER_REFS)
41828 + printk(KERN_INFO "binder: %d:%d %s %d u%p c%p\n",
41829 + proc->pid, thread->pid, cmd_name, node->debug_id, node->ptr, node->cookie);
41830 + } else {
41831 + list_del_init(&w->entry);
41832 + if (!weak && !strong) {
41833 + if (binder_debug_mask & BINDER_DEBUG_INTERNAL_REFS)
41834 + printk(KERN_INFO "binder: %d:%d node %d u%p c%p deleted\n",
41835 + proc->pid, thread->pid, node->debug_id, node->ptr, node->cookie);
41836 + rb_erase(&node->rb_node, &proc->nodes);
41837 + kfree(node);
41838 + binder_stats.obj_deleted[BINDER_STAT_NODE]++;
41839 + } else {
41840 + if (binder_debug_mask & BINDER_DEBUG_INTERNAL_REFS)
41841 + printk(KERN_INFO "binder: %d:%d node %d u%p c%p state unchanged\n",
41842 + proc->pid, thread->pid, node->debug_id, node->ptr, node->cookie);
41843 + }
41844 + }
41845 + } break;
41846 + case BINDER_WORK_DEAD_BINDER:
41847 + case BINDER_WORK_DEAD_BINDER_AND_CLEAR:
41848 + case BINDER_WORK_CLEAR_DEATH_NOTIFICATION: {
41849 + struct binder_ref_death *death = container_of(w, struct binder_ref_death, work);
41850 + uint32_t cmd;
41851 + if (w->type == BINDER_WORK_CLEAR_DEATH_NOTIFICATION)
41852 + cmd = BR_CLEAR_DEATH_NOTIFICATION_DONE;
41853 + else
41854 + cmd = BR_DEAD_BINDER;
41855 + if (put_user(cmd, (uint32_t __user *)ptr))
41856 + return -EFAULT;
41857 + ptr += sizeof(uint32_t);
41858 + if (put_user(death->cookie, (void * __user *)ptr))
41859 + return -EFAULT;
41860 + ptr += sizeof(void *);
41861 + if (binder_debug_mask & BINDER_DEBUG_DEATH_NOTIFICATION)
41862 + printk(KERN_INFO "binder: %d:%d %s %p\n",
41863 + proc->pid, thread->pid,
41864 + cmd == BR_DEAD_BINDER ?
41865 + "BR_DEAD_BINDER" :
41866 + "BR_CLEAR_DEATH_NOTIFICATION_DONE",
41867 + death->cookie);
41868 +
41869 + if (w->type == BINDER_WORK_CLEAR_DEATH_NOTIFICATION) {
41870 + list_del(&w->entry);
41871 + kfree(death);
41872 + binder_stats.obj_deleted[BINDER_STAT_DEATH]++;
41873 + } else
41874 + list_move(&w->entry, &proc->delivered_death);
41875 + if (cmd == BR_DEAD_BINDER)
41876 + goto done; /* DEAD_BINDER notifications can cause transactions */
41877 + } break;
41878 + }
41879 +
41880 + if (!t)
41881 + continue;
41882 +
41883 + BUG_ON(t->buffer == NULL);
41884 + if (t->buffer->target_node) {
41885 + struct binder_node *target_node = t->buffer->target_node;
41886 + tr.target.ptr = target_node->ptr;
41887 + tr.cookie = target_node->cookie;
41888 + t->saved_priority = task_nice(current);
41889 + if (t->priority < target_node->min_priority &&
41890 + !(t->flags & TF_ONE_WAY))
41891 + binder_set_nice(t->priority);
41892 + else if (!(t->flags & TF_ONE_WAY) ||
41893 + t->saved_priority > target_node->min_priority)
41894 + binder_set_nice(target_node->min_priority);
41895 + cmd = BR_TRANSACTION;
41896 + } else {
41897 + tr.target.ptr = NULL;
41898 + tr.cookie = NULL;
41899 + cmd = BR_REPLY;
41900 + }
41901 + tr.code = t->code;
41902 + tr.flags = t->flags;
41903 + tr.sender_euid = t->sender_euid;
41904 +
41905 + if (t->from) {
41906 + struct task_struct *sender = t->from->proc->tsk;
41907 + tr.sender_pid = task_tgid_nr_ns(sender, current->nsproxy->pid_ns);
41908 + } else {
41909 + tr.sender_pid = 0;
41910 + }
41911 +
41912 + tr.data_size = t->buffer->data_size;
41913 + tr.offsets_size = t->buffer->offsets_size;
41914 + tr.data.ptr.buffer = (void *)((void *)t->buffer->data + proc->user_buffer_offset);
41915 + tr.data.ptr.offsets = tr.data.ptr.buffer + ALIGN(t->buffer->data_size, sizeof(void *));
41916 +
41917 + if (put_user(cmd, (uint32_t __user *)ptr))
41918 + return -EFAULT;
41919 + ptr += sizeof(uint32_t);
41920 + if (copy_to_user(ptr, &tr, sizeof(tr)))
41921 + return -EFAULT;
41922 + ptr += sizeof(tr);
41923 +
41924 + binder_stat_br(proc, thread, cmd);
41925 + if (binder_debug_mask & BINDER_DEBUG_TRANSACTION)
41926 + printk(KERN_INFO "binder: %d:%d %s %d %d:%d, cmd %d size %d-%d ptr %p-%p\n",
41927 + proc->pid, thread->pid,
41928 + (cmd == BR_TRANSACTION) ? "BR_TRANSACTION" : "BR_REPLY",
41929 + t->debug_id, t->from ? t->from->proc->pid : 0,
41930 + t->from ? t->from->pid : 0, cmd,
41931 + t->buffer->data_size, t->buffer->offsets_size,
41932 + tr.data.ptr.buffer, tr.data.ptr.offsets);
41933 +
41934 + list_del(&t->work.entry);
41935 + t->buffer->allow_user_free = 1;
41936 + if (cmd == BR_TRANSACTION && !(t->flags & TF_ONE_WAY)) {
41937 + t->to_parent = thread->transaction_stack;
41938 + t->to_thread = thread;
41939 + thread->transaction_stack = t;
41940 + } else {
41941 + t->buffer->transaction = NULL;
41942 + kfree(t);
41943 + binder_stats.obj_deleted[BINDER_STAT_TRANSACTION]++;
41944 + }
41945 + break;
41946 + }
41947 +
41948 +done:
41949 +
41950 + *consumed = ptr - buffer;
41951 + if (proc->requested_threads + proc->ready_threads == 0 &&
41952 + proc->requested_threads_started < proc->max_threads &&
41953 + (thread->looper & (BINDER_LOOPER_STATE_REGISTERED |
41954 + BINDER_LOOPER_STATE_ENTERED)) /* the user-space code fails to */
41955 + /*spawn a new thread if we leave this out */) {
41956 + proc->requested_threads++;
41957 + if (binder_debug_mask & BINDER_DEBUG_THREADS)
41958 + printk(KERN_INFO "binder: %d:%d BR_SPAWN_LOOPER\n",
41959 + proc->pid, thread->pid);
41960 + if (put_user(BR_SPAWN_LOOPER, (uint32_t __user *)buffer))
41961 + return -EFAULT;
41962 + }
41963 + return 0;
41964 +}
41965 +
41966 +static void binder_release_work(struct list_head *list)
41967 +{
41968 + struct binder_work *w;
41969 + while (!list_empty(list)) {
41970 + w = list_first_entry(list, struct binder_work, entry);
41971 + list_del_init(&w->entry);
41972 + switch (w->type) {
41973 + case BINDER_WORK_TRANSACTION: {
41974 + struct binder_transaction *t = container_of(w, struct binder_transaction, work);
41975 + if (t->buffer->target_node && !(t->flags & TF_ONE_WAY))
41976 + binder_send_failed_reply(t, BR_DEAD_REPLY);
41977 + } break;
41978 + case BINDER_WORK_TRANSACTION_COMPLETE: {
41979 + kfree(w);
41980 + binder_stats.obj_deleted[BINDER_STAT_TRANSACTION_COMPLETE]++;
41981 + } break;
41982 + default:
41983 + break;
41984 + }
41985 + }
41986 +
41987 +}
41988 +
41989 +static struct binder_thread *binder_get_thread(struct binder_proc *proc)
41990 +{
41991 + struct binder_thread *thread = NULL;
41992 + struct rb_node *parent = NULL;
41993 + struct rb_node **p = &proc->threads.rb_node;
41994 +
41995 + while (*p) {
41996 + parent = *p;
41997 + thread = rb_entry(parent, struct binder_thread, rb_node);
41998 +
41999 + if (current->pid < thread->pid)
42000 + p = &(*p)->rb_left;
42001 + else if (current->pid > thread->pid)
42002 + p = &(*p)->rb_right;
42003 + else
42004 + break;
42005 + }
42006 + if (*p == NULL) {
42007 + thread = kzalloc(sizeof(*thread), GFP_KERNEL);
42008 + if (thread == NULL)
42009 + return NULL;
42010 + binder_stats.obj_created[BINDER_STAT_THREAD]++;
42011 + thread->proc = proc;
42012 + thread->pid = current->pid;
42013 + init_waitqueue_head(&thread->wait);
42014 + INIT_LIST_HEAD(&thread->todo);
42015 + rb_link_node(&thread->rb_node, parent, p);
42016 + rb_insert_color(&thread->rb_node, &proc->threads);
42017 + thread->looper |= BINDER_LOOPER_STATE_NEED_RETURN;
42018 + thread->return_error = BR_OK;
42019 + thread->return_error2 = BR_OK;
42020 + }
42021 + return thread;
42022 +}
42023 +
42024 +static int binder_free_thread(struct binder_proc *proc, struct binder_thread *thread)
42025 +{
42026 + struct binder_transaction *t;
42027 + struct binder_transaction *send_reply = NULL;
42028 + int active_transactions = 0;
42029 +
42030 + rb_erase(&thread->rb_node, &proc->threads);
42031 + t = thread->transaction_stack;
42032 + if (t && t->to_thread == thread)
42033 + send_reply = t;
42034 + while (t) {
42035 + active_transactions++;
42036 + if (binder_debug_mask & BINDER_DEBUG_DEAD_TRANSACTION)
42037 + printk(KERN_INFO "binder: release %d:%d transaction %d %s, still active\n",
42038 + proc->pid, thread->pid, t->debug_id, (t->to_thread == thread) ? "in" : "out");
42039 + if (t->to_thread == thread) {
42040 + t->to_proc = NULL;
42041 + t->to_thread = NULL;
42042 + if (t->buffer) {
42043 + t->buffer->transaction = NULL;
42044 + t->buffer = NULL;
42045 + }
42046 + t = t->to_parent;
42047 + } else if (t->from == thread) {
42048 + t->from = NULL;
42049 + t = t->from_parent;
42050 + } else
42051 + BUG();
42052 + }
42053 + if (send_reply)
42054 + binder_send_failed_reply(send_reply, BR_DEAD_REPLY);
42055 + binder_release_work(&thread->todo);
42056 + kfree(thread);
42057 + binder_stats.obj_deleted[BINDER_STAT_THREAD]++;
42058 + return active_transactions;
42059 +}
42060 +
42061 +static unsigned int binder_poll(struct file *filp, struct poll_table_struct *wait)
42062 +{
42063 + struct binder_proc *proc = filp->private_data;
42064 + struct binder_thread *thread = NULL;
42065 + int wait_for_proc_work;
42066 +
42067 + mutex_lock(&binder_lock);
42068 + thread = binder_get_thread(proc);
42069 +
42070 + wait_for_proc_work = thread->transaction_stack == NULL &&
42071 + list_empty(&thread->todo) && thread->return_error == BR_OK;
42072 + mutex_unlock(&binder_lock);
42073 +
42074 + if (wait_for_proc_work) {
42075 + if (binder_has_proc_work(proc, thread))
42076 + return POLLIN;
42077 + poll_wait(filp, &proc->wait, wait);
42078 + if (binder_has_proc_work(proc, thread))
42079 + return POLLIN;
42080 + } else {
42081 + if (binder_has_thread_work(thread))
42082 + return POLLIN;
42083 + poll_wait(filp, &thread->wait, wait);
42084 + if (binder_has_thread_work(thread))
42085 + return POLLIN;
42086 + }
42087 + return 0;
42088 +}
42089 +
42090 +static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
42091 +{
42092 + int ret;
42093 + struct binder_proc *proc = filp->private_data;
42094 + struct binder_thread *thread;
42095 + unsigned int size = _IOC_SIZE(cmd);
42096 + void __user *ubuf = (void __user *)arg;
42097 +
42098 + /*printk(KERN_INFO "binder_ioctl: %d:%d %x %lx\n", proc->pid, current->pid, cmd, arg);*/
42099 +
42100 + ret = wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2);
42101 + if (ret)
42102 + return ret;
42103 +
42104 + mutex_lock(&binder_lock);
42105 + thread = binder_get_thread(proc);
42106 + if (thread == NULL) {
42107 + ret = -ENOMEM;
42108 + goto err;
42109 + }
42110 +
42111 + switch (cmd) {
42112 + case BINDER_WRITE_READ: {
42113 + struct binder_write_read bwr;
42114 + if (size != sizeof(struct binder_write_read)) {
42115 + ret = -EINVAL;
42116 + goto err;
42117 + }
42118 + if (copy_from_user(&bwr, ubuf, sizeof(bwr))) {
42119 + ret = -EFAULT;
42120 + goto err;
42121 + }
42122 + if (binder_debug_mask & BINDER_DEBUG_READ_WRITE)
42123 + printk(KERN_INFO "binder: %d:%d write %ld at %08lx, read %ld at %08lx\n",
42124 + proc->pid, thread->pid, bwr.write_size, bwr.write_buffer, bwr.read_size, bwr.read_buffer);
42125 + if (bwr.write_size > 0) {
42126 + ret = binder_thread_write(proc, thread, (void __user *)bwr.write_buffer, bwr.write_size, &bwr.write_consumed);
42127 + if (ret < 0) {
42128 + bwr.read_consumed = 0;
42129 + if (copy_to_user(ubuf, &bwr, sizeof(bwr)))
42130 + ret = -EFAULT;
42131 + goto err;
42132 + }
42133 + }
42134 + if (bwr.read_size > 0) {
42135 + ret = binder_thread_read(proc, thread, (void __user *)bwr.read_buffer, bwr.read_size, &bwr.read_consumed, filp->f_flags & O_NONBLOCK);
42136 + if (!list_empty(&proc->todo))
42137 + wake_up_interruptible(&proc->wait);
42138 + if (ret < 0) {
42139 + if (copy_to_user(ubuf, &bwr, sizeof(bwr)))
42140 + ret = -EFAULT;
42141 + goto err;
42142 + }
42143 + }
42144 + if (binder_debug_mask & BINDER_DEBUG_READ_WRITE)
42145 + printk(KERN_INFO "binder: %d:%d wrote %ld of %ld, read return %ld of %ld\n",
42146 + proc->pid, thread->pid, bwr.write_consumed, bwr.write_size, bwr.read_consumed, bwr.read_size);
42147 + if (copy_to_user(ubuf, &bwr, sizeof(bwr))) {
42148 + ret = -EFAULT;
42149 + goto err;
42150 + }
42151 + break;
42152 + }
42153 + case BINDER_SET_MAX_THREADS:
42154 + if (copy_from_user(&proc->max_threads, ubuf, sizeof(proc->max_threads))) {
42155 + ret = -EINVAL;
42156 + goto err;
42157 + }
42158 + break;
42159 + case BINDER_SET_CONTEXT_MGR:
42160 + if (binder_context_mgr_node != NULL) {
42161 + printk(KERN_ERR "binder: BINDER_SET_CONTEXT_MGR already set\n");
42162 + ret = -EBUSY;
42163 + goto err;
42164 + }
42165 + if (binder_context_mgr_uid != -1) {
42166 + if (binder_context_mgr_uid != current->euid) {
42167 + printk(KERN_ERR "binder: BINDER_SET_"
42168 + "CONTEXT_MGR bad uid %d != %d\n",
42169 + current->euid,
42170 + binder_context_mgr_uid);
42171 + ret = -EPERM;
42172 + goto err;
42173 + }
42174 + } else
42175 + binder_context_mgr_uid = current->euid;
42176 + binder_context_mgr_node = binder_new_node(proc, NULL, NULL);
42177 + if (binder_context_mgr_node == NULL) {
42178 + ret = -ENOMEM;
42179 + goto err;
42180 + }
42181 + binder_context_mgr_node->local_weak_refs++;
42182 + binder_context_mgr_node->local_strong_refs++;
42183 + binder_context_mgr_node->has_strong_ref = 1;
42184 + binder_context_mgr_node->has_weak_ref = 1;
42185 + break;
42186 + case BINDER_THREAD_EXIT:
42187 + if (binder_debug_mask & BINDER_DEBUG_THREADS)
42188 + printk(KERN_INFO "binder: %d:%d exit\n",
42189 + proc->pid, thread->pid);
42190 + binder_free_thread(proc, thread);
42191 + thread = NULL;
42192 + break;
42193 + case BINDER_VERSION:
42194 + if (size != sizeof(struct binder_version)) {
42195 + ret = -EINVAL;
42196 + goto err;
42197 + }
42198 + if (put_user(BINDER_CURRENT_PROTOCOL_VERSION, &((struct binder_version *)ubuf)->protocol_version)) {
42199 + ret = -EINVAL;
42200 + goto err;
42201 + }
42202 + break;
42203 + default:
42204 + ret = -EINVAL;
42205 + goto err;
42206 + }
42207 + ret = 0;
42208 +err:
42209 + if (thread)
42210 + thread->looper &= ~BINDER_LOOPER_STATE_NEED_RETURN;
42211 + mutex_unlock(&binder_lock);
42212 + wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2);
42213 + if (ret && ret != -ERESTARTSYS)
42214 + printk(KERN_INFO "binder: %d:%d ioctl %x %lx returned %d\n", proc->pid, current->pid, cmd, arg, ret);
42215 + return ret;
42216 +}
42217 +
42218 +static void binder_vma_open(struct vm_area_struct *vma)
42219 +{
42220 + struct binder_proc *proc = vma->vm_private_data;
42221 + if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE)
42222 + printk(KERN_INFO "binder: %d open vm area %lx-%lx (%ld K) vma %lx pagep %lx\n", proc->pid, vma->vm_start, vma->vm_end, (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags, vma->vm_page_prot);
42223 + dump_stack();
42224 +}
42225 +static void binder_vma_close(struct vm_area_struct *vma)
42226 +{
42227 + struct binder_proc *proc = vma->vm_private_data;
42228 + if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE)
42229 + printk(KERN_INFO "binder: %d close vm area %lx-%lx (%ld K) vma %lx pagep %lx\n", proc->pid, vma->vm_start, vma->vm_end, (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags, vma->vm_page_prot);
42230 + proc->vma = NULL;
42231 +}
42232 +
42233 +static struct vm_operations_struct binder_vm_ops = {
42234 + .open = binder_vma_open,
42235 + .close = binder_vma_close,
42236 +};
42237 +
42238 +static int binder_mmap(struct file *filp, struct vm_area_struct *vma)
42239 +{
42240 + int ret;
42241 + struct vm_struct *area;
42242 + struct binder_proc *proc = filp->private_data;
42243 + const char *failure_string;
42244 + struct binder_buffer *buffer;
42245 +
42246 + if ((vma->vm_end - vma->vm_start) > SZ_4M)
42247 + vma->vm_end = vma->vm_start + SZ_4M;
42248 +
42249 + if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE)
42250 + printk(KERN_INFO "binder_mmap: %d %lx-%lx (%ld K) vma %lx pagep %lx\n", proc->pid, vma->vm_start, vma->vm_end, (vma->vm_end - vma->vm_start) / SZ_1K, vma->vm_flags, vma->vm_page_prot);
42251 +
42252 + if (vma->vm_flags & FORBIDDEN_MMAP_FLAGS) {
42253 + ret = -EPERM;
42254 + failure_string = "bad vm_flags";
42255 + goto err_bad_arg;
42256 + }
42257 + vma->vm_flags = (vma->vm_flags | VM_DONTCOPY) & ~VM_MAYWRITE;
42258 +
42259 + area = get_vm_area(vma->vm_end - vma->vm_start, VM_IOREMAP);
42260 + if (area == NULL) {
42261 + ret = -ENOMEM;
42262 + failure_string = "get_vm_area";
42263 + goto err_get_vm_area_failed;
42264 + }
42265 + proc->buffer = area->addr;
42266 + proc->user_buffer_offset = vma->vm_start - (size_t)proc->buffer;
42267 +
42268 +#if defined(CONFIG_CPU_CACHE_VIPT) && !defined(CONFIG_CPU_S3C6410)
42269 + if (cache_is_vipt_aliasing()) {
42270 + while (CACHE_COLOUR((vma->vm_start ^ (uint32_t)proc->buffer))) {
42271 + printk(KERN_INFO "binder_mmap: %d %lx-%lx maps %p bad alignment\n", proc->pid, vma->vm_start, vma->vm_end, proc->buffer);
42272 + vma->vm_start += PAGE_SIZE;
42273 + }
42274 + }
42275 +#endif
42276 + proc->pages = kzalloc(sizeof(proc->pages[0]) * ((vma->vm_end - vma->vm_start) / PAGE_SIZE), GFP_KERNEL);
42277 + if (proc->pages == NULL) {
42278 + ret = -ENOMEM;
42279 + failure_string = "alloc page array";
42280 + goto err_alloc_pages_failed;
42281 + }
42282 + proc->buffer_size = vma->vm_end - vma->vm_start;
42283 +
42284 + vma->vm_ops = &binder_vm_ops;
42285 + vma->vm_private_data = proc;
42286 +
42287 + if (binder_update_page_range(proc, 1, proc->buffer, proc->buffer + PAGE_SIZE, vma)) {
42288 + ret = -ENOMEM;
42289 + failure_string = "alloc small buf";
42290 + goto err_alloc_small_buf_failed;
42291 + }
42292 + buffer = proc->buffer;
42293 + INIT_LIST_HEAD(&proc->buffers);
42294 + list_add(&buffer->entry, &proc->buffers);
42295 + buffer->free = 1;
42296 + binder_insert_free_buffer(proc, buffer);
42297 + proc->free_async_space = proc->buffer_size / 2;
42298 + barrier();
42299 + proc->vma = vma;
42300 +
42301 + /*printk(KERN_INFO "binder_mmap: %d %lx-%lx maps %p\n", proc->pid, vma->vm_start, vma->vm_end, proc->buffer);*/
42302 + return 0;
42303 +
42304 +err_alloc_small_buf_failed:
42305 + kfree(proc->pages);
42306 +err_alloc_pages_failed:
42307 + vfree(proc->buffer);
42308 +err_get_vm_area_failed:
42309 + mutex_unlock(&binder_lock);
42310 +err_bad_arg:
42311 + printk(KERN_ERR "binder_mmap: %d %lx-%lx %s failed %d\n", proc->pid, vma->vm_start, vma->vm_end, failure_string, ret);
42312 + return ret;
42313 +}
42314 +
42315 +static int binder_open(struct inode *nodp, struct file *filp)
42316 +{
42317 + struct binder_proc *proc;
42318 +
42319 + if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE)
42320 + printk(KERN_INFO "binder_open: %d:%d\n", current->group_leader->pid, current->pid);
42321 +
42322 + proc = kzalloc(sizeof(*proc), GFP_KERNEL);
42323 + if (proc == NULL)
42324 + return -ENOMEM;
42325 + get_task_struct(current);
42326 + proc->tsk = current;
42327 + INIT_LIST_HEAD(&proc->todo);
42328 + init_waitqueue_head(&proc->wait);
42329 + proc->default_priority = task_nice(current);
42330 + mutex_lock(&binder_lock);
42331 + binder_stats.obj_created[BINDER_STAT_PROC]++;
42332 + hlist_add_head(&proc->proc_node, &binder_procs);
42333 + proc->pid = current->group_leader->pid;
42334 + INIT_LIST_HEAD(&proc->delivered_death);
42335 + filp->private_data = proc;
42336 + mutex_unlock(&binder_lock);
42337 +
42338 + if (binder_proc_dir_entry_proc) {
42339 + char strbuf[11];
42340 + snprintf(strbuf, sizeof(strbuf), "%u", proc->pid);
42341 + create_proc_read_entry(strbuf, S_IRUGO, binder_proc_dir_entry_proc, binder_read_proc_proc, proc);
42342 + }
42343 +
42344 + return 0;
42345 +}
42346 +
42347 +static int binder_flush(struct file *filp, fl_owner_t id)
42348 +{
42349 + struct rb_node *n;
42350 + struct binder_proc *proc = filp->private_data;
42351 + int wake_count = 0;
42352 +
42353 + mutex_lock(&binder_lock);
42354 + for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n)) {
42355 + struct binder_thread *thread = rb_entry(n, struct binder_thread, rb_node);
42356 + thread->looper |= BINDER_LOOPER_STATE_NEED_RETURN;
42357 + if (thread->looper & BINDER_LOOPER_STATE_WAITING) {
42358 + wake_up_interruptible(&thread->wait);
42359 + wake_count++;
42360 + }
42361 + }
42362 + wake_up_interruptible_all(&proc->wait);
42363 + mutex_unlock(&binder_lock);
42364 +
42365 + if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE)
42366 + printk(KERN_INFO "binder_flush: %d woke %d threads\n", proc->pid, wake_count);
42367 +
42368 + return 0;
42369 +}
42370 +
42371 +static int binder_release(struct inode *nodp, struct file *filp)
42372 +{
42373 + struct hlist_node *pos;
42374 + struct binder_transaction *t;
42375 + struct rb_node *n;
42376 + struct binder_proc *proc = filp->private_data;
42377 + int threads, nodes, incoming_refs, outgoing_refs, buffers, active_transactions, page_count;
42378 +
42379 + if (binder_proc_dir_entry_proc) {
42380 + char strbuf[11];
42381 + snprintf(strbuf, sizeof(strbuf), "%u", proc->pid);
42382 + remove_proc_entry(strbuf, binder_proc_dir_entry_proc);
42383 + }
42384 + mutex_lock(&binder_lock);
42385 + hlist_del(&proc->proc_node);
42386 + if (binder_context_mgr_node && binder_context_mgr_node->proc == proc) {
42387 + if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER)
42388 + printk(KERN_INFO "binder_release: %d context_mgr_node gone\n", proc->pid);
42389 + binder_context_mgr_node = NULL;
42390 + }
42391 +
42392 + threads = 0;
42393 + active_transactions = 0;
42394 + while ((n = rb_first(&proc->threads))) {
42395 + struct binder_thread *thread = rb_entry(n, struct binder_thread, rb_node);
42396 + threads++;
42397 + active_transactions += binder_free_thread(proc, thread);
42398 + }
42399 + nodes = 0;
42400 + incoming_refs = 0;
42401 + while ((n = rb_first(&proc->nodes))) {
42402 + struct binder_node *node = rb_entry(n, struct binder_node, rb_node);
42403 +
42404 + nodes++;
42405 + rb_erase(&node->rb_node, &proc->nodes);
42406 + list_del_init(&node->work.entry);
42407 + if (hlist_empty(&node->refs)) {
42408 + kfree(node);
42409 + binder_stats.obj_deleted[BINDER_STAT_NODE]++;
42410 + } else {
42411 + struct binder_ref *ref;
42412 + int death = 0;
42413 +
42414 + node->proc = NULL;
42415 + node->local_strong_refs = 0;
42416 + node->local_weak_refs = 0;
42417 + hlist_add_head(&node->dead_node, &binder_dead_nodes);
42418 +
42419 + hlist_for_each_entry(ref, pos, &node->refs, node_entry) {
42420 + incoming_refs++;
42421 + if (ref->death) {
42422 + death++;
42423 + if (list_empty(&ref->death->work.entry)) {
42424 + ref->death->work.type = BINDER_WORK_DEAD_BINDER;
42425 + list_add_tail(&ref->death->work.entry, &ref->proc->todo);
42426 + wake_up_interruptible(&ref->proc->wait);
42427 + } else
42428 + BUG();
42429 + }
42430 + }
42431 + if (binder_debug_mask & BINDER_DEBUG_DEAD_BINDER)
42432 + printk(KERN_INFO "binder: node %d now dead, refs %d, death %d\n", node->debug_id, incoming_refs, death);
42433 + }
42434 + }
42435 + outgoing_refs = 0;
42436 + while ((n = rb_first(&proc->refs_by_desc))) {
42437 + struct binder_ref *ref = rb_entry(n, struct binder_ref, rb_node_desc);
42438 + outgoing_refs++;
42439 + binder_delete_ref(ref);
42440 + }
42441 + binder_release_work(&proc->todo);
42442 + buffers = 0;
42443 +
42444 + while ((n = rb_first(&proc->allocated_buffers))) {
42445 + struct binder_buffer *buffer = rb_entry(n, struct binder_buffer, rb_node);
42446 + t = buffer->transaction;
42447 + if (t) {
42448 + t->buffer = NULL;
42449 + buffer->transaction = NULL;
42450 + printk(KERN_ERR "binder: release proc %d, transaction %d, not freed\n", proc->pid, t->debug_id);
42451 + /*BUG();*/
42452 + }
42453 + binder_free_buf(proc, buffer);
42454 + buffers++;
42455 + }
42456 +
42457 + binder_stats.obj_deleted[BINDER_STAT_PROC]++;
42458 + mutex_unlock(&binder_lock);
42459 +
42460 + page_count = 0;
42461 + if (proc->pages) {
42462 + int i;
42463 + for (i = 0; i < proc->buffer_size / PAGE_SIZE; i++) {
42464 + if (proc->pages[i]) {
42465 + if (binder_debug_mask & BINDER_DEBUG_BUFFER_ALLOC)
42466 + printk(KERN_INFO "binder_release: %d: page %d at %p not freed\n", proc->pid, i, proc->buffer + i * PAGE_SIZE);
42467 + __free_page(proc->pages[i]);
42468 + page_count++;
42469 + }
42470 + }
42471 + kfree(proc->pages);
42472 + vfree(proc->buffer);
42473 + }
42474 +
42475 + put_task_struct(proc->tsk);
42476 +
42477 + if (binder_debug_mask & BINDER_DEBUG_OPEN_CLOSE)
42478 + printk(KERN_INFO "binder_release: %d threads %d, nodes %d (ref %d), refs %d, active transactions %d, buffers %d, pages %d\n",
42479 + proc->pid, threads, nodes, incoming_refs, outgoing_refs, active_transactions, buffers, page_count);
42480 +
42481 + kfree(proc);
42482 + return 0;
42483 +}
42484 +
42485 +static char *print_binder_transaction(char *buf, char *end, const char *prefix, struct binder_transaction *t)
42486 +{
42487 + buf += snprintf(buf, end - buf, "%s %d: %p from %d:%d to %d:%d code %x flags %x pri %ld r%d",
42488 + prefix, t->debug_id, t, t->from ? t->from->proc->pid : 0,
42489 + t->from ? t->from->pid : 0,
42490 + t->to_proc ? t->to_proc->pid : 0,
42491 + t->to_thread ? t->to_thread->pid : 0,
42492 + t->code, t->flags, t->priority, t->need_reply);
42493 + if (buf >= end)
42494 + return buf;
42495 + if (t->buffer == NULL) {
42496 + buf += snprintf(buf, end - buf, " buffer free\n");
42497 + return buf;
42498 + }
42499 + if (t->buffer->target_node) {
42500 + buf += snprintf(buf, end - buf, " node %d",
42501 + t->buffer->target_node->debug_id);
42502 + if (buf >= end)
42503 + return buf;
42504 + }
42505 + buf += snprintf(buf, end - buf, " size %d:%d data %p\n",
42506 + t->buffer->data_size, t->buffer->offsets_size,
42507 + t->buffer->data);
42508 + return buf;
42509 +}
42510 +
42511 +static char *print_binder_buffer(char *buf, char *end, const char *prefix, struct binder_buffer *buffer)
42512 +{
42513 + buf += snprintf(buf, end - buf, "%s %d: %p size %d:%d %s\n",
42514 + prefix, buffer->debug_id, buffer->data,
42515 + buffer->data_size, buffer->offsets_size,
42516 + buffer->transaction ? "active" : "delivered");
42517 + return buf;
42518 +}
42519 +
42520 +static char *print_binder_work(char *buf, char *end, const char *prefix,
42521 + const char *transaction_prefix, struct binder_work *w)
42522 +{
42523 + struct binder_node *node;
42524 + struct binder_transaction *t;
42525 +
42526 + switch (w->type) {
42527 + case BINDER_WORK_TRANSACTION:
42528 + t = container_of(w, struct binder_transaction, work);
42529 + buf = print_binder_transaction(buf, end, transaction_prefix, t);
42530 + break;
42531 + case BINDER_WORK_TRANSACTION_COMPLETE:
42532 + buf += snprintf(buf, end - buf,
42533 + "%stransaction complete\n", prefix);
42534 + break;
42535 + case BINDER_WORK_NODE:
42536 + node = container_of(w, struct binder_node, work);
42537 + buf += snprintf(buf, end - buf, "%snode work %d: u%p c%p\n",
42538 + prefix, node->debug_id, node->ptr, node->cookie);
42539 + break;
42540 + case BINDER_WORK_DEAD_BINDER:
42541 + buf += snprintf(buf, end - buf, "%shas dead binder\n", prefix);
42542 + break;
42543 + case BINDER_WORK_DEAD_BINDER_AND_CLEAR:
42544 + buf += snprintf(buf, end - buf,
42545 + "%shas cleared dead binder\n", prefix);
42546 + break;
42547 + case BINDER_WORK_CLEAR_DEATH_NOTIFICATION:
42548 + buf += snprintf(buf, end - buf,
42549 + "%shas cleared death notification\n", prefix);
42550 + break;
42551 + default:
42552 + buf += snprintf(buf, end - buf, "%sunknown work: type %d\n",
42553 + prefix, w->type);
42554 + break;
42555 + }
42556 + return buf;
42557 +}
42558 +
42559 +static char *print_binder_thread(char *buf, char *end, struct binder_thread *thread, int print_always)
42560 +{
42561 + struct binder_transaction *t;
42562 + struct binder_work *w;
42563 + char *start_buf = buf;
42564 + char *header_buf;
42565 +
42566 + buf += snprintf(buf, end - buf, " thread %d: l %02x\n", thread->pid, thread->looper);
42567 + header_buf = buf;
42568 + t = thread->transaction_stack;
42569 + while (t) {
42570 + if (buf >= end)
42571 + break;
42572 + if (t->from == thread) {
42573 + buf = print_binder_transaction(buf, end, " outgoing transaction", t);
42574 + t = t->from_parent;
42575 + } else if (t->to_thread == thread) {
42576 + buf = print_binder_transaction(buf, end, " incoming transaction", t);
42577 + t = t->to_parent;
42578 + } else {
42579 + buf = print_binder_transaction(buf, end, " bad transaction", t);
42580 + t = NULL;
42581 + }
42582 + }
42583 + list_for_each_entry(w, &thread->todo, entry) {
42584 + if (buf >= end)
42585 + break;
42586 + buf = print_binder_work(buf, end, " ",
42587 + " pending transaction", w);
42588 + }
42589 + if (!print_always && buf == header_buf)
42590 + buf = start_buf;
42591 + return buf;
42592 +}
42593 +
42594 +static char *print_binder_node(char *buf, char *end, struct binder_node *node)
42595 +{
42596 + struct binder_ref *ref;
42597 + struct hlist_node *pos;
42598 + struct binder_work *w;
42599 + int count;
42600 + count = 0;
42601 + hlist_for_each_entry(ref, pos, &node->refs, node_entry)
42602 + count++;
42603 +
42604 + buf += snprintf(buf, end - buf, " node %d: u%p c%p hs %d hw %d ls %d lw %d is %d iw %d",
42605 + node->debug_id, node->ptr, node->cookie,
42606 + node->has_strong_ref, node->has_weak_ref,
42607 + node->local_strong_refs, node->local_weak_refs,
42608 + node->internal_strong_refs, count);
42609 + if (buf >= end)
42610 + return buf;
42611 + if (count) {
42612 + buf += snprintf(buf, end - buf, " proc");
42613 + if (buf >= end)
42614 + return buf;
42615 + hlist_for_each_entry(ref, pos, &node->refs, node_entry) {
42616 + buf += snprintf(buf, end - buf, " %d", ref->proc->pid);
42617 + if (buf >= end)
42618 + return buf;
42619 + }
42620 + }
42621 + buf += snprintf(buf, end - buf, "\n");
42622 + list_for_each_entry(w, &node->async_todo, entry) {
42623 + if (buf >= end)
42624 + break;
42625 + buf = print_binder_work(buf, end, " ",
42626 + " pending async transaction", w);
42627 + }
42628 + return buf;
42629 +}
42630 +
42631 +static char *print_binder_ref(char *buf, char *end, struct binder_ref *ref)
42632 +{
42633 + buf += snprintf(buf, end - buf, " ref %d: desc %d %snode %d s %d w %d d %p\n",
42634 + ref->debug_id, ref->desc, ref->node->proc ? "" : "dead ",
42635 + ref->node->debug_id, ref->strong, ref->weak, ref->death);
42636 + return buf;
42637 +}
42638 +
42639 +static char *print_binder_proc(char *buf, char *end, struct binder_proc *proc, int print_all)
42640 +{
42641 + struct binder_work *w;
42642 + struct rb_node *n;
42643 + char *start_buf = buf;
42644 + char *header_buf;
42645 +
42646 + buf += snprintf(buf, end - buf, "proc %d\n", proc->pid);
42647 + header_buf = buf;
42648 +
42649 + for (n = rb_first(&proc->threads); n != NULL && buf < end; n = rb_next(n))
42650 + buf = print_binder_thread(buf, end, rb_entry(n, struct binder_thread, rb_node), print_all);
42651 + for (n = rb_first(&proc->nodes); n != NULL && buf < end; n = rb_next(n)) {
42652 + struct binder_node *node = rb_entry(n, struct binder_node, rb_node);
42653 + if (print_all || node->has_async_transaction)
42654 + buf = print_binder_node(buf, end, node);
42655 + }
42656 + if (print_all) {
42657 + for (n = rb_first(&proc->refs_by_desc); n != NULL && buf < end; n = rb_next(n))
42658 + buf = print_binder_ref(buf, end, rb_entry(n, struct binder_ref, rb_node_desc));
42659 + }
42660 + for (n = rb_first(&proc->allocated_buffers); n != NULL && buf < end; n = rb_next(n))
42661 + buf = print_binder_buffer(buf, end, " buffer", rb_entry(n, struct binder_buffer, rb_node));
42662 + list_for_each_entry(w, &proc->todo, entry) {
42663 + if (buf >= end)
42664 + break;
42665 + buf = print_binder_work(buf, end, " ",
42666 + " pending transaction", w);
42667 + }
42668 + list_for_each_entry(w, &proc->delivered_death, entry) {
42669 + if (buf >= end)
42670 + break;
42671 + buf += snprintf(buf, end - buf, " has delivered dead binder\n");
42672 + break;
42673 + }
42674 + if (!print_all && buf == header_buf)
42675 + buf = start_buf;
42676 + return buf;
42677 +}
42678 +
42679 +static const char *binder_return_strings[] = {
42680 + "BR_ERROR",
42681 + "BR_OK",
42682 + "BR_TRANSACTION",
42683 + "BR_REPLY",
42684 + "BR_ACQUIRE_RESULT",
42685 + "BR_DEAD_REPLY",
42686 + "BR_TRANSACTION_COMPLETE",
42687 + "BR_INCREFS",
42688 + "BR_ACQUIRE",
42689 + "BR_RELEASE",
42690 + "BR_DECREFS",
42691 + "BR_ATTEMPT_ACQUIRE",
42692 + "BR_NOOP",
42693 + "BR_SPAWN_LOOPER",
42694 + "BR_FINISHED",
42695 + "BR_DEAD_BINDER",
42696 + "BR_CLEAR_DEATH_NOTIFICATION_DONE",
42697 + "BR_FAILED_REPLY"
42698 +};
42699 +
42700 +static const char *binder_command_strings[] = {
42701 + "BC_TRANSACTION",
42702 + "BC_REPLY",
42703 + "BC_ACQUIRE_RESULT",
42704 + "BC_FREE_BUFFER",
42705 + "BC_INCREFS",
42706 + "BC_ACQUIRE",
42707 + "BC_RELEASE",
42708 + "BC_DECREFS",
42709 + "BC_INCREFS_DONE",
42710 + "BC_ACQUIRE_DONE",
42711 + "BC_ATTEMPT_ACQUIRE",
42712 + "BC_REGISTER_LOOPER",
42713 + "BC_ENTER_LOOPER",
42714 + "BC_EXIT_LOOPER",
42715 + "BC_REQUEST_DEATH_NOTIFICATION",
42716 + "BC_CLEAR_DEATH_NOTIFICATION",
42717 + "BC_DEAD_BINDER_DONE"
42718 +};
42719 +
42720 +static const char *binder_objstat_strings[] = {
42721 + "proc",
42722 + "thread",
42723 + "node",
42724 + "ref",
42725 + "death",
42726 + "transaction",
42727 + "transaction_complete"
42728 +};
42729 +
42730 +static char *print_binder_stats(char *buf, char *end, const char *prefix, struct binder_stats *stats)
42731 +{
42732 + int i;
42733 +
42734 + BUILD_BUG_ON(ARRAY_SIZE(stats->bc) != ARRAY_SIZE(binder_command_strings));
42735 + for (i = 0; i < ARRAY_SIZE(stats->bc); i++) {
42736 + if (stats->bc[i])
42737 + buf += snprintf(buf, end - buf, "%s%s: %d\n", prefix,
42738 + binder_command_strings[i], stats->bc[i]);
42739 + if (buf >= end)
42740 + return buf;
42741 + }
42742 +
42743 + BUILD_BUG_ON(ARRAY_SIZE(stats->br) != ARRAY_SIZE(binder_return_strings));
42744 + for (i = 0; i < ARRAY_SIZE(stats->br); i++) {
42745 + if (stats->br[i])
42746 + buf += snprintf(buf, end - buf, "%s%s: %d\n", prefix,
42747 + binder_return_strings[i], stats->br[i]);
42748 + if (buf >= end)
42749 + return buf;
42750 + }
42751 +
42752 + BUILD_BUG_ON(ARRAY_SIZE(stats->obj_created) != ARRAY_SIZE(binder_objstat_strings));
42753 + BUILD_BUG_ON(ARRAY_SIZE(stats->obj_created) != ARRAY_SIZE(stats->obj_deleted));
42754 + for (i = 0; i < ARRAY_SIZE(stats->obj_created); i++) {
42755 + if (stats->obj_created[i] || stats->obj_deleted[i])
42756 + buf += snprintf(buf, end - buf, "%s%s: active %d total %d\n", prefix,
42757 + binder_objstat_strings[i],
42758 + stats->obj_created[i] - stats->obj_deleted[i],
42759 + stats->obj_created[i]);
42760 + if (buf >= end)
42761 + return buf;
42762 + }
42763 + return buf;
42764 +}
42765 +
42766 +static char *print_binder_proc_stats(char *buf, char *end, struct binder_proc *proc)
42767 +{
42768 + struct binder_work *w;
42769 + struct rb_node *n;
42770 + int count, strong, weak;
42771 +
42772 + buf += snprintf(buf, end - buf, "proc %d\n", proc->pid);
42773 + if (buf >= end)
42774 + return buf;
42775 + count = 0;
42776 + for (n = rb_first(&proc->threads); n != NULL; n = rb_next(n))
42777 + count++;
42778 + buf += snprintf(buf, end - buf, " threads: %d\n", count);
42779 + if (buf >= end)
42780 + return buf;
42781 + buf += snprintf(buf, end - buf, " requested threads: %d+%d/%d\n"
42782 + " ready threads %d\n"
42783 + " free async space %d\n", proc->requested_threads,
42784 + proc->requested_threads_started, proc->max_threads,
42785 + proc->ready_threads, proc->free_async_space);
42786 + if (buf >= end)
42787 + return buf;
42788 + count = 0;
42789 + for (n = rb_first(&proc->nodes); n != NULL; n = rb_next(n))
42790 + count++;
42791 + buf += snprintf(buf, end - buf, " nodes: %d\n", count);
42792 + if (buf >= end)
42793 + return buf;
42794 + count = 0;
42795 + strong = 0;
42796 + weak = 0;
42797 + for (n = rb_first(&proc->refs_by_desc); n != NULL; n = rb_next(n)) {
42798 + struct binder_ref *ref = rb_entry(n, struct binder_ref, rb_node_desc);
42799 + count++;
42800 + strong += ref->strong;
42801 + weak += ref->weak;
42802 + }
42803 + buf += snprintf(buf, end - buf, " refs: %d s %d w %d\n", count, strong, weak);
42804 + if (buf >= end)
42805 + return buf;
42806 +
42807 + count = 0;
42808 + for (n = rb_first(&proc->allocated_buffers); n != NULL; n = rb_next(n))
42809 + count++;
42810 + buf += snprintf(buf, end - buf, " buffers: %d\n", count);
42811 + if (buf >= end)
42812 + return buf;
42813 +
42814 + count = 0;
42815 + list_for_each_entry(w, &proc->todo, entry) {
42816 + switch (w->type) {
42817 + case BINDER_WORK_TRANSACTION:
42818 + count++;
42819 + break;
42820 + default:
42821 + break;
42822 + }
42823 + }
42824 + buf += snprintf(buf, end - buf, " pending transactions: %d\n", count);
42825 + if (buf >= end)
42826 + return buf;
42827 +
42828 + buf = print_binder_stats(buf, end, " ", &proc->stats);
42829 +
42830 + return buf;
42831 +}
42832 +
42833 +
42834 +static int binder_read_proc_state(
42835 + char *page, char **start, off_t off, int count, int *eof, void *data)
42836 +{
42837 + struct binder_proc *proc;
42838 + struct hlist_node *pos;
42839 + struct binder_node *node;
42840 + int len = 0;
42841 + char *buf = page;
42842 + char *end = page + PAGE_SIZE;
42843 + int do_lock = !binder_debug_no_lock;
42844 +
42845 + if (off)
42846 + return 0;
42847 +
42848 + if (do_lock)
42849 + mutex_lock(&binder_lock);
42850 +
42851 + buf += snprintf(buf, end - buf, "binder state:\n");
42852 +
42853 + if (!hlist_empty(&binder_dead_nodes))
42854 + buf += snprintf(buf, end - buf, "dead nodes:\n");
42855 + hlist_for_each_entry(node, pos, &binder_dead_nodes, dead_node) {
42856 + if (buf >= end)
42857 + break;
42858 + buf = print_binder_node(buf, end, node);
42859 + }
42860 +
42861 + hlist_for_each_entry(proc, pos, &binder_procs, proc_node) {
42862 + if (buf >= end)
42863 + break;
42864 + buf = print_binder_proc(buf, end, proc, 1);
42865 + }
42866 + if (do_lock)
42867 + mutex_unlock(&binder_lock);
42868 + if (buf > page + PAGE_SIZE)
42869 + buf = page + PAGE_SIZE;
42870 +
42871 + *start = page + off;
42872 +
42873 + len = buf - page;
42874 + if (len > off)
42875 + len -= off;
42876 + else
42877 + len = 0;
42878 +
42879 + return len < count ? len : count;
42880 +}
42881 +
42882 +static int binder_read_proc_stats(
42883 + char *page, char **start, off_t off, int count, int *eof, void *data)
42884 +{
42885 + struct binder_proc *proc;
42886 + struct hlist_node *pos;
42887 + int len = 0;
42888 + char *p = page;
42889 + int do_lock = !binder_debug_no_lock;
42890 +
42891 + if (off)
42892 + return 0;
42893 +
42894 + if (do_lock)
42895 + mutex_lock(&binder_lock);
42896 +
42897 + p += snprintf(p, PAGE_SIZE, "binder stats:\n");
42898 +
42899 + p = print_binder_stats(p, page + PAGE_SIZE, "", &binder_stats);
42900 +
42901 + hlist_for_each_entry(proc, pos, &binder_procs, proc_node) {
42902 + if (p >= page + PAGE_SIZE)
42903 + break;
42904 + p = print_binder_proc_stats(p, page + PAGE_SIZE, proc);
42905 + }
42906 + if (do_lock)
42907 + mutex_unlock(&binder_lock);
42908 + if (p > page + PAGE_SIZE)
42909 + p = page + PAGE_SIZE;
42910 +
42911 + *start = page + off;
42912 +
42913 + len = p - page;
42914 + if (len > off)
42915 + len -= off;
42916 + else
42917 + len = 0;
42918 +
42919 + return len < count ? len : count;
42920 +}
42921 +
42922 +static int binder_read_proc_transactions(
42923 + char *page, char **start, off_t off, int count, int *eof, void *data)
42924 +{
42925 + struct binder_proc *proc;
42926 + struct hlist_node *pos;
42927 + int len = 0;
42928 + char *buf = page;
42929 + char *end = page + PAGE_SIZE;
42930 + int do_lock = !binder_debug_no_lock;
42931 +
42932 + if (off)
42933 + return 0;
42934 +
42935 + if (do_lock)
42936 + mutex_lock(&binder_lock);
42937 +
42938 + buf += snprintf(buf, end - buf, "binder transactions:\n");
42939 + hlist_for_each_entry(proc, pos, &binder_procs, proc_node) {
42940 + if (buf >= end)
42941 + break;
42942 + buf = print_binder_proc(buf, end, proc, 0);
42943 + }
42944 + if (do_lock)
42945 + mutex_unlock(&binder_lock);
42946 + if (buf > page + PAGE_SIZE)
42947 + buf = page + PAGE_SIZE;
42948 +
42949 + *start = page + off;
42950 +
42951 + len = buf - page;
42952 + if (len > off)
42953 + len -= off;
42954 + else
42955 + len = 0;
42956 +
42957 + return len < count ? len : count;
42958 +}
42959 +
42960 +static int binder_read_proc_proc(
42961 + char *page, char **start, off_t off, int count, int *eof, void *data)
42962 +{
42963 + struct binder_proc *proc = data;
42964 + int len = 0;
42965 + char *p = page;
42966 + int do_lock = !binder_debug_no_lock;
42967 +
42968 + if (off)
42969 + return 0;
42970 +
42971 + if (do_lock)
42972 + mutex_lock(&binder_lock);
42973 + p += snprintf(p, PAGE_SIZE, "binder proc state:\n");
42974 + p = print_binder_proc(p, page + PAGE_SIZE, proc, 1);
42975 + if (do_lock)
42976 + mutex_unlock(&binder_lock);
42977 +
42978 + if (p > page + PAGE_SIZE)
42979 + p = page + PAGE_SIZE;
42980 + *start = page + off;
42981 +
42982 + len = p - page;
42983 + if (len > off)
42984 + len -= off;
42985 + else
42986 + len = 0;
42987 +
42988 + return len < count ? len : count;
42989 +}
42990 +
42991 +static char *print_binder_transaction_log_entry(char *buf, char *end, struct binder_transaction_log_entry *e)
42992 +{
42993 + buf += snprintf(buf, end - buf, "%d: %s from %d:%d to %d:%d node %d handle %d size %d:%d\n",
42994 + e->debug_id, (e->call_type == 2) ? "reply" :
42995 + ((e->call_type == 1) ? "async" : "call "), e->from_proc,
42996 + e->from_thread, e->to_proc, e->to_thread, e->to_node,
42997 + e->target_handle, e->data_size, e->offsets_size);
42998 + return buf;
42999 +}
43000 +
43001 +static int binder_read_proc_transaction_log(
43002 + char *page, char **start, off_t off, int count, int *eof, void *data)
43003 +{
43004 + struct binder_transaction_log *log = data;
43005 + int len = 0;
43006 + int i;
43007 + char *buf = page;
43008 + char *end = page + PAGE_SIZE;
43009 +
43010 + if (off)
43011 + return 0;
43012 +
43013 + if (log->full) {
43014 + for (i = log->next; i < ARRAY_SIZE(log->entry); i++) {
43015 + if (buf >= end)
43016 + break;
43017 + buf = print_binder_transaction_log_entry(buf, end, &log->entry[i]);
43018 + }
43019 + }
43020 + for (i = 0; i < log->next; i++) {
43021 + if (buf >= end)
43022 + break;
43023 + buf = print_binder_transaction_log_entry(buf, end, &log->entry[i]);
43024 + }
43025 +
43026 + *start = page + off;
43027 +
43028 + len = buf - page;
43029 + if (len > off)
43030 + len -= off;
43031 + else
43032 + len = 0;
43033 +
43034 + return len < count ? len : count;
43035 +}
43036 +
43037 +static struct file_operations binder_fops = {
43038 + .owner = THIS_MODULE,
43039 + .poll = binder_poll,
43040 + .unlocked_ioctl = binder_ioctl,
43041 + .mmap = binder_mmap,
43042 + .open = binder_open,
43043 + .flush = binder_flush,
43044 + .release = binder_release,
43045 +};
43046 +
43047 +static struct miscdevice binder_miscdev = {
43048 + .minor = MISC_DYNAMIC_MINOR,
43049 + .name = "binder",
43050 + .fops = &binder_fops
43051 +};
43052 +
43053 +static int __init binder_init(void)
43054 +{
43055 + int ret;
43056 +
43057 + binder_proc_dir_entry_root = proc_mkdir("binder", NULL);
43058 + if (binder_proc_dir_entry_root)
43059 + binder_proc_dir_entry_proc = proc_mkdir("proc", binder_proc_dir_entry_root);
43060 + ret = misc_register(&binder_miscdev);
43061 + if (binder_proc_dir_entry_root) {
43062 + create_proc_read_entry("state", S_IRUGO, binder_proc_dir_entry_root, binder_read_proc_state, NULL);
43063 + create_proc_read_entry("stats", S_IRUGO, binder_proc_dir_entry_root, binder_read_proc_stats, NULL);
43064 + create_proc_read_entry("transactions", S_IRUGO, binder_proc_dir_entry_root, binder_read_proc_transactions, NULL);
43065 + create_proc_read_entry("transaction_log", S_IRUGO, binder_proc_dir_entry_root, binder_read_proc_transaction_log, &binder_transaction_log);
43066 + create_proc_read_entry("failed_transaction_log", S_IRUGO, binder_proc_dir_entry_root, binder_read_proc_transaction_log, &binder_transaction_log_failed);
43067 + }
43068 + return ret;
43069 +}
43070 +
43071 +device_initcall(binder_init);
43072 +
43073 Index: linux-2.6.28/drivers/android/Kconfig
43074 ===================================================================
43075 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
43076 +++ linux-2.6.28/drivers/android/Kconfig 2009-01-02 00:01:56.000000000 +0100
43077 @@ -0,0 +1,93 @@
43078 +menu "Android"
43079 +
43080 +config ANDROID_BINDER_IPC
43081 + tristate "Binder IPC Driver"
43082 + default y
43083 +
43084 +config ANDROID_POWER
43085 + bool "Android power driver"
43086 + depends on PM && RTC_CLASS
43087 + default n
43088 +
43089 +config ANDROID_POWER_STAT
43090 + bool "Android power driver lock stats"
43091 + depends on ANDROID_POWER
43092 + default y
43093 +
43094 +config ANDROID_POWER_ALARM
43095 + bool "Android alarm driver"
43096 + depends on ANDROID_POWER
43097 + default y
43098 +
43099 +config ANDROID_LOGGER
43100 + bool "Android log driver"
43101 + default y
43102 +
43103 +config ANDROID_RAM_CONSOLE
43104 + bool "RAM buffer console"
43105 + default n
43106 +
43107 +config ANDROID_RAM_CONSOLE_ENABLE_VERBOSE
43108 + bool "Enable verbose console messages"
43109 + default y
43110 + depends on ANDROID_RAM_CONSOLE
43111 +
43112 +menuconfig ANDROID_RAM_CONSOLE_ERROR_CORRECTION
43113 + bool "Enable error correction"
43114 + default n
43115 + depends on ANDROID_RAM_CONSOLE
43116 + select REED_SOLOMON
43117 + select REED_SOLOMON_ENC8
43118 + select REED_SOLOMON_DEC8
43119 +
43120 +if ANDROID_RAM_CONSOLE_ERROR_CORRECTION
43121 +
43122 +config ANDROID_RAM_CONSOLE_ERROR_CORRECTION_DATA_SIZE
43123 + int "Data data size"
43124 + default 128
43125 + help
43126 + Must be a power of 2.
43127 +
43128 +config ANDROID_RAM_CONSOLE_ERROR_CORRECTION_ECC_SIZE
43129 + int "ECC size"
43130 + default 16
43131 +
43132 +config ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE
43133 + int "Symbol size"
43134 + default 8
43135 +
43136 +config ANDROID_RAM_CONSOLE_ERROR_CORRECTION_POLYNOMIAL
43137 + hex "Polynomial"
43138 + default 0x19 if (ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE = 4)
43139 + default 0x29 if (ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE = 5)
43140 + default 0x61 if (ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE = 6)
43141 + default 0x89 if (ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE = 7)
43142 + default 0x11d if (ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE = 8)
43143 +
43144 +endif #ANDROID_RAM_CONSOLE_ERROR_CORRECTION
43145 +
43146 +config ANDROID_RAM_CONSOLE_EARLY_INIT
43147 + bool "Start ram console early"
43148 + default n
43149 + depends on ANDROID_RAM_CONSOLE
43150 +
43151 +config ANDROID_RAM_CONSOLE_EARLY_ADDR
43152 + hex "RAM console virtual address"
43153 + default 0
43154 + depends on ANDROID_RAM_CONSOLE_EARLY_INIT
43155 +
43156 +config ANDROID_RAM_CONSOLE_EARLY_SIZE
43157 + hex "RAM console buffer size"
43158 + default 0
43159 + depends on ANDROID_RAM_CONSOLE_EARLY_INIT
43160 +
43161 +config ANDROID_TIMED_GPIO
43162 + bool "Android timed gpio driver"
43163 + depends on GENERIC_GPIO
43164 + default y
43165 +
43166 +config ANDROID_PARANOID_NETWORK
43167 + bool "Only allow certain groups to create sockets"
43168 + default y
43169 +
43170 +endmenu
43171 Index: linux-2.6.28/drivers/android/logger.c
43172 ===================================================================
43173 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
43174 +++ linux-2.6.28/drivers/android/logger.c 2009-01-02 00:01:56.000000000 +0100
43175 @@ -0,0 +1,607 @@
43176 +/*
43177 + * drivers/android/logger.c
43178 + *
43179 + * Android Logging Subsystem
43180 + *
43181 + * Copyright (C) 2007-2008 Google, Inc.
43182 + *
43183 + * Robert Love <rlove@google.com>
43184 + *
43185 + * This software is licensed under the terms of the GNU General Public
43186 + * License version 2, as published by the Free Software Foundation, and
43187 + * may be copied, distributed, and modified under those terms.
43188 + *
43189 + * This program is distributed in the hope that it will be useful,
43190 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
43191 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43192 + * GNU General Public License for more details.
43193 + */
43194 +
43195 +#include <linux/module.h>
43196 +#include <linux/fs.h>
43197 +#include <linux/miscdevice.h>
43198 +#include <linux/uaccess.h>
43199 +#include <linux/poll.h>
43200 +#include <linux/time.h>
43201 +#include <linux/logger.h>
43202 +
43203 +#include <asm/ioctls.h>
43204 +
43205 +/*
43206 + * struct logger_log - represents a specific log, such as 'main' or 'radio'
43207 + *
43208 + * This structure lives from module insertion until module removal, so it does
43209 + * not need additional reference counting. The structure is protected by the
43210 + * mutex 'mutex'.
43211 + */
43212 +struct logger_log {
43213 + unsigned char * buffer; /* the ring buffer itself */
43214 + struct miscdevice misc; /* misc device representing the log */
43215 + wait_queue_head_t wq; /* wait queue for readers */
43216 + struct list_head readers; /* this log's readers */
43217 + struct mutex mutex; /* mutex protecting buffer */
43218 + size_t w_off; /* current write head offset */
43219 + size_t head; /* new readers start here */
43220 + size_t size; /* size of the log */
43221 +};
43222 +
43223 +/*
43224 + * struct logger_reader - a logging device open for reading
43225 + *
43226 + * This object lives from open to release, so we don't need additional
43227 + * reference counting. The structure is protected by log->mutex.
43228 + */
43229 +struct logger_reader {
43230 + struct logger_log * log; /* associated log */
43231 + struct list_head list; /* entry in logger_log's list */
43232 + size_t r_off; /* current read head offset */
43233 +};
43234 +
43235 +/* logger_offset - returns index 'n' into the log via (optimized) modulus */
43236 +#define logger_offset(n) ((n) & (log->size - 1))
43237 +
43238 +/*
43239 + * file_get_log - Given a file structure, return the associated log
43240 + *
43241 + * This isn't aesthetic. We have several goals:
43242 + *
43243 + * 1) Need to quickly obtain the associated log during an I/O operation
43244 + * 2) Readers need to maintain state (logger_reader)
43245 + * 3) Writers need to be very fast (open() should be a near no-op)
43246 + *
43247 + * In the reader case, we can trivially go file->logger_reader->logger_log.
43248 + * For a writer, we don't want to maintain a logger_reader, so we just go
43249 + * file->logger_log. Thus what file->private_data points at depends on whether
43250 + * or not the file was opened for reading. This function hides that dirtiness.
43251 + */
43252 +static inline struct logger_log * file_get_log(struct file *file)
43253 +{
43254 + if (file->f_mode & FMODE_READ) {
43255 + struct logger_reader *reader = file->private_data;
43256 + return reader->log;
43257 + } else
43258 + return file->private_data;
43259 +}
43260 +
43261 +/*
43262 + * get_entry_len - Grabs the length of the payload of the next entry starting
43263 + * from 'off'.
43264 + *
43265 + * Caller needs to hold log->mutex.
43266 + */
43267 +static __u32 get_entry_len(struct logger_log *log, size_t off)
43268 +{
43269 + __u16 val;
43270 +
43271 + switch (log->size - off) {
43272 + case 1:
43273 + memcpy(&val, log->buffer + off, 1);
43274 + memcpy(((char *) &val) + 1, log->buffer, 1);
43275 + break;
43276 + default:
43277 + memcpy(&val, log->buffer + off, 2);
43278 + }
43279 +
43280 + return sizeof(struct logger_entry) + val;
43281 +}
43282 +
43283 +/*
43284 + * do_read_log_to_user - reads exactly 'count' bytes from 'log' into the
43285 + * user-space buffer 'buf'. Returns 'count' on success.
43286 + *
43287 + * Caller must hold log->mutex.
43288 + */
43289 +static ssize_t do_read_log_to_user(struct logger_log *log,
43290 + struct logger_reader *reader,
43291 + char __user *buf,
43292 + size_t count)
43293 +{
43294 + size_t len;
43295 +
43296 + /*
43297 + * We read from the log in two disjoint operations. First, we read from
43298 + * the current read head offset up to 'count' bytes or to the end of
43299 + * the log, whichever comes first.
43300 + */
43301 + len = min(count, log->size - reader->r_off);
43302 + if (copy_to_user(buf, log->buffer + reader->r_off, len))
43303 + return -EFAULT;
43304 +
43305 + /*
43306 + * Second, we read any remaining bytes, starting back at the head of
43307 + * the log.
43308 + */
43309 + if (count != len)
43310 + if (copy_to_user(buf + len, log->buffer, count - len))
43311 + return -EFAULT;
43312 +
43313 + reader->r_off = logger_offset(reader->r_off + count);
43314 +
43315 + return count;
43316 +}
43317 +
43318 +/*
43319 + * logger_read - our log's read() method
43320 + *
43321 + * Behavior:
43322 + *
43323 + * - O_NONBLOCK works
43324 + * - If there are no log entries to read, blocks until log is written to
43325 + * - Atomically reads exactly one log entry
43326 + *
43327 + * Optimal read size is LOGGER_ENTRY_MAX_LEN. Will set errno to EINVAL if read
43328 + * buffer is insufficient to hold next entry.
43329 + */
43330 +static ssize_t logger_read(struct file *file, char __user *buf,
43331 + size_t count, loff_t *pos)
43332 +{
43333 + struct logger_reader *reader = file->private_data;
43334 + struct logger_log *log = reader->log;
43335 + ssize_t ret;
43336 + DEFINE_WAIT(wait);
43337 +
43338 +start:
43339 + while (1) {
43340 + prepare_to_wait(&log->wq, &wait, TASK_INTERRUPTIBLE);
43341 +
43342 + mutex_lock(&log->mutex);
43343 + ret = (log->w_off == reader->r_off);
43344 + mutex_unlock(&log->mutex);
43345 + if (!ret)
43346 + break;
43347 +
43348 + if (file->f_flags & O_NONBLOCK) {
43349 + ret = -EAGAIN;
43350 + break;
43351 + }
43352 +
43353 + if (signal_pending(current)) {
43354 + ret = -EINTR;
43355 + break;
43356 + }
43357 +
43358 + schedule();
43359 + }
43360 +
43361 + finish_wait(&log->wq, &wait);
43362 + if (ret)
43363 + return ret;
43364 +
43365 + mutex_lock(&log->mutex);
43366 +
43367 + /* is there still something to read or did we race? */
43368 + if (unlikely(log->w_off == reader->r_off)) {
43369 + mutex_unlock(&log->mutex);
43370 + goto start;
43371 + }
43372 +
43373 + /* get the size of the next entry */
43374 + ret = get_entry_len(log, reader->r_off);
43375 + if (count < ret) {
43376 + ret = -EINVAL;
43377 + goto out;
43378 + }
43379 +
43380 + /* get exactly one entry from the log */
43381 + ret = do_read_log_to_user(log, reader, buf, ret);
43382 +
43383 +out:
43384 + mutex_unlock(&log->mutex);
43385 +
43386 + return ret;
43387 +}
43388 +
43389 +/*
43390 + * get_next_entry - return the offset of the first valid entry at least 'len'
43391 + * bytes after 'off'.
43392 + *
43393 + * Caller must hold log->mutex.
43394 + */
43395 +static size_t get_next_entry(struct logger_log *log, size_t off, size_t len)
43396 +{
43397 + size_t count = 0;
43398 +
43399 + do {
43400 + size_t nr = get_entry_len(log, off);
43401 + off = logger_offset(off + nr);
43402 + count += nr;
43403 + } while (count < len);
43404 +
43405 + return off;
43406 +}
43407 +
43408 +/*
43409 + * clock_interval - is a < c < b in mod-space? Put another way, does the line
43410 + * from a to b cross c?
43411 + */
43412 +static inline int clock_interval(size_t a, size_t b, size_t c)
43413 +{
43414 + if (b < a) {
43415 + if (a < c || b >= c)
43416 + return 1;
43417 + } else {
43418 + if (a < c && b >= c)
43419 + return 1;
43420 + }
43421 +
43422 + return 0;
43423 +}
43424 +
43425 +/*
43426 + * fix_up_readers - walk the list of all readers and "fix up" any who were
43427 + * lapped by the writer; also do the same for the default "start head".
43428 + * We do this by "pulling forward" the readers and start head to the first
43429 + * entry after the new write head.
43430 + *
43431 + * The caller needs to hold log->mutex.
43432 + */
43433 +static void fix_up_readers(struct logger_log *log, size_t len)
43434 +{
43435 + size_t old = log->w_off;
43436 + size_t new = logger_offset(old + len);
43437 + struct logger_reader *reader;
43438 +
43439 + if (clock_interval(old, new, log->head))
43440 + log->head = get_next_entry(log, log->head, len);
43441 +
43442 + list_for_each_entry(reader, &log->readers, list)
43443 + if (clock_interval(old, new, reader->r_off))
43444 + reader->r_off = get_next_entry(log, reader->r_off, len);
43445 +}
43446 +
43447 +/*
43448 + * do_write_log - writes 'len' bytes from 'buf' to 'log'
43449 + *
43450 + * The caller needs to hold log->mutex.
43451 + */
43452 +static void do_write_log(struct logger_log *log, const void *buf, size_t count)
43453 +{
43454 + size_t len;
43455 +
43456 + len = min(count, log->size - log->w_off);
43457 + memcpy(log->buffer + log->w_off, buf, len);
43458 +
43459 + if (count != len)
43460 + memcpy(log->buffer, buf + len, count - len);
43461 +
43462 + log->w_off = logger_offset(log->w_off + count);
43463 +
43464 +}
43465 +
43466 +/*
43467 + * do_write_log_user - writes 'len' bytes from the user-space buffer 'buf' to
43468 + * the log 'log'
43469 + *
43470 + * The caller needs to hold log->mutex.
43471 + *
43472 + * Returns 'count' on success, negative error code on failure.
43473 + */
43474 +static ssize_t do_write_log_from_user(struct logger_log *log,
43475 + const void __user *buf, size_t count)
43476 +{
43477 + size_t len;
43478 +
43479 + len = min(count, log->size - log->w_off);
43480 + if (len && copy_from_user(log->buffer + log->w_off, buf, len))
43481 + return -EFAULT;
43482 +
43483 + if (count != len)
43484 + if (copy_from_user(log->buffer, buf + len, count - len))
43485 + return -EFAULT;
43486 +
43487 + log->w_off = logger_offset(log->w_off + count);
43488 +
43489 + return count;
43490 +}
43491 +
43492 +/*
43493 + * logger_aio_write - our write method, implementing support for write(),
43494 + * writev(), and aio_write(). Writes are our fast path, and we try to optimize
43495 + * them above all else.
43496 + */
43497 +ssize_t logger_aio_write(struct kiocb *iocb, const struct iovec *iov,
43498 + unsigned long nr_segs, loff_t ppos)
43499 +{
43500 + struct logger_log *log = file_get_log(iocb->ki_filp);
43501 + size_t orig = log->w_off;
43502 + struct logger_entry header;
43503 + struct timespec now;
43504 + ssize_t ret = 0;
43505 +
43506 + now = current_kernel_time();
43507 +
43508 + header.pid = current->tgid;
43509 + header.tid = current->pid;
43510 + header.sec = now.tv_sec;
43511 + header.nsec = now.tv_nsec;
43512 + header.len = min_t(size_t, iocb->ki_left, LOGGER_ENTRY_MAX_PAYLOAD);
43513 +
43514 + /* null writes succeed, return zero */
43515 + if (unlikely(!header.len))
43516 + return 0;
43517 +
43518 + mutex_lock(&log->mutex);
43519 +
43520 + /*
43521 + * Fix up any readers, pulling them forward to the first readable
43522 + * entry after (what will be) the new write offset. We do this now
43523 + * because if we partially fail, we can end up with clobbered log
43524 + * entries that encroach on readable buffer.
43525 + */
43526 + fix_up_readers(log, sizeof(struct logger_entry) + header.len);
43527 +
43528 + do_write_log(log, &header, sizeof(struct logger_entry));
43529 +
43530 + while (nr_segs-- > 0) {
43531 + size_t len;
43532 + ssize_t nr;
43533 +
43534 + /* figure out how much of this vector we can keep */
43535 + len = min_t(size_t, iov->iov_len, header.len - ret);
43536 +
43537 + /* write out this segment's payload */
43538 + nr = do_write_log_from_user(log, iov->iov_base, len);
43539 + if (unlikely(nr < 0)) {
43540 + log->w_off = orig;
43541 + mutex_unlock(&log->mutex);
43542 + return nr;
43543 + }
43544 +
43545 + iov++;
43546 + ret += nr;
43547 + }
43548 +
43549 + mutex_unlock(&log->mutex);
43550 +
43551 + /* wake up any blocked readers */
43552 + wake_up_interruptible(&log->wq);
43553 +
43554 + return ret;
43555 +}
43556 +
43557 +static struct logger_log * get_log_from_minor(int);
43558 +
43559 +/*
43560 + * logger_open - the log's open() file operation
43561 + *
43562 + * Note how near a no-op this is in the write-only case. Keep it that way!
43563 + */
43564 +static int logger_open(struct inode *inode, struct file *file)
43565 +{
43566 + struct logger_log *log;
43567 + int ret;
43568 +
43569 + ret = nonseekable_open(inode, file);
43570 + if (ret)
43571 + return ret;
43572 +
43573 + log = get_log_from_minor(MINOR(inode->i_rdev));
43574 + if (!log)
43575 + return -ENODEV;
43576 +
43577 + if (file->f_mode & FMODE_READ) {
43578 + struct logger_reader *reader;
43579 +
43580 + reader = kmalloc(sizeof(struct logger_reader), GFP_KERNEL);
43581 + if (!reader)
43582 + return -ENOMEM;
43583 +
43584 + reader->log = log;
43585 + INIT_LIST_HEAD(&reader->list);
43586 +
43587 + mutex_lock(&log->mutex);
43588 + reader->r_off = log->head;
43589 + list_add_tail(&reader->list, &log->readers);
43590 + mutex_unlock(&log->mutex);
43591 +
43592 + file->private_data = reader;
43593 + } else
43594 + file->private_data = log;
43595 +
43596 + return 0;
43597 +}
43598 +
43599 +/*
43600 + * logger_release - the log's release file operation
43601 + *
43602 + * Note this is a total no-op in the write-only case. Keep it that way!
43603 + */
43604 +static int logger_release(struct inode *ignored, struct file *file)
43605 +{
43606 + if (file->f_mode & FMODE_READ) {
43607 + struct logger_reader *reader = file->private_data;
43608 + list_del(&reader->list);
43609 + kfree(reader);
43610 + }
43611 +
43612 + return 0;
43613 +}
43614 +
43615 +/*
43616 + * logger_poll - the log's poll file operation, for poll/select/epoll
43617 + *
43618 + * Note we always return POLLOUT, because you can always write() to the log.
43619 + * Note also that, strictly speaking, a return value of POLLIN does not
43620 + * guarantee that the log is readable without blocking, as there is a small
43621 + * chance that the writer can lap the reader in the interim between poll()
43622 + * returning and the read() request.
43623 + */
43624 +static unsigned int logger_poll(struct file *file, poll_table *wait)
43625 +{
43626 + struct logger_reader *reader;
43627 + struct logger_log *log;
43628 + unsigned int ret = POLLOUT | POLLWRNORM;
43629 +
43630 + if (!(file->f_mode & FMODE_READ))
43631 + return ret;
43632 +
43633 + reader = file->private_data;
43634 + log = reader->log;
43635 +
43636 + poll_wait(file, &log->wq, wait);
43637 +
43638 + mutex_lock(&log->mutex);
43639 + if (log->w_off != reader->r_off)
43640 + ret |= POLLIN | POLLRDNORM;
43641 + mutex_unlock(&log->mutex);
43642 +
43643 + return ret;
43644 +}
43645 +
43646 +static long logger_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
43647 +{
43648 + struct logger_log *log = file_get_log(file);
43649 + struct logger_reader *reader;
43650 + long ret = -ENOTTY;
43651 +
43652 + mutex_lock(&log->mutex);
43653 +
43654 + switch (cmd) {
43655 + case LOGGER_GET_LOG_BUF_SIZE:
43656 + ret = log->size;
43657 + break;
43658 + case LOGGER_GET_LOG_LEN:
43659 + if (!(file->f_mode & FMODE_READ)) {
43660 + ret = -EBADF;
43661 + break;
43662 + }
43663 + reader = file->private_data;
43664 + if (log->w_off >= reader->r_off)
43665 + ret = log->w_off - reader->r_off;
43666 + else
43667 + ret = (log->size - reader->r_off) + log->w_off;
43668 + break;
43669 + case LOGGER_GET_NEXT_ENTRY_LEN:
43670 + if (!(file->f_mode & FMODE_READ)) {
43671 + ret = -EBADF;
43672 + break;
43673 + }
43674 + reader = file->private_data;
43675 + if (log->w_off != reader->r_off)
43676 + ret = get_entry_len(log, reader->r_off);
43677 + else
43678 + ret = 0;
43679 + break;
43680 + case LOGGER_FLUSH_LOG:
43681 + if (!(file->f_mode & FMODE_WRITE)) {
43682 + ret = -EBADF;
43683 + break;
43684 + }
43685 + list_for_each_entry(reader, &log->readers, list)
43686 + reader->r_off = log->w_off;
43687 + log->head = log->w_off;
43688 + ret = 0;
43689 + break;
43690 + }
43691 +
43692 + mutex_unlock(&log->mutex);
43693 +
43694 + return ret;
43695 +}
43696 +
43697 +static struct file_operations logger_fops = {
43698 + .owner = THIS_MODULE,
43699 + .read = logger_read,
43700 + .aio_write = logger_aio_write,
43701 + .poll = logger_poll,
43702 + .unlocked_ioctl = logger_ioctl,
43703 + .compat_ioctl = logger_ioctl,
43704 + .open = logger_open,
43705 + .release = logger_release,
43706 +};
43707 +
43708 +/*
43709 + * Defines a log structure with name 'NAME' and a size of 'SIZE' bytes, which
43710 + * must be a power of two, greater than LOGGER_ENTRY_MAX_LEN, and less than
43711 + * LONG_MAX minus LOGGER_ENTRY_MAX_LEN.
43712 + */
43713 +#define DEFINE_LOGGER_DEVICE(VAR, NAME, SIZE) \
43714 +static unsigned char _buf_ ## VAR[SIZE]; \
43715 +static struct logger_log VAR = { \
43716 + .buffer = _buf_ ## VAR, \
43717 + .misc = { \
43718 + .minor = MISC_DYNAMIC_MINOR, \
43719 + .name = NAME, \
43720 + .fops = &logger_fops, \
43721 + .parent = NULL, \
43722 + }, \
43723 + .wq = __WAIT_QUEUE_HEAD_INITIALIZER(VAR .wq), \
43724 + .readers = LIST_HEAD_INIT(VAR .readers), \
43725 + .mutex = __MUTEX_INITIALIZER(VAR .mutex), \
43726 + .w_off = 0, \
43727 + .head = 0, \
43728 + .size = SIZE, \
43729 +};
43730 +
43731 +DEFINE_LOGGER_DEVICE(log_main, LOGGER_LOG_MAIN, 64*1024)
43732 +DEFINE_LOGGER_DEVICE(log_events, LOGGER_LOG_EVENTS, 256*1024)
43733 +DEFINE_LOGGER_DEVICE(log_radio, LOGGER_LOG_RADIO, 64*1024)
43734 +
43735 +static struct logger_log * get_log_from_minor(int minor)
43736 +{
43737 + if (log_main.misc.minor == minor)
43738 + return &log_main;
43739 + if (log_events.misc.minor == minor)
43740 + return &log_events;
43741 + if (log_radio.misc.minor == minor)
43742 + return &log_radio;
43743 + return NULL;
43744 +}
43745 +
43746 +static int __init init_log(struct logger_log *log)
43747 +{
43748 + int ret;
43749 +
43750 + ret = misc_register(&log->misc);
43751 + if (unlikely(ret)) {
43752 + printk(KERN_ERR "logger: failed to register misc "
43753 + "device for log '%s'!\n", log->misc.name);
43754 + return ret;
43755 + }
43756 +
43757 + printk(KERN_INFO "logger: created %luK log '%s'\n",
43758 + (unsigned long) log->size >> 10, log->misc.name);
43759 +
43760 + return 0;
43761 +}
43762 +
43763 +static int __init logger_init(void)
43764 +{
43765 + int ret;
43766 +
43767 + ret = init_log(&log_main);
43768 + if (unlikely(ret))
43769 + goto out;
43770 +
43771 + ret = init_log(&log_events);
43772 + if (unlikely(ret))
43773 + goto out;
43774 +
43775 + ret = init_log(&log_radio);
43776 + if (unlikely(ret))
43777 + goto out;
43778 +
43779 +out:
43780 + return ret;
43781 +}
43782 +device_initcall(logger_init);
43783 Index: linux-2.6.28/drivers/android/Makefile
43784 ===================================================================
43785 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
43786 +++ linux-2.6.28/drivers/android/Makefile 2009-01-02 00:01:56.000000000 +0100
43787 @@ -0,0 +1,6 @@
43788 +obj-$(CONFIG_ANDROID_BINDER_IPC) += binder.o
43789 +obj-$(CONFIG_ANDROID_POWER) += power.o
43790 +obj-$(CONFIG_ANDROID_POWER_ALARM) += alarm.o
43791 +obj-$(CONFIG_ANDROID_LOGGER) += logger.o
43792 +obj-$(CONFIG_ANDROID_RAM_CONSOLE) += ram_console.o
43793 +obj-$(CONFIG_ANDROID_TIMED_GPIO) += timed_gpio.o
43794 Index: linux-2.6.28/drivers/android/power.c
43795 ===================================================================
43796 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
43797 +++ linux-2.6.28/drivers/android/power.c 2009-01-02 00:01:56.000000000 +0100
43798 @@ -0,0 +1,1336 @@
43799 +/* drivers/android/power.c
43800 + *
43801 + * Copyright (C) 2005-2008 Google, Inc.
43802 + *
43803 + * This software is licensed under the terms of the GNU General Public
43804 + * License version 2, as published by the Free Software Foundation, and
43805 + * may be copied, distributed, and modified under those terms.
43806 + *
43807 + * This program is distributed in the hope that it will be useful,
43808 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
43809 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43810 + * GNU General Public License for more details.
43811 + *
43812 + */
43813 +
43814 +#include <linux/list.h>
43815 +#include <linux/module.h>
43816 +#include <linux/miscdevice.h>
43817 +//#include <linux/platform_device.h>
43818 +#include <linux/sysdev.h>
43819 +#include <linux/fs.h>
43820 +#include <linux/poll.h>
43821 +#include <linux/interrupt.h>
43822 +#include <linux/delay.h>
43823 +#include <linux/clk.h>
43824 +#include <linux/rtc.h>
43825 +#include <linux/wait.h>
43826 +#include <linux/android_power.h>
43827 +#include <linux/suspend.h>
43828 +#include <linux/syscalls.h> // sys_sync
43829 +#include <linux/console.h>
43830 +#include <linux/kbd_kern.h>
43831 +#include <linux/vt_kern.h>
43832 +#include <linux/freezer.h>
43833 +#ifdef CONFIG_ANDROID_POWER_STAT
43834 +#include <linux/proc_fs.h>
43835 +#endif
43836 +
43837 +enum {
43838 + ANDROID_POWER_DEBUG_USER_STATE = 1U << 0,
43839 + ANDROID_POWER_DEBUG_EXIT_SUSPEND = 1U << 1,
43840 + ANDROID_POWER_DEBUG_SUSPEND = 1U << 2,
43841 + ANDROID_POWER_DEBUG_USER_WAKE_LOCK = 1U << 3,
43842 + ANDROID_POWER_DEBUG_WAKE_LOCK = 1U << 4,
43843 +};
43844 +static int android_power_debug_mask =
43845 + ANDROID_POWER_DEBUG_USER_STATE | ANDROID_POWER_DEBUG_EXIT_SUSPEND;
43846 +module_param_named(debug_mask, android_power_debug_mask,
43847 + int, S_IRUGO | S_IWUSR | S_IWGRP);
43848 +
43849 +#define ANDROID_POWER_TEST_EARLY_SUSPEND 0
43850 +
43851 +MODULE_DESCRIPTION("OMAP CSMI Driver");
43852 +MODULE_LICENSE("GPL");
43853 +MODULE_VERSION("1.0");
43854 +
43855 +#define ANDROID_SUSPEND_CONSOLE (MAX_NR_CONSOLES-2)
43856 +
43857 +static spinlock_t g_list_lock = SPIN_LOCK_UNLOCKED;
43858 +static DEFINE_MUTEX(g_early_suspend_lock);
43859 +
43860 +wait_queue_head_t g_wait_queue;
43861 +
43862 +static LIST_HEAD(g_inactive_locks);
43863 +static LIST_HEAD(g_active_idle_wake_locks);
43864 +static LIST_HEAD(g_active_partial_wake_locks);
43865 +static LIST_HEAD(g_active_full_wake_locks);
43866 +static LIST_HEAD(g_early_suspend_handlers);
43867 +static enum {
43868 + USER_AWAKE,
43869 + USER_NOTIFICATION,
43870 + USER_SLEEP
43871 +} g_user_suspend_state;
43872 +static int g_current_event_num;
43873 +static struct workqueue_struct *g_suspend_work_queue;
43874 +static void android_power_suspend(struct work_struct *work);
43875 +static void android_power_wakeup_locked(int notification, ktime_t time);
43876 +static DECLARE_WORK(g_suspend_work, android_power_suspend);
43877 +static int g_max_user_lockouts = 16;
43878 +
43879 +//static const char g_free_user_lockout_name[] = "free_user";
43880 +static struct {
43881 + enum {
43882 + USER_WAKE_LOCK_INACTIVE,
43883 + USER_WAKE_LOCK_PARTIAL,
43884 + USER_WAKE_LOCK_FULL
43885 + } state;
43886 + android_suspend_lock_t suspend_lock;
43887 + char name_buffer[32];
43888 +} *g_user_wake_locks;
43889 +#ifdef CONFIG_ANDROID_POWER_STAT
43890 +android_suspend_lock_t g_deleted_wake_locks;
43891 +android_suspend_lock_t g_no_wake_locks;
43892 +#endif
43893 +static struct kobject *android_power_kobj;
43894 +#ifndef CONFIG_FRAMEBUFFER_CONSOLE
43895 +static wait_queue_head_t fb_state_wq;
43896 +static spinlock_t fb_state_lock = SPIN_LOCK_UNLOCKED;
43897 +int fb_state;
43898 +#endif
43899 +
43900 +#if 0
43901 +android_suspend_lock_t *android_allocate_suspend_lock(const char *debug_name)
43902 +{
43903 + unsigned long irqflags;
43904 + struct android_power *e;
43905 +
43906 + e = kzalloc(sizeof(*e), GFP_KERNEL);
43907 + if(e == NULL) {
43908 + printk("android_power_allocate: kzalloc failed\n");
43909 + return NULL;
43910 + }
43911 + e->name = debug_name;
43912 + spin_lock_irqsave(&g_list_lock, irqflags);
43913 + list_add(&e->link, &g_allocated);
43914 + spin_unlock_irqrestore(&g_list_lock, irqflags);
43915 + return e;
43916 +}
43917 +#endif
43918 +
43919 +static int android_init_suspend_lock_internal(
43920 + android_suspend_lock_t *lock, int has_spin_lock)
43921 +{
43922 + unsigned long irqflags;
43923 +
43924 + if(lock->name == NULL) {
43925 + printk(KERN_ERR "android_init_suspend_lock: error name=NULL, "
43926 + "lock=%p\n", lock);
43927 + dump_stack();
43928 + return -EINVAL;
43929 + }
43930 +
43931 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
43932 + printk(KERN_INFO "android_init_suspend_lock name=%s\n",
43933 + lock->name);
43934 +#ifdef CONFIG_ANDROID_POWER_STAT
43935 + lock->stat.count = 0;
43936 + lock->stat.expire_count = 0;
43937 + lock->stat.total_time = ktime_set(0, 0);
43938 + lock->stat.max_time = ktime_set(0, 0);
43939 + lock->stat.last_time = ktime_set(0, 0);
43940 +#endif
43941 + lock->flags = 0;
43942 +
43943 + INIT_LIST_HEAD(&lock->link);
43944 + if (!has_spin_lock)
43945 + spin_lock_irqsave(&g_list_lock, irqflags);
43946 + list_add(&lock->link, &g_inactive_locks);
43947 + if (!has_spin_lock)
43948 + spin_unlock_irqrestore(&g_list_lock, irqflags);
43949 +// if(lock->flags & ANDROID_SUSPEND_LOCK_FLAG_USER_VISIBLE_MASK) {
43950 +// sysfs_create_file(struct kobject * k, const struct attribute * a)
43951 +// }
43952 + return 0;
43953 +}
43954 +
43955 +int android_init_suspend_lock(android_suspend_lock_t *lock)
43956 +{
43957 + return android_init_suspend_lock_internal(lock, 0);
43958 +}
43959 +
43960 +void android_uninit_suspend_lock(android_suspend_lock_t *lock)
43961 +{
43962 + unsigned long irqflags;
43963 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
43964 + printk(KERN_INFO "android_uninit_suspend_lock name=%s\n",
43965 + lock->name);
43966 + spin_lock_irqsave(&g_list_lock, irqflags);
43967 +#ifdef CONFIG_ANDROID_POWER_STAT
43968 + if(lock->stat.count) {
43969 + if(g_deleted_wake_locks.stat.count == 0) {
43970 + g_deleted_wake_locks.name = "deleted_wake_locks";
43971 + android_init_suspend_lock_internal(
43972 + &g_deleted_wake_locks, 1);
43973 + }
43974 + g_deleted_wake_locks.stat.count += lock->stat.count;
43975 + g_deleted_wake_locks.stat.expire_count += lock->stat.expire_count;
43976 + g_deleted_wake_locks.stat.total_time = ktime_add(g_deleted_wake_locks.stat.total_time, lock->stat.total_time);
43977 + g_deleted_wake_locks.stat.max_time = ktime_add(g_deleted_wake_locks.stat.max_time, lock->stat.max_time);
43978 + }
43979 +#endif
43980 + list_del(&lock->link);
43981 + spin_unlock_irqrestore(&g_list_lock, irqflags);
43982 +}
43983 +
43984 +void android_lock_idle(android_suspend_lock_t *lock)
43985 +{
43986 + unsigned long irqflags;
43987 + spin_lock_irqsave(&g_list_lock, irqflags);
43988 +#ifdef CONFIG_ANDROID_POWER_STAT
43989 + if(!(lock->flags & ANDROID_SUSPEND_LOCK_ACTIVE)) {
43990 + lock->flags |= ANDROID_SUSPEND_LOCK_ACTIVE;
43991 + lock->stat.last_time = ktime_get();
43992 + }
43993 +#endif
43994 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
43995 + printk(KERN_INFO "android_power: acquire idle wake lock: %s\n",
43996 + lock->name);
43997 + lock->expires = INT_MAX;
43998 + lock->flags &= ~ANDROID_SUSPEND_LOCK_AUTO_EXPIRE;
43999 + list_del(&lock->link);
44000 + list_add(&lock->link, &g_active_idle_wake_locks);
44001 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44002 +}
44003 +
44004 +void android_lock_idle_auto_expire(android_suspend_lock_t *lock, int timeout)
44005 +{
44006 + unsigned long irqflags;
44007 + spin_lock_irqsave(&g_list_lock, irqflags);
44008 +#ifdef CONFIG_ANDROID_POWER_STAT
44009 + if(!(lock->flags & ANDROID_SUSPEND_LOCK_ACTIVE)) {
44010 + lock->flags |= ANDROID_SUSPEND_LOCK_ACTIVE;
44011 + lock->stat.last_time = ktime_get();
44012 + }
44013 +#endif
44014 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
44015 + printk(KERN_INFO "android_power: acquire idle wake lock: %s, "
44016 + "timeout %d.%03lu\n", lock->name, timeout / HZ,
44017 + (timeout % HZ) * MSEC_PER_SEC / HZ);
44018 + lock->expires = jiffies + timeout;
44019 + lock->flags |= ANDROID_SUSPEND_LOCK_AUTO_EXPIRE;
44020 + list_del(&lock->link);
44021 + list_add(&lock->link, &g_active_idle_wake_locks);
44022 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44023 +}
44024 +
44025 +void android_lock_suspend(android_suspend_lock_t *lock)
44026 +{
44027 + unsigned long irqflags;
44028 + spin_lock_irqsave(&g_list_lock, irqflags);
44029 +#ifdef CONFIG_ANDROID_POWER_STAT
44030 + if(!(lock->flags & ANDROID_SUSPEND_LOCK_ACTIVE)) {
44031 + lock->flags |= ANDROID_SUSPEND_LOCK_ACTIVE;
44032 + lock->stat.last_time = ktime_get();
44033 + }
44034 +#endif
44035 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
44036 + printk(KERN_INFO "android_power: acquire wake lock: %s\n",
44037 + lock->name);
44038 + lock->expires = INT_MAX;
44039 + lock->flags &= ~ANDROID_SUSPEND_LOCK_AUTO_EXPIRE;
44040 + list_del(&lock->link);
44041 + list_add(&lock->link, &g_active_partial_wake_locks);
44042 + g_current_event_num++;
44043 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44044 +}
44045 +
44046 +void android_lock_suspend_auto_expire(android_suspend_lock_t *lock, int timeout)
44047 +{
44048 + unsigned long irqflags;
44049 + spin_lock_irqsave(&g_list_lock, irqflags);
44050 +#ifdef CONFIG_ANDROID_POWER_STAT
44051 + if(!(lock->flags & ANDROID_SUSPEND_LOCK_ACTIVE)) {
44052 + lock->flags |= ANDROID_SUSPEND_LOCK_ACTIVE;
44053 + lock->stat.last_time = ktime_get();
44054 + }
44055 +#endif
44056 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
44057 + printk(KERN_INFO "android_power: acquire wake lock: %s, "
44058 + "timeout %d.%03lu\n", lock->name, timeout / HZ,
44059 + (timeout % HZ) * MSEC_PER_SEC / HZ);
44060 + lock->expires = jiffies + timeout;
44061 + lock->flags |= ANDROID_SUSPEND_LOCK_AUTO_EXPIRE;
44062 + list_del(&lock->link);
44063 + list_add(&lock->link, &g_active_partial_wake_locks);
44064 + g_current_event_num++;
44065 + wake_up(&g_wait_queue);
44066 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44067 +}
44068 +
44069 +void android_lock_partial_suspend_auto_expire(android_suspend_lock_t *lock, int timeout)
44070 +{
44071 + unsigned long irqflags;
44072 + spin_lock_irqsave(&g_list_lock, irqflags);
44073 +#ifdef CONFIG_ANDROID_POWER_STAT
44074 + if(!(lock->flags & ANDROID_SUSPEND_LOCK_ACTIVE)) {
44075 + lock->flags |= ANDROID_SUSPEND_LOCK_ACTIVE;
44076 + lock->stat.last_time = ktime_get();
44077 + }
44078 +#endif
44079 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
44080 + printk(KERN_INFO "android_power: acquire full wake lock: %s, "
44081 + "timeout %d.%03lu\n", lock->name, timeout / HZ,
44082 + (timeout % HZ) * MSEC_PER_SEC / HZ);
44083 + lock->expires = jiffies + timeout;
44084 + lock->flags |= ANDROID_SUSPEND_LOCK_AUTO_EXPIRE;
44085 + list_del(&lock->link);
44086 + list_add(&lock->link, &g_active_full_wake_locks);
44087 + g_current_event_num++;
44088 + wake_up(&g_wait_queue);
44089 + android_power_wakeup_locked(1, ktime_get());
44090 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44091 +}
44092 +
44093 +#ifdef CONFIG_ANDROID_POWER_STAT
44094 +static int print_lock_stat(char *buf, android_suspend_lock_t *lock)
44095 +{
44096 + ktime_t active_time;
44097 + if(lock->flags & ANDROID_SUSPEND_LOCK_ACTIVE)
44098 + active_time = ktime_sub(ktime_get(), lock->stat.last_time);
44099 + else
44100 + active_time = ktime_set(0, 0);
44101 + return sprintf(buf, "\"%s\"\t%d\t%d\t%lld\t%lld\t%lld\t%lld\n",
44102 + lock->name,
44103 + lock->stat.count, lock->stat.expire_count,
44104 + ktime_to_ns(active_time),
44105 + ktime_to_ns(lock->stat.total_time),
44106 + ktime_to_ns(lock->stat.max_time),
44107 + ktime_to_ns(lock->stat.last_time));
44108 +}
44109 +
44110 +
44111 +static int wakelocks_read_proc(char *page, char **start, off_t off,
44112 + int count, int *eof, void *data)
44113 +{
44114 + unsigned long irqflags;
44115 + android_suspend_lock_t *lock;
44116 + int len = 0;
44117 + char *p = page;
44118 +
44119 + spin_lock_irqsave(&g_list_lock, irqflags);
44120 +
44121 + p += sprintf(p, "name\tcount\texpire_count\tactive_since\ttotal_time\tmax_time\tlast_change\n");
44122 + list_for_each_entry(lock, &g_inactive_locks, link) {
44123 + p += print_lock_stat(p, lock);
44124 + }
44125 + list_for_each_entry(lock, &g_active_partial_wake_locks, link) {
44126 + p += print_lock_stat(p, lock);
44127 + }
44128 + list_for_each_entry(lock, &g_active_full_wake_locks, link) {
44129 + p += print_lock_stat(p, lock);
44130 + }
44131 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44132 +
44133 +
44134 + *start = page + off;
44135 +
44136 + len = p - page;
44137 + if (len > off)
44138 + len -= off;
44139 + else
44140 + len = 0;
44141 +
44142 + return len < count ? len : count;
44143 +}
44144 +
44145 +static void android_unlock_suspend_stat_locked(android_suspend_lock_t *lock)
44146 +{
44147 + if(lock->flags & ANDROID_SUSPEND_LOCK_ACTIVE) {
44148 + ktime_t duration;
44149 + lock->flags &= ~ANDROID_SUSPEND_LOCK_ACTIVE;
44150 + lock->stat.count++;
44151 + duration = ktime_sub(ktime_get(), lock->stat.last_time);
44152 + lock->stat.total_time = ktime_add(lock->stat.total_time, duration);
44153 + if(ktime_to_ns(duration) > ktime_to_ns(lock->stat.max_time))
44154 + lock->stat.max_time = duration;
44155 + lock->stat.last_time = ktime_get();
44156 + }
44157 +}
44158 +#endif
44159 +
44160 +void android_unlock_suspend(android_suspend_lock_t *lock)
44161 +{
44162 + int had_full_wake_locks;
44163 + unsigned long irqflags;
44164 + spin_lock_irqsave(&g_list_lock, irqflags);
44165 +#ifdef CONFIG_ANDROID_POWER_STAT
44166 + android_unlock_suspend_stat_locked(lock);
44167 +#endif
44168 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
44169 + printk(KERN_INFO "android_power: release wake lock: %s\n",
44170 + lock->name);
44171 + lock->flags &= ~ANDROID_SUSPEND_LOCK_AUTO_EXPIRE;
44172 + had_full_wake_locks = !list_empty(&g_active_full_wake_locks);
44173 + list_del(&lock->link);
44174 + list_add(&lock->link, &g_inactive_locks);
44175 + wake_up(&g_wait_queue);
44176 + if(had_full_wake_locks && list_empty(&g_active_full_wake_locks)) {
44177 + printk("android_unlock_suspend: released at %lld\n", ktime_to_ns(ktime_get()));
44178 + if(g_user_suspend_state == USER_NOTIFICATION) {
44179 + printk("android sleep state %d->%d at %lld\n", g_user_suspend_state, USER_SLEEP, ktime_to_ns(ktime_get()));
44180 + g_user_suspend_state = USER_SLEEP;
44181 + queue_work(g_suspend_work_queue, &g_suspend_work);
44182 + }
44183 + }
44184 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44185 +}
44186 +
44187 +static void android_power_wakeup_locked(int notification, ktime_t time)
44188 +{
44189 + int new_state = (notification == 0) ? USER_AWAKE : USER_NOTIFICATION;
44190 +
44191 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_USER_STATE) {
44192 + struct timespec ts;
44193 + struct rtc_time tm;
44194 + getnstimeofday(&ts);
44195 + rtc_time_to_tm(ts.tv_sec, &tm);
44196 + printk(KERN_INFO "android_power: wakeup (%d->%d) at %lld "
44197 + "(%d-%02d-%02d %02d:%02d:%02d.%09lu UTC)\n",
44198 + g_user_suspend_state, new_state, ktime_to_ns(time),
44199 + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
44200 + tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
44201 + }
44202 +
44203 + if(new_state >= g_user_suspend_state) {
44204 + return;
44205 + }
44206 + g_user_suspend_state = new_state;
44207 + g_current_event_num++;
44208 + wake_up(&g_wait_queue);
44209 +}
44210 +
44211 +static void android_power_wakeup(void)
44212 +{
44213 + unsigned long irqflags;
44214 +
44215 + ktime_t ktime_now;
44216 +
44217 + spin_lock_irqsave(&g_list_lock, irqflags);
44218 + ktime_now = ktime_get();
44219 + android_power_wakeup_locked(0, ktime_now);
44220 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44221 +}
44222 +
44223 +static void android_power_request_sleep(void)
44224 +{
44225 + unsigned long irqflags;
44226 + int already_suspended;
44227 + android_suspend_lock_t *lock, *next_lock;
44228 +
44229 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_USER_STATE) {
44230 + ktime_t ktime_now;
44231 + struct timespec ts;
44232 + struct rtc_time tm;
44233 + ktime_now = ktime_get();
44234 + getnstimeofday(&ts);
44235 + rtc_time_to_tm(ts.tv_sec, &tm);
44236 + printk(KERN_INFO "android_power: sleep (%d->%d) at %lld "
44237 + "(%d-%02d-%02d %02d:%02d:%02d.%09lu UTC)\n",
44238 + g_user_suspend_state, USER_SLEEP, ktime_to_ns(ktime_now),
44239 + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
44240 + tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
44241 + }
44242 +
44243 + spin_lock_irqsave(&g_list_lock, irqflags);
44244 + already_suspended = g_user_suspend_state == USER_SLEEP;
44245 + if(!already_suspended) {
44246 + g_user_suspend_state = USER_SLEEP;
44247 + }
44248 +
44249 + list_for_each_entry_safe(lock, next_lock, &g_active_full_wake_locks, link) {
44250 +#ifdef CONFIG_ANDROID_POWER_STAT
44251 + android_unlock_suspend_stat_locked(lock);
44252 +#endif
44253 + list_del(&lock->link);
44254 + list_add(&lock->link, &g_inactive_locks);
44255 + printk("android_power_suspend: aborted full wake lock %s\n", lock->name);
44256 + }
44257 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44258 + queue_work(g_suspend_work_queue, &g_suspend_work);
44259 +}
44260 +
44261 +void android_register_early_suspend(android_early_suspend_t *handler)
44262 +{
44263 + struct list_head *pos;
44264 +
44265 + mutex_lock(&g_early_suspend_lock);
44266 + list_for_each(pos, &g_early_suspend_handlers) {
44267 + android_early_suspend_t *e = list_entry(pos, android_early_suspend_t, link);
44268 + if(e->level > handler->level)
44269 + break;
44270 + }
44271 + list_add_tail(&handler->link, pos);
44272 + mutex_unlock(&g_early_suspend_lock);
44273 +}
44274 +
44275 +void android_unregister_early_suspend(android_early_suspend_t *handler)
44276 +{
44277 + mutex_lock(&g_early_suspend_lock);
44278 + list_del(&handler->link);
44279 + mutex_unlock(&g_early_suspend_lock);
44280 +}
44281 +
44282 +#ifdef CONFIG_FRAMEBUFFER_CONSOLE
44283 +static int orig_fgconsole;
44284 +static void console_early_suspend(android_early_suspend_t *h)
44285 +{
44286 + acquire_console_sem();
44287 + orig_fgconsole = fg_console;
44288 + if (vc_allocate(ANDROID_SUSPEND_CONSOLE))
44289 + goto err;
44290 + if (set_console(ANDROID_SUSPEND_CONSOLE))
44291 + goto err;
44292 + release_console_sem();
44293 +
44294 + if (vt_waitactive(ANDROID_SUSPEND_CONSOLE))
44295 + pr_warning("console_early_suspend: Can't switch VCs.\n");
44296 + return;
44297 +err:
44298 + pr_warning("console_early_suspend: Can't set console\n");
44299 + release_console_sem();
44300 +}
44301 +
44302 +static void console_late_resume(android_early_suspend_t *h)
44303 +{
44304 + int ret;
44305 + acquire_console_sem();
44306 + ret = set_console(orig_fgconsole);
44307 + release_console_sem();
44308 + if (ret) {
44309 + pr_warning("console_late_resume: Can't set console.\n");
44310 + return;
44311 + }
44312 +
44313 + if (vt_waitactive(orig_fgconsole))
44314 + pr_warning("console_late_resume: Can't switch VCs.\n");
44315 +}
44316 +
44317 +static android_early_suspend_t console_early_suspend_desc = {
44318 + .level = ANDROID_EARLY_SUSPEND_LEVEL_CONSOLE_SWITCH,
44319 + .suspend = console_early_suspend,
44320 + .resume = console_late_resume,
44321 +};
44322 +#else
44323 +/* tell userspace to stop drawing, wait for it to stop */
44324 +static void stop_drawing_early_suspend(android_early_suspend_t *h)
44325 +{
44326 + int ret;
44327 + unsigned long irq_flags;
44328 +
44329 + spin_lock_irqsave(&fb_state_lock, irq_flags);
44330 + fb_state = ANDROID_REQUEST_STOP_DRAWING;
44331 + spin_unlock_irqrestore(&fb_state_lock, irq_flags);
44332 +
44333 + wake_up_all(&fb_state_wq);
44334 + ret = wait_event_timeout(fb_state_wq,
44335 + fb_state == ANDROID_STOPPED_DRAWING,
44336 + HZ);
44337 + if (unlikely(fb_state != ANDROID_STOPPED_DRAWING))
44338 + printk(KERN_WARNING "android_power: timeout waiting for "
44339 + "userspace to stop drawing\n");
44340 +}
44341 +
44342 +/* tell userspace to start drawing */
44343 +static void start_drawing_late_resume(android_early_suspend_t *h)
44344 +{
44345 + unsigned long irq_flags;
44346 +
44347 + spin_lock_irqsave(&fb_state_lock, irq_flags);
44348 + fb_state = ANDROID_DRAWING_OK;
44349 + spin_unlock_irqrestore(&fb_state_lock, irq_flags);
44350 + wake_up(&fb_state_wq);
44351 +}
44352 +
44353 +static android_early_suspend_t stop_drawing_early_suspend_desc = {
44354 + .level = ANDROID_EARLY_SUSPEND_LEVEL_CONSOLE_SWITCH,
44355 + .suspend = stop_drawing_early_suspend,
44356 + .resume = start_drawing_late_resume,
44357 +};
44358 +#endif
44359 +
44360 +#if ANDROID_POWER_TEST_EARLY_SUSPEND
44361 +
44362 +typedef struct
44363 +{
44364 + android_early_suspend_t h;
44365 + const char *string;
44366 +} early_suspend_test_t;
44367 +
44368 +static void early_suspend_test(android_early_suspend_t *h)
44369 +{
44370 + early_suspend_test_t *est = container_of(h, early_suspend_test_t, h);
44371 + printk("early suspend %s (l %d)\n", est->string, h->level);
44372 +}
44373 +
44374 +static void late_resume_test(android_early_suspend_t *h)
44375 +{
44376 + early_suspend_test_t *est = container_of(h, early_suspend_test_t, h);
44377 + printk("late resume %s (l %d)\n", est->string, h->level);
44378 +}
44379 +
44380 +#define EARLY_SUSPEND_TEST_ENTRY(ilevel, istring) \
44381 +{ \
44382 + .h = { \
44383 + .level = ilevel, \
44384 + .suspend = early_suspend_test, \
44385 + .resume = late_resume_test \
44386 + }, \
44387 + .string = istring \
44388 +}
44389 +static early_suspend_test_t early_suspend_tests[] = {
44390 + EARLY_SUSPEND_TEST_ENTRY(10, "1"),
44391 + EARLY_SUSPEND_TEST_ENTRY(5, "2"),
44392 + EARLY_SUSPEND_TEST_ENTRY(10, "3"),
44393 + EARLY_SUSPEND_TEST_ENTRY(15, "4"),
44394 + EARLY_SUSPEND_TEST_ENTRY(8, "5")
44395 +};
44396 +
44397 +#endif
44398 +
44399 +static int get_wait_timeout(int print_locks, int state, struct list_head *list_head)
44400 +{
44401 + unsigned long irqflags;
44402 + android_suspend_lock_t *lock, *next;
44403 + int max_timeout = 0;
44404 +
44405 + spin_lock_irqsave(&g_list_lock, irqflags);
44406 + list_for_each_entry_safe(lock, next, list_head, link) {
44407 + if(lock->flags & ANDROID_SUSPEND_LOCK_AUTO_EXPIRE) {
44408 + int timeout = lock->expires - (int)jiffies;
44409 + if(timeout <= 0) {
44410 + lock->flags &= ~ANDROID_SUSPEND_LOCK_AUTO_EXPIRE;
44411 +#ifdef CONFIG_ANDROID_POWER_STAT
44412 + lock->stat.expire_count++;
44413 + android_unlock_suspend_stat_locked(lock);
44414 +#endif
44415 + list_del(&lock->link);
44416 + list_add(&lock->link, &g_inactive_locks);
44417 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_WAKE_LOCK)
44418 + printk("expired wake lock %s\n", lock->name);
44419 + }
44420 + else {
44421 + if(timeout > max_timeout)
44422 + max_timeout = timeout;
44423 + if(print_locks)
44424 + printk("active wake lock %s, time left %d\n", lock->name, timeout);
44425 + }
44426 + }
44427 + else {
44428 + if(print_locks)
44429 + printk("active wake lock %s\n", lock->name);
44430 + }
44431 + }
44432 + if(g_user_suspend_state != state || list_empty(list_head))
44433 + max_timeout = -1;
44434 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44435 + return max_timeout;
44436 +}
44437 +
44438 +#ifdef CONFIG_FRAMEBUFFER_CONSOLE
44439 +static int android_power_class_suspend(struct sys_device *sdev, pm_message_t state)
44440 +{
44441 + int rv = 0;
44442 + unsigned long irqflags;
44443 +
44444 + printk("android_power_suspend: enter\n");
44445 + spin_lock_irqsave(&g_list_lock, irqflags);
44446 + if(!list_empty(&g_active_partial_wake_locks)) {
44447 + printk("android_power_suspend: abort for partial wakeup\n");
44448 + rv = -EAGAIN;
44449 + }
44450 + if(g_user_suspend_state != USER_SLEEP) {
44451 + printk("android_power_suspend: abort for full wakeup\n");
44452 + rv = -EAGAIN;
44453 + }
44454 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44455 + return rv;
44456 +}
44457 +
44458 +static int android_power_device_suspend(struct sys_device *sdev, pm_message_t state)
44459 +{
44460 + int rv = 0;
44461 + unsigned long irqflags;
44462 +
44463 + printk("android_power_device_suspend: enter\n");
44464 + spin_lock_irqsave(&g_list_lock, irqflags);
44465 + if(!list_empty(&g_active_partial_wake_locks)) {
44466 + printk("android_power_device_suspend: abort for partial wakeup\n");
44467 + rv = -EAGAIN;
44468 + }
44469 + if(g_user_suspend_state != USER_SLEEP) {
44470 + printk("android_power_device_suspend: abort for full wakeup\n");
44471 + rv = -EAGAIN;
44472 + }
44473 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44474 + return rv;
44475 +}
44476 +#endif
44477 +
44478 +int android_power_is_driver_suspended(void)
44479 +{
44480 + return (get_wait_timeout(0, USER_SLEEP, &g_active_partial_wake_locks) < 0) && (g_user_suspend_state == USER_SLEEP);
44481 +}
44482 +
44483 +int android_power_is_low_power_idle_ok(void)
44484 +{
44485 + get_wait_timeout(0, USER_SLEEP, &g_active_idle_wake_locks);
44486 + return list_empty(&g_active_idle_wake_locks);
44487 +}
44488 +
44489 +static void android_power_suspend(struct work_struct *work)
44490 +{
44491 + int entry_event_num;
44492 + int ret;
44493 + int wait = 0;
44494 + android_early_suspend_t *pos;
44495 + int print_locks = 0;
44496 + unsigned long irqflags;
44497 +
44498 + while(g_user_suspend_state != USER_AWAKE) {
44499 + while(g_user_suspend_state == USER_NOTIFICATION) {
44500 + wait = get_wait_timeout(print_locks, USER_NOTIFICATION, &g_active_full_wake_locks);
44501 + if(wait < 0)
44502 + break;
44503 + if(wait)
44504 + wait_event_interruptible_timeout(g_wait_queue, get_wait_timeout(0, USER_NOTIFICATION, &g_active_full_wake_locks) != wait, wait);
44505 + }
44506 + spin_lock_irqsave(&g_list_lock, irqflags);
44507 + if(g_user_suspend_state == USER_NOTIFICATION && list_empty(&g_active_full_wake_locks)) {
44508 + printk("android sleep state %d->%d at %lld\n", g_user_suspend_state, USER_SLEEP, ktime_to_ns(ktime_get()));
44509 + g_user_suspend_state = USER_SLEEP;
44510 + }
44511 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44512 + wait = 0;
44513 + if(g_user_suspend_state == USER_AWAKE) {
44514 + printk("android_power_suspend: suspend aborted\n");
44515 + return;
44516 + }
44517 +
44518 + mutex_lock(&g_early_suspend_lock);
44519 + //printk("android_power_suspend: call early suspend handlers\n");
44520 + list_for_each_entry(pos, &g_early_suspend_handlers, link) {
44521 + if(pos->suspend != NULL)
44522 + pos->suspend(pos);
44523 + }
44524 + //printk("android_power_suspend: call early suspend handlers\n");
44525 +
44526 + //printk("android_power_suspend: enter\n");
44527 +
44528 + sys_sync();
44529 +
44530 + while(g_user_suspend_state == USER_SLEEP) {
44531 + //printk("android_power_suspend: enter wait (%d)\n", wait);
44532 + if(wait) {
44533 + wait_event_interruptible_timeout(g_wait_queue, g_user_suspend_state != USER_SLEEP, wait);
44534 + wait = 0;
44535 + }
44536 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_SUSPEND)
44537 + print_locks = 1;
44538 + while(1) {
44539 + wait = get_wait_timeout(print_locks, USER_SLEEP, &g_active_partial_wake_locks);
44540 + print_locks = 0;
44541 + if(wait < 0)
44542 + break;
44543 + if(wait)
44544 + wait_event_interruptible_timeout(g_wait_queue, get_wait_timeout(0, USER_SLEEP, &g_active_partial_wake_locks) != wait, wait);
44545 + else
44546 + wait_event_interruptible(g_wait_queue, get_wait_timeout(0, USER_SLEEP, &g_active_partial_wake_locks) != wait);
44547 + }
44548 + wait = 0;
44549 + //printk("android_power_suspend: exit wait\n");
44550 + entry_event_num = g_current_event_num;
44551 + if(g_user_suspend_state != USER_SLEEP)
44552 + break;
44553 + sys_sync();
44554 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_SUSPEND)
44555 + printk(KERN_INFO "android_power_suspend: enter suspend\n");
44556 + ret = pm_suspend(PM_SUSPEND_MEM);
44557 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_EXIT_SUSPEND) {
44558 + struct timespec ts;
44559 + struct rtc_time tm;
44560 + getnstimeofday(&ts);
44561 + rtc_time_to_tm(ts.tv_sec, &tm);
44562 + printk("android_power_suspend: exit suspend, ret = %d "
44563 + "(%d-%02d-%02d %02d:%02d:%02d.%09lu UTC)\n", ret,
44564 + tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
44565 + tm.tm_hour, tm.tm_min, tm.tm_sec, ts.tv_nsec);
44566 + }
44567 + if(g_current_event_num == entry_event_num) {
44568 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_SUSPEND)
44569 + printk(KERN_INFO "android_power_suspend: pm_suspend returned with no event\n");
44570 + wait = HZ / 2;
44571 +#ifdef CONFIG_ANDROID_POWER_STAT
44572 + if(g_no_wake_locks.stat.count == 0) {
44573 + g_no_wake_locks.name = "unknown_wakeups";
44574 + android_init_suspend_lock(&g_no_wake_locks);
44575 + }
44576 + g_no_wake_locks.stat.count++;
44577 + g_no_wake_locks.stat.total_time = ktime_add(
44578 + g_no_wake_locks.stat.total_time,
44579 + ktime_set(0, 500 * NSEC_PER_MSEC));
44580 + g_no_wake_locks.stat.max_time =
44581 + ktime_set(0, 500 * NSEC_PER_MSEC);
44582 +#endif
44583 + }
44584 + }
44585 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_USER_STATE)
44586 + printk("android_power_suspend: done\n");
44587 + //printk("android_power_suspend: call late resume handlers\n");
44588 + list_for_each_entry_reverse(pos, &g_early_suspend_handlers, link) {
44589 + if(pos->resume != NULL)
44590 + pos->resume(pos);
44591 + }
44592 + //printk("android_power_suspend: call late resume handlers\n");
44593 + mutex_unlock(&g_early_suspend_lock);
44594 + }
44595 +}
44596 +
44597 +#if 0
44598 +struct sysdev_class android_power_sysclass = {
44599 + set_kset_name("android_power"),
44600 + .suspend = android_power_class_suspend
44601 +};
44602 +static struct sysdev_class *g_android_power_sysclass = NULL;
44603 +
44604 +static struct {
44605 + struct sys_device sysdev;
44606 +// omap_csmi_gsm_image_info_t *pdata;
44607 +} android_power_device = {
44608 + .sysdev = {
44609 + .id = 0,
44610 + .cls = &android_power_sysclass,
44611 +// .suspend = android_power_device_suspend
44612 + },
44613 +// .pdata = &g_gsm_image_info
44614 +};
44615 +
44616 +struct sysdev_class *android_power_get_sysclass(void)
44617 +{
44618 + return g_android_power_sysclass;
44619 +}
44620 +#endif
44621 +
44622 +static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr, char * buf)
44623 +{
44624 + char * s = buf;
44625 + unsigned long irqflags;
44626 +
44627 + spin_lock_irqsave(&g_list_lock, irqflags);
44628 + s += sprintf(s, "%d-%d-%d\n", g_user_suspend_state, list_empty(&g_active_full_wake_locks), list_empty(&g_active_partial_wake_locks));
44629 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44630 + return (s - buf);
44631 +}
44632 +
44633 +static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n)
44634 +{
44635 + if(n >= strlen("standby") &&
44636 + strncmp(buf, "standby", strlen("standby")) == 0) {
44637 + android_power_request_sleep();
44638 + wait_event_interruptible(g_wait_queue, g_user_suspend_state == USER_AWAKE);
44639 + return n;
44640 + }
44641 + if(n >= strlen("wake") &&
44642 + strncmp(buf, "wake", strlen("wake")) == 0) {
44643 + android_power_wakeup();
44644 + return n;
44645 + }
44646 + printk("android_power state_store: invalid argument\n");
44647 + return -EINVAL;
44648 +}
44649 +
44650 +static ssize_t request_state_show(struct kobject *kobj, struct kobj_attribute *attr, char * buf)
44651 +{
44652 + char * s = buf;
44653 + unsigned long irqflags;
44654 +
44655 + spin_lock_irqsave(&g_list_lock, irqflags);
44656 + if(g_user_suspend_state == USER_AWAKE)
44657 + s += sprintf(s, "wake\n");
44658 + else if(g_user_suspend_state == USER_NOTIFICATION)
44659 + s += sprintf(s, "standby (w/full wake lock)\n");
44660 + else
44661 + s += sprintf(s, "standby\n");
44662 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44663 + return (s - buf);
44664 +}
44665 +
44666 +static ssize_t request_state_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n)
44667 +{
44668 + if(n >= strlen("standby") &&
44669 + strncmp(buf, "standby", strlen("standby")) == 0) {
44670 + android_power_request_sleep();
44671 + return n;
44672 + }
44673 + if(n >= strlen("wake") &&
44674 + strncmp(buf, "wake", strlen("wake")) == 0) {
44675 + android_power_wakeup();
44676 + return n;
44677 + }
44678 + printk("android_power state_store: invalid argument\n");
44679 + return -EINVAL;
44680 +}
44681 +
44682 +
44683 +static int lookup_wake_lock_name(const char *buf, size_t n, int allocate, int *timeout)
44684 +{
44685 + int i;
44686 + int free_index = -1;
44687 + int inactive_index = -1;
44688 + int expires_index = -1;
44689 + int expires_time = INT_MAX;
44690 + char *tmp_buf[64];
44691 + char name[32];
44692 + u64 nanoseconds;
44693 + int num_arg;
44694 +
44695 + if(n <= 0)
44696 + return -EINVAL;
44697 + if(n >= sizeof(tmp_buf))
44698 + return -EOVERFLOW;
44699 + if(n == sizeof(tmp_buf) - 1 && buf[n - 1] != '\0')
44700 + return -EOVERFLOW;
44701 +
44702 + memcpy(tmp_buf, buf, n);
44703 + if(tmp_buf[n - 1] != '\0')
44704 + tmp_buf[n] = '\0';
44705 +
44706 + num_arg = sscanf(buf, "%31s %llu", name, &nanoseconds);
44707 + if(num_arg < 1)
44708 + return -EINVAL;
44709 +
44710 + if(strlen(name) >= sizeof(g_user_wake_locks[i].name_buffer))
44711 + return -EOVERFLOW;
44712 +
44713 + if(timeout != NULL) {
44714 + if(num_arg > 1) {
44715 + do_div(nanoseconds, (NSEC_PER_SEC / HZ));
44716 + if(nanoseconds <= 0)
44717 + nanoseconds = 1;
44718 + *timeout = nanoseconds;
44719 + }
44720 + else
44721 + *timeout = 0;
44722 + }
44723 +
44724 + for(i = 0; i < g_max_user_lockouts; i++) {
44725 + if(strcmp(g_user_wake_locks[i].name_buffer, name) == 0)
44726 + return i;
44727 + if(g_user_wake_locks[i].name_buffer[0] == '\0')
44728 + free_index = i;
44729 + else if(g_user_wake_locks[i].state == USER_WAKE_LOCK_INACTIVE)
44730 + inactive_index = i;
44731 + else if(g_user_wake_locks[i].suspend_lock.expires < expires_time)
44732 + expires_index = i;
44733 + }
44734 + if(allocate) {
44735 + if(free_index >= 0)
44736 + i = free_index;
44737 + else if(inactive_index >= 0)
44738 + i = inactive_index;
44739 + else if(expires_index >= 0) {
44740 + i = expires_index;
44741 + printk("lookup_wake_lock_name: overwriting expired lock, %s\n", g_user_wake_locks[i].name_buffer);
44742 + }
44743 + else {
44744 + i = 0;
44745 + printk("lookup_wake_lock_name: overwriting active lock, %s\n", g_user_wake_locks[i].name_buffer);
44746 + }
44747 + strcpy(g_user_wake_locks[i].name_buffer, name);
44748 + return i;
44749 + }
44750 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_USER_WAKE_LOCK)
44751 + printk(KERN_INFO "lookup_wake_lock_name: %s not found\n", name);
44752 + return -EINVAL;
44753 +}
44754 +
44755 +static ssize_t acquire_full_wake_lock_show(struct kobject *kobj, struct kobj_attribute *attr, char * buf)
44756 +{
44757 + int i;
44758 + char * s = buf;
44759 + unsigned long irqflags;
44760 +
44761 + spin_lock_irqsave(&g_list_lock, irqflags);
44762 + for(i = 0; i < g_max_user_lockouts; i++) {
44763 + if(g_user_wake_locks[i].name_buffer[0] != '\0' && g_user_wake_locks[i].state == USER_WAKE_LOCK_FULL)
44764 + s += sprintf(s, "%s ", g_user_wake_locks[i].name_buffer);
44765 + }
44766 + s += sprintf(s, "\n");
44767 +
44768 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44769 + return (s - buf);
44770 +}
44771 +
44772 +static ssize_t acquire_full_wake_lock_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n)
44773 +{
44774 + int i;
44775 + unsigned long irqflags;
44776 + int timeout;
44777 +
44778 + spin_lock_irqsave(&g_list_lock, irqflags);
44779 + i = lookup_wake_lock_name(buf, n, 1, &timeout);
44780 + if(i >= 0)
44781 + g_user_wake_locks[i].state = USER_WAKE_LOCK_FULL;
44782 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44783 + if(i < 0)
44784 + return i;
44785 +
44786 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_USER_WAKE_LOCK)
44787 + printk(KERN_INFO "acquire_full_wake_lock_store: %s, size %d\n",
44788 + g_user_wake_locks[i].name_buffer, n);
44789 +
44790 + //android_lock_partial_suspend_auto_expire(&g_user_wake_locks[i].suspend_lock, ktime_to_timespec(g_auto_off_timeout).tv_sec * HZ);
44791 + if(timeout == 0)
44792 + timeout = INT_MAX;
44793 + android_lock_partial_suspend_auto_expire(&g_user_wake_locks[i].suspend_lock, timeout);
44794 +
44795 + return n;
44796 +}
44797 +
44798 +static ssize_t acquire_partial_wake_lock_show(struct kobject *kobj, struct kobj_attribute *attr, char * buf)
44799 +{
44800 + int i;
44801 + char * s = buf;
44802 + unsigned long irqflags;
44803 +
44804 + spin_lock_irqsave(&g_list_lock, irqflags);
44805 + for(i = 0; i < g_max_user_lockouts; i++) {
44806 + if(g_user_wake_locks[i].name_buffer[0] != '\0' && g_user_wake_locks[i].state == USER_WAKE_LOCK_PARTIAL)
44807 + s += sprintf(s, "%s ", g_user_wake_locks[i].name_buffer);
44808 + }
44809 + s += sprintf(s, "\n");
44810 +
44811 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44812 + return (s - buf);
44813 +}
44814 +
44815 +static ssize_t acquire_partial_wake_lock_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n)
44816 +{
44817 + int i;
44818 + unsigned long irqflags;
44819 + int timeout;
44820 +
44821 + spin_lock_irqsave(&g_list_lock, irqflags);
44822 + i = lookup_wake_lock_name(buf, n, 1, &timeout);
44823 + if(i >= 0)
44824 + g_user_wake_locks[i].state = USER_WAKE_LOCK_PARTIAL;
44825 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44826 + if(i < 0)
44827 + return 0;
44828 +
44829 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_USER_WAKE_LOCK)
44830 + printk(KERN_INFO "acquire_partial_wake_lock_store: %s, "
44831 + "size %d\n", g_user_wake_locks[i].name_buffer, n);
44832 +
44833 + if(timeout)
44834 + android_lock_suspend_auto_expire(&g_user_wake_locks[i].suspend_lock, timeout);
44835 + else
44836 + android_lock_suspend(&g_user_wake_locks[i].suspend_lock);
44837 +
44838 + return n;
44839 +}
44840 +
44841 +
44842 +static ssize_t release_wake_lock_show(struct kobject *kobj, struct kobj_attribute *attr, char * buf)
44843 +{
44844 + int i;
44845 + char * s = buf;
44846 + unsigned long irqflags;
44847 +
44848 + spin_lock_irqsave(&g_list_lock, irqflags);
44849 + for(i = 0; i < g_max_user_lockouts; i++) {
44850 + if(g_user_wake_locks[i].name_buffer[0] != '\0' && g_user_wake_locks[i].state == USER_WAKE_LOCK_INACTIVE)
44851 + s += sprintf(s, "%s ", g_user_wake_locks[i].name_buffer);
44852 + }
44853 + s += sprintf(s, "\n");
44854 +
44855 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44856 + return (s - buf);
44857 +}
44858 +
44859 +static ssize_t release_wake_lock_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n)
44860 +{
44861 + int i;
44862 + unsigned long irqflags;
44863 +
44864 + spin_lock_irqsave(&g_list_lock, irqflags);
44865 + i = lookup_wake_lock_name(buf, n, 1, NULL);
44866 + if(i >= 0) {
44867 + g_user_wake_locks[i].state = USER_WAKE_LOCK_INACTIVE;
44868 + }
44869 + spin_unlock_irqrestore(&g_list_lock, irqflags);
44870 +
44871 + if(i < 0)
44872 + return i;
44873 +
44874 + if (android_power_debug_mask & ANDROID_POWER_DEBUG_USER_WAKE_LOCK)
44875 + printk(KERN_INFO "release_wake_lock_store: %s, size %d\n",
44876 + g_user_wake_locks[i].name_buffer, n);
44877 +
44878 + android_unlock_suspend(&g_user_wake_locks[i].suspend_lock);
44879 + return n;
44880 +}
44881 +
44882 +
44883 +#ifndef CONFIG_FRAMEBUFFER_CONSOLE
44884 +static ssize_t wait_for_fb_sleep_show(struct kobject *kobj,
44885 + struct kobj_attribute *attr, char *buf)
44886 +{
44887 + char * s = buf;
44888 + int ret;
44889 +
44890 + ret = wait_event_interruptible(fb_state_wq,
44891 + fb_state != ANDROID_DRAWING_OK);
44892 + if (ret && fb_state == ANDROID_DRAWING_OK)
44893 + return ret;
44894 + else
44895 + s += sprintf(buf, "sleeping");
44896 + return (s - buf);
44897 +}
44898 +
44899 +static ssize_t wait_for_fb_wake_show(struct kobject *kobj,
44900 + struct kobj_attribute *attr, char *buf)
44901 +{
44902 + char * s = buf;
44903 + int ret;
44904 + unsigned long irq_flags;
44905 +
44906 + spin_lock_irqsave(&fb_state_lock, irq_flags);
44907 + if (fb_state == ANDROID_REQUEST_STOP_DRAWING) {
44908 + fb_state = ANDROID_STOPPED_DRAWING;
44909 + wake_up(&fb_state_wq);
44910 + }
44911 + spin_unlock_irqrestore(&fb_state_lock, irq_flags);
44912 +
44913 + ret = wait_event_interruptible(fb_state_wq,
44914 + fb_state == ANDROID_DRAWING_OK);
44915 + if (ret && fb_state != ANDROID_DRAWING_OK)
44916 + return ret;
44917 + else
44918 + s += sprintf(buf, "awake");
44919 +
44920 + return (s - buf);
44921 +}
44922 +#endif
44923 +
44924 +#define android_power_attr(_name) \
44925 +static struct kobj_attribute _name##_attr = { \
44926 + .attr = { \
44927 + .name = __stringify(_name), \
44928 + .mode = 0664, \
44929 + }, \
44930 + .show = _name##_show, \
44931 + .store = _name##_store, \
44932 +}
44933 +
44934 +#define android_power_ro_attr(_name) \
44935 +static struct kobj_attribute _name##_attr = { \
44936 + .attr = { \
44937 + .name = __stringify(_name), \
44938 + .mode = 0444, \
44939 + }, \
44940 + .show = _name##_show, \
44941 + .store = NULL, \
44942 +}
44943 +
44944 +android_power_attr(state);
44945 +android_power_attr(request_state);
44946 +android_power_attr(acquire_full_wake_lock);
44947 +android_power_attr(acquire_partial_wake_lock);
44948 +android_power_attr(release_wake_lock);
44949 +#ifndef CONFIG_FRAMEBUFFER_CONSOLE
44950 +android_power_ro_attr(wait_for_fb_sleep);
44951 +android_power_ro_attr(wait_for_fb_wake);
44952 +#endif
44953 +
44954 +static struct attribute * g[] = {
44955 + &state_attr.attr,
44956 + &request_state_attr.attr,
44957 + &acquire_full_wake_lock_attr.attr,
44958 + &acquire_partial_wake_lock_attr.attr,
44959 + &release_wake_lock_attr.attr,
44960 +#ifndef CONFIG_FRAMEBUFFER_CONSOLE
44961 + &wait_for_fb_sleep_attr.attr,
44962 + &wait_for_fb_wake_attr.attr,
44963 +#endif
44964 + NULL,
44965 +};
44966 +
44967 +static struct attribute_group attr_group = {
44968 + .attrs = g,
44969 +};
44970 +
44971 +#if 0
44972 +// test code when there is no platform suspend
44973 +
44974 +static android_suspend_lock_t test_pm_ops_suspend_lock = {
44975 + .name = "test_pm_ops"
44976 +};
44977 +
44978 +int test_pm_op_enter(suspend_state_t state)
44979 +{
44980 + printk("test_pm_op_enter reached\n");
44981 + android_lock_suspend(&test_pm_ops_suspend_lock);
44982 + printk("test_pm_op_enter returned\n");
44983 + return 0;
44984 +}
44985 +
44986 +void test_pm_ops_late_resume_handler(android_early_suspend_t *h)
44987 +{
44988 + printk("test_pm_ops_late_resume_handler reached\n");
44989 + android_unlock_suspend(&test_pm_ops_suspend_lock);
44990 + printk("test_pm_ops_late_resume_handler returned\n");
44991 +}
44992 +
44993 +static struct pm_ops test_pm_ops = {
44994 + .enter = test_pm_op_enter
44995 +};
44996 +
44997 +static android_early_suspend_t test_pm_ops_early_suspend_handler = {
44998 + .resume = test_pm_ops_late_resume_handler
44999 +};
45000 +#endif
45001 +
45002 +static int __init android_power_init(void)
45003 +{
45004 + int ret;
45005 + int i;
45006 +
45007 +#if 0
45008 + if(pm_ops == NULL) {
45009 + printk("android_power_init no pm_ops, installing test code\n");
45010 + pm_set_ops(&test_pm_ops);
45011 + android_init_suspend_lock(&test_pm_ops_suspend_lock);
45012 + android_register_early_suspend(&test_pm_ops_early_suspend_handler);
45013 + }
45014 +#endif
45015 +
45016 +#ifdef CONFIG_ANDROID_POWER_STAT
45017 + g_deleted_wake_locks.stat.count = 0;
45018 +#endif
45019 + init_waitqueue_head(&g_wait_queue);
45020 +#ifndef CONFIG_FRAMEBUFFER_CONSOLE
45021 + init_waitqueue_head(&fb_state_wq);
45022 + fb_state = ANDROID_DRAWING_OK;
45023 +#endif
45024 +
45025 + g_user_wake_locks = kzalloc(sizeof(*g_user_wake_locks) * g_max_user_lockouts, GFP_KERNEL);
45026 + if(g_user_wake_locks == NULL) {
45027 + ret = -ENOMEM;
45028 + goto err1;
45029 + }
45030 + for(i = 0; i < g_max_user_lockouts; i++) {
45031 + g_user_wake_locks[i].suspend_lock.name = g_user_wake_locks[i].name_buffer;
45032 + android_init_suspend_lock(&g_user_wake_locks[i].suspend_lock);
45033 + }
45034 +
45035 + g_suspend_work_queue = create_workqueue("suspend");
45036 + if(g_suspend_work_queue == NULL) {
45037 + ret = -ENOMEM;
45038 + goto err2;
45039 + }
45040 +
45041 + android_power_kobj = kobject_create_and_add("android_power", NULL);
45042 + if (android_power_kobj == NULL) {
45043 + printk("android_power_init: subsystem_register failed\n");
45044 + ret = -ENOMEM;
45045 + goto err3;
45046 + }
45047 + ret = sysfs_create_group(android_power_kobj, &attr_group);
45048 + if(ret) {
45049 + printk("android_power_init: sysfs_create_group failed\n");
45050 + goto err4;
45051 + }
45052 +#ifdef CONFIG_ANDROID_POWER_STAT
45053 + create_proc_read_entry("wakelocks", S_IRUGO, NULL, wakelocks_read_proc, NULL);
45054 +#endif
45055 +
45056 +#if ANDROID_POWER_TEST_EARLY_SUSPEND
45057 + {
45058 + int i;
45059 + for(i = 0; i < sizeof(early_suspend_tests) / sizeof(early_suspend_tests[0]); i++)
45060 + android_register_early_suspend(&early_suspend_tests[i].h);
45061 + }
45062 +#endif
45063 +#ifdef CONFIG_FRAMEBUFFER_CONSOLE
45064 + android_register_early_suspend(&console_early_suspend_desc);
45065 +#else
45066 + android_register_early_suspend(&stop_drawing_early_suspend_desc);
45067 +#endif
45068 +
45069 +#if 0
45070 + ret = sysdev_class_register(&android_power_sysclass);
45071 + if(ret) {
45072 + printk("android_power_init: sysdev_class_register failed\n");
45073 + goto err1;
45074 + }
45075 + ret = sysdev_register(&android_power_device.sysdev);
45076 + if(ret < 0)
45077 + goto err2;
45078 +
45079 + g_android_power_sysclass = &android_power_sysclass;
45080 +#endif
45081 + return 0;
45082 +
45083 +//err2:
45084 +// sysdev_class_unregister(&android_power_sysclass);
45085 +err4:
45086 + kobject_del(android_power_kobj);
45087 +err3:
45088 + destroy_workqueue(g_suspend_work_queue);
45089 +err2:
45090 + for(i = 0; i < g_max_user_lockouts; i++) {
45091 + android_uninit_suspend_lock(&g_user_wake_locks[i].suspend_lock);
45092 + }
45093 + kfree(g_user_wake_locks);
45094 +err1:
45095 + return ret;
45096 +}
45097 +
45098 +static void __exit android_power_exit(void)
45099 +{
45100 + int i;
45101 +// g_android_power_sysclass = NULL;
45102 +// sysdev_unregister(&android_power_device.sysdev);
45103 +// sysdev_class_unregister(&android_power_sysclass);
45104 +#ifdef CONFIG_FRAMEBUFFER_CONSOLE
45105 + android_unregister_early_suspend(&console_early_suspend_desc);
45106 +#else
45107 + android_unregister_early_suspend(&stop_drawing_early_suspend_desc);
45108 +#endif
45109 +#ifdef CONFIG_ANDROID_POWER_STAT
45110 + remove_proc_entry("wakelocks", NULL);
45111 +#endif
45112 + sysfs_remove_group(android_power_kobj, &attr_group);
45113 + kobject_del(android_power_kobj);
45114 + destroy_workqueue(g_suspend_work_queue);
45115 + for(i = 0; i < g_max_user_lockouts; i++) {
45116 + android_uninit_suspend_lock(&g_user_wake_locks[i].suspend_lock);
45117 + }
45118 + kfree(g_user_wake_locks);
45119 +}
45120 +
45121 +core_initcall(android_power_init);
45122 +module_exit(android_power_exit);
45123 +
45124 +//EXPORT_SYMBOL(android_power_get_sysclass);
45125 +EXPORT_SYMBOL(android_init_suspend_lock);
45126 +EXPORT_SYMBOL(android_uninit_suspend_lock);
45127 +EXPORT_SYMBOL(android_lock_suspend);
45128 +EXPORT_SYMBOL(android_lock_suspend_auto_expire);
45129 +EXPORT_SYMBOL(android_unlock_suspend);
45130 +EXPORT_SYMBOL(android_power_wakeup);
45131 +EXPORT_SYMBOL(android_register_early_suspend);
45132 +EXPORT_SYMBOL(android_unregister_early_suspend);
45133 +
45134 +
45135 Index: linux-2.6.28/drivers/android/ram_console.c
45136 ===================================================================
45137 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
45138 +++ linux-2.6.28/drivers/android/ram_console.c 2009-01-02 00:01:56.000000000 +0100
45139 @@ -0,0 +1,395 @@
45140 +/* drivers/android/ram_console.c
45141 + *
45142 + * Copyright (C) 2007-2008 Google, Inc.
45143 + *
45144 + * This software is licensed under the terms of the GNU General Public
45145 + * License version 2, as published by the Free Software Foundation, and
45146 + * may be copied, distributed, and modified under those terms.
45147 + *
45148 + * This program is distributed in the hope that it will be useful,
45149 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
45150 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45151 + * GNU General Public License for more details.
45152 + *
45153 + */
45154 +
45155 +#include <linux/console.h>
45156 +#include <linux/init.h>
45157 +#include <linux/module.h>
45158 +#include <linux/platform_device.h>
45159 +#include <linux/proc_fs.h>
45160 +#include <linux/string.h>
45161 +#include <linux/uaccess.h>
45162 +#include <asm/io.h>
45163 +
45164 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45165 +#include <linux/rslib.h>
45166 +#endif
45167 +
45168 +struct ram_console_buffer {
45169 + uint32_t sig;
45170 + uint32_t start;
45171 + uint32_t size;
45172 + uint8_t data[0];
45173 +};
45174 +
45175 +#define RAM_CONSOLE_SIG (0x43474244) /* DBGC */
45176 +
45177 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT
45178 +static char __initdata
45179 + ram_console_old_log_init_buffer[CONFIG_ANDROID_RAM_CONSOLE_EARLY_SIZE];
45180 +#endif
45181 +static char *ram_console_old_log;
45182 +static size_t ram_console_old_log_size;
45183 +
45184 +static struct ram_console_buffer *ram_console_buffer;
45185 +static size_t ram_console_buffer_size;
45186 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45187 +static char *ram_console_par_buffer;
45188 +static struct rs_control *ram_console_rs_decoder;
45189 +static int ram_console_corrected_bytes;
45190 +static int ram_console_bad_blocks;
45191 +#define ECC_BLOCK_SIZE CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_DATA_SIZE
45192 +#define ECC_SIZE CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_ECC_SIZE
45193 +#define ECC_SYMSIZE CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_SYMBOL_SIZE
45194 +#define ECC_POLY CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION_POLYNOMIAL
45195 +#endif
45196 +
45197 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45198 +static void ram_console_encode_rs8(uint8_t *data, size_t len, uint8_t *ecc)
45199 +{
45200 + int i;
45201 + uint16_t par[ECC_SIZE];
45202 + /* Initialize the parity buffer */
45203 + memset(par, 0, sizeof(par));
45204 + encode_rs8(ram_console_rs_decoder, data, len, par, 0);
45205 + for (i = 0; i < ECC_SIZE; i++)
45206 + ecc[i] = par[i];
45207 +}
45208 +
45209 +static int ram_console_decode_rs8(void *data, size_t len, uint8_t *ecc)
45210 +{
45211 + int i;
45212 + uint16_t par[ECC_SIZE];
45213 + for (i = 0; i < ECC_SIZE; i++)
45214 + par[i] = ecc[i];
45215 + return decode_rs8(ram_console_rs_decoder, data, par, len,
45216 + NULL, 0, NULL, 0, NULL);
45217 +}
45218 +#endif
45219 +
45220 +static void ram_console_update(const char *s, unsigned int count)
45221 +{
45222 + struct ram_console_buffer *buffer = ram_console_buffer;
45223 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45224 + uint8_t *buffer_end = buffer->data + ram_console_buffer_size;
45225 + uint8_t *block;
45226 + uint8_t *par;
45227 + int size = ECC_BLOCK_SIZE;
45228 +#endif
45229 + memcpy(buffer->data + buffer->start, s, count);
45230 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45231 + block = buffer->data + (buffer->start & ~(ECC_BLOCK_SIZE - 1));
45232 + par = ram_console_par_buffer +
45233 + (buffer->start / ECC_BLOCK_SIZE) * ECC_SIZE;
45234 + do {
45235 + if (block + ECC_BLOCK_SIZE > buffer_end)
45236 + size = buffer_end - block;
45237 + ram_console_encode_rs8(block, size, par);
45238 + block += ECC_BLOCK_SIZE;
45239 + par += ECC_SIZE;
45240 + } while (block < buffer->data + buffer->start + count);
45241 +#endif
45242 +}
45243 +
45244 +static void ram_console_update_header(void)
45245 +{
45246 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45247 + struct ram_console_buffer *buffer = ram_console_buffer;
45248 + uint8_t *par;
45249 + par = ram_console_par_buffer +
45250 + DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) * ECC_SIZE;
45251 + ram_console_encode_rs8((uint8_t *)buffer, sizeof(*buffer), par);
45252 +#endif
45253 +}
45254 +
45255 +static void
45256 +ram_console_write(struct console *console, const char *s, unsigned int count)
45257 +{
45258 + int rem;
45259 + struct ram_console_buffer *buffer = ram_console_buffer;
45260 +
45261 + if (count > ram_console_buffer_size) {
45262 + s += count - ram_console_buffer_size;
45263 + count = ram_console_buffer_size;
45264 + }
45265 + rem = ram_console_buffer_size - buffer->start;
45266 + if (rem < count) {
45267 + ram_console_update(s, rem);
45268 + s += rem;
45269 + count -= rem;
45270 + buffer->start = 0;
45271 + buffer->size = ram_console_buffer_size;
45272 + }
45273 + ram_console_update(s, count);
45274 +
45275 + buffer->start += count;
45276 + if (buffer->size < ram_console_buffer_size)
45277 + buffer->size += count;
45278 + ram_console_update_header();
45279 +}
45280 +
45281 +static struct console ram_console = {
45282 + .name = "ram",
45283 + .write = ram_console_write,
45284 + .flags = CON_PRINTBUFFER | CON_ENABLED,
45285 + .index = -1,
45286 +};
45287 +
45288 +static void __init
45289 +ram_console_save_old(struct ram_console_buffer *buffer, char *dest)
45290 +{
45291 + size_t old_log_size = buffer->size;
45292 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45293 + uint8_t *block;
45294 + uint8_t *par;
45295 + char strbuf[80];
45296 + int strbuf_len;
45297 +
45298 + block = buffer->data;
45299 + par = ram_console_par_buffer;
45300 + while (block < buffer->data + buffer->size) {
45301 + int numerr;
45302 + int size = ECC_BLOCK_SIZE;
45303 + if (block + size > buffer->data + ram_console_buffer_size)
45304 + size = buffer->data + ram_console_buffer_size - block;
45305 + numerr = ram_console_decode_rs8(block, size, par);
45306 + if (numerr > 0) {
45307 +#if 0
45308 + printk(KERN_INFO "ram_console: error in block %p, %d\n",
45309 + block, numerr);
45310 +#endif
45311 + ram_console_corrected_bytes += numerr;
45312 + } else if (numerr < 0) {
45313 +#if 0
45314 + printk(KERN_INFO "ram_console: uncorrectable error in "
45315 + "block %p\n", block);
45316 +#endif
45317 + ram_console_bad_blocks++;
45318 + }
45319 + block += ECC_BLOCK_SIZE;
45320 + par += ECC_SIZE;
45321 + }
45322 + if (ram_console_corrected_bytes || ram_console_bad_blocks)
45323 + strbuf_len = snprintf(strbuf, sizeof(strbuf),
45324 + "\n%d Corrected bytes, %d unrecoverable blocks\n",
45325 + ram_console_corrected_bytes, ram_console_bad_blocks);
45326 + else
45327 + strbuf_len = snprintf(strbuf, sizeof(strbuf),
45328 + "\nNo errors detected\n");
45329 + if (strbuf_len >= sizeof(strbuf))
45330 + strbuf_len = sizeof(strbuf) - 1;
45331 + old_log_size += strbuf_len;
45332 +#endif
45333 +
45334 + if (dest == NULL) {
45335 + dest = kmalloc(old_log_size, GFP_KERNEL);
45336 + if (dest == NULL) {
45337 + printk(KERN_ERR
45338 + "ram_console: failed to allocate buffer\n");
45339 + return;
45340 + }
45341 + }
45342 +
45343 + ram_console_old_log = dest;
45344 + ram_console_old_log_size = old_log_size;
45345 + memcpy(ram_console_old_log,
45346 + &buffer->data[buffer->start], buffer->size - buffer->start);
45347 + memcpy(ram_console_old_log + buffer->size - buffer->start,
45348 + &buffer->data[0], buffer->start);
45349 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45350 + memcpy(ram_console_old_log + old_log_size - strbuf_len,
45351 + strbuf, strbuf_len);
45352 +#endif
45353 +}
45354 +
45355 +static int __init ram_console_init(struct ram_console_buffer *buffer,
45356 + size_t buffer_size, char *old_buf)
45357 +{
45358 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45359 + int numerr;
45360 + uint8_t *par;
45361 +#endif
45362 + ram_console_buffer = buffer;
45363 + ram_console_buffer_size =
45364 + buffer_size - sizeof(struct ram_console_buffer);
45365 +
45366 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION
45367 + ram_console_buffer_size -= (DIV_ROUND_UP(ram_console_buffer_size,
45368 + ECC_BLOCK_SIZE) + 1) * ECC_SIZE;
45369 + ram_console_par_buffer = buffer->data + ram_console_buffer_size;
45370 +
45371 +
45372 + /* first consecutive root is 0
45373 + * primitive element to generate roots = 1
45374 + */
45375 + ram_console_rs_decoder = init_rs(ECC_SYMSIZE, ECC_POLY, 0, 1, ECC_SIZE);
45376 + if (ram_console_rs_decoder == NULL) {
45377 + printk(KERN_INFO "ram_console: init_rs failed\n");
45378 + return 0;
45379 + }
45380 +
45381 + ram_console_corrected_bytes = 0;
45382 + ram_console_bad_blocks = 0;
45383 +
45384 + par = ram_console_par_buffer +
45385 + DIV_ROUND_UP(ram_console_buffer_size, ECC_BLOCK_SIZE) * ECC_SIZE;
45386 +
45387 + numerr = ram_console_decode_rs8(buffer, sizeof(*buffer), par);
45388 + if (numerr > 0) {
45389 + printk(KERN_INFO "ram_console: error in header, %d\n", numerr);
45390 + ram_console_corrected_bytes += numerr;
45391 + } else if (numerr < 0) {
45392 + printk(KERN_INFO
45393 + "ram_console: uncorrectable error in header\n");
45394 + ram_console_bad_blocks++;
45395 + }
45396 +#endif
45397 +
45398 + if (buffer->sig == RAM_CONSOLE_SIG) {
45399 + if (buffer->size > ram_console_buffer_size
45400 + || buffer->start > buffer->size)
45401 + printk(KERN_INFO "ram_console: found existing invalid "
45402 + "buffer, size %d, start %d\n",
45403 + buffer->size, buffer->start);
45404 + else {
45405 + printk(KERN_INFO "ram_console: found existing buffer, "
45406 + "size %d, start %d\n",
45407 + buffer->size, buffer->start);
45408 + ram_console_save_old(buffer, old_buf);
45409 + }
45410 + } else {
45411 + printk(KERN_INFO "ram_console: no valid data in buffer "
45412 + "(sig = 0x%08x)\n", buffer->sig);
45413 + }
45414 +
45415 + buffer->sig = RAM_CONSOLE_SIG;
45416 + buffer->start = 0;
45417 + buffer->size = 0;
45418 +
45419 + register_console(&ram_console);
45420 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE
45421 + console_verbose();
45422 +#endif
45423 + return 0;
45424 +}
45425 +
45426 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT
45427 +static int __init ram_console_early_init(void)
45428 +{
45429 + return ram_console_init((struct ram_console_buffer *)
45430 + CONFIG_ANDROID_RAM_CONSOLE_EARLY_ADDR,
45431 + CONFIG_ANDROID_RAM_CONSOLE_EARLY_SIZE,
45432 + ram_console_old_log_init_buffer);
45433 +}
45434 +#else
45435 +static int ram_console_driver_probe(struct platform_device *pdev)
45436 +{
45437 + struct resource *res = pdev->resource;
45438 + size_t start;
45439 + size_t buffer_size;
45440 + void *buffer;
45441 +
45442 + if (res == NULL || pdev->num_resources != 1 ||
45443 + !(res->flags & IORESOURCE_MEM)) {
45444 + printk(KERN_ERR "ram_console: invalid resource, %p %d flags "
45445 + "%lx\n", res, pdev->num_resources, res ? res->flags : 0);
45446 + return -ENXIO;
45447 + }
45448 + buffer_size = res->end - res->start + 1;
45449 + start = res->start;
45450 + printk(KERN_INFO "ram_console: got buffer at %x, size %x\n",
45451 + start, buffer_size);
45452 + buffer = ioremap(res->start, buffer_size);
45453 + if (buffer == NULL) {
45454 + printk(KERN_ERR "ram_console: failed to map memory\n");
45455 + return -ENOMEM;
45456 + }
45457 +
45458 + return ram_console_init(buffer, buffer_size, NULL/* allocate */);
45459 +}
45460 +
45461 +static struct platform_driver ram_console_driver = {
45462 + .probe = ram_console_driver_probe,
45463 + .driver = {
45464 + .name = "ram_console",
45465 + },
45466 +};
45467 +
45468 +static int __init ram_console_module_init(void)
45469 +{
45470 + int err;
45471 + err = platform_driver_register(&ram_console_driver);
45472 + return err;
45473 +}
45474 +#endif
45475 +
45476 +static ssize_t ram_console_read_old(struct file *file, char __user *buf,
45477 + size_t len, loff_t *offset)
45478 +{
45479 + loff_t pos = *offset;
45480 + ssize_t count;
45481 +
45482 + if (pos >= ram_console_old_log_size)
45483 + return 0;
45484 +
45485 + count = min(len, (size_t)(ram_console_old_log_size - pos));
45486 + if (copy_to_user(buf, ram_console_old_log + pos, count))
45487 + return -EFAULT;
45488 +
45489 + *offset += count;
45490 + return count;
45491 +}
45492 +
45493 +static struct file_operations ram_console_file_ops = {
45494 + .owner = THIS_MODULE,
45495 + .read = ram_console_read_old,
45496 +};
45497 +
45498 +static int __init ram_console_late_init(void)
45499 +{
45500 + struct proc_dir_entry *entry;
45501 +
45502 + if (ram_console_old_log == NULL)
45503 + return 0;
45504 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT
45505 + ram_console_old_log = kmalloc(ram_console_old_log_size, GFP_KERNEL);
45506 + if (ram_console_old_log == NULL) {
45507 + printk(KERN_ERR
45508 + "ram_console: failed to allocate buffer for old log\n");
45509 + ram_console_old_log_size = 0;
45510 + return 0;
45511 + }
45512 + memcpy(ram_console_old_log,
45513 + ram_console_old_log_init_buffer, ram_console_old_log_size);
45514 +#endif
45515 + entry = create_proc_entry("last_kmsg", S_IFREG | S_IRUGO, NULL);
45516 + if (!entry) {
45517 + printk(KERN_ERR "ram_console: failed to create proc entry\n");
45518 + kfree(ram_console_old_log);
45519 + ram_console_old_log = NULL;
45520 + return 0;
45521 + }
45522 +
45523 + entry->proc_fops = &ram_console_file_ops;
45524 + entry->size = ram_console_old_log_size;
45525 + return 0;
45526 +}
45527 +
45528 +#ifdef CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT
45529 +console_initcall(ram_console_early_init);
45530 +#else
45531 +module_init(ram_console_module_init);
45532 +#endif
45533 +late_initcall(ram_console_late_init);
45534 +
45535 Index: linux-2.6.28/drivers/android/timed_gpio.c
45536 ===================================================================
45537 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
45538 +++ linux-2.6.28/drivers/android/timed_gpio.c 2009-01-02 00:01:56.000000000 +0100
45539 @@ -0,0 +1,177 @@
45540 +/* drivers/android/timed_gpio.c
45541 + *
45542 + * Copyright (C) 2008 Google, Inc.
45543 + * Author: Mike Lockwood <lockwood@android.com>
45544 + *
45545 + * This software is licensed under the terms of the GNU General Public
45546 + * License version 2, as published by the Free Software Foundation, and
45547 + * may be copied, distributed, and modified under those terms.
45548 + *
45549 + * This program is distributed in the hope that it will be useful,
45550 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
45551 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
45552 + * GNU General Public License for more details.
45553 + *
45554 + */
45555 +
45556 +#include <linux/module.h>
45557 +#include <linux/platform_device.h>
45558 +#include <linux/hrtimer.h>
45559 +#include <linux/err.h>
45560 +#include <mach/gpio.h>
45561 +
45562 +#include <linux/android_timed_gpio.h>
45563 +
45564 +
45565 +static struct class *timed_gpio_class;
45566 +
45567 +struct timed_gpio_data {
45568 + struct device *dev;
45569 + struct hrtimer timer;
45570 + spinlock_t lock;
45571 + unsigned gpio;
45572 + int max_timeout;
45573 + u8 active_low;
45574 +};
45575 +
45576 +static enum hrtimer_restart gpio_timer_func(struct hrtimer *timer)
45577 +{
45578 + struct timed_gpio_data *gpio_data = container_of(timer, struct timed_gpio_data, timer);
45579 +
45580 + gpio_direction_output(gpio_data->gpio, gpio_data->active_low ? 1 : 0);
45581 + return HRTIMER_NORESTART;
45582 +}
45583 +
45584 +static ssize_t gpio_enable_show(struct device *dev, struct device_attribute *attr, char *buf)
45585 +{
45586 + struct timed_gpio_data *gpio_data = dev_get_drvdata(dev);
45587 + int remaining;
45588 +
45589 + if (hrtimer_active(&gpio_data->timer)) {
45590 + ktime_t r = hrtimer_get_remaining(&gpio_data->timer);
45591 + remaining = r.tv.sec * 1000 + r.tv.nsec / 1000000;
45592 + } else
45593 + remaining = 0;
45594 +
45595 + return sprintf(buf, "%d\n", remaining);
45596 +}
45597 +
45598 +static ssize_t gpio_enable_store(
45599 + struct device *dev, struct device_attribute *attr,
45600 + const char *buf, size_t size)
45601 +{
45602 + struct timed_gpio_data *gpio_data = dev_get_drvdata(dev);
45603 + int value;
45604 + unsigned long flags;
45605 +
45606 + sscanf(buf, "%d", &value);
45607 +
45608 + spin_lock_irqsave(&gpio_data->lock, flags);
45609 +
45610 + /* cancel previous timer and set GPIO according to value */
45611 + hrtimer_cancel(&gpio_data->timer);
45612 + gpio_direction_output(gpio_data->gpio, gpio_data->active_low ? !value : !!value);
45613 +
45614 + if (value > 0) {
45615 + if (value > gpio_data->max_timeout)
45616 + value = gpio_data->max_timeout;
45617 +
45618 + hrtimer_start(&gpio_data->timer,
45619 + ktime_set(value / 1000, (value % 1000) * 1000000),
45620 + HRTIMER_MODE_REL);
45621 + }
45622 +
45623 + spin_unlock_irqrestore(&gpio_data->lock, flags);
45624 +
45625 + return size;
45626 +}
45627 +
45628 +static DEVICE_ATTR(enable, S_IRUGO | S_IWUSR, gpio_enable_show, gpio_enable_store);
45629 +
45630 +static int android_timed_gpio_probe(struct platform_device *pdev)
45631 +{
45632 + struct timed_gpio_platform_data *pdata = pdev->dev.platform_data;
45633 + struct timed_gpio *cur_gpio;
45634 + struct timed_gpio_data *gpio_data, *gpio_dat;
45635 + int i, ret = 0;
45636 +
45637 + if (!pdata)
45638 + return -EBUSY;
45639 +
45640 + gpio_data = kzalloc(sizeof(struct timed_gpio_data) * pdata->num_gpios, GFP_KERNEL);
45641 + if (!gpio_data)
45642 + return -ENOMEM;
45643 +
45644 + for (i = 0; i < pdata->num_gpios; i++) {
45645 + cur_gpio = &pdata->gpios[i];
45646 + gpio_dat = &gpio_data[i];
45647 +
45648 + hrtimer_init(&gpio_dat->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
45649 + gpio_dat->timer.function = gpio_timer_func;
45650 + spin_lock_init(&gpio_dat->lock);
45651 +
45652 + gpio_dat->gpio = cur_gpio->gpio;
45653 + gpio_dat->max_timeout = cur_gpio->max_timeout;
45654 + gpio_dat->active_low = cur_gpio->active_low;
45655 + gpio_direction_output(gpio_dat->gpio, gpio_dat->active_low);
45656 +
45657 + gpio_dat->dev = device_create(timed_gpio_class, &pdev->dev, 0, "%s", cur_gpio->name);
45658 + if (unlikely(IS_ERR(gpio_dat->dev)))
45659 + return PTR_ERR(gpio_dat->dev);
45660 +
45661 + dev_set_drvdata(gpio_dat->dev, gpio_dat);
45662 + ret = device_create_file(gpio_dat->dev, &dev_attr_enable);
45663 + if (ret)
45664 + return ret;
45665 + }
45666 +
45667 + platform_set_drvdata(pdev, gpio_data);
45668 +
45669 + return 0;
45670 +}
45671 +
45672 +static int android_timed_gpio_remove(struct platform_device *pdev)
45673 +{
45674 + struct timed_gpio_platform_data *pdata = pdev->dev.platform_data;
45675 + struct timed_gpio_data *gpio_data = platform_get_drvdata(pdev);
45676 + int i;
45677 +
45678 + for (i = 0; i < pdata->num_gpios; i++) {
45679 + device_remove_file(gpio_data[i].dev, &dev_attr_enable);
45680 + device_unregister(gpio_data[i].dev);
45681 + }
45682 +
45683 + kfree(gpio_data);
45684 +
45685 + return 0;
45686 +}
45687 +
45688 +static struct platform_driver android_timed_gpio_driver = {
45689 + .probe = android_timed_gpio_probe,
45690 + .remove = android_timed_gpio_remove,
45691 + .driver = {
45692 + .name = "android-timed-gpio",
45693 + .owner = THIS_MODULE,
45694 + },
45695 +};
45696 +
45697 +static int __init android_timed_gpio_init(void)
45698 +{
45699 + timed_gpio_class = class_create(THIS_MODULE, "timed_output");
45700 + if (IS_ERR(timed_gpio_class))
45701 + return PTR_ERR(timed_gpio_class);
45702 + return platform_driver_register(&android_timed_gpio_driver);
45703 +}
45704 +
45705 +static void __exit android_timed_gpio_exit(void)
45706 +{
45707 + class_destroy(timed_gpio_class);
45708 + platform_driver_unregister(&android_timed_gpio_driver);
45709 +}
45710 +
45711 +module_init(android_timed_gpio_init);
45712 +module_exit(android_timed_gpio_exit);
45713 +
45714 +MODULE_AUTHOR("Mike Lockwood <lockwood@android.com>");
45715 +MODULE_DESCRIPTION("Android timed gpio driver");
45716 +MODULE_LICENSE("GPL");
45717 Index: linux-2.6.28/drivers/ar6000/ar6000/ar6000_drv.c
45718 ===================================================================
45719 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
45720 +++ linux-2.6.28/drivers/ar6000/ar6000/ar6000_drv.c 2009-01-02 00:01:56.000000000 +0100
45721 @@ -0,0 +1,3124 @@
45722 +/*
45723 + *
45724 + * Copyright (c) 2004-2007 Atheros Communications Inc.
45725 + * All rights reserved.
45726 + *
45727 + *
45728 + * This program is free software; you can redistribute it and/or modify
45729 + * it under the terms of the GNU General Public License version 2 as
45730 + * published by the Free Software Foundation;
45731 + *
45732 + * Software distributed under the License is distributed on an "AS
45733 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
45734 + * implied. See the License for the specific language governing
45735 + * rights and limitations under the License.
45736 + *
45737 + *
45738 + *
45739 + */
45740 +
45741 +/*
45742 + * This driver is a pseudo ethernet driver to access the Atheros AR6000
45743 + * WLAN Device
45744 + */
45745 +static const char athId[] __attribute__ ((unused)) = "$Id: //depot/sw/releases/olca2.0-GPL/host/os/linux/ar6000_drv.c#2 $";
45746 +
45747 +#include "ar6000_drv.h"
45748 +#include "htc.h"
45749 +
45750 +MODULE_LICENSE("GPL and additional rights");
45751 +
45752 +#ifndef REORG_APTC_HEURISTICS
45753 +#undef ADAPTIVE_POWER_THROUGHPUT_CONTROL
45754 +#endif /* REORG_APTC_HEURISTICS */
45755 +
45756 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
45757 +#define APTC_TRAFFIC_SAMPLING_INTERVAL 100 /* msec */
45758 +#define APTC_UPPER_THROUGHPUT_THRESHOLD 3000 /* Kbps */
45759 +#define APTC_LOWER_THROUGHPUT_THRESHOLD 2000 /* Kbps */
45760 +
45761 +typedef struct aptc_traffic_record {
45762 + A_BOOL timerScheduled;
45763 + struct timeval samplingTS;
45764 + unsigned long bytesReceived;
45765 + unsigned long bytesTransmitted;
45766 +} APTC_TRAFFIC_RECORD;
45767 +
45768 +A_TIMER aptcTimer;
45769 +APTC_TRAFFIC_RECORD aptcTR;
45770 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
45771 +
45772 +int bmienable = 0;
45773 +unsigned int bypasswmi = 0;
45774 +unsigned int debuglevel = 0;
45775 +int tspecCompliance = 1;
45776 +unsigned int busspeedlow = 0;
45777 +unsigned int onebitmode = 0;
45778 +unsigned int skipflash = 0;
45779 +unsigned int wmitimeout = 2;
45780 +unsigned int wlanNodeCaching = 1;
45781 +unsigned int enableuartprint = 0;
45782 +unsigned int logWmiRawMsgs = 0;
45783 +unsigned int enabletimerwar = 0;
45784 +unsigned int mbox_yield_limit = 99;
45785 +int reduce_credit_dribble = 1 + HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_ONE_HALF;
45786 +int allow_trace_signal = 0;
45787 +#ifdef CONFIG_HOST_TCMD_SUPPORT
45788 +unsigned int testmode =0;
45789 +#endif
45790 +
45791 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
45792 +module_param(bmienable, int, 0644);
45793 +module_param(bypasswmi, int, 0644);
45794 +module_param(debuglevel, int, 0644);
45795 +module_param(tspecCompliance, int, 0644);
45796 +module_param(onebitmode, int, 0644);
45797 +module_param(busspeedlow, int, 0644);
45798 +module_param(skipflash, int, 0644);
45799 +module_param(wmitimeout, int, 0644);
45800 +module_param(wlanNodeCaching, int, 0644);
45801 +module_param(logWmiRawMsgs, int, 0644);
45802 +module_param(enableuartprint, int, 0644);
45803 +module_param(enabletimerwar, int, 0644);
45804 +module_param(mbox_yield_limit, int, 0644);
45805 +module_param(reduce_credit_dribble, int, 0644);
45806 +module_param(allow_trace_signal, int, 0644);
45807 +#ifdef CONFIG_HOST_TCMD_SUPPORT
45808 +module_param(testmode, int, 0644);
45809 +#endif
45810 +#else
45811 +
45812 +#define __user
45813 +/* for linux 2.4 and lower */
45814 +MODULE_PARM(bmienable,"i");
45815 +MODULE_PARM(bypasswmi,"i");
45816 +MODULE_PARM(debuglevel, "i");
45817 +MODULE_PARM(onebitmode,"i");
45818 +MODULE_PARM(busspeedlow, "i");
45819 +MODULE_PARM(skipflash, "i");
45820 +MODULE_PARM(wmitimeout, "i");
45821 +MODULE_PARM(wlanNodeCaching, "i");
45822 +MODULE_PARM(enableuartprint,"i");
45823 +MODULE_PARM(logWmiRawMsgs, "i");
45824 +MODULE_PARM(enabletimerwar,"i");
45825 +MODULE_PARM(mbox_yield_limit,"i");
45826 +MODULE_PARM(reduce_credit_dribble,"i");
45827 +MODULE_PARM(allow_trace_signal,"i");
45828 +#ifdef CONFIG_HOST_TCMD_SUPPORT
45829 +MODULE_PARM(testmode, "i");
45830 +#endif
45831 +#endif
45832 +
45833 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,10)
45834 +/* in 2.6.10 and later this is now a pointer to a uint */
45835 +unsigned int _mboxnum = HTC_MAILBOX_NUM_MAX;
45836 +#define mboxnum &_mboxnum
45837 +#else
45838 +unsigned int mboxnum = HTC_MAILBOX_NUM_MAX;
45839 +#endif
45840 +
45841 +#ifdef DEBUG
45842 +A_UINT32 g_dbg_flags = DBG_DEFAULTS;
45843 +unsigned int debugflags = 0;
45844 +int debugdriver = 1;
45845 +unsigned int debughtc = 128;
45846 +unsigned int debugbmi = 1;
45847 +unsigned int debughif = 2;
45848 +unsigned int resetok = 1;
45849 +unsigned int txcreditsavailable[HTC_MAILBOX_NUM_MAX] = {0};
45850 +unsigned int txcreditsconsumed[HTC_MAILBOX_NUM_MAX] = {0};
45851 +unsigned int txcreditintrenable[HTC_MAILBOX_NUM_MAX] = {0};
45852 +unsigned int txcreditintrenableaggregate[HTC_MAILBOX_NUM_MAX] = {0};
45853 +
45854 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
45855 +module_param(debugflags, int, 0644);
45856 +module_param(debugdriver, int, 0644);
45857 +module_param(debughtc, int, 0644);
45858 +module_param(debugbmi, int, 0644);
45859 +module_param(debughif, int, 0644);
45860 +module_param(resetok, int, 0644);
45861 +module_param_array(txcreditsavailable, int, mboxnum, 0644);
45862 +module_param_array(txcreditsconsumed, int, mboxnum, 0644);
45863 +module_param_array(txcreditintrenable, int, mboxnum, 0644);
45864 +module_param_array(txcreditintrenableaggregate, int, mboxnum, 0644);
45865 +#else
45866 +/* linux 2.4 and lower */
45867 +MODULE_PARM(debugflags,"i");
45868 +MODULE_PARM(debugdriver, "i");
45869 +MODULE_PARM(debughtc, "i");
45870 +MODULE_PARM(debugbmi, "i");
45871 +MODULE_PARM(debughif, "i");
45872 +MODULE_PARM(resetok, "i");
45873 +MODULE_PARM(txcreditsavailable, "0-3i");
45874 +MODULE_PARM(txcreditsconsumed, "0-3i");
45875 +MODULE_PARM(txcreditintrenable, "0-3i");
45876 +MODULE_PARM(txcreditintrenableaggregate, "0-3i");
45877 +#endif
45878 +
45879 +#else
45880 +unsigned int resetok = 1;
45881 +
45882 +#endif /* DEBUG */
45883 +
45884 +unsigned int tx_attempt[HTC_MAILBOX_NUM_MAX] = {0};
45885 +unsigned int tx_post[HTC_MAILBOX_NUM_MAX] = {0};
45886 +unsigned int tx_complete[HTC_MAILBOX_NUM_MAX] = {0};
45887 +unsigned int hifBusRequestNumMax = 40;
45888 +unsigned int war23838_disabled = 0;
45889 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
45890 +unsigned int enableAPTCHeuristics = 1;
45891 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
45892 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
45893 +module_param_array(tx_attempt, int, mboxnum, 0644);
45894 +module_param_array(tx_post, int, mboxnum, 0644);
45895 +module_param_array(tx_complete, int, mboxnum, 0644);
45896 +module_param(hifBusRequestNumMax, int, 0644);
45897 +module_param(war23838_disabled, int, 0644);
45898 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
45899 +module_param(enableAPTCHeuristics, int, 0644);
45900 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
45901 +#else
45902 +MODULE_PARM(tx_attempt, "0-3i");
45903 +MODULE_PARM(tx_post, "0-3i");
45904 +MODULE_PARM(tx_complete, "0-3i");
45905 +MODULE_PARM(hifBusRequestNumMax, "i");
45906 +MODULE_PARM(war23838_disabled, "i");
45907 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
45908 +MODULE_PARM(enableAPTCHeuristics, "i");
45909 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
45910 +#endif
45911 +
45912 +#ifdef BLOCK_TX_PATH_FLAG
45913 +int blocktx = 0;
45914 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
45915 +module_param(blocktx, int, 0644);
45916 +#else
45917 +MODULE_PARM(blocktx, "i");
45918 +#endif
45919 +#endif /* BLOCK_TX_PATH_FLAG */
45920 +
45921 +// TODO move to arsoft_c
45922 +USER_RSSI_THOLD rssi_map[12];
45923 +
45924 +int reconnect_flag = 0;
45925 +
45926 +DECLARE_WAIT_QUEUE_HEAD(ar6000_scan_queue);
45927 +
45928 +/* Function declarations */
45929 +static int ar6000_init_module(void);
45930 +static void ar6000_cleanup_module(void);
45931 +
45932 +int ar6000_init(struct net_device *dev);
45933 +static int ar6000_open(struct net_device *dev);
45934 +static int ar6000_close(struct net_device *dev);
45935 +static void ar6000_init_control_info(AR_SOFTC_T *ar);
45936 +static int ar6000_data_tx(struct sk_buff *skb, struct net_device *dev);
45937 +
45938 +static void ar6000_destroy(struct net_device *dev, unsigned int unregister);
45939 +static void ar6000_detect_error(unsigned long ptr);
45940 +static struct net_device_stats *ar6000_get_stats(struct net_device *dev);
45941 +static struct iw_statistics *ar6000_get_iwstats(struct net_device * dev);
45942 +
45943 +/*
45944 + * HTC service connection handlers
45945 + */
45946 +static void ar6000_avail_ev(HTC_HANDLE HTCHandle);
45947 +
45948 +static void ar6000_unavail_ev(void *Instance);
45949 +
45950 +static void ar6000_target_failure(void *Instance, A_STATUS Status);
45951 +
45952 +static void ar6000_rx(void *Context, HTC_PACKET *pPacket);
45953 +
45954 +static void ar6000_rx_refill(void *Context,HTC_ENDPOINT_ID Endpoint);
45955 +
45956 +static void ar6000_tx_complete(void *Context, HTC_PACKET *pPacket);
45957 +
45958 +static void ar6000_tx_queue_full(void *Context, HTC_ENDPOINT_ID Endpoint);
45959 +
45960 +/*
45961 + * Static variables
45962 + */
45963 +
45964 +static struct net_device *ar6000_devices[MAX_AR6000];
45965 +extern struct iw_handler_def ath_iw_handler_def;
45966 +DECLARE_WAIT_QUEUE_HEAD(arEvent);
45967 +static void ar6000_cookie_init(AR_SOFTC_T *ar);
45968 +static void ar6000_cookie_cleanup(AR_SOFTC_T *ar);
45969 +static void ar6000_free_cookie(AR_SOFTC_T *ar, struct ar_cookie * cookie);
45970 +static struct ar_cookie *ar6000_alloc_cookie(AR_SOFTC_T *ar);
45971 +static void ar6000_TxDataCleanup(AR_SOFTC_T *ar);
45972 +
45973 +#ifdef USER_KEYS
45974 +static A_STATUS ar6000_reinstall_keys(AR_SOFTC_T *ar,A_UINT8 key_op_ctrl);
45975 +#endif
45976 +
45977 +
45978 +static struct ar_cookie s_ar_cookie_mem[MAX_COOKIE_NUM];
45979 +
45980 +#define HOST_INTEREST_ITEM_ADDRESS(ar, item) \
45981 +((ar->arTargetType == TARGET_TYPE_AR6001) ? \
45982 + AR6001_HOST_INTEREST_ITEM_ADDRESS(item) : \
45983 + AR6002_HOST_INTEREST_ITEM_ADDRESS(item))
45984 +
45985 +
45986 +/* Debug log support */
45987 +
45988 +/*
45989 + * Flag to govern whether the debug logs should be parsed in the kernel
45990 + * or reported to the application.
45991 + */
45992 +#ifdef DEBUG
45993 +#define REPORT_DEBUG_LOGS_TO_APP
45994 +#endif
45995 +
45996 +A_STATUS
45997 +ar6000_set_host_app_area(AR_SOFTC_T *ar)
45998 +{
45999 + A_UINT32 address, data;
46000 + struct host_app_area_s host_app_area;
46001 +
46002 + /* Fetch the address of the host_app_area_s instance in the host interest area */
46003 + address = HOST_INTEREST_ITEM_ADDRESS(ar, hi_app_host_interest);
46004 + if (ar6000_ReadRegDiag(ar->arHifDevice, &address, &data) != A_OK) {
46005 + return A_ERROR;
46006 + }
46007 + address = data;
46008 + host_app_area.wmi_protocol_ver = WMI_PROTOCOL_VERSION;
46009 + if (ar6000_WriteDataDiag(ar->arHifDevice, address,
46010 + (A_UCHAR *)&host_app_area,
46011 + sizeof(struct host_app_area_s)) != A_OK)
46012 + {
46013 + return A_ERROR;
46014 + }
46015 +
46016 + return A_OK;
46017 +}
46018 +
46019 +A_UINT32
46020 +dbglog_get_debug_hdr_ptr(AR_SOFTC_T *ar)
46021 +{
46022 + A_UINT32 param;
46023 + A_UINT32 address;
46024 + A_STATUS status;
46025 +
46026 + address = HOST_INTEREST_ITEM_ADDRESS(ar, hi_dbglog_hdr);
46027 + if ((status = ar6000_ReadDataDiag(ar->arHifDevice, address,
46028 + (A_UCHAR *)&param, 4)) != A_OK)
46029 + {
46030 + param = 0;
46031 + }
46032 +
46033 + return param;
46034 +}
46035 +
46036 +/*
46037 + * The dbglog module has been initialized. Its ok to access the relevant
46038 + * data stuctures over the diagnostic window.
46039 + */
46040 +void
46041 +ar6000_dbglog_init_done(AR_SOFTC_T *ar)
46042 +{
46043 + ar->dbglog_init_done = TRUE;
46044 +}
46045 +
46046 +A_UINT32
46047 +dbglog_get_debug_fragment(A_INT8 *datap, A_UINT32 len, A_UINT32 limit)
46048 +{
46049 + A_INT32 *buffer;
46050 + A_UINT32 count;
46051 + A_UINT32 numargs;
46052 + A_UINT32 length;
46053 + A_UINT32 fraglen;
46054 +
46055 + count = fraglen = 0;
46056 + buffer = (A_INT32 *)datap;
46057 + length = (limit >> 2);
46058 +
46059 + if (len <= limit) {
46060 + fraglen = len;
46061 + } else {
46062 + while (count < length) {
46063 + numargs = DBGLOG_GET_NUMARGS(buffer[count]);
46064 + fraglen = (count << 2);
46065 + count += numargs + 1;
46066 + }
46067 + }
46068 +
46069 + return fraglen;
46070 +}
46071 +
46072 +void
46073 +dbglog_parse_debug_logs(A_INT8 *datap, A_UINT32 len)
46074 +{
46075 + A_INT32 *buffer;
46076 + A_UINT32 count;
46077 + A_UINT32 timestamp;
46078 + A_UINT32 debugid;
46079 + A_UINT32 moduleid;
46080 + A_UINT32 numargs;
46081 + A_UINT32 length;
46082 +
46083 + count = 0;
46084 + buffer = (A_INT32 *)datap;
46085 + length = (len >> 2);
46086 + while (count < length) {
46087 + debugid = DBGLOG_GET_DBGID(buffer[count]);
46088 + moduleid = DBGLOG_GET_MODULEID(buffer[count]);
46089 + numargs = DBGLOG_GET_NUMARGS(buffer[count]);
46090 + timestamp = DBGLOG_GET_TIMESTAMP(buffer[count]);
46091 + switch (numargs) {
46092 + case 0:
46093 + AR_DEBUG_PRINTF("%d %d (%d)\n", moduleid, debugid, timestamp);
46094 + break;
46095 +
46096 + case 1:
46097 + AR_DEBUG_PRINTF("%d %d (%d): 0x%x\n", moduleid, debugid,
46098 + timestamp, buffer[count+1]);
46099 + break;
46100 +
46101 + case 2:
46102 + AR_DEBUG_PRINTF("%d %d (%d): 0x%x, 0x%x\n", moduleid, debugid,
46103 + timestamp, buffer[count+1], buffer[count+2]);
46104 + break;
46105 +
46106 + default:
46107 + AR_DEBUG_PRINTF("Invalid args: %d\n", numargs);
46108 + }
46109 + count += numargs + 1;
46110 + }
46111 +}
46112 +
46113 +int
46114 +ar6000_dbglog_get_debug_logs(AR_SOFTC_T *ar)
46115 +{
46116 + struct dbglog_hdr_s debug_hdr;
46117 + struct dbglog_buf_s debug_buf;
46118 + A_UINT32 address;
46119 + A_UINT32 length;
46120 + A_UINT32 dropped;
46121 + A_UINT32 firstbuf;
46122 + A_UINT32 debug_hdr_ptr;
46123 +
46124 + if (!ar->dbglog_init_done) return A_ERROR;
46125 +
46126 +
46127 + AR6000_SPIN_LOCK(&ar->arLock, 0);
46128 +
46129 + if (ar->dbgLogFetchInProgress) {
46130 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
46131 + return A_EBUSY;
46132 + }
46133 +
46134 + /* block out others */
46135 + ar->dbgLogFetchInProgress = TRUE;
46136 +
46137 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
46138 +
46139 + debug_hdr_ptr = dbglog_get_debug_hdr_ptr(ar);
46140 + printk("debug_hdr_ptr: 0x%x\n", debug_hdr_ptr);
46141 +
46142 + /* Get the contents of the ring buffer */
46143 + if (debug_hdr_ptr) {
46144 + address = debug_hdr_ptr;
46145 + length = sizeof(struct dbglog_hdr_s);
46146 + ar6000_ReadDataDiag(ar->arHifDevice, address,
46147 + (A_UCHAR *)&debug_hdr, length);
46148 + address = (A_UINT32)debug_hdr.dbuf;
46149 + firstbuf = address;
46150 + dropped = debug_hdr.dropped;
46151 + length = sizeof(struct dbglog_buf_s);
46152 + ar6000_ReadDataDiag(ar->arHifDevice, address,
46153 + (A_UCHAR *)&debug_buf, length);
46154 +
46155 + do {
46156 + address = (A_UINT32)debug_buf.buffer;
46157 + length = debug_buf.length;
46158 + if ((length) && (debug_buf.length <= debug_buf.bufsize)) {
46159 + /* Rewind the index if it is about to overrun the buffer */
46160 + if (ar->log_cnt > (DBGLOG_HOST_LOG_BUFFER_SIZE - length)) {
46161 + ar->log_cnt = 0;
46162 + }
46163 + if(A_OK != ar6000_ReadDataDiag(ar->arHifDevice, address,
46164 + (A_UCHAR *)&ar->log_buffer[ar->log_cnt], length))
46165 + {
46166 + break;
46167 + }
46168 + ar6000_dbglog_event(ar, dropped, &ar->log_buffer[ar->log_cnt], length);
46169 + ar->log_cnt += length;
46170 + } else {
46171 + AR_DEBUG_PRINTF("Length: %d (Total size: %d)\n",
46172 + debug_buf.length, debug_buf.bufsize);
46173 + }
46174 +
46175 + address = (A_UINT32)debug_buf.next;
46176 + length = sizeof(struct dbglog_buf_s);
46177 + if(A_OK != ar6000_ReadDataDiag(ar->arHifDevice, address,
46178 + (A_UCHAR *)&debug_buf, length))
46179 + {
46180 + break;
46181 + }
46182 +
46183 + } while (address != firstbuf);
46184 + }
46185 +
46186 + ar->dbgLogFetchInProgress = FALSE;
46187 +
46188 + return A_OK;
46189 +}
46190 +
46191 +void
46192 +ar6000_dbglog_event(AR_SOFTC_T *ar, A_UINT32 dropped,
46193 + A_INT8 *buffer, A_UINT32 length)
46194 +{
46195 +#ifdef REPORT_DEBUG_LOGS_TO_APP
46196 + #define MAX_WIRELESS_EVENT_SIZE 252
46197 + /*
46198 + * Break it up into chunks of MAX_WIRELESS_EVENT_SIZE bytes of messages.
46199 + * There seems to be a limitation on the length of message that could be
46200 + * transmitted to the user app via this mechanism.
46201 + */
46202 + A_UINT32 send, sent;
46203 +
46204 + sent = 0;
46205 + send = dbglog_get_debug_fragment(&buffer[sent], length - sent,
46206 + MAX_WIRELESS_EVENT_SIZE);
46207 + while (send) {
46208 + ar6000_send_event_to_app(ar, WMIX_DBGLOG_EVENTID, &buffer[sent], send);
46209 + sent += send;
46210 + send = dbglog_get_debug_fragment(&buffer[sent], length - sent,
46211 + MAX_WIRELESS_EVENT_SIZE);
46212 + }
46213 +#else
46214 + AR_DEBUG_PRINTF("Dropped logs: 0x%x\nDebug info length: %d\n",
46215 + dropped, length);
46216 +
46217 + /* Interpret the debug logs */
46218 + dbglog_parse_debug_logs(buffer, length);
46219 +#endif /* REPORT_DEBUG_LOGS_TO_APP */
46220 +}
46221 +
46222 +
46223 +
46224 +static int __init
46225 +ar6000_init_module(void)
46226 +{
46227 + static int probed = 0;
46228 + A_STATUS status;
46229 + HTC_INIT_INFO initInfo;
46230 +
46231 + A_MEMZERO(&initInfo,sizeof(initInfo));
46232 + initInfo.AddInstance = ar6000_avail_ev;
46233 + initInfo.DeleteInstance = ar6000_unavail_ev;
46234 + initInfo.TargetFailure = ar6000_target_failure;
46235 +
46236 +
46237 +#ifdef DEBUG
46238 + /* Set the debug flags if specified at load time */
46239 + if(debugflags != 0)
46240 + {
46241 + g_dbg_flags = debugflags;
46242 + }
46243 +#endif
46244 +
46245 + if (probed) {
46246 + return -ENODEV;
46247 + }
46248 + probed++;
46249 +
46250 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
46251 + memset(&aptcTR, 0, sizeof(APTC_TRAFFIC_RECORD));
46252 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
46253 +
46254 +#ifdef CONFIG_HOST_GPIO_SUPPORT
46255 + ar6000_gpio_init();
46256 +#endif /* CONFIG_HOST_GPIO_SUPPORT */
46257 +
46258 + status = HTCInit(&initInfo);
46259 + if(status != A_OK)
46260 + return -ENODEV;
46261 +
46262 + return 0;
46263 +}
46264 +
46265 +static void __exit
46266 +ar6000_cleanup_module(void)
46267 +{
46268 + int i = 0;
46269 + struct net_device *ar6000_netdev;
46270 +
46271 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
46272 + /* Delete the Adaptive Power Control timer */
46273 + if (timer_pending(&aptcTimer)) {
46274 + del_timer_sync(&aptcTimer);
46275 + }
46276 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
46277 +
46278 + for (i=0; i < MAX_AR6000; i++) {
46279 + if (ar6000_devices[i] != NULL) {
46280 + ar6000_netdev = ar6000_devices[i];
46281 + ar6000_devices[i] = NULL;
46282 + ar6000_destroy(ar6000_netdev, 1);
46283 + }
46284 + }
46285 +
46286 + /* shutting down HTC will cause the HIF layer to detach from the
46287 + * underlying bus driver which will cause the subsequent deletion of
46288 + * all HIF and HTC instances */
46289 + HTCShutDown();
46290 +
46291 + AR_DEBUG_PRINTF("ar6000_cleanup: success\n");
46292 +}
46293 +
46294 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
46295 +void
46296 +aptcTimerHandler(unsigned long arg)
46297 +{
46298 + A_UINT32 numbytes;
46299 + A_UINT32 throughput;
46300 + AR_SOFTC_T *ar;
46301 + A_STATUS status;
46302 +
46303 + ar = (AR_SOFTC_T *)arg;
46304 + A_ASSERT(ar != NULL);
46305 + A_ASSERT(!timer_pending(&aptcTimer));
46306 +
46307 + AR6000_SPIN_LOCK(&ar->arLock, 0);
46308 +
46309 + /* Get the number of bytes transferred */
46310 + numbytes = aptcTR.bytesTransmitted + aptcTR.bytesReceived;
46311 + aptcTR.bytesTransmitted = aptcTR.bytesReceived = 0;
46312 +
46313 + /* Calculate and decide based on throughput thresholds */
46314 + throughput = ((numbytes * 8)/APTC_TRAFFIC_SAMPLING_INTERVAL); /* Kbps */
46315 + if (throughput < APTC_LOWER_THROUGHPUT_THRESHOLD) {
46316 + /* Enable Sleep and delete the timer */
46317 + A_ASSERT(ar->arWmiReady == TRUE);
46318 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
46319 + status = wmi_powermode_cmd(ar->arWmi, REC_POWER);
46320 + AR6000_SPIN_LOCK(&ar->arLock, 0);
46321 + A_ASSERT(status == A_OK);
46322 + aptcTR.timerScheduled = FALSE;
46323 + } else {
46324 + A_TIMEOUT_MS(&aptcTimer, APTC_TRAFFIC_SAMPLING_INTERVAL, 0);
46325 + }
46326 +
46327 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
46328 +}
46329 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
46330 +
46331 +
46332 +
46333 +/* set HTC block size, assume BMI is already initialized */
46334 +A_STATUS ar6000_SetHTCBlockSize(AR_SOFTC_T *ar)
46335 +{
46336 + A_STATUS status;
46337 + A_UINT32 blocksizes[HTC_MAILBOX_NUM_MAX];
46338 +
46339 + do {
46340 + /* get the block sizes */
46341 + status = HIFConfigureDevice(ar->arHifDevice, HIF_DEVICE_GET_MBOX_BLOCK_SIZE,
46342 + blocksizes, sizeof(blocksizes));
46343 +
46344 + if (A_FAILED(status)) {
46345 + AR_DEBUG_PRINTF("Failed to get block size info from HIF layer...\n");
46346 + break;
46347 + }
46348 + /* note: we actually get the block size for mailbox 1, for SDIO the block
46349 + * size on mailbox 0 is artificially set to 1 */
46350 + /* must be a power of 2 */
46351 + A_ASSERT((blocksizes[1] & (blocksizes[1] - 1)) == 0);
46352 +
46353 + /* set the host interest area for the block size */
46354 + status = BMIWriteMemory(ar->arHifDevice,
46355 + HOST_INTEREST_ITEM_ADDRESS(ar, hi_mbox_io_block_sz),
46356 + (A_UCHAR *)&blocksizes[1],
46357 + 4);
46358 +
46359 + if (A_FAILED(status)) {
46360 + AR_DEBUG_PRINTF("BMIWriteMemory for IO block size failed \n");
46361 + break;
46362 + }
46363 +
46364 + AR_DEBUG_PRINTF("Block Size Set: %d (target address:0x%X)\n",
46365 + blocksizes[1], HOST_INTEREST_ITEM_ADDRESS(ar, hi_mbox_io_block_sz));
46366 +
46367 + /* set the host interest area for the mbox ISR yield limit */
46368 + status = BMIWriteMemory(ar->arHifDevice,
46369 + HOST_INTEREST_ITEM_ADDRESS(ar, hi_mbox_isr_yield_limit),
46370 + (A_UCHAR *)&mbox_yield_limit,
46371 + 4);
46372 +
46373 + if (A_FAILED(status)) {
46374 + AR_DEBUG_PRINTF("BMIWriteMemory for yield limit failed \n");
46375 + break;
46376 + }
46377 +
46378 + } while (FALSE);
46379 +
46380 + return status;
46381 +}
46382 +
46383 +static void free_raw_buffers(AR_SOFTC_T *ar)
46384 +{
46385 + int i, j;
46386 +
46387 + for (i = 0; i != HTC_RAW_STREAM_NUM_MAX; i++) {
46388 + for (j = 0; j != RAW_HTC_READ_BUFFERS_NUM; j++)
46389 + kfree(ar->raw_htc_read_buffer[i][j]);
46390 + for (j = 0; j != RAW_HTC_WRITE_BUFFERS_NUM; j++)
46391 + kfree(ar->raw_htc_write_buffer[i][j]);
46392 + }
46393 +}
46394 +
46395 +static int alloc_raw_buffers(AR_SOFTC_T *ar)
46396 +{
46397 + int i, j;
46398 + raw_htc_buffer *b;
46399 +
46400 + for (i = 0; i != HTC_RAW_STREAM_NUM_MAX; i++) {
46401 + for (j = 0; j != RAW_HTC_READ_BUFFERS_NUM; j++) {
46402 + b = kzalloc(sizeof(*b), GFP_KERNEL);
46403 + if (!b)
46404 + return -ENOMEM;
46405 + ar->raw_htc_read_buffer[i][j] = b;
46406 + }
46407 + for (j = 0; j != RAW_HTC_WRITE_BUFFERS_NUM; j++) {
46408 + b = kzalloc(sizeof(*b), GFP_KERNEL);
46409 + if (!b)
46410 + return -ENOMEM;
46411 + ar->raw_htc_write_buffer[i][j] = b;
46412 + }
46413 + }
46414 + return 0;
46415 +}
46416 +
46417 +/*
46418 + * HTC Event handlers
46419 + */
46420 +static void
46421 +ar6000_avail_ev(HTC_HANDLE HTCHandle)
46422 +{
46423 + int i;
46424 + struct net_device *dev;
46425 + AR_SOFTC_T *ar;
46426 + int device_index = 0;
46427 +
46428 + AR_DEBUG_PRINTF("ar6000_available\n");
46429 +
46430 + for (i=0; i < MAX_AR6000; i++) {
46431 + if (ar6000_devices[i] == NULL) {
46432 + break;
46433 + }
46434 + }
46435 +
46436 + if (i == MAX_AR6000) {
46437 + AR_DEBUG_PRINTF("ar6000_available: max devices reached\n");
46438 + return;
46439 + }
46440 +
46441 + /* Save this. It gives a bit better readability especially since */
46442 + /* we use another local "i" variable below. */
46443 + device_index = i;
46444 +
46445 + A_ASSERT(HTCHandle != NULL);
46446 +
46447 + dev = alloc_etherdev(sizeof(AR_SOFTC_T));
46448 + if (dev == NULL) {
46449 + AR_DEBUG_PRINTF("ar6000_available: can't alloc etherdev\n");
46450 + return;
46451 + }
46452 +
46453 + ether_setup(dev);
46454 +
46455 + if (dev->priv == NULL) {
46456 + printk(KERN_CRIT "ar6000_available: Could not allocate memory\n");
46457 + return;
46458 + }
46459 +
46460 + A_MEMZERO(dev->priv, sizeof(AR_SOFTC_T));
46461 +
46462 + ar = (AR_SOFTC_T *)dev->priv;
46463 + ar->arNetDev = dev;
46464 + ar->arHtcTarget = HTCHandle;
46465 + ar->arHifDevice = HTCGetHifDevice(HTCHandle);
46466 + ar->arWlanState = WLAN_ENABLED;
46467 + ar->arRadioSwitch = WLAN_ENABLED;
46468 + ar->arDeviceIndex = device_index;
46469 +
46470 + A_INIT_TIMER(&ar->arHBChallengeResp.timer, ar6000_detect_error, dev);
46471 + ar->arHBChallengeResp.seqNum = 0;
46472 + ar->arHBChallengeResp.outstanding = FALSE;
46473 + ar->arHBChallengeResp.missCnt = 0;
46474 + ar->arHBChallengeResp.frequency = AR6000_HB_CHALLENGE_RESP_FREQ_DEFAULT;
46475 + ar->arHBChallengeResp.missThres = AR6000_HB_CHALLENGE_RESP_MISS_THRES_DEFAULT;
46476 +
46477 + ar6000_init_control_info(ar);
46478 + init_waitqueue_head(&arEvent);
46479 + sema_init(&ar->arSem, 1);
46480 +
46481 + if (alloc_raw_buffers(ar)) {
46482 + free_raw_buffers(ar);
46483 + /*
46484 + * @@@ Clean up our own mess, but for anything else, cheerfully mimick
46485 + * the beautiful error non-handling of the rest of this function.
46486 + */
46487 + return;
46488 + }
46489 +
46490 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
46491 + A_INIT_TIMER(&aptcTimer, aptcTimerHandler, ar);
46492 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
46493 +
46494 + /*
46495 + * If requested, perform some magic which requires no cooperation from
46496 + * the Target. It causes the Target to ignore flash and execute to the
46497 + * OS from ROM.
46498 + *
46499 + * This is intended to support recovery from a corrupted flash on Targets
46500 + * that support flash.
46501 + */
46502 + if (skipflash)
46503 + {
46504 + ar6000_reset_device_skipflash(ar->arHifDevice);
46505 + }
46506 +
46507 + BMIInit();
46508 + {
46509 + struct bmi_target_info targ_info;
46510 +
46511 + if (BMIGetTargetInfo(ar->arHifDevice, &targ_info) != A_OK) {
46512 + return;
46513 + }
46514 +
46515 + ar->arVersion.target_ver = targ_info.target_ver;
46516 + ar->arTargetType = targ_info.target_type;
46517 + }
46518 +
46519 + if (enableuartprint) {
46520 + A_UINT32 param;
46521 + param = 1;
46522 + if (BMIWriteMemory(ar->arHifDevice,
46523 + HOST_INTEREST_ITEM_ADDRESS(ar, hi_serial_enable),
46524 + (A_UCHAR *)&param,
46525 + 4)!= A_OK)
46526 + {
46527 + AR_DEBUG_PRINTF("BMIWriteMemory for enableuartprint failed \n");
46528 + return ;
46529 + }
46530 + AR_DEBUG_PRINTF("Serial console prints enabled\n");
46531 + }
46532 +#ifdef CONFIG_HOST_TCMD_SUPPORT
46533 + if(testmode) {
46534 + ar->arTargetMode = AR6000_TCMD_MODE;
46535 + }else {
46536 + ar->arTargetMode = AR6000_WLAN_MODE;
46537 + }
46538 +#endif
46539 + if (enabletimerwar) {
46540 + A_UINT32 param;
46541 +
46542 + if (BMIReadMemory(ar->arHifDevice,
46543 + HOST_INTEREST_ITEM_ADDRESS(ar, hi_option_flag),
46544 + (A_UCHAR *)&param,
46545 + 4)!= A_OK)
46546 + {
46547 + AR_DEBUG_PRINTF("BMIReadMemory for enabletimerwar failed \n");
46548 + return;
46549 + }
46550 +
46551 + param |= HI_OPTION_TIMER_WAR;
46552 +
46553 + if (BMIWriteMemory(ar->arHifDevice,
46554 + HOST_INTEREST_ITEM_ADDRESS(ar, hi_option_flag),
46555 + (A_UCHAR *)&param,
46556 + 4) != A_OK)
46557 + {
46558 + AR_DEBUG_PRINTF("BMIWriteMemory for enabletimerwar failed \n");
46559 + return;
46560 + }
46561 + AR_DEBUG_PRINTF("Timer WAR enabled\n");
46562 + }
46563 +
46564 +
46565 + /* since BMIInit is called in the driver layer, we have to set the block
46566 + * size here for the target */
46567 +
46568 + if (A_FAILED(ar6000_SetHTCBlockSize(ar))) {
46569 + return;
46570 + }
46571 +
46572 + spin_lock_init(&ar->arLock);
46573 +
46574 + /* Don't install the init function if BMI is requested */
46575 + if(!bmienable)
46576 + {
46577 + dev->init = ar6000_init;
46578 + } else {
46579 + AR_DEBUG_PRINTF(" BMI enabled \n");
46580 + }
46581 +
46582 + dev->open = &ar6000_open;
46583 + dev->stop = &ar6000_close;
46584 + dev->hard_start_xmit = &ar6000_data_tx;
46585 + dev->get_stats = &ar6000_get_stats;
46586 +
46587 + /* dev->tx_timeout = ar6000_tx_timeout; */
46588 + dev->do_ioctl = &ar6000_ioctl;
46589 + dev->watchdog_timeo = AR6000_TX_TIMEOUT;
46590 + ar6000_ioctl_iwsetup(&ath_iw_handler_def);
46591 + dev->wireless_handlers = &ath_iw_handler_def;
46592 + ath_iw_handler_def.get_wireless_stats = ar6000_get_iwstats; /*Displayed via proc fs */
46593 +
46594 + /*
46595 + * We need the OS to provide us with more headroom in order to
46596 + * perform dix to 802.3, WMI header encap, and the HTC header
46597 + */
46598 + dev->hard_header_len = ETH_HLEN + sizeof(ATH_LLC_SNAP_HDR) +
46599 + sizeof(WMI_DATA_HDR) + HTC_HEADER_LEN;
46600 +
46601 + /* This runs the init function */
46602 + SET_NETDEV_DEV(dev, HIFGetOSDevice(ar->arHifDevice));
46603 + if (register_netdev(dev)) {
46604 + AR_DEBUG_PRINTF("ar6000_avail: register_netdev failed\n");
46605 + ar6000_destroy(dev, 0);
46606 + return;
46607 + }
46608 +
46609 + HTCSetInstance(ar->arHtcTarget, ar);
46610 +
46611 + /* We only register the device in the global list if we succeed. */
46612 + /* If the device is in the global list, it will be destroyed */
46613 + /* when the module is unloaded. */
46614 + ar6000_devices[device_index] = dev;
46615 +
46616 + AR_DEBUG_PRINTF("ar6000_avail: name=%s htcTarget=0x%x, dev=0x%x (%d), ar=0x%x\n",
46617 + dev->name, (A_UINT32)HTCHandle, (A_UINT32)dev, device_index,
46618 + (A_UINT32)ar);
46619 +}
46620 +
46621 +static void ar6000_target_failure(void *Instance, A_STATUS Status)
46622 +{
46623 + AR_SOFTC_T *ar = (AR_SOFTC_T *)Instance;
46624 + WMI_TARGET_ERROR_REPORT_EVENT errEvent;
46625 + static A_BOOL sip = FALSE;
46626 +
46627 + if (Status != A_OK) {
46628 + if (timer_pending(&ar->arHBChallengeResp.timer)) {
46629 + A_UNTIMEOUT(&ar->arHBChallengeResp.timer);
46630 + }
46631 +
46632 + /* try dumping target assertion information (if any) */
46633 + ar6000_dump_target_assert_info(ar->arHifDevice,ar->arTargetType);
46634 +
46635 + /*
46636 + * Fetch the logs from the target via the diagnostic
46637 + * window.
46638 + */
46639 + ar6000_dbglog_get_debug_logs(ar);
46640 +
46641 + /* Report the error only once */
46642 + if (!sip) {
46643 + sip = TRUE;
46644 + errEvent.errorVal = WMI_TARGET_COM_ERR |
46645 + WMI_TARGET_FATAL_ERR;
46646 +#ifdef SEND_EVENT_TO_APP
46647 + ar6000_send_event_to_app(ar, WMI_ERROR_REPORT_EVENTID,
46648 + (A_UINT8 *)&errEvent,
46649 + sizeof(WMI_TARGET_ERROR_REPORT_EVENT));
46650 +#endif
46651 + }
46652 + }
46653 +}
46654 +
46655 +static void
46656 +ar6000_unavail_ev(void *Instance)
46657 +{
46658 + AR_SOFTC_T *ar = (AR_SOFTC_T *)Instance;
46659 + /* NULL out it's entry in the global list */
46660 + ar6000_devices[ar->arDeviceIndex] = NULL;
46661 + ar6000_destroy(ar->arNetDev, 1);
46662 +}
46663 +
46664 +/*
46665 + * We need to differentiate between the surprise and planned removal of the
46666 + * device because of the following consideration:
46667 + * - In case of surprise removal, the hcd already frees up the pending
46668 + * for the device and hence there is no need to unregister the function
46669 + * driver inorder to get these requests. For planned removal, the function
46670 + * driver has to explictly unregister itself to have the hcd return all the
46671 + * pending requests before the data structures for the devices are freed up.
46672 + * Note that as per the current implementation, the function driver will
46673 + * end up releasing all the devices since there is no API to selectively
46674 + * release a particular device.
46675 + * - Certain commands issued to the target can be skipped for surprise
46676 + * removal since they will anyway not go through.
46677 + */
46678 +static void
46679 +ar6000_destroy(struct net_device *dev, unsigned int unregister)
46680 +{
46681 + AR_SOFTC_T *ar;
46682 +
46683 + AR_DEBUG_PRINTF("+ar6000_destroy \n");
46684 +
46685 + if((dev == NULL) || ((ar = netdev_priv(dev)) == NULL))
46686 + {
46687 + AR_DEBUG_PRINTF("%s(): Failed to get device structure.\n", __func__);
46688 + return;
46689 + }
46690 +
46691 + /* Stop the transmit queues */
46692 + netif_stop_queue(dev);
46693 +
46694 + /* Disable the target and the interrupts associated with it */
46695 + if (ar->arWmiReady == TRUE)
46696 + {
46697 + if (!bypasswmi)
46698 + {
46699 + if (ar->arConnected == TRUE || ar->arConnectPending == TRUE)
46700 + {
46701 + AR_DEBUG_PRINTF("%s(): Disconnect\n", __func__);
46702 + AR6000_SPIN_LOCK(&ar->arLock, 0);
46703 + ar6000_init_profile_info(ar);
46704 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
46705 + wmi_disconnect_cmd(ar->arWmi);
46706 + }
46707 +
46708 + ar6000_dbglog_get_debug_logs(ar);
46709 + ar->arWmiReady = FALSE;
46710 + ar->arConnected = FALSE;
46711 + ar->arConnectPending = FALSE;
46712 + wmi_shutdown(ar->arWmi);
46713 + ar->arWmiEnabled = FALSE;
46714 + ar->arWmi = NULL;
46715 + ar->arWlanState = WLAN_ENABLED;
46716 +#ifdef USER_KEYS
46717 + ar->user_savedkeys_stat = USER_SAVEDKEYS_STAT_INIT;
46718 + ar->user_key_ctrl = 0;
46719 +#endif
46720 + }
46721 +
46722 + AR_DEBUG_PRINTF("%s(): WMI stopped\n", __func__);
46723 + }
46724 + else
46725 + {
46726 + AR_DEBUG_PRINTF("%s(): WMI not ready 0x%08x 0x%08x\n",
46727 + __func__, (unsigned int) ar, (unsigned int) ar->arWmi);
46728 +
46729 + /* Shut down WMI if we have started it */
46730 + if(ar->arWmiEnabled == TRUE)
46731 + {
46732 + AR_DEBUG_PRINTF("%s(): Shut down WMI\n", __func__);
46733 + wmi_shutdown(ar->arWmi);
46734 + ar->arWmiEnabled = FALSE;
46735 + ar->arWmi = NULL;
46736 + }
46737 + }
46738 +
46739 + /* stop HTC */
46740 + HTCStop(ar->arHtcTarget);
46741 +
46742 + /* set the instance to NULL so we do not get called back on remove incase we
46743 + * we're explicity destroyed by module unload */
46744 + HTCSetInstance(ar->arHtcTarget, NULL);
46745 +
46746 + if (resetok) {
46747 + /* try to reset the device if we can
46748 + * The driver may have been configure NOT to reset the target during
46749 + * a debug session */
46750 + AR_DEBUG_PRINTF(" Attempting to reset target on instance destroy.... \n");
46751 + ar6000_reset_device(ar->arHifDevice, ar->arTargetType);
46752 + } else {
46753 + AR_DEBUG_PRINTF(" Host does not want target reset. \n");
46754 + }
46755 +
46756 + /* Done with cookies */
46757 + ar6000_cookie_cleanup(ar);
46758 +
46759 + /* Cleanup BMI */
46760 + BMIInit();
46761 +
46762 + /* Clear the tx counters */
46763 + memset(tx_attempt, 0, sizeof(tx_attempt));
46764 + memset(tx_post, 0, sizeof(tx_post));
46765 + memset(tx_complete, 0, sizeof(tx_complete));
46766 +
46767 +
46768 + /* Free up the device data structure */
46769 + if (unregister)
46770 + unregister_netdev(dev);
46771 +
46772 + free_raw_buffers(ar);
46773 +
46774 +#ifndef free_netdev
46775 + kfree(dev);
46776 +#else
46777 + free_netdev(dev);
46778 +#endif
46779 +
46780 + AR_DEBUG_PRINTF("-ar6000_destroy \n");
46781 +}
46782 +
46783 +static void ar6000_detect_error(unsigned long ptr)
46784 +{
46785 + struct net_device *dev = (struct net_device *)ptr;
46786 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
46787 + WMI_TARGET_ERROR_REPORT_EVENT errEvent;
46788 +
46789 + AR6000_SPIN_LOCK(&ar->arLock, 0);
46790 +
46791 + if (ar->arHBChallengeResp.outstanding) {
46792 + ar->arHBChallengeResp.missCnt++;
46793 + } else {
46794 + ar->arHBChallengeResp.missCnt = 0;
46795 + }
46796 +
46797 + if (ar->arHBChallengeResp.missCnt > ar->arHBChallengeResp.missThres) {
46798 + /* Send Error Detect event to the application layer and do not reschedule the error detection module timer */
46799 + ar->arHBChallengeResp.missCnt = 0;
46800 + ar->arHBChallengeResp.seqNum = 0;
46801 + errEvent.errorVal = WMI_TARGET_COM_ERR | WMI_TARGET_FATAL_ERR;
46802 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
46803 +#ifdef SEND_EVENT_TO_APP
46804 + ar6000_send_event_to_app(ar, WMI_ERROR_REPORT_EVENTID,
46805 + (A_UINT8 *)&errEvent,
46806 + sizeof(WMI_TARGET_ERROR_REPORT_EVENT));
46807 +#endif
46808 + return;
46809 + }
46810 +
46811 + /* Generate the sequence number for the next challenge */
46812 + ar->arHBChallengeResp.seqNum++;
46813 + ar->arHBChallengeResp.outstanding = TRUE;
46814 +
46815 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
46816 +
46817 + /* Send the challenge on the control channel */
46818 + if (wmi_get_challenge_resp_cmd(ar->arWmi, ar->arHBChallengeResp.seqNum, DRV_HB_CHALLENGE) != A_OK) {
46819 + AR_DEBUG_PRINTF("Unable to send heart beat challenge\n");
46820 + }
46821 +
46822 +
46823 + /* Reschedule the timer for the next challenge */
46824 + A_TIMEOUT_MS(&ar->arHBChallengeResp.timer, ar->arHBChallengeResp.frequency * 1000, 0);
46825 +}
46826 +
46827 +void ar6000_init_profile_info(AR_SOFTC_T *ar)
46828 +{
46829 + ar->arSsidLen = 0;
46830 + A_MEMZERO(ar->arSsid, sizeof(ar->arSsid));
46831 + ar->arNetworkType = INFRA_NETWORK;
46832 + ar->arDot11AuthMode = OPEN_AUTH;
46833 + ar->arAuthMode = NONE_AUTH;
46834 + ar->arPairwiseCrypto = NONE_CRYPT;
46835 + ar->arPairwiseCryptoLen = 0;
46836 + ar->arGroupCrypto = NONE_CRYPT;
46837 + ar->arGroupCryptoLen = 0;
46838 + A_MEMZERO(ar->arWepKeyList, sizeof(ar->arWepKeyList));
46839 + A_MEMZERO(ar->arReqBssid, sizeof(ar->arReqBssid));
46840 + A_MEMZERO(ar->arBssid, sizeof(ar->arBssid));
46841 + ar->arBssChannel = 0;
46842 +}
46843 +
46844 +static void
46845 +ar6000_init_control_info(AR_SOFTC_T *ar)
46846 +{
46847 + ar->arWmiEnabled = FALSE;
46848 + ar6000_init_profile_info(ar);
46849 + ar->arDefTxKeyIndex = 0;
46850 + A_MEMZERO(ar->arWepKeyList, sizeof(ar->arWepKeyList));
46851 + ar->arChannelHint = 0;
46852 + ar->arListenInterval = MAX_LISTEN_INTERVAL;
46853 + ar->arVersion.host_ver = AR6K_SW_VERSION;
46854 + ar->arRssi = 0;
46855 + ar->arTxPwr = 0;
46856 + ar->arTxPwrSet = FALSE;
46857 + ar->arSkipScan = 0;
46858 + ar->arBeaconInterval = 0;
46859 + ar->arBitRate = 0;
46860 + ar->arMaxRetries = 0;
46861 + ar->arWmmEnabled = TRUE;
46862 +}
46863 +
46864 +static int
46865 +ar6000_open(struct net_device *dev)
46866 +{
46867 + /* Wake up the queues */
46868 + netif_wake_queue(dev);
46869 +
46870 + return 0;
46871 +}
46872 +
46873 +static int
46874 +ar6000_close(struct net_device *dev)
46875 +{
46876 + netif_stop_queue(dev);
46877 +
46878 + return 0;
46879 +}
46880 +
46881 +/* connect to a service */
46882 +static A_STATUS ar6000_connectservice(AR_SOFTC_T *ar,
46883 + HTC_SERVICE_CONNECT_REQ *pConnect,
46884 + WMI_PRI_STREAM_ID WmiStreamID,
46885 + char *pDesc)
46886 +{
46887 + A_STATUS status;
46888 + HTC_SERVICE_CONNECT_RESP response;
46889 +
46890 + do {
46891 +
46892 + A_MEMZERO(&response,sizeof(response));
46893 +
46894 + status = HTCConnectService(ar->arHtcTarget,
46895 + pConnect,
46896 + &response);
46897 +
46898 + if (A_FAILED(status)) {
46899 + AR_DEBUG_PRINTF(" Failed to connect to %s service status:%d \n", pDesc, status);
46900 + break;
46901 + }
46902 +
46903 + if (WmiStreamID == WMI_NOT_MAPPED) {
46904 + /* done */
46905 + break;
46906 + }
46907 +
46908 + /* set endpoint mapping for the WMI stream in the driver layer */
46909 + arSetWMIStream2EndpointIDMap(ar,WmiStreamID,response.Endpoint);
46910 +
46911 + } while (FALSE);
46912 +
46913 + return status;
46914 +}
46915 +
46916 +static void ar6000_TxDataCleanup(AR_SOFTC_T *ar)
46917 +{
46918 + /* flush all the data (non-control) streams
46919 + * we only flush packets that are tagged as data, we leave any control packets that
46920 + * were in the TX queues alone */
46921 + HTCFlushEndpoint(ar->arHtcTarget,
46922 + arWMIStream2EndpointID(ar,WMI_BEST_EFFORT_PRI),
46923 + AR6K_DATA_PKT_TAG);
46924 + HTCFlushEndpoint(ar->arHtcTarget,
46925 + arWMIStream2EndpointID(ar,WMI_LOW_PRI),
46926 + AR6K_DATA_PKT_TAG);
46927 + HTCFlushEndpoint(ar->arHtcTarget,
46928 + arWMIStream2EndpointID(ar,WMI_HIGH_PRI),
46929 + AR6K_DATA_PKT_TAG);
46930 + HTCFlushEndpoint(ar->arHtcTarget,
46931 + arWMIStream2EndpointID(ar,WMI_HIGHEST_PRI),
46932 + AR6K_DATA_PKT_TAG);
46933 +}
46934 +
46935 +/* This function does one time initialization for the lifetime of the device */
46936 +int ar6000_init(struct net_device *dev)
46937 +{
46938 + AR_SOFTC_T *ar;
46939 + A_STATUS status;
46940 + A_INT32 timeleft;
46941 +
46942 + if((ar = netdev_priv(dev)) == NULL)
46943 + {
46944 + return(-EIO);
46945 + }
46946 +
46947 + /* Do we need to finish the BMI phase */
46948 + if(BMIDone(ar->arHifDevice) != A_OK)
46949 + {
46950 + return -EIO;
46951 + }
46952 +
46953 + if (!bypasswmi)
46954 + {
46955 +#if 0 /* TBDXXX */
46956 + if (ar->arVersion.host_ver != ar->arVersion.target_ver) {
46957 + A_PRINTF("WARNING: Host version 0x%x does not match Target "
46958 + " version 0x%x!\n",
46959 + ar->arVersion.host_ver, ar->arVersion.target_ver);
46960 + }
46961 +#endif
46962 +
46963 + /* Indicate that WMI is enabled (although not ready yet) */
46964 + ar->arWmiEnabled = TRUE;
46965 + if ((ar->arWmi = wmi_init((void *) ar)) == NULL)
46966 + {
46967 + AR_DEBUG_PRINTF("%s() Failed to initialize WMI.\n", __func__);
46968 + return(-EIO);
46969 + }
46970 +
46971 + AR_DEBUG_PRINTF("%s() Got WMI @ 0x%08x.\n", __func__,
46972 + (unsigned int) ar->arWmi);
46973 + }
46974 +
46975 + do {
46976 + HTC_SERVICE_CONNECT_REQ connect;
46977 +
46978 + /* the reason we have to wait for the target here is that the driver layer
46979 + * has to init BMI in order to set the host block size,
46980 + */
46981 + status = HTCWaitTarget(ar->arHtcTarget);
46982 +
46983 + if (A_FAILED(status)) {
46984 + break;
46985 + }
46986 +
46987 + A_MEMZERO(&connect,sizeof(connect));
46988 + /* meta data is unused for now */
46989 + connect.pMetaData = NULL;
46990 + connect.MetaDataLength = 0;
46991 + /* these fields are the same for all service endpoints */
46992 + connect.EpCallbacks.pContext = ar;
46993 + connect.EpCallbacks.EpTxComplete = ar6000_tx_complete;
46994 + connect.EpCallbacks.EpRecv = ar6000_rx;
46995 + connect.EpCallbacks.EpRecvRefill = ar6000_rx_refill;
46996 + connect.EpCallbacks.EpSendFull = ar6000_tx_queue_full;
46997 + /* set the max queue depth so that our ar6000_tx_queue_full handler gets called.
46998 + * Linux has the peculiarity of not providing flow control between the
46999 + * NIC and the network stack. There is no API to indicate that a TX packet
47000 + * was sent which could provide some back pressure to the network stack.
47001 + * Under linux you would have to wait till the network stack consumed all sk_buffs
47002 + * before any back-flow kicked in. Which isn't very friendly.
47003 + * So we have to manage this ourselves */
47004 + connect.MaxSendQueueDepth = 32;
47005 +
47006 + /* connect to control service */
47007 + connect.ServiceID = WMI_CONTROL_SVC;
47008 + status = ar6000_connectservice(ar,
47009 + &connect,
47010 + WMI_CONTROL_PRI,
47011 + "WMI CONTROL");
47012 + if (A_FAILED(status)) {
47013 + break;
47014 + }
47015 +
47016 + /* for the remaining data services set the connection flag to reduce dribbling,
47017 + * if configured to do so */
47018 + if (reduce_credit_dribble) {
47019 + connect.ConnectionFlags |= HTC_CONNECT_FLAGS_REDUCE_CREDIT_DRIBBLE;
47020 + /* the credit dribble trigger threshold is (reduce_credit_dribble - 1) for a value
47021 + * of 0-3 */
47022 + connect.ConnectionFlags &= ~HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_MASK;
47023 + connect.ConnectionFlags |=
47024 + ((A_UINT16)reduce_credit_dribble - 1) & HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_MASK;
47025 + }
47026 + /* connect to best-effort service */
47027 + connect.ServiceID = WMI_DATA_BE_SVC;
47028 +
47029 + status = ar6000_connectservice(ar,
47030 + &connect,
47031 + WMI_BEST_EFFORT_PRI,
47032 + "WMI DATA BE");
47033 + if (A_FAILED(status)) {
47034 + break;
47035 + }
47036 +
47037 + /* connect to back-ground
47038 + * map this to WMI LOW_PRI */
47039 + connect.ServiceID = WMI_DATA_BK_SVC;
47040 + status = ar6000_connectservice(ar,
47041 + &connect,
47042 + WMI_LOW_PRI,
47043 + "WMI DATA BK");
47044 + if (A_FAILED(status)) {
47045 + break;
47046 + }
47047 +
47048 + /* connect to Video service, map this to
47049 + * to HI PRI */
47050 + connect.ServiceID = WMI_DATA_VI_SVC;
47051 + status = ar6000_connectservice(ar,
47052 + &connect,
47053 + WMI_HIGH_PRI,
47054 + "WMI DATA VI");
47055 + if (A_FAILED(status)) {
47056 + break;
47057 + }
47058 +
47059 + /* connect to VO service, this is currently not
47060 + * mapped to a WMI priority stream due to historical reasons.
47061 + * WMI originally defined 3 priorities over 3 mailboxes
47062 + * We can change this when WMI is reworked so that priorities are not
47063 + * dependent on mailboxes */
47064 + connect.ServiceID = WMI_DATA_VO_SVC;
47065 + status = ar6000_connectservice(ar,
47066 + &connect,
47067 + WMI_HIGHEST_PRI,
47068 + "WMI DATA VO");
47069 + if (A_FAILED(status)) {
47070 + break;
47071 + }
47072 +
47073 + A_ASSERT(arWMIStream2EndpointID(ar,WMI_CONTROL_PRI) != 0);
47074 + A_ASSERT(arWMIStream2EndpointID(ar,WMI_BEST_EFFORT_PRI) != 0);
47075 + A_ASSERT(arWMIStream2EndpointID(ar,WMI_LOW_PRI) != 0);
47076 + A_ASSERT(arWMIStream2EndpointID(ar,WMI_HIGH_PRI) != 0);
47077 + A_ASSERT(arWMIStream2EndpointID(ar,WMI_HIGHEST_PRI) != 0);
47078 + } while (FALSE);
47079 +
47080 + if (A_FAILED(status)) {
47081 + return (-EIO);
47082 + }
47083 +
47084 + /*
47085 + * give our connected endpoints some buffers
47086 + */
47087 + ar6000_rx_refill(ar, arWMIStream2EndpointID(ar,WMI_CONTROL_PRI));
47088 +
47089 + ar6000_rx_refill(ar, arWMIStream2EndpointID(ar,WMI_BEST_EFFORT_PRI));
47090 +
47091 + /*
47092 + * We will post the receive buffers only for SPE testing and so we are
47093 + * making it conditional on the 'bypasswmi' flag.
47094 + */
47095 + if (bypasswmi) {
47096 + ar6000_rx_refill(ar,arWMIStream2EndpointID(ar,WMI_LOW_PRI));
47097 + ar6000_rx_refill(ar,arWMIStream2EndpointID(ar,WMI_HIGH_PRI));
47098 + }
47099 +
47100 + /* setup credit distribution */
47101 + ar6000_setup_credit_dist(ar->arHtcTarget, &ar->arCreditStateInfo);
47102 +
47103 + /* Since cookies are used for HTC transports, they should be */
47104 + /* initialized prior to enabling HTC. */
47105 + ar6000_cookie_init(ar);
47106 +
47107 + /* start HTC */
47108 + status = HTCStart(ar->arHtcTarget);
47109 +
47110 + if (status != A_OK) {
47111 + if (ar->arWmiEnabled == TRUE) {
47112 + wmi_shutdown(ar->arWmi);
47113 + ar->arWmiEnabled = FALSE;
47114 + ar->arWmi = NULL;
47115 + }
47116 + ar6000_cookie_cleanup(ar);
47117 + return -EIO;
47118 + }
47119 +
47120 + if (!bypasswmi) {
47121 + /* Wait for Wmi event to be ready */
47122 + timeleft = wait_event_interruptible_timeout(arEvent,
47123 + (ar->arWmiReady == TRUE), wmitimeout * HZ);
47124 +
47125 + if(!timeleft || signal_pending(current))
47126 + {
47127 + AR_DEBUG_PRINTF("WMI is not ready or wait was interrupted\n");
47128 +#if defined(DWSIM) /* TBDXXX */
47129 + AR_DEBUG_PRINTF(".....but proceed anyway.\n");
47130 +#else
47131 + return -EIO;
47132 +#endif
47133 + }
47134 +
47135 + AR_DEBUG_PRINTF("%s() WMI is ready\n", __func__);
47136 +
47137 + /* Communicate the wmi protocol verision to the target */
47138 + if ((ar6000_set_host_app_area(ar)) != A_OK) {
47139 + AR_DEBUG_PRINTF("Unable to set the host app area\n");
47140 + }
47141 + }
47142 +
47143 + ar->arNumDataEndPts = 1;
47144 +
47145 + return(0);
47146 +}
47147 +
47148 +
47149 +void
47150 +ar6000_bitrate_rx(void *devt, A_INT32 rateKbps)
47151 +{
47152 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
47153 +
47154 + ar->arBitRate = rateKbps;
47155 + wake_up(&arEvent);
47156 +}
47157 +
47158 +void
47159 +ar6000_ratemask_rx(void *devt, A_UINT16 ratemask)
47160 +{
47161 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
47162 +
47163 + ar->arRateMask = ratemask;
47164 + wake_up(&arEvent);
47165 +}
47166 +
47167 +void
47168 +ar6000_txPwr_rx(void *devt, A_UINT8 txPwr)
47169 +{
47170 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
47171 +
47172 + ar->arTxPwr = txPwr;
47173 + wake_up(&arEvent);
47174 +}
47175 +
47176 +
47177 +void
47178 +ar6000_channelList_rx(void *devt, A_INT8 numChan, A_UINT16 *chanList)
47179 +{
47180 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
47181 +
47182 + A_MEMCPY(ar->arChannelList, chanList, numChan * sizeof (A_UINT16));
47183 + ar->arNumChannels = numChan;
47184 +
47185 + wake_up(&arEvent);
47186 +}
47187 +
47188 +A_UINT8
47189 +ar6000_ibss_map_epid(struct sk_buff *skb, struct net_device *dev, A_UINT32 * mapNo)
47190 +{
47191 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
47192 + A_UINT8 *datap;
47193 + ATH_MAC_HDR *macHdr;
47194 + A_UINT32 i, eptMap;
47195 +
47196 + (*mapNo) = 0;
47197 + datap = A_NETBUF_DATA(skb);
47198 + macHdr = (ATH_MAC_HDR *)(datap + sizeof(WMI_DATA_HDR));
47199 + if (IEEE80211_IS_MULTICAST(macHdr->dstMac)) {
47200 + return ENDPOINT_2;
47201 + }
47202 +
47203 + eptMap = -1;
47204 + for (i = 0; i < ar->arNodeNum; i ++) {
47205 + if (IEEE80211_ADDR_EQ(macHdr->dstMac, ar->arNodeMap[i].macAddress)) {
47206 + (*mapNo) = i + 1;
47207 + ar->arNodeMap[i].txPending ++;
47208 + return ar->arNodeMap[i].epId;
47209 + }
47210 +
47211 + if ((eptMap == -1) && !ar->arNodeMap[i].txPending) {
47212 + eptMap = i;
47213 + }
47214 + }
47215 +
47216 + if (eptMap == -1) {
47217 + eptMap = ar->arNodeNum;
47218 + ar->arNodeNum ++;
47219 + A_ASSERT(ar->arNodeNum <= MAX_NODE_NUM);
47220 + }
47221 +
47222 + A_MEMCPY(ar->arNodeMap[eptMap].macAddress, macHdr->dstMac, IEEE80211_ADDR_LEN);
47223 +
47224 + for (i = ENDPOINT_2; i <= ENDPOINT_5; i ++) {
47225 + if (!ar->arTxPending[i]) {
47226 + ar->arNodeMap[eptMap].epId = i;
47227 + break;
47228 + }
47229 + // No free endpoint is available, start redistribution on the inuse endpoints.
47230 + if (i == ENDPOINT_5) {
47231 + ar->arNodeMap[eptMap].epId = ar->arNexEpId;
47232 + ar->arNexEpId ++;
47233 + if (ar->arNexEpId > ENDPOINT_5) {
47234 + ar->arNexEpId = ENDPOINT_2;
47235 + }
47236 + }
47237 + }
47238 +
47239 + (*mapNo) = eptMap + 1;
47240 + ar->arNodeMap[eptMap].txPending ++;
47241 +
47242 + return ar->arNodeMap[eptMap].epId;
47243 +}
47244 +
47245 +#ifdef DEBUG
47246 +static void ar6000_dump_skb(struct sk_buff *skb)
47247 +{
47248 + u_char *ch;
47249 + for (ch = A_NETBUF_DATA(skb);
47250 + (A_UINT32)ch < ((A_UINT32)A_NETBUF_DATA(skb) +
47251 + A_NETBUF_LEN(skb)); ch++)
47252 + {
47253 + AR_DEBUG_PRINTF("%2.2x ", *ch);
47254 + }
47255 + AR_DEBUG_PRINTF("\n");
47256 +}
47257 +#endif
47258 +
47259 +static int
47260 +ar6000_data_tx(struct sk_buff *skb, struct net_device *dev)
47261 +{
47262 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
47263 + WMI_PRI_STREAM_ID streamID = WMI_NOT_MAPPED;
47264 + A_UINT32 mapNo = 0;
47265 + int len;
47266 + struct ar_cookie *cookie;
47267 + A_BOOL checkAdHocPsMapping = FALSE;
47268 +
47269 +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,13)
47270 + skb->list = NULL;
47271 +#endif
47272 +
47273 + AR_DEBUG2_PRINTF("ar6000_data_tx start - skb=0x%x, data=0x%x, len=0x%x\n",
47274 + (A_UINT32)skb, (A_UINT32)A_NETBUF_DATA(skb),
47275 + A_NETBUF_LEN(skb));
47276 +#ifdef CONFIG_HOST_TCMD_SUPPORT
47277 + /* TCMD doesnt support any data, free the buf and return */
47278 + if(ar->arTargetMode == AR6000_TCMD_MODE) {
47279 + A_NETBUF_FREE(skb);
47280 + return 0;
47281 + }
47282 +#endif
47283 + do {
47284 +
47285 + if (ar->arWmiReady == FALSE && bypasswmi == 0) {
47286 + break;
47287 + }
47288 +
47289 +#ifdef BLOCK_TX_PATH_FLAG
47290 + if (blocktx) {
47291 + break;
47292 + }
47293 +#endif /* BLOCK_TX_PATH_FLAG */
47294 +
47295 + if (ar->arWmiEnabled) {
47296 + if (A_NETBUF_HEADROOM(skb) < dev->hard_header_len) {
47297 + struct sk_buff *newbuf;
47298 + /*
47299 + * We really should have gotten enough headroom but sometimes
47300 + * we still get packets with not enough headroom. Copy the packet.
47301 + */
47302 + len = A_NETBUF_LEN(skb);
47303 + newbuf = A_NETBUF_ALLOC(len);
47304 + if (newbuf == NULL) {
47305 + break;
47306 + }
47307 + A_NETBUF_PUT(newbuf, len);
47308 + A_MEMCPY(A_NETBUF_DATA(newbuf), A_NETBUF_DATA(skb), len);
47309 + A_NETBUF_FREE(skb);
47310 + skb = newbuf;
47311 + /* fall through and assemble header */
47312 + }
47313 +
47314 + if (wmi_dix_2_dot3(ar->arWmi, skb) != A_OK) {
47315 + AR_DEBUG_PRINTF("ar6000_data_tx - wmi_dix_2_dot3 failed\n");
47316 + break;
47317 + }
47318 +
47319 + if (wmi_data_hdr_add(ar->arWmi, skb, DATA_MSGTYPE) != A_OK) {
47320 + AR_DEBUG_PRINTF("ar6000_data_tx - wmi_data_hdr_add failed\n");
47321 + break;
47322 + }
47323 +
47324 + if ((ar->arNetworkType == ADHOC_NETWORK) &&
47325 + ar->arIbssPsEnable && ar->arConnected) {
47326 + /* flag to check adhoc mapping once we take the lock below: */
47327 + checkAdHocPsMapping = TRUE;
47328 +
47329 + } else {
47330 + /* get the stream mapping */
47331 + if (ar->arWmmEnabled) {
47332 + streamID = wmi_get_stream_id(ar->arWmi,
47333 + wmi_implicit_create_pstream(ar->arWmi, skb, UPLINK_TRAFFIC, UNDEFINED_PRI));
47334 + } else {
47335 + streamID = WMI_BEST_EFFORT_PRI;
47336 + }
47337 + }
47338 +
47339 + } else {
47340 + struct iphdr *ipHdr;
47341 + /*
47342 + * the endpoint is directly based on the TOS field in the IP
47343 + * header **** only for testing ******
47344 + */
47345 + ipHdr = A_NETBUF_DATA(skb) + sizeof(ATH_MAC_HDR);
47346 + /* here we map the TOS field to an endpoint number, this is for
47347 + * the endpointping test application */
47348 + streamID = IP_TOS_TO_WMI_PRI(ipHdr->tos);
47349 + }
47350 +
47351 + } while (FALSE);
47352 +
47353 + /* did we succeed ? */
47354 + if ((streamID == WMI_NOT_MAPPED) && !checkAdHocPsMapping) {
47355 + /* cleanup and exit */
47356 + A_NETBUF_FREE(skb);
47357 + AR6000_STAT_INC(ar, tx_dropped);
47358 + AR6000_STAT_INC(ar, tx_aborted_errors);
47359 + return 0;
47360 + }
47361 +
47362 + cookie = NULL;
47363 +
47364 + /* take the lock to protect driver data */
47365 + AR6000_SPIN_LOCK(&ar->arLock, 0);
47366 +
47367 + do {
47368 +
47369 + if (checkAdHocPsMapping) {
47370 + streamID = ar6000_ibss_map_epid(skb, dev, &mapNo);
47371 + }
47372 +
47373 + A_ASSERT(streamID != WMI_NOT_MAPPED);
47374 +
47375 + /* validate that the endpoint is connected */
47376 + if (arWMIStream2EndpointID(ar,streamID) == 0) {
47377 + AR_DEBUG_PRINTF("Stream %d is NOT mapped!\n",streamID);
47378 + break;
47379 + }
47380 + /* allocate resource for this packet */
47381 + cookie = ar6000_alloc_cookie(ar);
47382 +
47383 + if (cookie != NULL) {
47384 + /* update counts while the lock is held */
47385 + ar->arTxPending[streamID]++;
47386 + ar->arTotalTxDataPending++;
47387 + }
47388 +
47389 + } while (FALSE);
47390 +
47391 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
47392 +
47393 + if (cookie != NULL) {
47394 + cookie->arc_bp[0] = (A_UINT32)skb;
47395 + cookie->arc_bp[1] = mapNo;
47396 + SET_HTC_PACKET_INFO_TX(&cookie->HtcPkt,
47397 + cookie,
47398 + A_NETBUF_DATA(skb),
47399 + A_NETBUF_LEN(skb),
47400 + arWMIStream2EndpointID(ar,streamID),
47401 + AR6K_DATA_PKT_TAG);
47402 +
47403 +#ifdef DEBUG
47404 + if (debugdriver >= 3) {
47405 + ar6000_dump_skb(skb);
47406 + }
47407 +#endif
47408 + /* HTC interface is asynchronous, if this fails, cleanup will happen in
47409 + * the ar6000_tx_complete callback */
47410 + HTCSendPkt(ar->arHtcTarget, &cookie->HtcPkt);
47411 + } else {
47412 + /* no packet to send, cleanup */
47413 + A_NETBUF_FREE(skb);
47414 + AR6000_STAT_INC(ar, tx_dropped);
47415 + AR6000_STAT_INC(ar, tx_aborted_errors);
47416 + }
47417 +
47418 + return 0;
47419 +}
47420 +
47421 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
47422 +static void
47423 +tvsub(register struct timeval *out, register struct timeval *in)
47424 +{
47425 + if((out->tv_usec -= in->tv_usec) < 0) {
47426 + out->tv_sec--;
47427 + out->tv_usec += 1000000;
47428 + }
47429 + out->tv_sec -= in->tv_sec;
47430 +}
47431 +
47432 +void
47433 +applyAPTCHeuristics(AR_SOFTC_T *ar)
47434 +{
47435 + A_UINT32 duration;
47436 + A_UINT32 numbytes;
47437 + A_UINT32 throughput;
47438 + struct timeval ts;
47439 + A_STATUS status;
47440 +
47441 + AR6000_SPIN_LOCK(&ar->arLock, 0);
47442 +
47443 + if ((enableAPTCHeuristics) && (!aptcTR.timerScheduled)) {
47444 + do_gettimeofday(&ts);
47445 + tvsub(&ts, &aptcTR.samplingTS);
47446 + duration = ts.tv_sec * 1000 + ts.tv_usec / 1000; /* ms */
47447 + numbytes = aptcTR.bytesTransmitted + aptcTR.bytesReceived;
47448 +
47449 + if (duration > APTC_TRAFFIC_SAMPLING_INTERVAL) {
47450 + /* Initialize the time stamp and byte count */
47451 + aptcTR.bytesTransmitted = aptcTR.bytesReceived = 0;
47452 + do_gettimeofday(&aptcTR.samplingTS);
47453 +
47454 + /* Calculate and decide based on throughput thresholds */
47455 + throughput = ((numbytes * 8) / duration);
47456 + if (throughput > APTC_UPPER_THROUGHPUT_THRESHOLD) {
47457 + /* Disable Sleep and schedule a timer */
47458 + A_ASSERT(ar->arWmiReady == TRUE);
47459 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
47460 + status = wmi_powermode_cmd(ar->arWmi, MAX_PERF_POWER);
47461 + AR6000_SPIN_LOCK(&ar->arLock, 0);
47462 + A_TIMEOUT_MS(&aptcTimer, APTC_TRAFFIC_SAMPLING_INTERVAL, 0);
47463 + aptcTR.timerScheduled = TRUE;
47464 + }
47465 + }
47466 + }
47467 +
47468 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
47469 +}
47470 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
47471 +
47472 +static void ar6000_tx_queue_full(void *Context, HTC_ENDPOINT_ID Endpoint)
47473 +{
47474 + AR_SOFTC_T *ar = (AR_SOFTC_T *)Context;
47475 +
47476 +
47477 + if (Endpoint == arWMIStream2EndpointID(ar,WMI_CONTROL_PRI)) {
47478 + if (!bypasswmi) {
47479 + /* under normal WMI if this is getting full, then something is running rampant
47480 + * the host should not be exhausting the WMI queue with too many commands
47481 + * the only exception to this is during testing using endpointping */
47482 +
47483 + AR6000_SPIN_LOCK(&ar->arLock, 0);
47484 + /* set flag to handle subsequent messages */
47485 + ar->arWMIControlEpFull = TRUE;
47486 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
47487 + AR_DEBUG_PRINTF("WMI Control Endpoint is FULL!!! \n");
47488 + }
47489 + } else {
47490 +
47491 + AR6000_SPIN_LOCK(&ar->arLock, 0);
47492 + ar->arNetQueueStopped = TRUE;
47493 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
47494 + /* one of the data endpoints queues is getting full..need to stop network stack
47495 + * the queue will resume in ar6000_tx_complete() */
47496 + netif_stop_queue(ar->arNetDev);
47497 + }
47498 +
47499 +
47500 +}
47501 +
47502 +
47503 +static void
47504 +ar6000_tx_complete(void *Context, HTC_PACKET *pPacket)
47505 +{
47506 + AR_SOFTC_T *ar = (AR_SOFTC_T *)Context;
47507 + void *cookie = (void *)pPacket->pPktContext;
47508 + struct sk_buff *skb = NULL;
47509 + A_UINT32 mapNo = 0;
47510 + A_STATUS status;
47511 + struct ar_cookie * ar_cookie;
47512 + WMI_PRI_STREAM_ID streamID;
47513 + A_BOOL wakeEvent = FALSE;
47514 +
47515 + status = pPacket->Status;
47516 + ar_cookie = (struct ar_cookie *)cookie;
47517 + skb = (struct sk_buff *)ar_cookie->arc_bp[0];
47518 + streamID = arEndpoint2WMIStreamID(ar,pPacket->Endpoint);
47519 + mapNo = ar_cookie->arc_bp[1];
47520 +
47521 + A_ASSERT(skb);
47522 + A_ASSERT(pPacket->pBuffer == A_NETBUF_DATA(skb));
47523 +
47524 + if (A_SUCCESS(status)) {
47525 + A_ASSERT(pPacket->ActualLength == A_NETBUF_LEN(skb));
47526 + }
47527 +
47528 + AR_DEBUG2_PRINTF("ar6000_tx_complete skb=0x%x data=0x%x len=0x%x sid=%d ",
47529 + (A_UINT32)skb, (A_UINT32)pPacket->pBuffer,
47530 + pPacket->ActualLength,
47531 + streamID);
47532 +
47533 + /* lock the driver as we update internal state */
47534 + AR6000_SPIN_LOCK(&ar->arLock, 0);
47535 +
47536 + ar->arTxPending[streamID]--;
47537 +
47538 + if ((streamID != WMI_CONTROL_PRI) || bypasswmi) {
47539 + ar->arTotalTxDataPending--;
47540 + }
47541 +
47542 + if (streamID == WMI_CONTROL_PRI)
47543 + {
47544 + if (ar->arWMIControlEpFull) {
47545 + /* since this packet completed, the WMI EP is no longer full */
47546 + ar->arWMIControlEpFull = FALSE;
47547 + }
47548 +
47549 + if (ar->arTxPending[streamID] == 0) {
47550 + wakeEvent = TRUE;
47551 + }
47552 + }
47553 +
47554 + if (A_FAILED(status)) {
47555 + AR_DEBUG_PRINTF("%s() -TX ERROR, status: 0x%x\n", __func__,
47556 + status);
47557 + AR6000_STAT_INC(ar, tx_errors);
47558 + } else {
47559 + AR_DEBUG2_PRINTF("OK\n");
47560 + AR6000_STAT_INC(ar, tx_packets);
47561 + ar->arNetStats.tx_bytes += A_NETBUF_LEN(skb);
47562 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
47563 + aptcTR.bytesTransmitted += a_netbuf_to_len(skb);
47564 + applyAPTCHeuristics(ar);
47565 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
47566 + }
47567 +
47568 + // TODO this needs to be looked at
47569 + if ((ar->arNetworkType == ADHOC_NETWORK) && ar->arIbssPsEnable
47570 + && (streamID != WMI_CONTROL_PRI) && mapNo)
47571 + {
47572 + mapNo --;
47573 + ar->arNodeMap[mapNo].txPending --;
47574 +
47575 + if (!ar->arNodeMap[mapNo].txPending && (mapNo == (ar->arNodeNum - 1))) {
47576 + A_UINT32 i;
47577 + for (i = ar->arNodeNum; i > 0; i --) {
47578 + if (!ar->arNodeMap[i - 1].txPending) {
47579 + A_MEMZERO(&ar->arNodeMap[i - 1], sizeof(struct ar_node_mapping));
47580 + ar->arNodeNum --;
47581 + } else {
47582 + break;
47583 + }
47584 + }
47585 + }
47586 + }
47587 +
47588 + /* Freeing a cookie should not be contingent on either of */
47589 + /* these flags, just if we have a cookie or not. */
47590 + /* Can we even get here without a cookie? Fix later. */
47591 + if (ar->arWmiReady == TRUE || (bypasswmi))
47592 + {
47593 + ar6000_free_cookie(ar, cookie);
47594 + }
47595 +
47596 + if (ar->arNetQueueStopped) {
47597 + ar->arNetQueueStopped = FALSE;
47598 + }
47599 +
47600 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
47601 +
47602 + /* lock is released, we can freely call other kernel APIs */
47603 +
47604 + /* this indirectly frees the HTC_PACKET */
47605 + A_NETBUF_FREE(skb);
47606 +
47607 + if ((ar->arConnected == TRUE) || (bypasswmi)) {
47608 + if (status != A_ECANCELED) {
47609 + /* don't wake the queue if we are flushing, other wise it will just
47610 + * keep queueing packets, which will keep failing */
47611 + netif_wake_queue(ar->arNetDev);
47612 + }
47613 + }
47614 +
47615 + if (wakeEvent) {
47616 + wake_up(&arEvent);
47617 + }
47618 +
47619 +}
47620 +
47621 +/*
47622 + * Receive event handler. This is called by HTC when a packet is received
47623 + */
47624 +int pktcount;
47625 +static void
47626 +ar6000_rx(void *Context, HTC_PACKET *pPacket)
47627 +{
47628 + AR_SOFTC_T *ar = (AR_SOFTC_T *)Context;
47629 + struct sk_buff *skb = (struct sk_buff *)pPacket->pPktContext;
47630 + int minHdrLen;
47631 + A_STATUS status = pPacket->Status;
47632 + WMI_PRI_STREAM_ID streamID = arEndpoint2WMIStreamID(ar,pPacket->Endpoint);
47633 + HTC_ENDPOINT_ID ept = pPacket->Endpoint;
47634 +
47635 + A_ASSERT((status != A_OK) || (pPacket->pBuffer == (A_NETBUF_DATA(skb) + HTC_HEADER_LEN)));
47636 +
47637 + AR_DEBUG2_PRINTF("ar6000_rx ar=0x%x sid=%d, skb=0x%x, data=0x%x, len=0x%x ",
47638 + (A_UINT32)ar, streamID, (A_UINT32)skb, (A_UINT32)pPacket->pBuffer,
47639 + pPacket->ActualLength);
47640 + if (status != A_OK) {
47641 + AR_DEBUG2_PRINTF("ERR\n");
47642 + } else {
47643 + AR_DEBUG2_PRINTF("OK\n");
47644 + }
47645 +
47646 + /* take lock to protect buffer counts
47647 + * and adaptive power throughput state */
47648 + AR6000_SPIN_LOCK(&ar->arLock, 0);
47649 +
47650 + ar->arRxBuffers[streamID]--;
47651 +
47652 + if (A_SUCCESS(status)) {
47653 + AR6000_STAT_INC(ar, rx_packets);
47654 + ar->arNetStats.rx_bytes += pPacket->ActualLength;
47655 +#ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
47656 + aptcTR.bytesReceived += a_netbuf_to_len(skb);
47657 + applyAPTCHeuristics(ar);
47658 +#endif /* ADAPTIVE_POWER_THROUGHPUT_CONTROL */
47659 +
47660 + A_NETBUF_PUT(skb, pPacket->ActualLength + HTC_HEADER_LEN);
47661 + A_NETBUF_PULL(skb, HTC_HEADER_LEN);
47662 +
47663 +#ifdef DEBUG
47664 + if (debugdriver >= 2) {
47665 + ar6000_dump_skb(skb);
47666 + }
47667 +#endif /* DEBUG */
47668 + }
47669 +
47670 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
47671 +
47672 + if (status != A_OK) {
47673 + AR6000_STAT_INC(ar, rx_errors);
47674 + A_NETBUF_FREE(skb);
47675 + } else if (ar->arWmiEnabled == TRUE) {
47676 + if (streamID == WMI_CONTROL_PRI) {
47677 + /*
47678 + * this is a wmi control msg
47679 + */
47680 + wmi_control_rx(ar->arWmi, skb);
47681 + } else {
47682 + WMI_DATA_HDR *dhdr = (WMI_DATA_HDR *)A_NETBUF_DATA(skb);
47683 + if (WMI_DATA_HDR_IS_MSG_TYPE(dhdr, CNTL_MSGTYPE)) {
47684 + /*
47685 + * this is a wmi control msg
47686 + */
47687 + /* strip off WMI hdr */
47688 + wmi_data_hdr_remove(ar->arWmi, skb);
47689 + wmi_control_rx(ar->arWmi, skb);
47690 + } else {
47691 + /*
47692 + * this is a wmi data packet
47693 + */
47694 + minHdrLen = sizeof (WMI_DATA_HDR) + sizeof(ATH_MAC_HDR) +
47695 + sizeof(ATH_LLC_SNAP_HDR);
47696 +
47697 + if ((pPacket->ActualLength < minHdrLen) ||
47698 + (pPacket->ActualLength > AR6000_BUFFER_SIZE))
47699 + {
47700 + /*
47701 + * packet is too short or too long
47702 + */
47703 + AR_DEBUG_PRINTF("TOO SHORT or TOO LONG\n");
47704 + AR6000_STAT_INC(ar, rx_errors);
47705 + AR6000_STAT_INC(ar, rx_length_errors);
47706 + A_NETBUF_FREE(skb);
47707 + } else {
47708 + if (ar->arWmmEnabled) {
47709 + wmi_implicit_create_pstream(ar->arWmi, skb,
47710 + DNLINK_TRAFFIC, UNDEFINED_PRI);
47711 + }
47712 +#if 0
47713 + /* Access RSSI values here */
47714 + AR_DEBUG_PRINTF("RSSI %d\n",
47715 + ((WMI_DATA_HDR *) A_NETBUF_DATA(skb))->rssi);
47716 +#endif
47717 + wmi_data_hdr_remove(ar->arWmi, skb);
47718 + wmi_dot3_2_dix(ar->arWmi, skb);
47719 +
47720 +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
47721 + /*
47722 + * extra push and memcpy, for eth_type_trans() of 2.4 kernel
47723 + * will pull out hard_header_len bytes of the skb.
47724 + */
47725 + A_NETBUF_PUSH(skb, sizeof(WMI_DATA_HDR) + sizeof(ATH_LLC_SNAP_HDR) + HTC_HEADER_LEN);
47726 + A_MEMCPY(A_NETBUF_DATA(skb), A_NETBUF_DATA(skb) + sizeof(WMI_DATA_HDR) +
47727 + sizeof(ATH_LLC_SNAP_HDR) + HTC_HEADER_LEN, sizeof(ATH_MAC_HDR));
47728 +#endif
47729 + if ((ar->arNetDev->flags & IFF_UP) == IFF_UP)
47730 + {
47731 + skb->dev = ar->arNetDev;
47732 + skb->protocol = eth_type_trans(skb, ar->arNetDev);
47733 + netif_rx(skb);
47734 + }
47735 + else
47736 + {
47737 + A_NETBUF_FREE(skb);
47738 + }
47739 + }
47740 + }
47741 + }
47742 + } else {
47743 + if ((ar->arNetDev->flags & IFF_UP) == IFF_UP)
47744 + {
47745 + skb->dev = ar->arNetDev;
47746 + skb->protocol = eth_type_trans(skb, ar->arNetDev);
47747 + netif_rx(skb);
47748 + }
47749 + else
47750 + {
47751 + A_NETBUF_FREE(skb);
47752 + }
47753 + }
47754 +
47755 + if (status != A_ECANCELED) {
47756 + /*
47757 + * HTC provides A_ECANCELED status when it doesn't want to be refilled
47758 + * (probably due to a shutdown)
47759 + */
47760 + ar6000_rx_refill(Context, ept);
47761 + }
47762 +
47763 +
47764 +}
47765 +
47766 +static void
47767 +ar6000_rx_refill(void *Context, HTC_ENDPOINT_ID Endpoint)
47768 +{
47769 + AR_SOFTC_T *ar = (AR_SOFTC_T *)Context;
47770 + void *osBuf;
47771 + int RxBuffers;
47772 + int buffersToRefill;
47773 + HTC_PACKET *pPacket;
47774 + WMI_PRI_STREAM_ID streamId = arEndpoint2WMIStreamID(ar,Endpoint);
47775 +
47776 + buffersToRefill = (int)AR6000_MAX_RX_BUFFERS -
47777 + (int)ar->arRxBuffers[streamId];
47778 +
47779 + if (buffersToRefill <= 0) {
47780 + /* fast return, nothing to fill */
47781 + return;
47782 + }
47783 +
47784 + AR_DEBUG2_PRINTF("ar6000_rx_refill: providing htc with %d buffers at eid=%d\n",
47785 + buffersToRefill, Endpoint);
47786 +
47787 + for (RxBuffers = 0; RxBuffers < buffersToRefill; RxBuffers++) {
47788 + osBuf = A_NETBUF_ALLOC(AR6000_BUFFER_SIZE);
47789 + if (NULL == osBuf) {
47790 + break;
47791 + }
47792 + /* the HTC packet wrapper is at the head of the reserved area
47793 + * in the skb */
47794 + pPacket = (HTC_PACKET *)(A_NETBUF_HEAD(osBuf));
47795 + /* set re-fill info */
47796 + SET_HTC_PACKET_INFO_RX_REFILL(pPacket,osBuf,A_NETBUF_DATA(osBuf),AR6000_BUFFER_SIZE,Endpoint);
47797 + /* add this packet */
47798 + HTCAddReceivePkt(ar->arHtcTarget, pPacket);
47799 + }
47800 +
47801 + /* update count */
47802 + AR6000_SPIN_LOCK(&ar->arLock, 0);
47803 + ar->arRxBuffers[streamId] += RxBuffers;
47804 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
47805 +}
47806 +
47807 +static struct net_device_stats *
47808 +ar6000_get_stats(struct net_device *dev)
47809 +{
47810 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
47811 + return &ar->arNetStats;
47812 +}
47813 +
47814 +static struct iw_statistics *
47815 +ar6000_get_iwstats(struct net_device * dev)
47816 +{
47817 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
47818 + TARGET_STATS *pStats = &ar->arTargetStats;
47819 + struct iw_statistics * pIwStats = &ar->arIwStats;
47820 +
47821 + if ((ar->arWmiReady == FALSE)
47822 + /*
47823 + * The in_atomic function is used to determine if the scheduling is
47824 + * allowed in the current context or not. This was introduced in 2.6
47825 + * From what I have read on the differences between 2.4 and 2.6, the
47826 + * 2.4 kernel did not support preemption and so this check might not
47827 + * be required for 2.4 kernels.
47828 + */
47829 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
47830 + || (in_atomic())
47831 +#endif
47832 + )
47833 + {
47834 + pIwStats->status = 0;
47835 + pIwStats->qual.qual = 0;
47836 + pIwStats->qual.level =0;
47837 + pIwStats->qual.noise = 0;
47838 + pIwStats->discard.code =0;
47839 + pIwStats->discard.retries=0;
47840 + pIwStats->miss.beacon =0;
47841 + return pIwStats;
47842 + }
47843 + if (down_interruptible(&ar->arSem)) {
47844 + pIwStats->status = 0;
47845 + return pIwStats;
47846 + }
47847 +
47848 +
47849 + ar->statsUpdatePending = TRUE;
47850 +
47851 + if(wmi_get_stats_cmd(ar->arWmi) != A_OK) {
47852 + up(&ar->arSem);
47853 + pIwStats->status = 0;
47854 + return pIwStats;
47855 + }
47856 +
47857 + wait_event_interruptible_timeout(arEvent, ar->statsUpdatePending == FALSE, wmitimeout * HZ);
47858 +
47859 + if (signal_pending(current)) {
47860 + AR_DEBUG_PRINTF("ar6000 : WMI get stats timeout \n");
47861 + up(&ar->arSem);
47862 + pIwStats->status = 0;
47863 + return pIwStats;
47864 + }
47865 + pIwStats->status = 1 ;
47866 + pIwStats->qual.qual = pStats->cs_aveBeacon_rssi;
47867 + pIwStats->qual.level =pStats->cs_aveBeacon_rssi + 161; /* noise is -95 dBm */
47868 + pIwStats->qual.noise = pStats->noise_floor_calibation;
47869 + pIwStats->discard.code = pStats->rx_decrypt_err;
47870 + pIwStats->discard.retries = pStats->tx_retry_cnt;
47871 + pIwStats->miss.beacon = pStats->cs_bmiss_cnt;
47872 + up(&ar->arSem);
47873 + return pIwStats;
47874 +}
47875 +
47876 +void
47877 +ar6000_ready_event(void *devt, A_UINT8 *datap, A_UINT8 phyCap)
47878 +{
47879 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
47880 + struct net_device *dev = ar->arNetDev;
47881 +
47882 + ar->arWmiReady = TRUE;
47883 + wake_up(&arEvent);
47884 + A_MEMCPY(dev->dev_addr, datap, AR6000_ETH_ADDR_LEN);
47885 + AR_DEBUG_PRINTF("mac address = %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
47886 + dev->dev_addr[0], dev->dev_addr[1],
47887 + dev->dev_addr[2], dev->dev_addr[3],
47888 + dev->dev_addr[4], dev->dev_addr[5]);
47889 +
47890 + ar->arPhyCapability = phyCap;
47891 +}
47892 +
47893 +A_UINT8
47894 +ar6000_iptos_to_userPriority(A_UINT8 *pkt)
47895 +{
47896 + struct iphdr *ipHdr = (struct iphdr *)pkt;
47897 + A_UINT8 userPriority;
47898 +
47899 + /*
47900 + * IP Tos format :
47901 + * (Refer Pg 57 WMM-test-plan-v1.2)
47902 + * IP-TOS - 8bits
47903 + * : DSCP(6-bits) ECN(2-bits)
47904 + * : DSCP - P2 P1 P0 X X X
47905 + * where (P2 P1 P0) form 802.1D
47906 + */
47907 + userPriority = ipHdr->tos >> 5;
47908 + return (userPriority & 0x7);
47909 +}
47910 +
47911 +void
47912 +ar6000_connect_event(AR_SOFTC_T *ar, A_UINT16 channel, A_UINT8 *bssid,
47913 + A_UINT16 listenInterval, A_UINT16 beaconInterval,
47914 + NETWORK_TYPE networkType, A_UINT8 beaconIeLen,
47915 + A_UINT8 assocReqLen, A_UINT8 assocRespLen,
47916 + A_UINT8 *assocInfo)
47917 +{
47918 + union iwreq_data wrqu;
47919 + int i, beacon_ie_pos, assoc_resp_ie_pos, assoc_req_ie_pos;
47920 + static const char *tag1 = "ASSOCINFO(ReqIEs=";
47921 + static const char *tag2 = "ASSOCRESPIE=";
47922 + static const char *beaconIetag = "BEACONIE=";
47923 + char buf[WMI_CONTROL_MSG_MAX_LEN * 2 + sizeof(tag1)];
47924 + char *pos;
47925 + A_UINT8 key_op_ctrl;
47926 +
47927 + A_MEMCPY(ar->arBssid, bssid, sizeof(ar->arBssid));
47928 + ar->arBssChannel = channel;
47929 +
47930 + A_PRINTF("AR6000 connected event on freq %d ", channel);
47931 + A_PRINTF("with bssid %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x "
47932 + " listenInterval=%d, beaconInterval = %d, beaconIeLen = %d assocReqLen=%d"
47933 + " assocRespLen =%d\n",
47934 + bssid[0], bssid[1], bssid[2],
47935 + bssid[3], bssid[4], bssid[5],
47936 + listenInterval, beaconInterval,
47937 + beaconIeLen, assocReqLen, assocRespLen);
47938 + if (networkType & ADHOC_NETWORK) {
47939 + if (networkType & ADHOC_CREATOR) {
47940 + A_PRINTF("Network: Adhoc (Creator)\n");
47941 + } else {
47942 + A_PRINTF("Network: Adhoc (Joiner)\n");
47943 + }
47944 + } else {
47945 + A_PRINTF("Network: Infrastructure\n");
47946 + }
47947 +
47948 + if (beaconIeLen && (sizeof(buf) > (9 + beaconIeLen * 2))) {
47949 + AR_DEBUG_PRINTF("\nBeaconIEs= ");
47950 +
47951 + beacon_ie_pos = 0;
47952 + A_MEMZERO(buf, sizeof(buf));
47953 + sprintf(buf, "%s", beaconIetag);
47954 + pos = buf + 9;
47955 + for (i = beacon_ie_pos; i < beacon_ie_pos + beaconIeLen; i++) {
47956 + AR_DEBUG_PRINTF("%2.2x ", assocInfo[i]);
47957 + sprintf(pos, "%2.2x", assocInfo[i]);
47958 + pos += 2;
47959 + }
47960 + AR_DEBUG_PRINTF("\n");
47961 +
47962 + A_MEMZERO(&wrqu, sizeof(wrqu));
47963 + wrqu.data.length = strlen(buf);
47964 + wireless_send_event(ar->arNetDev, IWEVCUSTOM, &wrqu, buf);
47965 + }
47966 +
47967 + if (assocRespLen && (sizeof(buf) > (12 + (assocRespLen * 2))))
47968 + {
47969 + assoc_resp_ie_pos = beaconIeLen + assocReqLen +
47970 + sizeof(A_UINT16) + /* capinfo*/
47971 + sizeof(A_UINT16) + /* status Code */
47972 + sizeof(A_UINT16) ; /* associd */
47973 + A_MEMZERO(buf, sizeof(buf));
47974 + sprintf(buf, "%s", tag2);
47975 + pos = buf + 12;
47976 + AR_DEBUG_PRINTF("\nAssocRespIEs= ");
47977 + /*
47978 + * The Association Response Frame w.o. the WLAN header is delivered to
47979 + * the host, so skip over to the IEs
47980 + */
47981 + for (i = assoc_resp_ie_pos; i < assoc_resp_ie_pos + assocRespLen - 6; i++)
47982 + {
47983 + AR_DEBUG_PRINTF("%2.2x ", assocInfo[i]);
47984 + sprintf(pos, "%2.2x", assocInfo[i]);
47985 + pos += 2;
47986 + }
47987 + AR_DEBUG_PRINTF("\n");
47988 +
47989 + A_MEMZERO(&wrqu, sizeof(wrqu));
47990 + wrqu.data.length = strlen(buf);
47991 + wireless_send_event(ar->arNetDev, IWEVCUSTOM, &wrqu, buf);
47992 + }
47993 +
47994 + if (assocReqLen && (sizeof(buf) > (17 + (assocReqLen * 2)))) {
47995 + /*
47996 + * assoc Request includes capability and listen interval. Skip these.
47997 + */
47998 + assoc_req_ie_pos = beaconIeLen +
47999 + sizeof(A_UINT16) + /* capinfo*/
48000 + sizeof(A_UINT16); /* listen interval */
48001 +
48002 + A_MEMZERO(buf, sizeof(buf));
48003 + sprintf(buf, "%s", tag1);
48004 + pos = buf + 17;
48005 + AR_DEBUG_PRINTF("AssocReqIEs= ");
48006 + for (i = assoc_req_ie_pos; i < assoc_req_ie_pos + assocReqLen - 4; i++) {
48007 + AR_DEBUG_PRINTF("%2.2x ", assocInfo[i]);
48008 + sprintf(pos, "%2.2x", assocInfo[i]);
48009 + pos += 2;;
48010 + }
48011 + AR_DEBUG_PRINTF("\n");
48012 +
48013 + A_MEMZERO(&wrqu, sizeof(wrqu));
48014 + wrqu.data.length = strlen(buf);
48015 + wireless_send_event(ar->arNetDev, IWEVCUSTOM, &wrqu, buf);
48016 + }
48017 +
48018 +#ifdef USER_KEYS
48019 + if (ar->user_savedkeys_stat == USER_SAVEDKEYS_STAT_RUN &&
48020 + ar->user_saved_keys.keyOk == TRUE)
48021 + {
48022 +
48023 + key_op_ctrl = KEY_OP_VALID_MASK & ~KEY_OP_INIT_TSC;
48024 + if (ar->user_key_ctrl & AR6000_USER_SETKEYS_RSC_UNCHANGED) {
48025 + key_op_ctrl &= ~KEY_OP_INIT_RSC;
48026 + } else {
48027 + key_op_ctrl |= KEY_OP_INIT_RSC;
48028 + }
48029 + ar6000_reinstall_keys(ar, key_op_ctrl);
48030 + }
48031 +#endif /* USER_KEYS */
48032 +
48033 + /* flush data queues */
48034 + ar6000_TxDataCleanup(ar);
48035 +
48036 + netif_wake_queue(ar->arNetDev);
48037 +
48038 + if ((OPEN_AUTH == ar->arDot11AuthMode) &&
48039 + (NONE_AUTH == ar->arAuthMode) &&
48040 + (WEP_CRYPT == ar->arPairwiseCrypto))
48041 + {
48042 + if (!ar->arConnected) {
48043 + ar6000_install_static_wep_keys(ar);
48044 + }
48045 + }
48046 +
48047 + ar->arConnected = TRUE;
48048 + ar->arConnectPending = FALSE;
48049 +
48050 + reconnect_flag = 0;
48051 +
48052 + A_MEMZERO(&wrqu, sizeof(wrqu));
48053 + A_MEMCPY(wrqu.addr.sa_data, bssid, IEEE80211_ADDR_LEN);
48054 + wrqu.addr.sa_family = ARPHRD_ETHER;
48055 + wireless_send_event(ar->arNetDev, SIOCGIWAP, &wrqu, NULL);
48056 + if ((ar->arNetworkType == ADHOC_NETWORK) && ar->arIbssPsEnable) {
48057 + A_MEMZERO(ar->arNodeMap, sizeof(ar->arNodeMap));
48058 + ar->arNodeNum = 0;
48059 + ar->arNexEpId = ENDPOINT_2;
48060 + }
48061 +
48062 +}
48063 +
48064 +void ar6000_set_numdataendpts(AR_SOFTC_T *ar, A_UINT32 num)
48065 +{
48066 + A_ASSERT(num <= (HTC_MAILBOX_NUM_MAX - 1));
48067 + ar->arNumDataEndPts = num;
48068 +}
48069 +
48070 +void
48071 +ar6000_disconnect_event(AR_SOFTC_T *ar, A_UINT8 reason, A_UINT8 *bssid,
48072 + A_UINT8 assocRespLen, A_UINT8 *assocInfo, A_UINT16 protocolReasonStatus)
48073 +{
48074 + A_UINT8 i;
48075 +
48076 + A_PRINTF("AR6000 disconnected");
48077 + if (bssid[0] || bssid[1] || bssid[2] || bssid[3] || bssid[4] || bssid[5]) {
48078 + A_PRINTF(" from %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x ",
48079 + bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5]);
48080 + }
48081 + A_PRINTF("\n");
48082 +
48083 + AR_DEBUG_PRINTF("\nDisconnect Reason is %d", reason);
48084 + AR_DEBUG_PRINTF("\nProtocol Reason/Status Code is %d", protocolReasonStatus);
48085 + AR_DEBUG_PRINTF("\nAssocResp Frame = %s",
48086 + assocRespLen ? " " : "NULL");
48087 + for (i = 0; i < assocRespLen; i++) {
48088 + if (!(i % 0x10)) {
48089 + AR_DEBUG_PRINTF("\n");
48090 + }
48091 + AR_DEBUG_PRINTF("%2.2x ", assocInfo[i]);
48092 + }
48093 + AR_DEBUG_PRINTF("\n");
48094 + /*
48095 + * If the event is due to disconnect cmd from the host, only they the target
48096 + * would stop trying to connect. Under any other condition, target would
48097 + * keep trying to connect.
48098 + *
48099 + */
48100 + if( reason == DISCONNECT_CMD)
48101 + {
48102 + ar->arConnectPending = FALSE;
48103 + } else {
48104 + ar->arConnectPending = TRUE;
48105 + if (((reason == ASSOC_FAILED) && (protocolReasonStatus == 0x11)) ||
48106 + ((reason == ASSOC_FAILED) && (protocolReasonStatus == 0x0) && (reconnect_flag == 1))) {
48107 + ar->arConnected = TRUE;
48108 + return;
48109 + }
48110 + }
48111 + ar->arConnected = FALSE;
48112 +
48113 + if( (reason != CSERV_DISCONNECT) || (reconnect_flag != 1) ) {
48114 + reconnect_flag = 0;
48115 + }
48116 +
48117 +#ifdef USER_KEYS
48118 + if (reason != CSERV_DISCONNECT)
48119 + {
48120 + ar->user_savedkeys_stat = USER_SAVEDKEYS_STAT_INIT;
48121 + ar->user_key_ctrl = 0;
48122 + }
48123 +#endif /* USER_KEYS */
48124 +
48125 + netif_stop_queue(ar->arNetDev);
48126 + A_MEMZERO(ar->arBssid, sizeof(ar->arBssid));
48127 + ar->arBssChannel = 0;
48128 + ar->arBeaconInterval = 0;
48129 +
48130 + ar6000_TxDataCleanup(ar);
48131 +}
48132 +
48133 +void
48134 +ar6000_regDomain_event(AR_SOFTC_T *ar, A_UINT32 regCode)
48135 +{
48136 + A_PRINTF("AR6000 Reg Code = 0x%x\n", regCode);
48137 + ar->arRegCode = regCode;
48138 +}
48139 +
48140 +void
48141 +ar6000_neighborReport_event(AR_SOFTC_T *ar, int numAps, WMI_NEIGHBOR_INFO *info)
48142 +{
48143 + static const char *tag = "PRE-AUTH";
48144 + char buf[128];
48145 + union iwreq_data wrqu;
48146 + int i;
48147 +
48148 + AR_DEBUG_PRINTF("AR6000 Neighbor Report Event\n");
48149 + for (i=0; i < numAps; info++, i++) {
48150 + AR_DEBUG_PRINTF("bssid %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x ",
48151 + info->bssid[0], info->bssid[1], info->bssid[2],
48152 + info->bssid[3], info->bssid[4], info->bssid[5]);
48153 + if (info->bssFlags & WMI_PREAUTH_CAPABLE_BSS) {
48154 + AR_DEBUG_PRINTF("preauth-cap");
48155 + }
48156 + if (info->bssFlags & WMI_PMKID_VALID_BSS) {
48157 + AR_DEBUG_PRINTF(" pmkid-valid\n");
48158 + continue; /* we skip bss if the pmkid is already valid */
48159 + }
48160 + AR_DEBUG_PRINTF("\n");
48161 + snprintf(buf, sizeof(buf), "%s%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x",
48162 + tag,
48163 + info->bssid[0], info->bssid[1], info->bssid[2],
48164 + info->bssid[3], info->bssid[4], info->bssid[5],
48165 + i, info->bssFlags);
48166 + A_MEMZERO(&wrqu, sizeof(wrqu));
48167 + wrqu.data.length = strlen(buf);
48168 + wireless_send_event(ar->arNetDev, IWEVCUSTOM, &wrqu, buf);
48169 + }
48170 +}
48171 +
48172 +void
48173 +ar6000_tkip_micerr_event(AR_SOFTC_T *ar, A_UINT8 keyid, A_BOOL ismcast)
48174 +{
48175 + static const char *tag = "MLME-MICHAELMICFAILURE.indication";
48176 + char buf[128];
48177 + union iwreq_data wrqu;
48178 +
48179 + A_PRINTF("AR6000 TKIP MIC error received for keyid %d %scast\n",
48180 + keyid, ismcast ? "multi": "uni");
48181 + snprintf(buf, sizeof(buf), "%s(keyid=%d %scat)", tag, keyid,
48182 + ismcast ? "multi" : "uni");
48183 + memset(&wrqu, 0, sizeof(wrqu));
48184 + wrqu.data.length = strlen(buf);
48185 + wireless_send_event(ar->arNetDev, IWEVCUSTOM, &wrqu, buf);
48186 +}
48187 +
48188 +void
48189 +ar6000_scanComplete_event(AR_SOFTC_T *ar, A_STATUS status)
48190 +{
48191 + AR_DEBUG_PRINTF("AR6000 scan complete: %d\n", status);
48192 +
48193 + ar->scan_complete = 1;
48194 + wake_up_interruptible(&ar6000_scan_queue);
48195 +}
48196 +
48197 +void
48198 +ar6000_targetStats_event(AR_SOFTC_T *ar, WMI_TARGET_STATS *pTarget)
48199 +{
48200 + TARGET_STATS *pStats = &ar->arTargetStats;
48201 + A_UINT8 ac;
48202 +
48203 + /*A_PRINTF("AR6000 updating target stats\n");*/
48204 + pStats->tx_packets += pTarget->txrxStats.tx_stats.tx_packets;
48205 + pStats->tx_bytes += pTarget->txrxStats.tx_stats.tx_bytes;
48206 + pStats->tx_unicast_pkts += pTarget->txrxStats.tx_stats.tx_unicast_pkts;
48207 + pStats->tx_unicast_bytes += pTarget->txrxStats.tx_stats.tx_unicast_bytes;
48208 + pStats->tx_multicast_pkts += pTarget->txrxStats.tx_stats.tx_multicast_pkts;
48209 + pStats->tx_multicast_bytes += pTarget->txrxStats.tx_stats.tx_multicast_bytes;
48210 + pStats->tx_broadcast_pkts += pTarget->txrxStats.tx_stats.tx_broadcast_pkts;
48211 + pStats->tx_broadcast_bytes += pTarget->txrxStats.tx_stats.tx_broadcast_bytes;
48212 + pStats->tx_rts_success_cnt += pTarget->txrxStats.tx_stats.tx_rts_success_cnt;
48213 + for(ac = 0; ac < WMM_NUM_AC; ac++)
48214 + pStats->tx_packet_per_ac[ac] += pTarget->txrxStats.tx_stats.tx_packet_per_ac[ac];
48215 + pStats->tx_errors += pTarget->txrxStats.tx_stats.tx_errors;
48216 + pStats->tx_failed_cnt += pTarget->txrxStats.tx_stats.tx_failed_cnt;
48217 + pStats->tx_retry_cnt += pTarget->txrxStats.tx_stats.tx_retry_cnt;
48218 + pStats->tx_rts_fail_cnt += pTarget->txrxStats.tx_stats.tx_rts_fail_cnt;
48219 + pStats->tx_unicast_rate = wmi_get_rate(pTarget->txrxStats.tx_stats.tx_unicast_rate);
48220 +
48221 + pStats->rx_packets += pTarget->txrxStats.rx_stats.rx_packets;
48222 + pStats->rx_bytes += pTarget->txrxStats.rx_stats.rx_bytes;
48223 + pStats->rx_unicast_pkts += pTarget->txrxStats.rx_stats.rx_unicast_pkts;
48224 + pStats->rx_unicast_bytes += pTarget->txrxStats.rx_stats.rx_unicast_bytes;
48225 + pStats->rx_multicast_pkts += pTarget->txrxStats.rx_stats.rx_multicast_pkts;
48226 + pStats->rx_multicast_bytes += pTarget->txrxStats.rx_stats.rx_multicast_bytes;
48227 + pStats->rx_broadcast_pkts += pTarget->txrxStats.rx_stats.rx_broadcast_pkts;
48228 + pStats->rx_broadcast_bytes += pTarget->txrxStats.rx_stats.rx_broadcast_bytes;
48229 + pStats->rx_fragment_pkt += pTarget->txrxStats.rx_stats.rx_fragment_pkt;
48230 + pStats->rx_errors += pTarget->txrxStats.rx_stats.rx_errors;
48231 + pStats->rx_crcerr += pTarget->txrxStats.rx_stats.rx_crcerr;
48232 + pStats->rx_key_cache_miss += pTarget->txrxStats.rx_stats.rx_key_cache_miss;
48233 + pStats->rx_decrypt_err += pTarget->txrxStats.rx_stats.rx_decrypt_err;
48234 + pStats->rx_duplicate_frames += pTarget->txrxStats.rx_stats.rx_duplicate_frames;
48235 + pStats->rx_unicast_rate = wmi_get_rate(pTarget->txrxStats.rx_stats.rx_unicast_rate);
48236 +
48237 +
48238 + pStats->tkip_local_mic_failure
48239 + += pTarget->txrxStats.tkipCcmpStats.tkip_local_mic_failure;
48240 + pStats->tkip_counter_measures_invoked
48241 + += pTarget->txrxStats.tkipCcmpStats.tkip_counter_measures_invoked;
48242 + pStats->tkip_replays += pTarget->txrxStats.tkipCcmpStats.tkip_replays;
48243 + pStats->tkip_format_errors += pTarget->txrxStats.tkipCcmpStats.tkip_format_errors;
48244 + pStats->ccmp_format_errors += pTarget->txrxStats.tkipCcmpStats.ccmp_format_errors;
48245 + pStats->ccmp_replays += pTarget->txrxStats.tkipCcmpStats.ccmp_replays;
48246 +
48247 +
48248 + pStats->power_save_failure_cnt += pTarget->pmStats.power_save_failure_cnt;
48249 + pStats->noise_floor_calibation = pTarget->noise_floor_calibation;
48250 +
48251 + pStats->cs_bmiss_cnt += pTarget->cservStats.cs_bmiss_cnt;
48252 + pStats->cs_lowRssi_cnt += pTarget->cservStats.cs_lowRssi_cnt;
48253 + pStats->cs_connect_cnt += pTarget->cservStats.cs_connect_cnt;
48254 + pStats->cs_disconnect_cnt += pTarget->cservStats.cs_disconnect_cnt;
48255 + pStats->cs_aveBeacon_snr = pTarget->cservStats.cs_aveBeacon_snr;
48256 + pStats->cs_aveBeacon_rssi = pTarget->cservStats.cs_aveBeacon_rssi;
48257 + pStats->cs_lastRoam_msec = pTarget->cservStats.cs_lastRoam_msec;
48258 + pStats->cs_snr = pTarget->cservStats.cs_snr;
48259 + pStats->cs_rssi = pTarget->cservStats.cs_rssi;
48260 +
48261 + pStats->lq_val = pTarget->lqVal;
48262 +
48263 + pStats->wow_num_pkts_dropped += pTarget->wowStats.wow_num_pkts_dropped;
48264 + pStats->wow_num_host_pkt_wakeups += pTarget->wowStats.wow_num_host_pkt_wakeups;
48265 + pStats->wow_num_host_event_wakeups += pTarget->wowStats.wow_num_host_event_wakeups;
48266 + pStats->wow_num_events_discarded += pTarget->wowStats.wow_num_events_discarded;
48267 +
48268 + ar->statsUpdatePending = FALSE;
48269 + wake_up(&arEvent);
48270 +}
48271 +
48272 +void
48273 +ar6000_rssiThreshold_event(AR_SOFTC_T *ar, WMI_RSSI_THRESHOLD_VAL newThreshold, A_INT16 rssi)
48274 +{
48275 + USER_RSSI_THOLD userRssiThold;
48276 +
48277 + userRssiThold.tag = rssi_map[newThreshold].tag;
48278 + userRssiThold.rssi = rssi;
48279 + AR_DEBUG2_PRINTF("rssi Threshold range = %d tag = %d rssi = %d\n", newThreshold, userRssiThold.tag, rssi);
48280 +#ifdef SEND_EVENT_TO_APP
48281 + ar6000_send_event_to_app(ar, WMI_RSSI_THRESHOLD_EVENTID,(A_UINT8 *)&userRssiThold, sizeof(USER_RSSI_THOLD));
48282 +#endif
48283 +}
48284 +
48285 +
48286 +void
48287 +ar6000_hbChallengeResp_event(AR_SOFTC_T *ar, A_UINT32 cookie, A_UINT32 source)
48288 +{
48289 + if (source == APP_HB_CHALLENGE) {
48290 + /* Report it to the app in case it wants a positive acknowledgement */
48291 +#ifdef SEND_EVENT_TO_APP
48292 + ar6000_send_event_to_app(ar, WMIX_HB_CHALLENGE_RESP_EVENTID,
48293 + (A_UINT8 *)&cookie, sizeof(cookie));
48294 +#endif
48295 + } else {
48296 + /* This would ignore the replys that come in after their due time */
48297 + if (cookie == ar->arHBChallengeResp.seqNum) {
48298 + ar->arHBChallengeResp.outstanding = FALSE;
48299 + }
48300 + }
48301 +}
48302 +
48303 +
48304 +void
48305 +ar6000_reportError_event(AR_SOFTC_T *ar, WMI_TARGET_ERROR_VAL errorVal)
48306 +{
48307 + char *errString[] = {
48308 + [WMI_TARGET_PM_ERR_FAIL] "WMI_TARGET_PM_ERR_FAIL",
48309 + [WMI_TARGET_KEY_NOT_FOUND] "WMI_TARGET_KEY_NOT_FOUND",
48310 + [WMI_TARGET_DECRYPTION_ERR] "WMI_TARGET_DECRYPTION_ERR",
48311 + [WMI_TARGET_BMISS] "WMI_TARGET_BMISS",
48312 + [WMI_PSDISABLE_NODE_JOIN] "WMI_PSDISABLE_NODE_JOIN"
48313 + };
48314 +
48315 + A_PRINTF("AR6000 Error on Target. Error = 0x%x\n", errorVal);
48316 +
48317 + /* One error is reported at a time, and errorval is a bitmask */
48318 + if(errorVal & (errorVal - 1))
48319 + return;
48320 +
48321 + A_PRINTF("AR6000 Error type = ");
48322 + switch(errorVal)
48323 + {
48324 + case WMI_TARGET_PM_ERR_FAIL:
48325 + case WMI_TARGET_KEY_NOT_FOUND:
48326 + case WMI_TARGET_DECRYPTION_ERR:
48327 + case WMI_TARGET_BMISS:
48328 + case WMI_PSDISABLE_NODE_JOIN:
48329 + A_PRINTF("%s\n", errString[errorVal]);
48330 + break;
48331 + default:
48332 + A_PRINTF("INVALID\n");
48333 + break;
48334 + }
48335 +
48336 +}
48337 +
48338 +
48339 +void
48340 +ar6000_cac_event(AR_SOFTC_T *ar, A_UINT8 ac, A_UINT8 cacIndication,
48341 + A_UINT8 statusCode, A_UINT8 *tspecSuggestion)
48342 +{
48343 + WMM_TSPEC_IE *tspecIe;
48344 +
48345 + /*
48346 + * This is the TSPEC IE suggestion from AP.
48347 + * Suggestion provided by AP under some error
48348 + * cases, could be helpful for the host app.
48349 + * Check documentation.
48350 + */
48351 + tspecIe = (WMM_TSPEC_IE *)tspecSuggestion;
48352 +
48353 + /*
48354 + * What do we do, if we get TSPEC rejection? One thought
48355 + * that comes to mind is implictly delete the pstream...
48356 + */
48357 + A_PRINTF("AR6000 CAC notification. "
48358 + "AC = %d, cacIndication = 0x%x, statusCode = 0x%x\n",
48359 + ac, cacIndication, statusCode);
48360 +}
48361 +
48362 +#define AR6000_PRINT_BSSID(_pBss) do { \
48363 + A_PRINTF("%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x ",\
48364 + (_pBss)[0],(_pBss)[1],(_pBss)[2],(_pBss)[3],\
48365 + (_pBss)[4],(_pBss)[5]); \
48366 +} while(0)
48367 +
48368 +void
48369 +ar6000_roam_tbl_event(AR_SOFTC_T *ar, WMI_TARGET_ROAM_TBL *pTbl)
48370 +{
48371 + A_UINT8 i;
48372 +
48373 + A_PRINTF("ROAM TABLE NO OF ENTRIES is %d ROAM MODE is %d\n",
48374 + pTbl->numEntries, pTbl->roamMode);
48375 + for (i= 0; i < pTbl->numEntries; i++) {
48376 + A_PRINTF("[%d]bssid %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x ", i,
48377 + pTbl->bssRoamInfo[i].bssid[0], pTbl->bssRoamInfo[i].bssid[1],
48378 + pTbl->bssRoamInfo[i].bssid[2],
48379 + pTbl->bssRoamInfo[i].bssid[3],
48380 + pTbl->bssRoamInfo[i].bssid[4],
48381 + pTbl->bssRoamInfo[i].bssid[5]);
48382 + A_PRINTF("RSSI %d RSSIDT %d LAST RSSI %d UTIL %d ROAM_UTIL %d"
48383 + " BIAS %d\n",
48384 + pTbl->bssRoamInfo[i].rssi,
48385 + pTbl->bssRoamInfo[i].rssidt,
48386 + pTbl->bssRoamInfo[i].last_rssi,
48387 + pTbl->bssRoamInfo[i].util,
48388 + pTbl->bssRoamInfo[i].roam_util,
48389 + pTbl->bssRoamInfo[i].bias);
48390 + }
48391 +}
48392 +
48393 +void
48394 +ar6000_wow_list_event(struct ar6_softc *ar, A_UINT8 num_filters, WMI_GET_WOW_LIST_REPLY *wow_reply)
48395 +{
48396 + A_UINT8 i,j;
48397 +
48398 + /*Each event now contains exactly one filter, see bug 26613*/
48399 + A_PRINTF("WOW pattern %d of %d patterns\n", wow_reply->this_filter_num, wow_reply->num_filters);
48400 + A_PRINTF("wow mode = %s host mode = %s\n",
48401 + (wow_reply->wow_mode == 0? "disabled":"enabled"),
48402 + (wow_reply->host_mode == 1 ? "awake":"asleep"));
48403 +
48404 +
48405 + /*If there are no patterns, the reply will only contain generic
48406 + WoW information. Pattern information will exist only if there are
48407 + patterns present. Bug 26716*/
48408 +
48409 + /* If this event contains pattern information, display it*/
48410 + if (wow_reply->this_filter_num) {
48411 + i=0;
48412 + A_PRINTF("id=%d size=%d offset=%d\n",
48413 + wow_reply->wow_filters[i].wow_filter_id,
48414 + wow_reply->wow_filters[i].wow_filter_size,
48415 + wow_reply->wow_filters[i].wow_filter_offset);
48416 + A_PRINTF("wow pattern = ");
48417 + for (j=0; j< wow_reply->wow_filters[i].wow_filter_size; j++) {
48418 + A_PRINTF("%2.2x",wow_reply->wow_filters[i].wow_filter_pattern[j]);
48419 + }
48420 +
48421 + A_PRINTF("\nwow mask = ");
48422 + for (j=0; j< wow_reply->wow_filters[i].wow_filter_size; j++) {
48423 + A_PRINTF("%2.2x",wow_reply->wow_filters[i].wow_filter_mask[j]);
48424 + }
48425 + A_PRINTF("\n");
48426 + }
48427 +}
48428 +
48429 +/*
48430 + * Report the Roaming related data collected on the target
48431 + */
48432 +void
48433 +ar6000_display_roam_time(WMI_TARGET_ROAM_TIME *p)
48434 +{
48435 + A_PRINTF("Disconnect Data : BSSID: ");
48436 + AR6000_PRINT_BSSID(p->disassoc_bssid);
48437 + A_PRINTF(" RSSI %d DISASSOC Time %d NO_TXRX_TIME %d\n",
48438 + p->disassoc_bss_rssi,p->disassoc_time,
48439 + p->no_txrx_time);
48440 + A_PRINTF("Connect Data: BSSID: ");
48441 + AR6000_PRINT_BSSID(p->assoc_bssid);
48442 + A_PRINTF(" RSSI %d ASSOC Time %d TXRX_TIME %d\n",
48443 + p->assoc_bss_rssi,p->assoc_time,
48444 + p->allow_txrx_time);
48445 + A_PRINTF("Last Data Tx Time (b4 Disassoc) %d "\
48446 + "First Data Tx Time (after Assoc) %d\n",
48447 + p->last_data_txrx_time, p->first_data_txrx_time);
48448 +}
48449 +
48450 +void
48451 +ar6000_roam_data_event(AR_SOFTC_T *ar, WMI_TARGET_ROAM_DATA *p)
48452 +{
48453 + switch (p->roamDataType) {
48454 + case ROAM_DATA_TIME:
48455 + ar6000_display_roam_time(&p->u.roamTime);
48456 + break;
48457 + default:
48458 + break;
48459 + }
48460 +}
48461 +
48462 +void
48463 +ar6000_bssInfo_event_rx(AR_SOFTC_T *ar, A_UINT8 *datap, int len)
48464 +{
48465 + struct sk_buff *skb;
48466 + WMI_BSS_INFO_HDR *bih = (WMI_BSS_INFO_HDR *)datap;
48467 +
48468 +
48469 + if (!ar->arMgmtFilter) {
48470 + return;
48471 + }
48472 + if (((ar->arMgmtFilter & IEEE80211_FILTER_TYPE_BEACON) &&
48473 + (bih->frameType != BEACON_FTYPE)) ||
48474 + ((ar->arMgmtFilter & IEEE80211_FILTER_TYPE_PROBE_RESP) &&
48475 + (bih->frameType != PROBERESP_FTYPE)))
48476 + {
48477 + return;
48478 + }
48479 +
48480 + if ((skb = A_NETBUF_ALLOC_RAW(len)) != NULL) {
48481 +
48482 + A_NETBUF_PUT(skb, len);
48483 + A_MEMCPY(A_NETBUF_DATA(skb), datap, len);
48484 + skb->dev = ar->arNetDev;
48485 + printk("MAC RAW...\n");
48486 +// skb->mac.raw = A_NETBUF_DATA(skb);
48487 + skb->ip_summed = CHECKSUM_NONE;
48488 + skb->pkt_type = PACKET_OTHERHOST;
48489 + skb->protocol = __constant_htons(0x0019);
48490 + netif_rx(skb);
48491 + }
48492 +}
48493 +
48494 +A_UINT32 wmiSendCmdNum;
48495 +
48496 +A_STATUS
48497 +ar6000_control_tx(void *devt, void *osbuf, WMI_PRI_STREAM_ID streamID)
48498 +{
48499 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
48500 + A_STATUS status = A_OK;
48501 + struct ar_cookie *cookie = NULL;
48502 + int i;
48503 +
48504 + /* take lock to protect ar6000_alloc_cookie() */
48505 + AR6000_SPIN_LOCK(&ar->arLock, 0);
48506 +
48507 + do {
48508 +
48509 + AR_DEBUG2_PRINTF("ar_contrstatus = ol_tx: skb=0x%x, len=0x%x, sid=%d\n",
48510 + (A_UINT32)osbuf, A_NETBUF_LEN(osbuf), streamID);
48511 +
48512 + if ((streamID == WMI_CONTROL_PRI) && (ar->arWMIControlEpFull)) {
48513 + /* control endpoint is full, don't allocate resources, we
48514 + * are just going to drop this packet */
48515 + cookie = NULL;
48516 + AR_DEBUG_PRINTF(" WMI Control EP full, dropping packet : 0x%X, len:%d \n",
48517 + (A_UINT32)osbuf, A_NETBUF_LEN(osbuf));
48518 + } else {
48519 + cookie = ar6000_alloc_cookie(ar);
48520 + }
48521 +
48522 + if (cookie == NULL) {
48523 + status = A_NO_MEMORY;
48524 + break;
48525 + }
48526 +
48527 + if(logWmiRawMsgs) {
48528 + A_PRINTF("WMI cmd send, msgNo %d :", wmiSendCmdNum);
48529 + for(i = 0; i < a_netbuf_to_len(osbuf); i++)
48530 + A_PRINTF("%x ", ((A_UINT8 *)a_netbuf_to_data(osbuf))[i]);
48531 + A_PRINTF("\n");
48532 + }
48533 +
48534 + wmiSendCmdNum++;
48535 +
48536 + } while (FALSE);
48537 +
48538 + if (cookie != NULL) {
48539 + /* got a structure to send it out on */
48540 + ar->arTxPending[streamID]++;
48541 +
48542 + if (streamID != WMI_CONTROL_PRI) {
48543 + ar->arTotalTxDataPending++;
48544 + }
48545 + }
48546 +
48547 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
48548 +
48549 + if (cookie != NULL) {
48550 + cookie->arc_bp[0] = (A_UINT32)osbuf;
48551 + cookie->arc_bp[1] = 0;
48552 + SET_HTC_PACKET_INFO_TX(&cookie->HtcPkt,
48553 + cookie,
48554 + A_NETBUF_DATA(osbuf),
48555 + A_NETBUF_LEN(osbuf),
48556 + arWMIStream2EndpointID(ar,streamID),
48557 + AR6K_CONTROL_PKT_TAG);
48558 + /* this interface is asynchronous, if there is an error, cleanup will happen in the
48559 + * TX completion callback */
48560 + HTCSendPkt(ar->arHtcTarget, &cookie->HtcPkt);
48561 + status = A_OK;
48562 + }
48563 +
48564 + return status;
48565 +}
48566 +
48567 +/* indicate tx activity or inactivity on a WMI stream */
48568 +void ar6000_indicate_tx_activity(void *devt, A_UINT8 TrafficClass, A_BOOL Active)
48569 +{
48570 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
48571 + WMI_PRI_STREAM_ID streamid;
48572 +
48573 + if (ar->arWmiEnabled) {
48574 + streamid = wmi_get_stream_id(ar->arWmi, TrafficClass);
48575 + } else {
48576 + /* for mbox ping testing, the traffic class is mapped directly as a stream ID,
48577 + * see handling of AR6000_XIOCTL_TRAFFIC_ACTIVITY_CHANGE in ioctl.c */
48578 + streamid = (WMI_PRI_STREAM_ID)TrafficClass;
48579 + }
48580 +
48581 + /* notify HTC, this may cause credit distribution changes */
48582 +
48583 + HTCIndicateActivityChange(ar->arHtcTarget,
48584 + arWMIStream2EndpointID(ar,streamid),
48585 + Active);
48586 +
48587 +}
48588 +
48589 +module_init(ar6000_init_module);
48590 +module_exit(ar6000_cleanup_module);
48591 +
48592 +/* Init cookie queue */
48593 +static void
48594 +ar6000_cookie_init(AR_SOFTC_T *ar)
48595 +{
48596 + A_UINT32 i;
48597 +
48598 + ar->arCookieList = NULL;
48599 + A_MEMZERO(s_ar_cookie_mem, sizeof(s_ar_cookie_mem));
48600 +
48601 + for (i = 0; i < MAX_COOKIE_NUM; i++) {
48602 + ar6000_free_cookie(ar, &s_ar_cookie_mem[i]);
48603 + }
48604 +}
48605 +
48606 +/* cleanup cookie queue */
48607 +static void
48608 +ar6000_cookie_cleanup(AR_SOFTC_T *ar)
48609 +{
48610 + /* It is gone .... */
48611 + ar->arCookieList = NULL;
48612 +}
48613 +
48614 +/* Init cookie queue */
48615 +static void
48616 +ar6000_free_cookie(AR_SOFTC_T *ar, struct ar_cookie * cookie)
48617 +{
48618 + /* Insert first */
48619 + A_ASSERT(ar != NULL);
48620 + A_ASSERT(cookie != NULL);
48621 + cookie->arc_list_next = ar->arCookieList;
48622 + ar->arCookieList = cookie;
48623 +}
48624 +
48625 +/* cleanup cookie queue */
48626 +static struct ar_cookie *
48627 +ar6000_alloc_cookie(AR_SOFTC_T *ar)
48628 +{
48629 + struct ar_cookie *cookie;
48630 +
48631 + cookie = ar->arCookieList;
48632 + if(cookie != NULL)
48633 + {
48634 + ar->arCookieList = cookie->arc_list_next;
48635 + }
48636 +
48637 + return cookie;
48638 +}
48639 +
48640 +#ifdef SEND_EVENT_TO_APP
48641 +/*
48642 + * This function is used to send event which come from taget to
48643 + * the application. The buf which send to application is include
48644 + * the event ID and event content.
48645 + */
48646 +#define EVENT_ID_LEN 2
48647 +void ar6000_send_event_to_app(AR_SOFTC_T *ar, A_UINT16 eventId,
48648 + A_UINT8 *datap, int len)
48649 +{
48650 +
48651 +#if (WIRELESS_EXT >= 15)
48652 +
48653 +/* note: IWEVCUSTOM only exists in wireless extensions after version 15 */
48654 +
48655 + char *buf;
48656 + A_UINT16 size;
48657 + union iwreq_data wrqu;
48658 +
48659 + size = len + EVENT_ID_LEN;
48660 +
48661 + if (size > IW_CUSTOM_MAX) {
48662 + AR_DEBUG_PRINTF("WMI event ID : 0x%4.4X, len = %d too big for IWEVCUSTOM (max=%d) \n",
48663 + eventId, size, IW_CUSTOM_MAX);
48664 + return;
48665 + }
48666 +
48667 + buf = A_MALLOC_NOWAIT(size);
48668 + A_MEMZERO(buf, size);
48669 + A_MEMCPY(buf, &eventId, EVENT_ID_LEN);
48670 + A_MEMCPY(buf+EVENT_ID_LEN, datap, len);
48671 +
48672 + //AR_DEBUG_PRINTF("event ID = %d,len = %d\n",*(A_UINT16*)buf, size);
48673 + A_MEMZERO(&wrqu, sizeof(wrqu));
48674 + wrqu.data.length = size;
48675 + wireless_send_event(ar->arNetDev, IWEVCUSTOM, &wrqu, buf);
48676 +
48677 + A_FREE(buf);
48678 +#endif
48679 +
48680 +
48681 +}
48682 +#endif
48683 +
48684 +
48685 +void
48686 +ar6000_tx_retry_err_event(void *devt)
48687 +{
48688 + AR_DEBUG2_PRINTF("Tx retries reach maximum!\n");
48689 +}
48690 +
48691 +void
48692 +ar6000_snrThresholdEvent_rx(void *devt, WMI_SNR_THRESHOLD_VAL newThreshold, A_UINT8 snr)
48693 +{
48694 + AR_DEBUG2_PRINTF("snr threshold range %d, snr %d\n", newThreshold, snr);
48695 +}
48696 +
48697 +void
48698 +ar6000_lqThresholdEvent_rx(void *devt, WMI_LQ_THRESHOLD_VAL newThreshold, A_UINT8 lq)
48699 +{
48700 + AR_DEBUG2_PRINTF("lq threshold range %d, lq %d\n", newThreshold, lq);
48701 +}
48702 +
48703 +
48704 +
48705 +A_UINT32
48706 +a_copy_to_user(void *to, const void *from, A_UINT32 n)
48707 +{
48708 + return(copy_to_user(to, from, n));
48709 +}
48710 +
48711 +A_UINT32
48712 +a_copy_from_user(void *to, const void *from, A_UINT32 n)
48713 +{
48714 + return(copy_from_user(to, from, n));
48715 +}
48716 +
48717 +
48718 +A_STATUS
48719 +ar6000_get_driver_cfg(struct net_device *dev,
48720 + A_UINT16 cfgParam,
48721 + void *result)
48722 +{
48723 +
48724 + A_STATUS ret = 0;
48725 +
48726 + switch(cfgParam)
48727 + {
48728 + case AR6000_DRIVER_CFG_GET_WLANNODECACHING:
48729 + *((A_UINT32 *)result) = wlanNodeCaching;
48730 + break;
48731 + case AR6000_DRIVER_CFG_LOG_RAW_WMI_MSGS:
48732 + *((A_UINT32 *)result) = logWmiRawMsgs;
48733 + break;
48734 + default:
48735 + ret = EINVAL;
48736 + break;
48737 + }
48738 +
48739 + return ret;
48740 +}
48741 +
48742 +void
48743 +ar6000_keepalive_rx(void *devt, A_UINT8 configured)
48744 +{
48745 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
48746 +
48747 + ar->arKeepaliveConfigured = configured;
48748 + wake_up(&arEvent);
48749 +}
48750 +
48751 +void
48752 +ar6000_pmkid_list_event(void *devt, A_UINT8 numPMKID, WMI_PMKID *pmkidList)
48753 +{
48754 + A_UINT8 i, j;
48755 +
48756 + A_PRINTF("Number of Cached PMKIDs is %d\n", numPMKID);
48757 +
48758 + for (i = 0; i < numPMKID; i++) {
48759 + A_PRINTF("\nPMKID %d ", i);
48760 + for (j = 0; j < WMI_PMKID_LEN; j++) {
48761 + A_PRINTF("%2.2x", pmkidList->pmkid[j]);
48762 + }
48763 + pmkidList++;
48764 + }
48765 +}
48766 +
48767 +#ifdef USER_KEYS
48768 +static A_STATUS
48769 +
48770 +ar6000_reinstall_keys(AR_SOFTC_T *ar, A_UINT8 key_op_ctrl)
48771 +{
48772 + A_STATUS status = A_OK;
48773 + struct ieee80211req_key *uik = &ar->user_saved_keys.ucast_ik;
48774 + struct ieee80211req_key *bik = &ar->user_saved_keys.bcast_ik;
48775 + CRYPTO_TYPE keyType = ar->user_saved_keys.keyType;
48776 +
48777 + if (IEEE80211_CIPHER_CCKM_KRK != uik->ik_type) {
48778 + if (NONE_CRYPT == keyType) {
48779 + goto _reinstall_keys_out;
48780 + }
48781 +
48782 + if (uik->ik_keylen) {
48783 + status = wmi_addKey_cmd(ar->arWmi, uik->ik_keyix,
48784 + ar->user_saved_keys.keyType, PAIRWISE_USAGE,
48785 + uik->ik_keylen, (A_UINT8 *)&uik->ik_keyrsc,
48786 + uik->ik_keydata, key_op_ctrl, SYNC_BEFORE_WMIFLAG);
48787 + }
48788 +
48789 + } else {
48790 + status = wmi_add_krk_cmd(ar->arWmi, uik->ik_keydata);
48791 + }
48792 +
48793 + if (IEEE80211_CIPHER_CCKM_KRK != bik->ik_type) {
48794 + if (NONE_CRYPT == keyType) {
48795 + goto _reinstall_keys_out;
48796 + }
48797 +
48798 + if (bik->ik_keylen) {
48799 + status = wmi_addKey_cmd(ar->arWmi, bik->ik_keyix,
48800 + ar->user_saved_keys.keyType, GROUP_USAGE,
48801 + bik->ik_keylen, (A_UINT8 *)&bik->ik_keyrsc,
48802 + bik->ik_keydata, key_op_ctrl, NO_SYNC_WMIFLAG);
48803 + }
48804 + } else {
48805 + status = wmi_add_krk_cmd(ar->arWmi, bik->ik_keydata);
48806 + }
48807 +
48808 +_reinstall_keys_out:
48809 + ar->user_savedkeys_stat = USER_SAVEDKEYS_STAT_INIT;
48810 + ar->user_key_ctrl = 0;
48811 +
48812 + return status;
48813 +}
48814 +#endif /* USER_KEYS */
48815 +
48816 +
48817 +void
48818 +ar6000_dset_open_req(
48819 + void *context,
48820 + A_UINT32 id,
48821 + A_UINT32 targHandle,
48822 + A_UINT32 targReplyFn,
48823 + A_UINT32 targReplyArg)
48824 +{
48825 +}
48826 +
48827 +void
48828 +ar6000_dset_close(
48829 + void *context,
48830 + A_UINT32 access_cookie)
48831 +{
48832 + return;
48833 +}
48834 +
48835 +void
48836 +ar6000_dset_data_req(
48837 + void *context,
48838 + A_UINT32 accessCookie,
48839 + A_UINT32 offset,
48840 + A_UINT32 length,
48841 + A_UINT32 targBuf,
48842 + A_UINT32 targReplyFn,
48843 + A_UINT32 targReplyArg)
48844 +{
48845 +}
48846 Index: linux-2.6.28/drivers/ar6000/ar6000/ar6000_drv.h
48847 ===================================================================
48848 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
48849 +++ linux-2.6.28/drivers/ar6000/ar6000/ar6000_drv.h 2009-01-02 00:01:56.000000000 +0100
48850 @@ -0,0 +1,361 @@
48851 +/*
48852 + *
48853 + * Copyright (c) 2004-2007 Atheros Communications Inc.
48854 + * All rights reserved.
48855 + *
48856 + *
48857 + * This program is free software; you can redistribute it and/or modify
48858 + * it under the terms of the GNU General Public License version 2 as
48859 + * published by the Free Software Foundation;
48860 + *
48861 + * Software distributed under the License is distributed on an "AS
48862 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
48863 + * implied. See the License for the specific language governing
48864 + * rights and limitations under the License.
48865 + *
48866 + *
48867 + *
48868 + */
48869 +
48870 +#ifndef _AR6000_H_
48871 +#define _AR6000_H_
48872 +
48873 +#include <linux/version.h>
48874 +
48875 +
48876 +#include <linux/autoconf.h>
48877 +#include <linux/init.h>
48878 +#include <linux/kernel.h>
48879 +#include <linux/spinlock.h>
48880 +#include <linux/skbuff.h>
48881 +#include <linux/if_ether.h>
48882 +#include <linux/netdevice.h>
48883 +#include <linux/etherdevice.h>
48884 +#include <net/iw_handler.h>
48885 +#include <linux/if_arp.h>
48886 +#include <linux/ip.h>
48887 +#include <linux/semaphore.h>
48888 +#include <linux/wireless.h>
48889 +#include <linux/module.h>
48890 +#include <asm/io.h>
48891 +
48892 +#include <a_config.h>
48893 +#include <athdefs.h>
48894 +#include "a_types.h"
48895 +#include "a_osapi.h"
48896 +#include "htc_api.h"
48897 +#include "wmi.h"
48898 +#include "a_drv.h"
48899 +#include "bmi.h"
48900 +#include <ieee80211.h>
48901 +#include <ieee80211_ioctl.h>
48902 +#include <wlan_api.h>
48903 +#include <wmi_api.h>
48904 +#include "gpio_api.h"
48905 +#include "gpio.h"
48906 +#include <host_version.h>
48907 +#include <linux/rtnetlink.h>
48908 +#include <linux/init.h>
48909 +#include <linux/moduleparam.h>
48910 +#include "AR6Khwreg.h"
48911 +#include "ar6000_api.h"
48912 +#ifdef CONFIG_HOST_TCMD_SUPPORT
48913 +#include <testcmd.h>
48914 +#endif
48915 +
48916 +#include "targaddrs.h"
48917 +#include "dbglog_api.h"
48918 +#include "ar6000_diag.h"
48919 +#include "common_drv.h"
48920 +
48921 +#ifndef __dev_put
48922 +#define __dev_put(dev) dev_put(dev)
48923 +#endif
48924 +
48925 +#ifdef USER_KEYS
48926 +
48927 +#define USER_SAVEDKEYS_STAT_INIT 0
48928 +#define USER_SAVEDKEYS_STAT_RUN 1
48929 +
48930 +// TODO this needs to move into the AR_SOFTC struct
48931 +struct USER_SAVEDKEYS {
48932 + struct ieee80211req_key ucast_ik;
48933 + struct ieee80211req_key bcast_ik;
48934 + CRYPTO_TYPE keyType;
48935 + A_BOOL keyOk;
48936 +};
48937 +#endif
48938 +
48939 +#define DBG_INFO 0x00000001
48940 +#define DBG_ERROR 0x00000002
48941 +#define DBG_WARNING 0x00000004
48942 +#define DBG_SDIO 0x00000008
48943 +#define DBG_HIF 0x00000010
48944 +#define DBG_HTC 0x00000020
48945 +#define DBG_WMI 0x00000040
48946 +#define DBG_WMI2 0x00000080
48947 +#define DBG_DRIVER 0x00000100
48948 +
48949 +#define DBG_DEFAULTS (DBG_ERROR|DBG_WARNING)
48950 +
48951 +
48952 +#ifdef DEBUG
48953 +#define AR_DEBUG_PRINTF(args...) if (debugdriver) A_PRINTF(args);
48954 +#define AR_DEBUG2_PRINTF(args...) if (debugdriver >= 2) A_PRINTF(args);
48955 +extern int debugdriver;
48956 +#else
48957 +#define AR_DEBUG_PRINTF(args...)
48958 +#define AR_DEBUG2_PRINTF(args...)
48959 +#endif
48960 +
48961 +A_STATUS ar6000_ReadRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
48962 +A_STATUS ar6000_WriteRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
48963 +
48964 +#ifdef __cplusplus
48965 +extern "C" {
48966 +#endif
48967 +
48968 +#define MAX_AR6000 1
48969 +#define AR6000_MAX_RX_BUFFERS 16
48970 +#define AR6000_BUFFER_SIZE 1664
48971 +#define AR6000_TX_TIMEOUT 10
48972 +#define AR6000_ETH_ADDR_LEN 6
48973 +#define AR6000_MAX_ENDPOINTS 4
48974 +#define MAX_NODE_NUM 15
48975 +#define MAX_COOKIE_NUM 150
48976 +#define AR6000_HB_CHALLENGE_RESP_FREQ_DEFAULT 1
48977 +#define AR6000_HB_CHALLENGE_RESP_MISS_THRES_DEFAULT 1
48978 +
48979 +enum {
48980 + DRV_HB_CHALLENGE = 0,
48981 + APP_HB_CHALLENGE
48982 +};
48983 +
48984 +/* HTC RAW streams */
48985 +typedef enum _HTC_RAW_STREAM_ID {
48986 + HTC_RAW_STREAM_NOT_MAPPED = -1,
48987 + HTC_RAW_STREAM_0 = 0,
48988 + HTC_RAW_STREAM_1 = 1,
48989 + HTC_RAW_STREAM_2 = 2,
48990 + HTC_RAW_STREAM_3 = 3,
48991 + HTC_RAW_STREAM_NUM_MAX
48992 +} HTC_RAW_STREAM_ID;
48993 +
48994 +#define RAW_HTC_READ_BUFFERS_NUM 4
48995 +#define RAW_HTC_WRITE_BUFFERS_NUM 4
48996 +
48997 +typedef struct {
48998 + int currPtr;
48999 + int length;
49000 + unsigned char data[AR6000_BUFFER_SIZE];
49001 + HTC_PACKET HTCPacket;
49002 +} raw_htc_buffer;
49003 +
49004 +#ifdef CONFIG_HOST_TCMD_SUPPORT
49005 +/*
49006 + * add TCMD_MODE besides wmi and bypasswmi
49007 + * in TCMD_MODE, only few TCMD releated wmi commands
49008 + * counld be hanlder
49009 + */
49010 +enum {
49011 + AR6000_WMI_MODE = 0,
49012 + AR6000_BYPASS_MODE,
49013 + AR6000_TCMD_MODE,
49014 + AR6000_WLAN_MODE
49015 +};
49016 +#endif /* CONFIG_HOST_TCMD_SUPPORT */
49017 +
49018 +struct ar_wep_key {
49019 + A_UINT8 arKeyIndex;
49020 + A_UINT8 arKeyLen;
49021 + A_UINT8 arKey[64];
49022 +} ;
49023 +
49024 +struct ar_node_mapping {
49025 + A_UINT8 macAddress[6];
49026 + A_UINT8 epId;
49027 + A_UINT8 txPending;
49028 +};
49029 +
49030 +struct ar_cookie {
49031 + A_UINT32 arc_bp[2]; /* Must be first field */
49032 + HTC_PACKET HtcPkt; /* HTC packet wrapper */
49033 + struct ar_cookie *arc_list_next;
49034 +};
49035 +
49036 +struct ar_hb_chlng_resp {
49037 + A_TIMER timer;
49038 + A_UINT32 frequency;
49039 + A_UINT32 seqNum;
49040 + A_BOOL outstanding;
49041 + A_UINT8 missCnt;
49042 + A_UINT8 missThres;
49043 +};
49044 +
49045 +typedef struct ar6_softc {
49046 + struct net_device *arNetDev; /* net_device pointer */
49047 + void *arWmi;
49048 + int arTxPending[WMI_PRI_MAX_COUNT];
49049 + int arTotalTxDataPending;
49050 + A_UINT8 arNumDataEndPts;
49051 + A_BOOL arWmiEnabled;
49052 + A_BOOL arWmiReady;
49053 + A_BOOL arConnected;
49054 + A_BOOL arRadioSwitch;
49055 + HTC_HANDLE arHtcTarget;
49056 + void *arHifDevice;
49057 + spinlock_t arLock;
49058 + struct semaphore arSem;
49059 + int arRxBuffers[WMI_PRI_MAX_COUNT];
49060 + int arSsidLen;
49061 + u_char arSsid[32];
49062 + A_UINT8 arNetworkType;
49063 + A_UINT8 arDot11AuthMode;
49064 + A_UINT8 arAuthMode;
49065 + A_UINT8 arPairwiseCrypto;
49066 + A_UINT8 arPairwiseCryptoLen;
49067 + A_UINT8 arGroupCrypto;
49068 + A_UINT8 arGroupCryptoLen;
49069 + A_UINT8 arDefTxKeyIndex;
49070 + struct ar_wep_key arWepKeyList[WMI_MAX_KEY_INDEX + 1];
49071 + A_UINT8 arBssid[6];
49072 + A_UINT8 arReqBssid[6];
49073 + A_UINT16 arChannelHint;
49074 + A_UINT16 arBssChannel;
49075 + A_UINT16 arListenInterval;
49076 + struct ar6000_version arVersion;
49077 + A_UINT32 arTargetType;
49078 + A_INT8 arRssi;
49079 + A_UINT8 arTxPwr;
49080 + A_BOOL arTxPwrSet;
49081 + A_INT32 arBitRate;
49082 + struct net_device_stats arNetStats;
49083 + struct iw_statistics arIwStats;
49084 + A_INT8 arNumChannels;
49085 + A_UINT16 arChannelList[32];
49086 + A_UINT32 arRegCode;
49087 + A_BOOL statsUpdatePending;
49088 + TARGET_STATS arTargetStats;
49089 + A_INT8 arMaxRetries;
49090 + A_UINT8 arPhyCapability;
49091 +#ifdef CONFIG_HOST_TCMD_SUPPORT
49092 + A_UINT8 tcmdRxReport;
49093 + A_UINT32 tcmdRxTotalPkt;
49094 + A_INT32 tcmdRxRssi;
49095 + A_UINT32 tcmdPm;
49096 + A_UINT32 arTargetMode;
49097 +#endif
49098 + AR6000_WLAN_STATE arWlanState;
49099 + struct ar_node_mapping arNodeMap[MAX_NODE_NUM];
49100 + A_UINT8 arIbssPsEnable;
49101 + A_UINT8 arNodeNum;
49102 + A_UINT8 arNexEpId;
49103 + struct ar_cookie *arCookieList;
49104 + A_UINT16 arRateMask;
49105 + A_UINT8 arSkipScan;
49106 + A_UINT16 arBeaconInterval;
49107 + A_BOOL arConnectPending;
49108 + A_BOOL arWmmEnabled;
49109 + struct ar_hb_chlng_resp arHBChallengeResp;
49110 + A_UINT8 arKeepaliveConfigured;
49111 + A_UINT32 arMgmtFilter;
49112 + HTC_ENDPOINT_ID arWmi2EpMapping[WMI_PRI_MAX_COUNT];
49113 + WMI_PRI_STREAM_ID arEp2WmiMapping[ENDPOINT_MAX];
49114 +#ifdef HTC_RAW_INTERFACE
49115 + HTC_ENDPOINT_ID arRaw2EpMapping[HTC_RAW_STREAM_NUM_MAX];
49116 + HTC_RAW_STREAM_ID arEp2RawMapping[ENDPOINT_MAX];
49117 + struct semaphore raw_htc_read_sem[HTC_RAW_STREAM_NUM_MAX];
49118 + struct semaphore raw_htc_write_sem[HTC_RAW_STREAM_NUM_MAX];
49119 + wait_queue_head_t raw_htc_read_queue[HTC_RAW_STREAM_NUM_MAX];
49120 + wait_queue_head_t raw_htc_write_queue[HTC_RAW_STREAM_NUM_MAX];
49121 + raw_htc_buffer *raw_htc_read_buffer[HTC_RAW_STREAM_NUM_MAX][RAW_HTC_READ_BUFFERS_NUM];
49122 + raw_htc_buffer *raw_htc_write_buffer[HTC_RAW_STREAM_NUM_MAX][RAW_HTC_WRITE_BUFFERS_NUM];
49123 + A_BOOL write_buffer_available[HTC_RAW_STREAM_NUM_MAX];
49124 + A_BOOL read_buffer_available[HTC_RAW_STREAM_NUM_MAX];
49125 +#endif
49126 + A_BOOL arNetQueueStopped;
49127 + A_BOOL arRawIfInit;
49128 + int arDeviceIndex;
49129 + COMMON_CREDIT_STATE_INFO arCreditStateInfo;
49130 + A_BOOL arWMIControlEpFull;
49131 + A_BOOL dbgLogFetchInProgress;
49132 + A_UCHAR log_buffer[DBGLOG_HOST_LOG_BUFFER_SIZE];
49133 + A_UINT32 log_cnt;
49134 + A_UINT32 dbglog_init_done;
49135 + A_UINT32 arConnectCtrlFlags;
49136 + A_UINT32 scan_complete;
49137 +#ifdef USER_KEYS
49138 + A_INT32 user_savedkeys_stat;
49139 + A_UINT32 user_key_ctrl;
49140 + struct USER_SAVEDKEYS user_saved_keys;
49141 +#endif
49142 +} AR_SOFTC_T;
49143 +
49144 +
49145 +#define arWMIStream2EndpointID(ar,wmi) (ar)->arWmi2EpMapping[(wmi)]
49146 +#define arSetWMIStream2EndpointIDMap(ar,wmi,ep) \
49147 +{ (ar)->arWmi2EpMapping[(wmi)] = (ep); \
49148 + (ar)->arEp2WmiMapping[(ep)] = (wmi); }
49149 +#define arEndpoint2WMIStreamID(ar,ep) (ar)->arEp2WmiMapping[(ep)]
49150 +
49151 +#define arRawIfEnabled(ar) (ar)->arRawIfInit
49152 +#define arRawStream2EndpointID(ar,raw) (ar)->arRaw2EpMapping[(raw)]
49153 +#define arSetRawStream2EndpointIDMap(ar,raw,ep) \
49154 +{ (ar)->arRaw2EpMapping[(raw)] = (ep); \
49155 + (ar)->arEp2RawMapping[(ep)] = (raw); }
49156 +#define arEndpoint2RawStreamID(ar,ep) (ar)->arEp2RawMapping[(ep)]
49157 +
49158 +struct ar_giwscan_param {
49159 + char *current_ev;
49160 + char *end_buf;
49161 + A_BOOL firstPass;
49162 +};
49163 +
49164 +#define AR6000_STAT_INC(ar, stat) (ar->arNetStats.stat++)
49165 +
49166 +#define AR6000_SPIN_LOCK(lock, param) do { \
49167 + if (irqs_disabled()) { \
49168 + AR_DEBUG_PRINTF("IRQs disabled:AR6000_LOCK\n"); \
49169 + } \
49170 + spin_lock_bh(lock); \
49171 +} while (0)
49172 +
49173 +#define AR6000_SPIN_UNLOCK(lock, param) do { \
49174 + if (irqs_disabled()) { \
49175 + AR_DEBUG_PRINTF("IRQs disabled: AR6000_UNLOCK\n"); \
49176 + } \
49177 + spin_unlock_bh(lock); \
49178 +} while (0)
49179 +
49180 +int ar6000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
49181 +int ar6000_ioctl_dispatcher(struct net_device *dev, struct ifreq *rq, int cmd);
49182 +void ar6000_ioctl_iwsetup(struct iw_handler_def *def);
49183 +void ar6000_gpio_init(void);
49184 +void ar6000_init_profile_info(AR_SOFTC_T *ar);
49185 +void ar6000_install_static_wep_keys(AR_SOFTC_T *ar);
49186 +int ar6000_init(struct net_device *dev);
49187 +int ar6000_dbglog_get_debug_logs(AR_SOFTC_T *ar);
49188 +A_STATUS ar6000_SetHTCBlockSize(AR_SOFTC_T *ar);
49189 +
49190 +#ifdef HTC_RAW_INTERFACE
49191 +
49192 +#ifndef __user
49193 +#define __user
49194 +#endif
49195 +
49196 +int ar6000_htc_raw_open(AR_SOFTC_T *ar);
49197 +int ar6000_htc_raw_close(AR_SOFTC_T *ar);
49198 +ssize_t ar6000_htc_raw_read(AR_SOFTC_T *ar,
49199 + HTC_RAW_STREAM_ID StreamID,
49200 + char __user *buffer, size_t count);
49201 +ssize_t ar6000_htc_raw_write(AR_SOFTC_T *ar,
49202 + HTC_RAW_STREAM_ID StreamID,
49203 + char __user *buffer, size_t count);
49204 +
49205 +#endif /* HTC_RAW_INTERFACE */
49206 +
49207 +#ifdef __cplusplus
49208 +}
49209 +#endif
49210 +
49211 +#endif /* _AR6000_H_ */
49212 Index: linux-2.6.28/drivers/ar6000/ar6000/ar6000_raw_if.c
49213 ===================================================================
49214 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
49215 +++ linux-2.6.28/drivers/ar6000/ar6000/ar6000_raw_if.c 2009-01-02 00:01:56.000000000 +0100
49216 @@ -0,0 +1,439 @@
49217 +/*
49218 + *
49219 + * Copyright (c) 2004-2007 Atheros Communications Inc.
49220 + * All rights reserved.
49221 + *
49222 + *
49223 + * This program is free software; you can redistribute it and/or modify
49224 + * it under the terms of the GNU General Public License version 2 as
49225 + * published by the Free Software Foundation;
49226 + *
49227 + * Software distributed under the License is distributed on an "AS
49228 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
49229 + * implied. See the License for the specific language governing
49230 + * rights and limitations under the License.
49231 + *
49232 + *
49233 + *
49234 + */
49235 +
49236 +#include "ar6000_drv.h"
49237 +
49238 +#ifdef HTC_RAW_INTERFACE
49239 +
49240 +static void
49241 +ar6000_htc_raw_read_cb(void *Context, HTC_PACKET *pPacket)
49242 +{
49243 + AR_SOFTC_T *ar = (AR_SOFTC_T *)Context;
49244 + raw_htc_buffer *busy;
49245 + HTC_RAW_STREAM_ID streamID;
49246 +
49247 + busy = (raw_htc_buffer *)pPacket->pPktContext;
49248 + A_ASSERT(busy != NULL);
49249 +
49250 + if (pPacket->Status == A_ECANCELED) {
49251 + /*
49252 + * HTC provides A_ECANCELED status when it doesn't want to be refilled
49253 + * (probably due to a shutdown)
49254 + */
49255 + return;
49256 + }
49257 +
49258 + streamID = arEndpoint2RawStreamID(ar,pPacket->Endpoint);
49259 + A_ASSERT(streamID != HTC_RAW_STREAM_NOT_MAPPED);
49260 +
49261 +#ifdef CF
49262 + if (down_trylock(&ar->raw_htc_read_sem[streamID])) {
49263 +#else
49264 + if (down_interruptible(&ar->raw_htc_read_sem[streamID])) {
49265 +#endif /* CF */
49266 + AR_DEBUG2_PRINTF("Unable to down the semaphore\n");
49267 + }
49268 +
49269 + A_ASSERT((pPacket->Status != A_OK) ||
49270 + (pPacket->pBuffer == (busy->data + HTC_HEADER_LEN)));
49271 +
49272 + busy->length = pPacket->ActualLength + HTC_HEADER_LEN;
49273 + busy->currPtr = HTC_HEADER_LEN;
49274 + ar->read_buffer_available[streamID] = TRUE;
49275 + //AR_DEBUG_PRINTF("raw read cb: 0x%X 0x%X \n", busy->currPtr,busy->length);
49276 + up(&ar->raw_htc_read_sem[streamID]);
49277 +
49278 + /* Signal the waiting process */
49279 + AR_DEBUG2_PRINTF("Waking up the StreamID(%d) read process\n", streamID);
49280 + wake_up_interruptible(&ar->raw_htc_read_queue[streamID]);
49281 +}
49282 +
49283 +static void
49284 +ar6000_htc_raw_write_cb(void *Context, HTC_PACKET *pPacket)
49285 +{
49286 + AR_SOFTC_T *ar = (AR_SOFTC_T *)Context;
49287 + raw_htc_buffer *free;
49288 + HTC_RAW_STREAM_ID streamID;
49289 +
49290 + free = (raw_htc_buffer *)pPacket->pPktContext;
49291 + A_ASSERT(free != NULL);
49292 +
49293 + if (pPacket->Status == A_ECANCELED) {
49294 + /*
49295 + * HTC provides A_ECANCELED status when it doesn't want to be refilled
49296 + * (probably due to a shutdown)
49297 + */
49298 + return;
49299 + }
49300 +
49301 + streamID = arEndpoint2RawStreamID(ar,pPacket->Endpoint);
49302 + A_ASSERT(streamID != HTC_RAW_STREAM_NOT_MAPPED);
49303 +
49304 +#ifdef CF
49305 + if (down_trylock(&ar->raw_htc_write_sem[streamID])) {
49306 +#else
49307 + if (down_interruptible(&ar->raw_htc_write_sem[streamID])) {
49308 +#endif
49309 + AR_DEBUG2_PRINTF("Unable to down the semaphore\n");
49310 + }
49311 +
49312 + A_ASSERT(pPacket->pBuffer == (free->data + HTC_HEADER_LEN));
49313 +
49314 + free->length = 0;
49315 + ar->write_buffer_available[streamID] = TRUE;
49316 + up(&ar->raw_htc_write_sem[streamID]);
49317 +
49318 + /* Signal the waiting process */
49319 + AR_DEBUG2_PRINTF("Waking up the StreamID(%d) write process\n", streamID);
49320 + wake_up_interruptible(&ar->raw_htc_write_queue[streamID]);
49321 +}
49322 +
49323 +/* connect to a service */
49324 +static A_STATUS ar6000_connect_raw_service(AR_SOFTC_T *ar,
49325 + HTC_RAW_STREAM_ID StreamID)
49326 +{
49327 + A_STATUS status;
49328 + HTC_SERVICE_CONNECT_RESP response;
49329 + A_UINT8 streamNo;
49330 + HTC_SERVICE_CONNECT_REQ connect;
49331 +
49332 + do {
49333 +
49334 + A_MEMZERO(&connect,sizeof(connect));
49335 + /* pass the stream ID as meta data to the RAW streams service */
49336 + streamNo = (A_UINT8)StreamID;
49337 + connect.pMetaData = &streamNo;
49338 + connect.MetaDataLength = sizeof(A_UINT8);
49339 + /* these fields are the same for all endpoints */
49340 + connect.EpCallbacks.pContext = ar;
49341 + connect.EpCallbacks.EpTxComplete = ar6000_htc_raw_write_cb;
49342 + connect.EpCallbacks.EpRecv = ar6000_htc_raw_read_cb;
49343 + /* simple interface, we don't need these optional callbacks */
49344 + connect.EpCallbacks.EpRecvRefill = NULL;
49345 + connect.EpCallbacks.EpSendFull = NULL;
49346 + connect.MaxSendQueueDepth = RAW_HTC_WRITE_BUFFERS_NUM;
49347 +
49348 + /* connect to the raw streams service, we may be able to get 1 or more
49349 + * connections, depending on WHAT is running on the target */
49350 + connect.ServiceID = HTC_RAW_STREAMS_SVC;
49351 +
49352 + A_MEMZERO(&response,sizeof(response));
49353 +
49354 + /* try to connect to the raw stream, it is okay if this fails with
49355 + * status HTC_SERVICE_NO_MORE_EP */
49356 + status = HTCConnectService(ar->arHtcTarget,
49357 + &connect,
49358 + &response);
49359 +
49360 + if (A_FAILED(status)) {
49361 + if (response.ConnectRespCode == HTC_SERVICE_NO_MORE_EP) {
49362 + AR_DEBUG_PRINTF("HTC RAW , No more streams allowed \n");
49363 + status = A_OK;
49364 + }
49365 + break;
49366 + }
49367 +
49368 + /* set endpoint mapping for the RAW HTC streams */
49369 + arSetRawStream2EndpointIDMap(ar,StreamID,response.Endpoint);
49370 +
49371 + AR_DEBUG_PRINTF("HTC RAW : stream ID: %d, endpoint: %d\n",
49372 + StreamID, arRawStream2EndpointID(ar,StreamID));
49373 +
49374 + } while (FALSE);
49375 +
49376 + return status;
49377 +}
49378 +
49379 +int ar6000_htc_raw_open(AR_SOFTC_T *ar)
49380 +{
49381 + A_STATUS status;
49382 + int streamID, endPt, count2;
49383 + raw_htc_buffer *buffer;
49384 + HTC_SERVICE_ID servicepriority;
49385 +
49386 + A_ASSERT(ar->arHtcTarget != NULL);
49387 +
49388 + /* wait for target */
49389 + status = HTCWaitTarget(ar->arHtcTarget);
49390 +
49391 + if (A_FAILED(status)) {
49392 + AR_DEBUG_PRINTF("HTCWaitTarget failed (%d)\n", status);
49393 + return -ENODEV;
49394 + }
49395 +
49396 + for (endPt = 0; endPt < ENDPOINT_MAX; endPt++) {
49397 + ar->arEp2RawMapping[endPt] = HTC_RAW_STREAM_NOT_MAPPED;
49398 + }
49399 +
49400 + for (streamID = HTC_RAW_STREAM_0; streamID < HTC_RAW_STREAM_NUM_MAX; streamID++) {
49401 + /* Initialize the data structures */
49402 + init_MUTEX(&ar->raw_htc_read_sem[streamID]);
49403 + init_MUTEX(&ar->raw_htc_write_sem[streamID]);
49404 + init_waitqueue_head(&ar->raw_htc_read_queue[streamID]);
49405 + init_waitqueue_head(&ar->raw_htc_write_queue[streamID]);
49406 +
49407 + /* try to connect to the raw service */
49408 + status = ar6000_connect_raw_service(ar,streamID);
49409 +
49410 + if (A_FAILED(status)) {
49411 + break;
49412 + }
49413 +
49414 + if (arRawStream2EndpointID(ar,streamID) == 0) {
49415 + break;
49416 + }
49417 +
49418 + for (count2 = 0; count2 < RAW_HTC_READ_BUFFERS_NUM; count2 ++) {
49419 + /* Initialize the receive buffers */
49420 + buffer = ar->raw_htc_write_buffer[streamID][count2];
49421 + memset(buffer, 0, sizeof(raw_htc_buffer));
49422 + buffer = ar->raw_htc_read_buffer[streamID][count2];
49423 + memset(buffer, 0, sizeof(raw_htc_buffer));
49424 +
49425 + SET_HTC_PACKET_INFO_RX_REFILL(&buffer->HTCPacket,
49426 + buffer,
49427 + buffer->data,
49428 + AR6000_BUFFER_SIZE,
49429 + arRawStream2EndpointID(ar,streamID));
49430 +
49431 + /* Queue buffers to HTC for receive */
49432 + if ((status = HTCAddReceivePkt(ar->arHtcTarget, &buffer->HTCPacket)) != A_OK)
49433 + {
49434 + BMIInit();
49435 + return -EIO;
49436 + }
49437 + }
49438 +
49439 + for (count2 = 0; count2 < RAW_HTC_WRITE_BUFFERS_NUM; count2 ++) {
49440 + /* Initialize the receive buffers */
49441 + buffer = ar->raw_htc_write_buffer[streamID][count2];
49442 + memset(buffer, 0, sizeof(raw_htc_buffer));
49443 + }
49444 +
49445 + ar->read_buffer_available[streamID] = FALSE;
49446 + ar->write_buffer_available[streamID] = TRUE;
49447 + }
49448 +
49449 + if (A_FAILED(status)) {
49450 + return -EIO;
49451 + }
49452 +
49453 + AR_DEBUG_PRINTF("HTC RAW, number of streams the target supports: %d \n", streamID);
49454 +
49455 + servicepriority = HTC_RAW_STREAMS_SVC; /* only 1 */
49456 +
49457 + /* set callbacks and priority list */
49458 + HTCSetCreditDistribution(ar->arHtcTarget,
49459 + ar,
49460 + NULL, /* use default */
49461 + NULL, /* use default */
49462 + &servicepriority,
49463 + 1);
49464 +
49465 + /* Start the HTC component */
49466 + if ((status = HTCStart(ar->arHtcTarget)) != A_OK) {
49467 + BMIInit();
49468 + return -EIO;
49469 + }
49470 +
49471 + (ar)->arRawIfInit = TRUE;
49472 +
49473 + return 0;
49474 +}
49475 +
49476 +int ar6000_htc_raw_close(AR_SOFTC_T *ar)
49477 +{
49478 + A_PRINTF("ar6000_htc_raw_close called \n");
49479 + HTCStop(ar->arHtcTarget);
49480 +
49481 + /* reset the device */
49482 + ar6000_reset_device(ar->arHifDevice, ar->arTargetType);
49483 + /* Initialize the BMI component */
49484 + BMIInit();
49485 +
49486 + return 0;
49487 +}
49488 +
49489 +raw_htc_buffer *
49490 +get_filled_buffer(AR_SOFTC_T *ar, HTC_RAW_STREAM_ID StreamID)
49491 +{
49492 + int count;
49493 + raw_htc_buffer *busy;
49494 +
49495 + /* Check for data */
49496 + for (count = 0; count < RAW_HTC_READ_BUFFERS_NUM; count ++) {
49497 + busy = ar->raw_htc_read_buffer[StreamID][count];
49498 + if (busy->length) {
49499 + break;
49500 + }
49501 + }
49502 + if (busy->length) {
49503 + ar->read_buffer_available[StreamID] = TRUE;
49504 + } else {
49505 + ar->read_buffer_available[StreamID] = FALSE;
49506 + }
49507 +
49508 + return busy;
49509 +}
49510 +
49511 +ssize_t ar6000_htc_raw_read(AR_SOFTC_T *ar, HTC_RAW_STREAM_ID StreamID,
49512 + char __user *buffer, size_t length)
49513 +{
49514 + int readPtr;
49515 + raw_htc_buffer *busy;
49516 +
49517 + if (arRawStream2EndpointID(ar,StreamID) == 0) {
49518 + AR_DEBUG_PRINTF("StreamID(%d) not connected! \n", StreamID);
49519 + return -EFAULT;
49520 + }
49521 +
49522 + if (down_interruptible(&ar->raw_htc_read_sem[StreamID])) {
49523 + return -ERESTARTSYS;
49524 + }
49525 +
49526 + busy = get_filled_buffer(ar,StreamID);
49527 + while (!ar->read_buffer_available[StreamID]) {
49528 + up(&ar->raw_htc_read_sem[StreamID]);
49529 +
49530 + /* Wait for the data */
49531 + AR_DEBUG2_PRINTF("Sleeping StreamID(%d) read process\n", StreamID);
49532 + if (wait_event_interruptible(ar->raw_htc_read_queue[StreamID],
49533 + ar->read_buffer_available[StreamID]))
49534 + {
49535 + return -EINTR;
49536 + }
49537 + if (down_interruptible(&ar->raw_htc_read_sem[StreamID])) {
49538 + return -ERESTARTSYS;
49539 + }
49540 + busy = get_filled_buffer(ar,StreamID);
49541 + }
49542 +
49543 + /* Read the data */
49544 + readPtr = busy->currPtr;
49545 + if (length > busy->length - HTC_HEADER_LEN) {
49546 + length = busy->length - HTC_HEADER_LEN;
49547 + }
49548 + if (copy_to_user(buffer, &busy->data[readPtr], length)) {
49549 + up(&ar->raw_htc_read_sem[StreamID]);
49550 + return -EFAULT;
49551 + }
49552 +
49553 + busy->currPtr += length;
49554 +
49555 + //AR_DEBUG_PRINTF("raw read ioctl: currPTR : 0x%X 0x%X \n", busy->currPtr,busy->length);
49556 +
49557 + if (busy->currPtr == busy->length)
49558 + {
49559 + busy->currPtr = 0;
49560 + busy->length = 0;
49561 + HTC_PACKET_RESET_RX(&busy->HTCPacket);
49562 + //AR_DEBUG_PRINTF("raw read ioctl: ep for packet:%d \n", busy->HTCPacket.Endpoint);
49563 + HTCAddReceivePkt(ar->arHtcTarget, &busy->HTCPacket);
49564 + }
49565 + ar->read_buffer_available[StreamID] = FALSE;
49566 + up(&ar->raw_htc_read_sem[StreamID]);
49567 +
49568 + return length;
49569 +}
49570 +
49571 +static raw_htc_buffer *
49572 +get_free_buffer(AR_SOFTC_T *ar, HTC_ENDPOINT_ID StreamID)
49573 +{
49574 + int count;
49575 + raw_htc_buffer *free;
49576 +
49577 + free = NULL;
49578 + for (count = 0; count < RAW_HTC_WRITE_BUFFERS_NUM; count ++) {
49579 + free = ar->raw_htc_write_buffer[StreamID][count];
49580 + if (free->length == 0) {
49581 + break;
49582 + }
49583 + }
49584 + if (!free->length) {
49585 + ar->write_buffer_available[StreamID] = TRUE;
49586 + } else {
49587 + ar->write_buffer_available[StreamID] = FALSE;
49588 + }
49589 +
49590 + return free;
49591 +}
49592 +
49593 +ssize_t ar6000_htc_raw_write(AR_SOFTC_T *ar, HTC_RAW_STREAM_ID StreamID,
49594 + char __user *buffer, size_t length)
49595 +{
49596 + int writePtr;
49597 + raw_htc_buffer *free;
49598 +
49599 + if (arRawStream2EndpointID(ar,StreamID) == 0) {
49600 + AR_DEBUG_PRINTF("StreamID(%d) not connected! \n", StreamID);
49601 + return -EFAULT;
49602 + }
49603 +
49604 + if (down_interruptible(&ar->raw_htc_write_sem[StreamID])) {
49605 + return -ERESTARTSYS;
49606 + }
49607 +
49608 + /* Search for a free buffer */
49609 + free = get_free_buffer(ar,StreamID);
49610 +
49611 + /* Check if there is space to write else wait */
49612 + while (!ar->write_buffer_available[StreamID]) {
49613 + up(&ar->raw_htc_write_sem[StreamID]);
49614 +
49615 + /* Wait for buffer to become free */
49616 + AR_DEBUG2_PRINTF("Sleeping StreamID(%d) write process\n", StreamID);
49617 + if (wait_event_interruptible(ar->raw_htc_write_queue[StreamID],
49618 + ar->write_buffer_available[StreamID]))
49619 + {
49620 + return -EINTR;
49621 + }
49622 + if (down_interruptible(&ar->raw_htc_write_sem[StreamID])) {
49623 + return -ERESTARTSYS;
49624 + }
49625 + free = get_free_buffer(ar,StreamID);
49626 + }
49627 +
49628 + /* Send the data */
49629 + writePtr = HTC_HEADER_LEN;
49630 + if (length > (AR6000_BUFFER_SIZE - HTC_HEADER_LEN)) {
49631 + length = AR6000_BUFFER_SIZE - HTC_HEADER_LEN;
49632 + }
49633 +
49634 + if (copy_from_user(&free->data[writePtr], buffer, length)) {
49635 + up(&ar->raw_htc_read_sem[StreamID]);
49636 + return -EFAULT;
49637 + }
49638 +
49639 + free->length = length;
49640 +
49641 + SET_HTC_PACKET_INFO_TX(&free->HTCPacket,
49642 + free,
49643 + &free->data[writePtr],
49644 + length,
49645 + arRawStream2EndpointID(ar,StreamID),
49646 + AR6K_DATA_PKT_TAG);
49647 +
49648 + HTCSendPkt(ar->arHtcTarget,&free->HTCPacket);
49649 +
49650 + ar->write_buffer_available[StreamID] = FALSE;
49651 + up(&ar->raw_htc_write_sem[StreamID]);
49652 +
49653 + return length;
49654 +}
49655 +#endif /* HTC_RAW_INTERFACE */
49656 Index: linux-2.6.28/drivers/ar6000/ar6000/ar6xapi_linux.h
49657 ===================================================================
49658 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
49659 +++ linux-2.6.28/drivers/ar6000/ar6000/ar6xapi_linux.h 2009-01-02 00:01:56.000000000 +0100
49660 @@ -0,0 +1,128 @@
49661 +#ifndef _AR6XAPI_LINUX_H
49662 +#define _AR6XAPI_LINUX_H
49663 +/*
49664 + *
49665 + * Copyright (c) 2004-2007 Atheros Communications Inc.
49666 + * All rights reserved.
49667 + *
49668 + *
49669 + * This program is free software; you can redistribute it and/or modify
49670 + * it under the terms of the GNU General Public License version 2 as
49671 + * published by the Free Software Foundation;
49672 + *
49673 + * Software distributed under the License is distributed on an "AS
49674 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
49675 + * implied. See the License for the specific language governing
49676 + * rights and limitations under the License.
49677 + *
49678 + *
49679 + *
49680 + */
49681 +
49682 +#ifdef __cplusplus
49683 +extern "C" {
49684 +#endif
49685 +
49686 +struct ar6_softc;
49687 +
49688 +void ar6000_ready_event(void *devt, A_UINT8 *datap, A_UINT8 phyCap);
49689 +A_UINT8 ar6000_iptos_to_userPriority(A_UINT8 *pkt);
49690 +A_STATUS ar6000_control_tx(void *devt, void *osbuf, WMI_PRI_STREAM_ID streamID);
49691 +void ar6000_connect_event(struct ar6_softc *ar, A_UINT16 channel,
49692 + A_UINT8 *bssid, A_UINT16 listenInterval,
49693 + A_UINT16 beaconInterval, NETWORK_TYPE networkType,
49694 + A_UINT8 beaconIeLen, A_UINT8 assocReqLen,
49695 + A_UINT8 assocRespLen,A_UINT8 *assocInfo);
49696 +void ar6000_disconnect_event(struct ar6_softc *ar, A_UINT8 reason,
49697 + A_UINT8 *bssid, A_UINT8 assocRespLen,
49698 + A_UINT8 *assocInfo, A_UINT16 protocolReasonStatus);
49699 +void ar6000_tkip_micerr_event(struct ar6_softc *ar, A_UINT8 keyid,
49700 + A_BOOL ismcast);
49701 +void ar6000_bitrate_rx(void *devt, A_INT32 rateKbps);
49702 +void ar6000_channelList_rx(void *devt, A_INT8 numChan, A_UINT16 *chanList);
49703 +void ar6000_regDomain_event(struct ar6_softc *ar, A_UINT32 regCode);
49704 +void ar6000_txPwr_rx(void *devt, A_UINT8 txPwr);
49705 +void ar6000_keepalive_rx(void *devt, A_UINT8 configured);
49706 +void ar6000_neighborReport_event(struct ar6_softc *ar, int numAps,
49707 + WMI_NEIGHBOR_INFO *info);
49708 +void ar6000_set_numdataendpts(struct ar6_softc *ar, A_UINT32 num);
49709 +void ar6000_scanComplete_event(struct ar6_softc *ar, A_STATUS status);
49710 +void ar6000_targetStats_event(struct ar6_softc *ar, WMI_TARGET_STATS *pStats);
49711 +void ar6000_rssiThreshold_event(struct ar6_softc *ar,
49712 + WMI_RSSI_THRESHOLD_VAL newThreshold,
49713 + A_INT16 rssi);
49714 +void ar6000_reportError_event(struct ar6_softc *, WMI_TARGET_ERROR_VAL errorVal);
49715 +void ar6000_cac_event(struct ar6_softc *ar, A_UINT8 ac, A_UINT8 cac_indication,
49716 + A_UINT8 statusCode, A_UINT8 *tspecSuggestion);
49717 +void ar6000_hbChallengeResp_event(struct ar6_softc *, A_UINT32 cookie, A_UINT32 source);
49718 +void
49719 +ar6000_roam_tbl_event(struct ar6_softc *ar, WMI_TARGET_ROAM_TBL *pTbl);
49720 +
49721 +void
49722 +ar6000_roam_data_event(struct ar6_softc *ar, WMI_TARGET_ROAM_DATA *p);
49723 +
49724 +void
49725 +ar6000_wow_list_event(struct ar6_softc *ar, A_UINT8 num_filters,
49726 + WMI_GET_WOW_LIST_REPLY *wow_reply);
49727 +
49728 +void ar6000_pmkid_list_event(void *devt, A_UINT8 numPMKID,
49729 + WMI_PMKID *pmkidList);
49730 +
49731 +void ar6000_gpio_intr_rx(A_UINT32 intr_mask, A_UINT32 input_values);
49732 +void ar6000_gpio_data_rx(A_UINT32 reg_id, A_UINT32 value);
49733 +void ar6000_gpio_ack_rx(void);
49734 +
49735 +void ar6000_dbglog_init_done(struct ar6_softc *ar);
49736 +
49737 +#ifdef SEND_EVENT_TO_APP
49738 +void ar6000_send_event_to_app(struct ar6_softc *ar, A_UINT16 eventId, A_UINT8 *datap, int len);
49739 +#endif
49740 +
49741 +#ifdef CONFIG_HOST_TCMD_SUPPORT
49742 +void ar6000_tcmd_rx_report_event(void *devt, A_UINT8 * results, int len);
49743 +#endif
49744 +
49745 +void ar6000_tx_retry_err_event(void *devt);
49746 +
49747 +void ar6000_snrThresholdEvent_rx(void *devt,
49748 + WMI_SNR_THRESHOLD_VAL newThreshold,
49749 + A_UINT8 snr);
49750 +
49751 +void ar6000_lqThresholdEvent_rx(void *devt, WMI_LQ_THRESHOLD_VAL range, A_UINT8 lqVal);
49752 +
49753 +
49754 +void ar6000_ratemask_rx(void *devt, A_UINT16 ratemask);
49755 +
49756 +A_STATUS ar6000_get_driver_cfg(struct net_device *dev,
49757 + A_UINT16 cfgParam,
49758 + void *result);
49759 +void ar6000_bssInfo_event_rx(struct ar6_softc *ar, A_UINT8 *data, int len);
49760 +
49761 +void ar6000_dbglog_event(struct ar6_softc *ar, A_UINT32 dropped,
49762 + A_INT8 *buffer, A_UINT32 length);
49763 +
49764 +int ar6000_dbglog_get_debug_logs(struct ar6_softc *ar);
49765 +
49766 +void ar6000_indicate_tx_activity(void *devt, A_UINT8 trafficClass, A_BOOL Active);
49767 +
49768 +void ar6000_dset_open_req(void *devt,
49769 + A_UINT32 id,
49770 + A_UINT32 targ_handle,
49771 + A_UINT32 targ_reply_fn,
49772 + A_UINT32 targ_reply_arg);
49773 +void ar6000_dset_close(void *devt, A_UINT32 access_cookie);
49774 +void ar6000_dset_data_req(void *devt,
49775 + A_UINT32 access_cookie,
49776 + A_UINT32 offset,
49777 + A_UINT32 length,
49778 + A_UINT32 targ_buf,
49779 + A_UINT32 targ_reply_fn,
49780 + A_UINT32 targ_reply_arg);
49781 +
49782 +
49783 +
49784 +#ifdef __cplusplus
49785 +}
49786 +#endif
49787 +
49788 +#endif
49789 Index: linux-2.6.28/drivers/ar6000/ar6000/athdrv_linux.h
49790 ===================================================================
49791 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
49792 +++ linux-2.6.28/drivers/ar6000/ar6000/athdrv_linux.h 2009-01-02 00:01:56.000000000 +0100
49793 @@ -0,0 +1,993 @@
49794 +/*
49795 + * Copyright (c) 2004-2006 Atheros Communications Inc.
49796 + * All rights reserved.
49797 + *
49798 + *
49799 + *
49800 + * This program is free software; you can redistribute it and/or modify
49801 + * it under the terms of the GNU General Public License version 2 as
49802 + * published by the Free Software Foundation;
49803 + *
49804 + * Software distributed under the License is distributed on an "AS
49805 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
49806 + * implied. See the License for the specific language governing
49807 + * rights and limitations under the License.
49808 + *
49809 + *
49810 + *
49811 + */
49812 +
49813 +#ifndef _ATHDRV_LINUX_H
49814 +#define _ATHDRV_LINUX_H
49815 +
49816 +#ifdef __cplusplus
49817 +extern "C" {
49818 +#endif
49819 +
49820 +
49821 +/*
49822 + * There are two types of ioctl's here: Standard ioctls and
49823 + * eXtended ioctls. All extended ioctls (XIOCTL) are multiplexed
49824 + * off of the single ioctl command, AR6000_IOCTL_EXTENDED. The
49825 + * arguments for every XIOCTL starts with a 32-bit command word
49826 + * that is used to select which extended ioctl is in use. After
49827 + * the command word are command-specific arguments.
49828 + */
49829 +
49830 +/* Linux standard Wireless Extensions, private ioctl interfaces */
49831 +#define IEEE80211_IOCTL_SETPARAM (SIOCIWFIRSTPRIV+0)
49832 +#define IEEE80211_IOCTL_GETPARAM (SIOCIWFIRSTPRIV+1)
49833 +#define IEEE80211_IOCTL_SETKEY (SIOCIWFIRSTPRIV+2)
49834 +#define IEEE80211_IOCTL_SETWMMPARAMS (SIOCIWFIRSTPRIV+3)
49835 +#define IEEE80211_IOCTL_DELKEY (SIOCIWFIRSTPRIV+4)
49836 +#define IEEE80211_IOCTL_GETWMMPARAMS (SIOCIWFIRSTPRIV+5)
49837 +#define IEEE80211_IOCTL_SETOPTIE (SIOCIWFIRSTPRIV+6)
49838 +#define IEEE80211_IOCTL_SETMLME (SIOCIWFIRSTPRIV+7)
49839 +//#define IEEE80211_IOCTL_GETOPTIE (SIOCIWFIRSTPRIV+7)
49840 +#define IEEE80211_IOCTL_ADDPMKID (SIOCIWFIRSTPRIV+8)
49841 +//#define IEEE80211_IOCTL_SETAUTHALG (SIOCIWFIRSTPRIV+10)
49842 +#define IEEE80211_IOCTL_LASTONE (SIOCIWFIRSTPRIV+9)
49843 +
49844 +
49845 +
49846 +/* ====WMI Ioctls==== */
49847 +/*
49848 + *
49849 + * Many ioctls simply provide WMI services to application code:
49850 + * an application makes such an ioctl call with a set of arguments
49851 + * that are packaged into the corresponding WMI message, and sent
49852 + * to the Target.
49853 + */
49854 +
49855 +#define AR6000_IOCTL_WMI_GETREV (SIOCIWFIRSTPRIV+10)
49856 +/*
49857 + * arguments:
49858 + * ar6000_version *revision
49859 + */
49860 +
49861 +#define AR6000_IOCTL_WMI_SETPWR (SIOCIWFIRSTPRIV+11)
49862 +/*
49863 + * arguments:
49864 + * WMI_POWER_MODE_CMD pwrModeCmd (see include/wmi.h)
49865 + * uses: WMI_SET_POWER_MODE_CMDID
49866 + */
49867 +
49868 +#define AR6000_IOCTL_WMI_SETSCAN (SIOCIWFIRSTPRIV+12)
49869 +/*
49870 + * arguments:
49871 + * WMI_SCAN_PARAMS_CMD scanParams (see include/wmi.h)
49872 + * uses: WMI_SET_SCAN_PARAMS_CMDID
49873 + */
49874 +
49875 +#define AR6000_IOCTL_WMI_SETLISTENINT (SIOCIWFIRSTPRIV+13)
49876 +/*
49877 + * arguments:
49878 + * UINT32 listenInterval
49879 + * uses: WMI_SET_LISTEN_INT_CMDID
49880 + */
49881 +
49882 +#define AR6000_IOCTL_WMI_SETBSSFILTER (SIOCIWFIRSTPRIV+14)
49883 +/*
49884 + * arguments:
49885 + * WMI_BSS_FILTER filter (see include/wmi.h)
49886 + * uses: WMI_SET_BSS_FILTER_CMDID
49887 + */
49888 +
49889 +#define AR6000_IOCTL_WMI_SET_CHANNELPARAMS (SIOCIWFIRSTPRIV+16)
49890 +/*
49891 + * arguments:
49892 + * WMI_CHANNEL_PARAMS_CMD chParams
49893 + * uses: WMI_SET_CHANNEL_PARAMS_CMDID
49894 + */
49895 +
49896 +#define AR6000_IOCTL_WMI_SET_PROBEDSSID (SIOCIWFIRSTPRIV+17)
49897 +/*
49898 + * arguments:
49899 + * WMI_PROBED_SSID_CMD probedSsids (see include/wmi.h)
49900 + * uses: WMI_SETPROBED_SSID_CMDID
49901 + */
49902 +
49903 +#define AR6000_IOCTL_WMI_SET_PMPARAMS (SIOCIWFIRSTPRIV+18)
49904 +/*
49905 + * arguments:
49906 + * WMI_POWER_PARAMS_CMD powerParams (see include/wmi.h)
49907 + * uses: WMI_SET_POWER_PARAMS_CMDID
49908 + */
49909 +
49910 +#define AR6000_IOCTL_WMI_SET_BADAP (SIOCIWFIRSTPRIV+19)
49911 +/*
49912 + * arguments:
49913 + * WMI_ADD_BAD_AP_CMD badAPs (see include/wmi.h)
49914 + * uses: WMI_ADD_BAD_AP_CMDID
49915 + */
49916 +
49917 +#define AR6000_IOCTL_WMI_GET_QOS_QUEUE (SIOCIWFIRSTPRIV+20)
49918 +/*
49919 + * arguments:
49920 + * ar6000_queuereq queueRequest (see below)
49921 + */
49922 +
49923 +#define AR6000_IOCTL_WMI_CREATE_QOS (SIOCIWFIRSTPRIV+21)
49924 +/*
49925 + * arguments:
49926 + * WMI_CREATE_PSTREAM createPstreamCmd (see include/wmi.h)
49927 + * uses: WMI_CREATE_PSTREAM_CMDID
49928 + */
49929 +
49930 +#define AR6000_IOCTL_WMI_DELETE_QOS (SIOCIWFIRSTPRIV+22)
49931 +/*
49932 + * arguments:
49933 + * WMI_DELETE_PSTREAM_CMD deletePstreamCmd (see include/wmi.h)
49934 + * uses: WMI_DELETE_PSTREAM_CMDID
49935 + */
49936 +
49937 +#define AR6000_IOCTL_WMI_SET_SNRTHRESHOLD (SIOCIWFIRSTPRIV+23)
49938 +/*
49939 + * arguments:
49940 + * WMI_SNR_THRESHOLD_PARAMS_CMD thresholdParams (see include/wmi.h)
49941 + * uses: WMI_SNR_THRESHOLD_PARAMS_CMDID
49942 + */
49943 +
49944 +#define AR6000_IOCTL_WMI_SET_ERROR_REPORT_BITMASK (SIOCIWFIRSTPRIV+24)
49945 +/*
49946 + * arguments:
49947 + * WMI_TARGET_ERROR_REPORT_BITMASK errorReportBitMask (see include/wmi.h)
49948 + * uses: WMI_TARGET_ERROR_REPORT_BITMASK_CMDID
49949 + */
49950 +
49951 +#define AR6000_IOCTL_WMI_GET_TARGET_STATS (SIOCIWFIRSTPRIV+25)
49952 +/*
49953 + * arguments:
49954 + * TARGET_STATS *targetStats (see below)
49955 + * uses: WMI_GET_STATISTICS_CMDID
49956 + */
49957 +
49958 +#define AR6000_IOCTL_WMI_SET_ASSOC_INFO (SIOCIWFIRSTPRIV+26)
49959 +/*
49960 + * arguments:
49961 + * WMI_SET_ASSOC_INFO_CMD setAssocInfoCmd
49962 + * uses: WMI_SET_ASSOC_INFO_CMDID
49963 + */
49964 +
49965 +#define AR6000_IOCTL_WMI_SET_ACCESS_PARAMS (SIOCIWFIRSTPRIV+27)
49966 +/*
49967 + * arguments:
49968 + * WMI_SET_ACCESS_PARAMS_CMD setAccessParams (see include/wmi.h)
49969 + * uses: WMI_SET_ACCESS_PARAMS_CMDID
49970 + */
49971 +
49972 +#define AR6000_IOCTL_WMI_SET_BMISS_TIME (SIOCIWFIRSTPRIV+28)
49973 +/*
49974 + * arguments:
49975 + * UINT32 beaconMissTime
49976 + * uses: WMI_SET_BMISS_TIME_CMDID
49977 + */
49978 +
49979 +#define AR6000_IOCTL_WMI_SET_DISC_TIMEOUT (SIOCIWFIRSTPRIV+29)
49980 +/*
49981 + * arguments:
49982 + * WMI_DISC_TIMEOUT_CMD disconnectTimeoutCmd (see include/wmi.h)
49983 + * uses: WMI_SET_DISC_TIMEOUT_CMDID
49984 + */
49985 +
49986 +#define AR6000_IOCTL_WMI_SET_IBSS_PM_CAPS (SIOCIWFIRSTPRIV+30)
49987 +/*
49988 + * arguments:
49989 + * WMI_IBSS_PM_CAPS_CMD ibssPowerMgmtCapsCmd
49990 + * uses: WMI_SET_IBSS_PM_CAPS_CMDID
49991 + */
49992 +
49993 +/*
49994 + * There is a very small space available for driver-private
49995 + * wireless ioctls. In order to circumvent this limitation,
49996 + * we multiplex a bunch of ioctls (XIOCTLs) on top of a
49997 + * single AR6000_IOCTL_EXTENDED ioctl.
49998 + */
49999 +#define AR6000_IOCTL_EXTENDED (SIOCIWFIRSTPRIV+31)
50000 +
50001 +
50002 +/* ====BMI Extended Ioctls==== */
50003 +
50004 +#define AR6000_XIOCTL_BMI_DONE 1
50005 +/*
50006 + * arguments:
50007 + * UINT32 cmd (AR6000_XIOCTL_BMI_DONE)
50008 + * uses: BMI_DONE
50009 + */
50010 +
50011 +#define AR6000_XIOCTL_BMI_READ_MEMORY 2
50012 +/*
50013 + * arguments:
50014 + * union {
50015 + * struct {
50016 + * UINT32 cmd (AR6000_XIOCTL_BMI_READ_MEMORY)
50017 + * UINT32 address
50018 + * UINT32 length
50019 + * }
50020 + * char results[length]
50021 + * }
50022 + * uses: BMI_READ_MEMORY
50023 + */
50024 +
50025 +#define AR6000_XIOCTL_BMI_WRITE_MEMORY 3
50026 +/*
50027 + * arguments:
50028 + * UINT32 cmd (AR6000_XIOCTL_BMI_WRITE_MEMORY)
50029 + * UINT32 address
50030 + * UINT32 length
50031 + * char data[length]
50032 + * uses: BMI_WRITE_MEMORY
50033 + */
50034 +
50035 +#define AR6000_XIOCTL_BMI_EXECUTE 4
50036 +/*
50037 + * arguments:
50038 + * UINT32 cmd (AR6000_XIOCTL_BMI_EXECUTE)
50039 + * UINT32 TargetAddress
50040 + * UINT32 parameter
50041 + * uses: BMI_EXECUTE
50042 + */
50043 +
50044 +#define AR6000_XIOCTL_BMI_SET_APP_START 5
50045 +/*
50046 + * arguments:
50047 + * UINT32 cmd (AR6000_XIOCTL_BMI_SET_APP_START)
50048 + * UINT32 TargetAddress
50049 + * uses: BMI_SET_APP_START
50050 + */
50051 +
50052 +#define AR6000_XIOCTL_BMI_READ_SOC_REGISTER 6
50053 +/*
50054 + * arguments:
50055 + * union {
50056 + * struct {
50057 + * UINT32 cmd (AR6000_XIOCTL_BMI_READ_SOC_REGISTER)
50058 + * UINT32 TargetAddress, 32-bit aligned
50059 + * }
50060 + * UINT32 result
50061 + * }
50062 + * uses: BMI_READ_SOC_REGISTER
50063 + */
50064 +
50065 +#define AR6000_XIOCTL_BMI_WRITE_SOC_REGISTER 7
50066 +/*
50067 + * arguments:
50068 + * struct {
50069 + * UINT32 cmd (AR6000_XIOCTL_BMI_WRITE_SOC_REGISTER)
50070 + * UINT32 TargetAddress, 32-bit aligned
50071 + * UINT32 newValue
50072 + * }
50073 + * uses: BMI_WRITE_SOC_REGISTER
50074 + */
50075 +
50076 +#define AR6000_XIOCTL_BMI_TEST 8
50077 +/*
50078 + * arguments:
50079 + * UINT32 cmd (AR6000_XIOCTL_BMI_TEST)
50080 + * UINT32 address
50081 + * UINT32 length
50082 + * UINT32 count
50083 + */
50084 +
50085 +
50086 +
50087 +/* Historical Host-side DataSet support */
50088 +#define AR6000_XIOCTL_UNUSED9 9
50089 +#define AR6000_XIOCTL_UNUSED10 10
50090 +#define AR6000_XIOCTL_UNUSED11 11
50091 +
50092 +/* ====Misc Extended Ioctls==== */
50093 +
50094 +#define AR6000_XIOCTL_FORCE_TARGET_RESET 12
50095 +/*
50096 + * arguments:
50097 + * UINT32 cmd (AR6000_XIOCTL_FORCE_TARGET_RESET)
50098 + */
50099 +
50100 +
50101 +#ifdef HTC_RAW_INTERFACE
50102 +/* HTC Raw Interface Ioctls */
50103 +#define AR6000_XIOCTL_HTC_RAW_OPEN 13
50104 +/*
50105 + * arguments:
50106 + * UINT32 cmd (AR6000_XIOCTL_HTC_RAW_OPEN)
50107 + */
50108 +
50109 +#define AR6000_XIOCTL_HTC_RAW_CLOSE 14
50110 +/*
50111 + * arguments:
50112 + * UINT32 cmd (AR6000_XIOCTL_HTC_RAW_CLOSE)
50113 + */
50114 +
50115 +#define AR6000_XIOCTL_HTC_RAW_READ 15
50116 +/*
50117 + * arguments:
50118 + * union {
50119 + * struct {
50120 + * UINT32 cmd (AR6000_XIOCTL_HTC_RAW_READ)
50121 + * UINT32 mailboxID
50122 + * UINT32 length
50123 + * }
50124 + * results[length]
50125 + * }
50126 + */
50127 +
50128 +#define AR6000_XIOCTL_HTC_RAW_WRITE 16
50129 +/*
50130 + * arguments:
50131 + * UINT32 cmd (AR6000_XIOCTL_HTC_RAW_WRITE)
50132 + * UINT32 mailboxID
50133 + * UINT32 length
50134 + * char buffer[length]
50135 + */
50136 +#endif /* HTC_RAW_INTERFACE */
50137 +
50138 +#define AR6000_XIOCTL_CHECK_TARGET_READY 17
50139 +/*
50140 + * arguments:
50141 + * UINT32 cmd (AR6000_XIOCTL_CHECK_TARGET_READY)
50142 + */
50143 +
50144 +
50145 +
50146 +/* ====GPIO (General Purpose I/O) Extended Ioctls==== */
50147 +
50148 +#define AR6000_XIOCTL_GPIO_OUTPUT_SET 18
50149 +/*
50150 + * arguments:
50151 + * UINT32 cmd (AR6000_XIOCTL_GPIO_OUTPUT_SET)
50152 + * ar6000_gpio_output_set_cmd_s (see below)
50153 + * uses: WMIX_GPIO_OUTPUT_SET_CMDID
50154 + */
50155 +
50156 +#define AR6000_XIOCTL_GPIO_INPUT_GET 19
50157 +/*
50158 + * arguments:
50159 + * UINT32 cmd (AR6000_XIOCTL_GPIO_INPUT_GET)
50160 + * uses: WMIX_GPIO_INPUT_GET_CMDID
50161 + */
50162 +
50163 +#define AR6000_XIOCTL_GPIO_REGISTER_SET 20
50164 +/*
50165 + * arguments:
50166 + * UINT32 cmd (AR6000_XIOCTL_GPIO_REGISTER_SET)
50167 + * ar6000_gpio_register_cmd_s (see below)
50168 + * uses: WMIX_GPIO_REGISTER_SET_CMDID
50169 + */
50170 +
50171 +#define AR6000_XIOCTL_GPIO_REGISTER_GET 21
50172 +/*
50173 + * arguments:
50174 + * UINT32 cmd (AR6000_XIOCTL_GPIO_REGISTER_GET)
50175 + * ar6000_gpio_register_cmd_s (see below)
50176 + * uses: WMIX_GPIO_REGISTER_GET_CMDID
50177 + */
50178 +
50179 +#define AR6000_XIOCTL_GPIO_INTR_ACK 22
50180 +/*
50181 + * arguments:
50182 + * UINT32 cmd (AR6000_XIOCTL_GPIO_INTR_ACK)
50183 + * ar6000_cpio_intr_ack_cmd_s (see below)
50184 + * uses: WMIX_GPIO_INTR_ACK_CMDID
50185 + */
50186 +
50187 +#define AR6000_XIOCTL_GPIO_INTR_WAIT 23
50188 +/*
50189 + * arguments:
50190 + * UINT32 cmd (AR6000_XIOCTL_GPIO_INTR_WAIT)
50191 + */
50192 +
50193 +
50194 +
50195 +/* ====more wireless commands==== */
50196 +
50197 +#define AR6000_XIOCTL_SET_ADHOC_BSSID 24
50198 +/*
50199 + * arguments:
50200 + * UINT32 cmd (AR6000_XIOCTL_SET_ADHOC_BSSID)
50201 + * WMI_SET_ADHOC_BSSID_CMD setAdHocBssidCmd (see include/wmi.h)
50202 + */
50203 +
50204 +#define AR6000_XIOCTL_SET_OPT_MODE 25
50205 +/*
50206 + * arguments:
50207 + * UINT32 cmd (AR6000_XIOCTL_SET_OPT_MODE)
50208 + * WMI_SET_OPT_MODE_CMD setOptModeCmd (see include/wmi.h)
50209 + * uses: WMI_SET_OPT_MODE_CMDID
50210 + */
50211 +
50212 +#define AR6000_XIOCTL_OPT_SEND_FRAME 26
50213 +/*
50214 + * arguments:
50215 + * UINT32 cmd (AR6000_XIOCTL_OPT_SEND_FRAME)
50216 + * WMI_OPT_TX_FRAME_CMD optTxFrameCmd (see include/wmi.h)
50217 + * uses: WMI_OPT_TX_FRAME_CMDID
50218 + */
50219 +
50220 +#define AR6000_XIOCTL_SET_ADHOC_BEACON_INTVAL 27
50221 +/*
50222 + * arguments:
50223 + * UINT32 cmd (AR6000_XIOCTL_SET_ADHOC_BEACON_INTVAL)
50224 + * WMI_BEACON_INT_CMD beaconIntCmd (see include/wmi.h)
50225 + * uses: WMI_SET_BEACON_INT_CMDID
50226 + */
50227 +
50228 +
50229 +#define IEEE80211_IOCTL_SETAUTHALG 28
50230 +
50231 +
50232 +#define AR6000_XIOCTL_SET_VOICE_PKT_SIZE 29
50233 +/*
50234 + * arguments:
50235 + * UINT32 cmd (AR6000_XIOCTL_SET_VOICE_PKT_SIZE)
50236 + * WMI_SET_VOICE_PKT_SIZE_CMD setVoicePktSizeCmd (see include/wmi.h)
50237 + * uses: WMI_SET_VOICE_PKT_SIZE_CMDID
50238 + */
50239 +
50240 +
50241 +#define AR6000_XIOCTL_SET_MAX_SP 30
50242 +/*
50243 + * arguments:
50244 + * UINT32 cmd (AR6000_XIOCTL_SET_MAX_SP)
50245 + * WMI_SET_MAX_SP_LEN_CMD maxSPLen(see include/wmi.h)
50246 + * uses: WMI_SET_MAX_SP_LEN_CMDID
50247 + */
50248 +
50249 +#define AR6000_XIOCTL_WMI_GET_ROAM_TBL 31
50250 +
50251 +#define AR6000_XIOCTL_WMI_SET_ROAM_CTRL 32
50252 +
50253 +#define AR6000_XIOCTRL_WMI_SET_POWERSAVE_TIMERS 33
50254 +
50255 +
50256 +/*
50257 + * arguments:
50258 + * UINT32 cmd (AR6000_XIOCTRL_WMI_SET_POWERSAVE_TIMERS)
50259 + * WMI_SET_POWERSAVE_TIMERS_CMD powerSaveTimers(see include/wmi.h)
50260 + * WMI_SET_POWERSAVE_TIMERS_CMDID
50261 + */
50262 +
50263 +#define AR6000_XIOCTRL_WMI_GET_POWER_MODE 34
50264 +/*
50265 + * arguments:
50266 + * UINT32 cmd (AR6000_XIOCTRL_WMI_GET_POWER_MODE)
50267 + */
50268 +
50269 +#define AR6000_XIOCTRL_WMI_SET_WLAN_STATE 35
50270 +typedef enum {
50271 + WLAN_DISABLED,
50272 + WLAN_ENABLED
50273 +} AR6000_WLAN_STATE;
50274 +/*
50275 + * arguments:
50276 + * enable/disable
50277 + */
50278 +
50279 +#define AR6000_XIOCTL_WMI_GET_ROAM_DATA 36
50280 +
50281 +#define AR6000_XIOCTL_WMI_SETRETRYLIMITS 37
50282 +/*
50283 + * arguments:
50284 + * WMI_SET_RETRY_LIMITS_CMD ibssSetRetryLimitsCmd
50285 + * uses: WMI_SET_RETRY_LIMITS_CMDID
50286 + */
50287 +
50288 +#ifdef CONFIG_HOST_TCMD_SUPPORT
50289 +/* ====extended commands for radio test ==== */
50290 +
50291 +#define AR6000_XIOCTL_TCMD_CONT_TX 38
50292 +/*
50293 + * arguments:
50294 + * UINT32 cmd (AR6000_XIOCTL_TCMD_CONT_TX)
50295 + * WMI_TCMD_CONT_TX_CMD contTxCmd (see include/wmi.h)
50296 + * uses: WMI_TCMD_CONT_TX_CMDID
50297 + */
50298 +
50299 +#define AR6000_XIOCTL_TCMD_CONT_RX 39
50300 +/*
50301 + * arguments:
50302 + * UINT32 cmd (AR6000_XIOCTL_TCMD_CONT_RX)
50303 + * WMI_TCMD_CONT_RX_CMD rxCmd (see include/wmi.h)
50304 + * uses: WMI_TCMD_CONT_RX_CMDID
50305 + */
50306 +
50307 +#define AR6000_XIOCTL_TCMD_PM 40
50308 +/*
50309 + * arguments:
50310 + * UINT32 cmd (AR6000_XIOCTL_TCMD_PM)
50311 + * WMI_TCMD_PM_CMD pmCmd (see include/wmi.h)
50312 + * uses: WMI_TCMD_PM_CMDID
50313 + */
50314 +
50315 +#endif /* CONFIG_HOST_TCMD_SUPPORT */
50316 +
50317 +#define AR6000_XIOCTL_WMI_STARTSCAN 41
50318 +/*
50319 + * arguments:
50320 + * UINT32 cmd (AR6000_XIOCTL_WMI_STARTSCAN)
50321 + * UINT8 scanType
50322 + * UINT8 scanConnected
50323 + * A_BOOL forceFgScan
50324 + * uses: WMI_START_SCAN_CMDID
50325 + */
50326 +
50327 +#define AR6000_XIOCTL_WMI_SETFIXRATES 42
50328 +
50329 +#define AR6000_XIOCTL_WMI_GETFIXRATES 43
50330 +
50331 +
50332 +#define AR6000_XIOCTL_WMI_SET_RSSITHRESHOLD 44
50333 +/*
50334 + * arguments:
50335 + * WMI_RSSI_THRESHOLD_PARAMS_CMD thresholdParams (see include/wmi.h)
50336 + * uses: WMI_RSSI_THRESHOLD_PARAMS_CMDID
50337 + */
50338 +
50339 +#define AR6000_XIOCTL_WMI_CLR_RSSISNR 45
50340 +/*
50341 + * arguments:
50342 + * WMI_CLR_RSSISNR_CMD thresholdParams (see include/wmi.h)
50343 + * uses: WMI_CLR_RSSISNR_CMDID
50344 + */
50345 +
50346 +#define AR6000_XIOCTL_WMI_SET_LQTHRESHOLD 46
50347 +/*
50348 + * arguments:
50349 + * WMI_LQ_THRESHOLD_PARAMS_CMD thresholdParams (see include/wmi.h)
50350 + * uses: WMI_LQ_THRESHOLD_PARAMS_CMDID
50351 + */
50352 +
50353 +#define AR6000_XIOCTL_WMI_SET_RTS 47
50354 +/*
50355 + * arguments:
50356 + * WMI_SET_RTS_MODE_CMD (see include/wmi.h)
50357 + * uses: WMI_SET_RTS_MODE_CMDID
50358 + */
50359 +
50360 +#define AR6000_XIOCTL_WMI_SET_LPREAMBLE 48
50361 +
50362 +#define AR6000_XIOCTL_WMI_SET_AUTHMODE 49
50363 +/*
50364 + * arguments:
50365 + * UINT32 cmd (AR6000_XIOCTL_WMI_SET_AUTHMODE)
50366 + * UINT8 mode
50367 + * uses: WMI_SET_RECONNECT_AUTH_MODE_CMDID
50368 + */
50369 +
50370 +#define AR6000_XIOCTL_WMI_SET_REASSOCMODE 50
50371 +
50372 +/*
50373 + * arguments:
50374 + * UINT32 cmd (AR6000_XIOCTL_WMI_SET_WMM)
50375 + * UINT8 mode
50376 + * uses: WMI_SET_WMM_CMDID
50377 + */
50378 +#define AR6000_XIOCTL_WMI_SET_WMM 51
50379 +
50380 +/*
50381 + * arguments:
50382 + * UINT32 cmd (AR6000_XIOCTL_WMI_SET_HB_CHALLENGE_RESP_PARAMS)
50383 + * UINT32 frequency
50384 + * UINT8 threshold
50385 + */
50386 +#define AR6000_XIOCTL_WMI_SET_HB_CHALLENGE_RESP_PARAMS 52
50387 +
50388 +/*
50389 + * arguments:
50390 + * UINT32 cmd (AR6000_XIOCTL_WMI_GET_HB_CHALLENGE_RESP)
50391 + * UINT32 cookie
50392 + */
50393 +#define AR6000_XIOCTL_WMI_GET_HB_CHALLENGE_RESP 53
50394 +
50395 +/*
50396 + * arguments:
50397 + * UINT32 cmd (AR6000_XIOCTL_WMI_GET_RD)
50398 + * UINT32 regDomain
50399 + */
50400 +#define AR6000_XIOCTL_WMI_GET_RD 54
50401 +
50402 +#define AR6000_XIOCTL_DIAG_READ 55
50403 +
50404 +#define AR6000_XIOCTL_DIAG_WRITE 56
50405 +
50406 +/*
50407 + * arguments cmd (AR6000_XIOCTL_SET_TXOP)
50408 + * WMI_TXOP_CFG txopEnable
50409 + */
50410 +#define AR6000_XIOCTL_WMI_SET_TXOP 57
50411 +
50412 +#ifdef USER_KEYS
50413 +/*
50414 + * arguments:
50415 + * UINT32 cmd (AR6000_XIOCTL_USER_SETKEYS)
50416 + * UINT32 keyOpCtrl
50417 + * uses AR6000_USER_SETKEYS_INFO
50418 + */
50419 +#define AR6000_XIOCTL_USER_SETKEYS 58
50420 +#endif /* USER_KEYS */
50421 +
50422 +#define AR6000_XIOCTL_WMI_SET_KEEPALIVE 59
50423 +/*
50424 + * arguments:
50425 + * UINT8 cmd (AR6000_XIOCTL_WMI_SET_KEEPALIVE)
50426 + * UINT8 keepaliveInterval
50427 + * uses: WMI_SET_KEEPALIVE_CMDID
50428 + */
50429 +
50430 +#define AR6000_XIOCTL_WMI_GET_KEEPALIVE 60
50431 +/*
50432 + * arguments:
50433 + * UINT8 cmd (AR6000_XIOCTL_WMI_GET_KEEPALIVE)
50434 + * UINT8 keepaliveInterval
50435 + * A_BOOL configured
50436 + * uses: WMI_GET_KEEPALIVE_CMDID
50437 + */
50438 +
50439 +/* ====ROM Patching Extended Ioctls==== */
50440 +
50441 +#define AR6000_XIOCTL_BMI_ROMPATCH_INSTALL 61
50442 +/*
50443 + * arguments:
50444 + * union {
50445 + * struct {
50446 + * UINT32 cmd (AR6000_XIOCTL_BMI_ROMPATCH_INSTALL)
50447 + * UINT32 ROM Address
50448 + * UINT32 RAM Address
50449 + * UINT32 number of bytes
50450 + * UINT32 activate? (0 or 1)
50451 + * }
50452 + * A_UINT32 resulting rompatch ID
50453 + * }
50454 + * uses: BMI_ROMPATCH_INSTALL
50455 + */
50456 +
50457 +#define AR6000_XIOCTL_BMI_ROMPATCH_UNINSTALL 62
50458 +/*
50459 + * arguments:
50460 + * struct {
50461 + * UINT32 cmd (AR6000_XIOCTL_BMI_ROMPATCH_UNINSTALL)
50462 + * UINT32 rompatch ID
50463 + * }
50464 + * uses: BMI_ROMPATCH_UNINSTALL
50465 + */
50466 +
50467 +#define AR6000_XIOCTL_BMI_ROMPATCH_ACTIVATE 63
50468 +/*
50469 + * arguments:
50470 + * struct {
50471 + * UINT32 cmd (AR6000_XIOCTL_BMI_ROMPATCH_ACTIVATE)
50472 + * UINT32 rompatch count
50473 + * UINT32 rompatch IDs[rompatch count]
50474 + * }
50475 + * uses: BMI_ROMPATCH_ACTIVATE
50476 + */
50477 +
50478 +#define AR6000_XIOCTL_BMI_ROMPATCH_DEACTIVATE 64
50479 +/*
50480 + * arguments:
50481 + * struct {
50482 + * UINT32 cmd (AR6000_XIOCTL_BMI_ROMPATCH_DEACTIVATE)
50483 + * UINT32 rompatch count
50484 + * UINT32 rompatch IDs[rompatch count]
50485 + * }
50486 + * uses: BMI_ROMPATCH_DEACTIVATE
50487 + */
50488 +
50489 +#define AR6000_XIOCTL_WMI_SET_APPIE 65
50490 +/*
50491 + * arguments:
50492 + * struct {
50493 + * UINT32 cmd (AR6000_XIOCTL_WMI_SET_APPIE)
50494 + * UINT32 app_frmtype;
50495 + * UINT32 app_buflen;
50496 + * UINT8 app_buf[];
50497 + * }
50498 + */
50499 +#define AR6000_XIOCTL_WMI_SET_MGMT_FRM_RX_FILTER 66
50500 +/*
50501 + * arguments:
50502 + * A_UINT32 filter_type;
50503 + */
50504 +
50505 +#define AR6000_XIOCTL_DBGLOG_CFG_MODULE 67
50506 +
50507 +#define AR6000_XIOCTL_DBGLOG_GET_DEBUG_LOGS 68
50508 +
50509 +#define AR6000_XIOCTL_WMI_SET_WSC_STATUS 70
50510 +/*
50511 + * arguments:
50512 + * A_UINT32 wsc_status;
50513 + * (WSC_REG_INACTIVE or WSC_REG_ACTIVE)
50514 + */
50515 +
50516 +/*
50517 + * arguments:
50518 + * struct {
50519 + * A_UINT8 streamType;
50520 + * A_UINT8 status;
50521 + * }
50522 + * uses: WMI_SET_BT_STATUS_CMDID
50523 + */
50524 +#define AR6000_XIOCTL_WMI_SET_BT_STATUS 71
50525 +
50526 +/*
50527 + * arguments:
50528 + * struct {
50529 + * A_UINT8 paramType;
50530 + * union {
50531 + * A_UINT8 noSCOPkts;
50532 + * BT_PARAMS_A2DP a2dpParams;
50533 + * BT_COEX_REGS regs;
50534 + * };
50535 + * }
50536 + * uses: WMI_SET_BT_PARAM_CMDID
50537 + */
50538 +#define AR6000_XIOCTL_WMI_SET_BT_PARAMS 72
50539 +
50540 +#define AR6000_XIOCTL_WMI_SET_HOST_SLEEP_MODE 73
50541 +#define AR6000_XIOCTL_WMI_SET_WOW_MODE 74
50542 +#define AR6000_XIOCTL_WMI_GET_WOW_LIST 75
50543 +#define AR6000_XIOCTL_WMI_ADD_WOW_PATTERN 76
50544 +#define AR6000_XIOCTL_WMI_DEL_WOW_PATTERN 77
50545 +
50546 +
50547 +
50548 +#define AR6000_XIOCTL_TARGET_INFO 78
50549 +/*
50550 + * arguments:
50551 + * UINT32 cmd (AR6000_XIOCTL_TARGET_INFO)
50552 + * A_UINT32 TargetVersion (returned)
50553 + * A_UINT32 TargetType (returned)
50554 + * (See also bmi_msg.h target_ver and target_type)
50555 + */
50556 +
50557 +#define AR6000_XIOCTL_DUMP_HTC_CREDIT_STATE 79
50558 +/*
50559 + * arguments:
50560 + * none
50561 + */
50562 +
50563 +#define AR6000_XIOCTL_TRAFFIC_ACTIVITY_CHANGE 80
50564 +/*
50565 + * This ioctl is used to emulate traffic activity
50566 + * timeouts. Activity/inactivity will trigger the driver
50567 + * to re-balance credits.
50568 + *
50569 + * arguments:
50570 + * ar6000_traffic_activity_change
50571 + */
50572 +
50573 +#define AR6000_XIOCTL_WMI_SET_CONNECT_CTRL_FLAGS 81
50574 +/*
50575 + * This ioctl is used to set the connect control flags
50576 + *
50577 + * arguments:
50578 + * A_UINT32 connectCtrlFlags
50579 + */
50580 +
50581 +#define AR6000_XIOCTL_WMI_SET_AKMP_PARAMS 82
50582 +/*
50583 + * This IOCTL sets any Authentication,Key Management and Protection
50584 + * related parameters. This is used along with the information set in
50585 + * Connect Command.
50586 + * Currently this enables Multiple PMKIDs to an AP.
50587 + *
50588 + * arguments:
50589 + * struct {
50590 + * A_UINT32 akmpInfo;
50591 + * }
50592 + * uses: WMI_SET_AKMP_PARAMS_CMD
50593 + */
50594 +
50595 +#define AR6000_XIOCTL_WMI_GET_PMKID_LIST 83
50596 +
50597 +#define AR6000_XIOCTL_WMI_SET_PMKID_LIST 84
50598 +/*
50599 + * This IOCTL is used to set a list of PMKIDs. This list of
50600 + * PMKIDs is used in the [Re]AssocReq Frame. This list is used
50601 + * only if the MultiPMKID option is enabled via the
50602 + * AR6000_XIOCTL_WMI_SET_AKMP_PARAMS IOCTL.
50603 + *
50604 + * arguments:
50605 + * struct {
50606 + * A_UINT32 numPMKID;
50607 + * WMI_PMKID pmkidList[WMI_MAX_PMKID_CACHE];
50608 + * }
50609 + * uses: WMI_SET_PMKIDLIST_CMD
50610 + */
50611 +
50612 +/* Historical DSETPATCH support for INI patches */
50613 +#define AR6000_XIOCTL_UNUSED90 90
50614 +
50615 +
50616 +
50617 +/* used by AR6000_IOCTL_WMI_GETREV */
50618 +struct ar6000_version {
50619 + A_UINT32 host_ver;
50620 + A_UINT32 target_ver;
50621 +};
50622 +
50623 +/* used by AR6000_IOCTL_WMI_GET_QOS_QUEUE */
50624 +struct ar6000_queuereq {
50625 + A_UINT8 trafficClass;
50626 + A_UINT16 activeTsids;
50627 +};
50628 +
50629 +/* used by AR6000_IOCTL_WMI_GET_TARGET_STATS */
50630 +typedef struct targetStats_t {
50631 + A_UINT64 tx_packets;
50632 + A_UINT64 tx_bytes;
50633 + A_UINT64 tx_unicast_pkts;
50634 + A_UINT64 tx_unicast_bytes;
50635 + A_UINT64 tx_multicast_pkts;
50636 + A_UINT64 tx_multicast_bytes;
50637 + A_UINT64 tx_broadcast_pkts;
50638 + A_UINT64 tx_broadcast_bytes;
50639 + A_UINT64 tx_rts_success_cnt;
50640 + A_UINT64 tx_packet_per_ac[4];
50641 +
50642 + A_UINT64 tx_errors;
50643 + A_UINT64 tx_failed_cnt;
50644 + A_UINT64 tx_retry_cnt;
50645 + A_UINT64 tx_rts_fail_cnt;
50646 + A_INT32 tx_unicast_rate;
50647 + A_UINT64 rx_packets;
50648 + A_UINT64 rx_bytes;
50649 + A_UINT64 rx_unicast_pkts;
50650 + A_UINT64 rx_unicast_bytes;
50651 + A_UINT64 rx_multicast_pkts;
50652 + A_UINT64 rx_multicast_bytes;
50653 + A_UINT64 rx_broadcast_pkts;
50654 + A_UINT64 rx_broadcast_bytes;
50655 + A_UINT64 rx_fragment_pkt;
50656 +
50657 + A_UINT64 rx_errors;
50658 + A_UINT64 rx_crcerr;
50659 + A_UINT64 rx_key_cache_miss;
50660 + A_UINT64 rx_decrypt_err;
50661 + A_UINT64 rx_duplicate_frames;
50662 + A_INT32 rx_unicast_rate;
50663 +
50664 + A_UINT64 tkip_local_mic_failure;
50665 + A_UINT64 tkip_counter_measures_invoked;
50666 + A_UINT64 tkip_replays;
50667 + A_UINT64 tkip_format_errors;
50668 + A_UINT64 ccmp_format_errors;
50669 + A_UINT64 ccmp_replays;
50670 +
50671 + A_UINT64 power_save_failure_cnt;
50672 + A_INT16 noise_floor_calibation;
50673 +
50674 + A_UINT64 cs_bmiss_cnt;
50675 + A_UINT64 cs_lowRssi_cnt;
50676 + A_UINT64 cs_connect_cnt;
50677 + A_UINT64 cs_disconnect_cnt;
50678 + A_UINT8 cs_aveBeacon_snr;
50679 + A_INT16 cs_aveBeacon_rssi;
50680 + A_UINT8 cs_lastRoam_msec;
50681 + A_UINT8 cs_snr;
50682 + A_INT16 cs_rssi;
50683 +
50684 + A_UINT32 lq_val;
50685 +
50686 + A_UINT32 wow_num_pkts_dropped;
50687 + A_UINT8 wow_num_host_pkt_wakeups;
50688 + A_UINT8 wow_num_host_event_wakeups;
50689 + A_UINT16 wow_num_events_discarded;
50690 +
50691 +}TARGET_STATS;
50692 +
50693 +typedef struct targetStats_cmd_t {
50694 + TARGET_STATS targetStats;
50695 + int clearStats;
50696 +} TARGET_STATS_CMD;
50697 +
50698 +/* used by AR6000_XIOCTL_USER_SETKEYS */
50699 +
50700 +/*
50701 + * Setting this bit to 1 doesnot initialize the RSC on the firmware
50702 + */
50703 +#define AR6000_XIOCTL_USER_SETKEYS_RSC_CTRL 1
50704 +#define AR6000_USER_SETKEYS_RSC_UNCHANGED 0x00000002
50705 +
50706 +typedef struct {
50707 + A_UINT32 keyOpCtrl; /* Bit Map of Key Mgmt Ctrl Flags */
50708 +} AR6000_USER_SETKEYS_INFO;
50709 +
50710 +
50711 +/* used by AR6000_XIOCTL_GPIO_OUTPUT_SET */
50712 +struct ar6000_gpio_output_set_cmd_s {
50713 + A_UINT32 set_mask;
50714 + A_UINT32 clear_mask;
50715 + A_UINT32 enable_mask;
50716 + A_UINT32 disable_mask;
50717 +};
50718 +
50719 +/*
50720 + * used by AR6000_XIOCTL_GPIO_REGISTER_GET and AR6000_XIOCTL_GPIO_REGISTER_SET
50721 + */
50722 +struct ar6000_gpio_register_cmd_s {
50723 + A_UINT32 gpioreg_id;
50724 + A_UINT32 value;
50725 +};
50726 +
50727 +/* used by AR6000_XIOCTL_GPIO_INTR_ACK */
50728 +struct ar6000_gpio_intr_ack_cmd_s {
50729 + A_UINT32 ack_mask;
50730 +};
50731 +
50732 +/* used by AR6000_XIOCTL_GPIO_INTR_WAIT */
50733 +struct ar6000_gpio_intr_wait_cmd_s {
50734 + A_UINT32 intr_mask;
50735 + A_UINT32 input_values;
50736 +};
50737 +
50738 +/* used by the AR6000_XIOCTL_DBGLOG_CFG_MODULE */
50739 +typedef struct ar6000_dbglog_module_config_s {
50740 + A_UINT32 valid;
50741 + A_UINT16 mmask;
50742 + A_UINT16 tsr;
50743 + A_BOOL rep;
50744 + A_UINT16 size;
50745 +} DBGLOG_MODULE_CONFIG;
50746 +
50747 +typedef struct user_rssi_thold_t {
50748 + A_INT16 tag;
50749 + A_INT16 rssi;
50750 +} USER_RSSI_THOLD;
50751 +
50752 +typedef struct user_rssi_params_t {
50753 + A_UINT8 weight;
50754 + A_UINT32 pollTime;
50755 + USER_RSSI_THOLD tholds[12];
50756 +} USER_RSSI_PARAMS;
50757 +
50758 +/*
50759 + * Host driver may have some config parameters. Typically, these
50760 + * config params are one time config parameters. These could
50761 + * correspond to any of the underlying modules. Host driver exposes
50762 + * an api for the underlying modules to get this config.
50763 + */
50764 +#define AR6000_DRIVER_CFG_BASE 0x8000
50765 +
50766 +/* Should driver perform wlan node caching? */
50767 +#define AR6000_DRIVER_CFG_GET_WLANNODECACHING 0x8001
50768 +/*Should we log raw WMI msgs */
50769 +#define AR6000_DRIVER_CFG_LOG_RAW_WMI_MSGS 0x8002
50770 +
50771 +/* used by AR6000_XIOCTL_DIAG_READ & AR6000_XIOCTL_DIAG_WRITE */
50772 +struct ar6000_diag_window_cmd_s {
50773 + unsigned int addr;
50774 + unsigned int value;
50775 +};
50776 +
50777 +
50778 +struct ar6000_traffic_activity_change {
50779 + A_UINT32 StreamID; /* stream ID to indicate activity change */
50780 + A_UINT32 Active; /* active (1) or inactive (0) */
50781 +};
50782 +
50783 +#ifdef __cplusplus
50784 +}
50785 +#endif
50786 +#endif
50787 Index: linux-2.6.28/drivers/ar6000/ar6000/athtypes_linux.h
50788 ===================================================================
50789 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
50790 +++ linux-2.6.28/drivers/ar6000/ar6000/athtypes_linux.h 2009-01-02 00:01:56.000000000 +0100
50791 @@ -0,0 +1,47 @@
50792 +/*
50793 + * $Id: //depot/sw/releases/olca2.0-GPL/host/os/linux/include/athtypes_linux.h#1 $
50794 + *
50795 + * This file contains the definitions of the basic atheros data types.
50796 + * It is used to map the data types in atheros files to a platform specific
50797 + * type.
50798 + *
50799 + * Copyright 2003-2005 Atheros Communications, Inc., All Rights Reserved.
50800 + *
50801 + *
50802 + * This program is free software; you can redistribute it and/or modify
50803 + * it under the terms of the GNU General Public License version 2 as
50804 + * published by the Free Software Foundation;
50805 + *
50806 + * Software distributed under the License is distributed on an "AS
50807 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
50808 + * implied. See the License for the specific language governing
50809 + * rights and limitations under the License.
50810 + *
50811 + *
50812 + *
50813 + */
50814 +
50815 +#ifndef _ATHTYPES_LINUX_H_
50816 +#define _ATHTYPES_LINUX_H_
50817 +
50818 +#ifdef __KERNEL__
50819 +#include <linux/types.h>
50820 +#endif
50821 +
50822 +typedef int8_t A_INT8;
50823 +typedef int16_t A_INT16;
50824 +typedef int32_t A_INT32;
50825 +typedef int64_t A_INT64;
50826 +
50827 +typedef u_int8_t A_UINT8;
50828 +typedef u_int16_t A_UINT16;
50829 +typedef u_int32_t A_UINT32;
50830 +typedef u_int64_t A_UINT64;
50831 +
50832 +typedef int A_BOOL;
50833 +typedef char A_CHAR;
50834 +typedef unsigned char A_UCHAR;
50835 +typedef unsigned long A_ATH_TIMER;
50836 +
50837 +
50838 +#endif /* _ATHTYPES_LINUX_H_ */
50839 Index: linux-2.6.28/drivers/ar6000/ar6000/config_linux.h
50840 ===================================================================
50841 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
50842 +++ linux-2.6.28/drivers/ar6000/ar6000/config_linux.h 2009-01-02 00:01:56.000000000 +0100
50843 @@ -0,0 +1,44 @@
50844 +/*
50845 + * Copyright (c) 2004-2007 Atheros Communications Inc.
50846 + * All rights reserved.
50847 + *
50848 + *
50849 + * This program is free software; you can redistribute it and/or modify
50850 + * it under the terms of the GNU General Public License version 2 as
50851 + * published by the Free Software Foundation;
50852 + *
50853 + * Software distributed under the License is distributed on an "AS
50854 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
50855 + * implied. See the License for the specific language governing
50856 + * rights and limitations under the License.
50857 + *
50858 + *
50859 + *
50860 + */
50861 +
50862 +#ifndef _CONFIG_LINUX_H_
50863 +#define _CONFIG_LINUX_H_
50864 +
50865 +#ifdef __cplusplus
50866 +extern "C" {
50867 +#endif
50868 +
50869 +/*
50870 + * Host-side GPIO support is optional.
50871 + * If run-time access to GPIO pins is not required, then
50872 + * this should be changed to #undef.
50873 + */
50874 +#define CONFIG_HOST_GPIO_SUPPORT
50875 +
50876 +/*
50877 + * Host side Test Command support
50878 + */
50879 +#define CONFIG_HOST_TCMD_SUPPORT
50880 +
50881 +#define USE_4BYTE_REGISTER_ACCESS
50882 +
50883 +#ifdef __cplusplus
50884 +}
50885 +#endif
50886 +
50887 +#endif
50888 Index: linux-2.6.28/drivers/ar6000/ar6000/debug_linux.h
50889 ===================================================================
50890 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
50891 +++ linux-2.6.28/drivers/ar6000/ar6000/debug_linux.h 2009-01-02 00:01:56.000000000 +0100
50892 @@ -0,0 +1,86 @@
50893 +/*
50894 + * Copyright (c) 2004-2006 Atheros Communications Inc.
50895 + * All rights reserved.
50896 + *
50897 + *
50898 + * This program is free software; you can redistribute it and/or modify
50899 + * it under the terms of the GNU General Public License version 2 as
50900 + * published by the Free Software Foundation;
50901 + *
50902 + * Software distributed under the License is distributed on an "AS
50903 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
50904 + * implied. See the License for the specific language governing
50905 + * rights and limitations under the License.
50906 + *
50907 + *
50908 + *
50909 + */
50910 +
50911 +#ifndef _DEBUG_LINUX_H_
50912 +#define _DEBUG_LINUX_H_
50913 +
50914 +#define DBG_DEFAULTS (DBG_ERROR|DBG_WARNING)
50915 +
50916 +extern A_UINT32 g_dbg_flags;
50917 +
50918 +#define DBGFMT "%s() : "
50919 +#define DBGARG __func__
50920 +#define DBGFN A_PRINTF
50921 +
50922 +/* ------- Debug related stuff ------- */
50923 +enum {
50924 + ATH_DEBUG_SEND = 0x0001,
50925 + ATH_DEBUG_RECV = 0x0002,
50926 + ATH_DEBUG_SYNC = 0x0004,
50927 + ATH_DEBUG_DUMP = 0x0008,
50928 + ATH_DEBUG_IRQ = 0x0010,
50929 + ATH_DEBUG_TRC = 0x0020,
50930 + ATH_DEBUG_WARN = 0x0040,
50931 + ATH_DEBUG_ERR = 0x0080,
50932 + ATH_LOG_INF = 0x0100,
50933 + ATH_DEBUG_BMI = 0x0110,
50934 + ATH_DEBUG_WMI = 0x0120,
50935 + ATH_DEBUG_HIF = 0x0140,
50936 + ATH_DEBUG_HTC = 0x0180,
50937 + ATH_DEBUG_WLAN = 0x1000,
50938 + ATH_LOG_ERR = 0x1010,
50939 + ATH_DEBUG_ANY = 0xFFFF,
50940 +};
50941 +
50942 +#ifdef DEBUG
50943 +
50944 +#define A_DPRINTF(f, a) \
50945 + if(g_dbg_flags & (f)) \
50946 + { \
50947 + DBGFN a ; \
50948 + }
50949 +
50950 +
50951 +// TODO FIX usage of A_PRINTF!
50952 +#define AR_DEBUG_LVL_CHECK(lvl) (debughtc & (lvl))
50953 +#define AR_DEBUG_PRINTBUF(buffer, length, desc) do { \
50954 + if (debughtc & ATH_DEBUG_DUMP) { \
50955 + DebugDumpBytes(buffer, length,desc); \
50956 + } \
50957 +} while(0)
50958 +#define PRINTX_ARG(arg...) arg
50959 +#define AR_DEBUG_PRINTF(flags, args) do { \
50960 + if (debughtc & (flags)) { \
50961 + A_PRINTF(KERN_ALERT PRINTX_ARG args); \
50962 + } \
50963 +} while (0)
50964 +#define AR_DEBUG_ASSERT(test) do { \
50965 + if (!(test)) { \
50966 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Debug Assert Caught, File %s, Line: %d, Test:%s \n",__FILE__, __LINE__,#test)); \
50967 + } \
50968 +} while(0)
50969 +extern int debughtc;
50970 +#else
50971 +#define AR_DEBUG_PRINTF(flags, args)
50972 +#define AR_DEBUG_PRINTBUF(buffer, length, desc)
50973 +#define AR_DEBUG_ASSERT(test)
50974 +#define AR_DEBUG_LVL_CHECK(lvl) 0
50975 +#define A_DPRINTF(f, a)
50976 +#endif
50977 +
50978 +#endif /* _DEBUG_LINUX_H_ */
50979 Index: linux-2.6.28/drivers/ar6000/ar6000/ioctl.c
50980 ===================================================================
50981 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
50982 +++ linux-2.6.28/drivers/ar6000/ar6000/ioctl.c 2009-01-02 00:01:56.000000000 +0100
50983 @@ -0,0 +1,2540 @@
50984 +/*
50985 + *
50986 + * Copyright (c) 2004-2007 Atheros Communications Inc.
50987 + * All rights reserved.
50988 + *
50989 + *
50990 + * This program is free software; you can redistribute it and/or modify
50991 + * it under the terms of the GNU General Public License version 2 as
50992 + * published by the Free Software Foundation;
50993 + *
50994 + * Software distributed under the License is distributed on an "AS
50995 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
50996 + * implied. See the License for the specific language governing
50997 + * rights and limitations under the License.
50998 + *
50999 + *
51000 + *
51001 + */
51002 +
51003 +#include "ar6000_drv.h"
51004 +
51005 +static A_UINT8 bcast_mac[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
51006 +static A_UINT8 null_mac[] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
51007 +extern USER_RSSI_THOLD rssi_map[12];
51008 +extern unsigned int wmitimeout;
51009 +extern A_WAITQUEUE_HEAD arEvent;
51010 +extern int tspecCompliance;
51011 +extern int bmienable;
51012 +extern int bypasswmi;
51013 +
51014 +static int
51015 +ar6000_ioctl_get_roam_tbl(struct net_device *dev, struct ifreq *rq)
51016 +{
51017 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51018 +
51019 + if (ar->arWmiReady == FALSE) {
51020 + return -EIO;
51021 + }
51022 +
51023 + if(wmi_get_roam_tbl_cmd(ar->arWmi) != A_OK) {
51024 + return -EIO;
51025 + }
51026 +
51027 + return 0;
51028 +}
51029 +
51030 +static int
51031 +ar6000_ioctl_get_roam_data(struct net_device *dev, struct ifreq *rq)
51032 +{
51033 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51034 +
51035 + if (ar->arWmiReady == FALSE) {
51036 + return -EIO;
51037 + }
51038 +
51039 +
51040 + /* currently assume only roam times are required */
51041 + if(wmi_get_roam_data_cmd(ar->arWmi, ROAM_DATA_TIME) != A_OK) {
51042 + return -EIO;
51043 + }
51044 +
51045 +
51046 + return 0;
51047 +}
51048 +
51049 +static int
51050 +ar6000_ioctl_set_roam_ctrl(struct net_device *dev, char *userdata)
51051 +{
51052 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51053 + WMI_SET_ROAM_CTRL_CMD cmd;
51054 + A_UINT8 size = sizeof(cmd);
51055 +
51056 + if (ar->arWmiReady == FALSE) {
51057 + return -EIO;
51058 + }
51059 +
51060 +
51061 + if (copy_from_user(&cmd, userdata, size)) {
51062 + return -EFAULT;
51063 + }
51064 +
51065 + if (cmd.roamCtrlType == WMI_SET_HOST_BIAS) {
51066 + if (cmd.info.bssBiasInfo.numBss > 1) {
51067 + size += (cmd.info.bssBiasInfo.numBss - 1) * sizeof(WMI_BSS_BIAS);
51068 + }
51069 + }
51070 +
51071 + if (copy_from_user(&cmd, userdata, size)) {
51072 + return -EFAULT;
51073 + }
51074 +
51075 + if(wmi_set_roam_ctrl_cmd(ar->arWmi, &cmd, size) != A_OK) {
51076 + return -EIO;
51077 + }
51078 +
51079 + return 0;
51080 +}
51081 +
51082 +static int
51083 +ar6000_ioctl_set_powersave_timers(struct net_device *dev, char *userdata)
51084 +{
51085 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51086 + WMI_POWERSAVE_TIMERS_POLICY_CMD cmd;
51087 + A_UINT8 size = sizeof(cmd);
51088 +
51089 + if (ar->arWmiReady == FALSE) {
51090 + return -EIO;
51091 + }
51092 +
51093 + if (copy_from_user(&cmd, userdata, size)) {
51094 + return -EFAULT;
51095 + }
51096 +
51097 + if (copy_from_user(&cmd, userdata, size)) {
51098 + return -EFAULT;
51099 + }
51100 +
51101 + if(wmi_set_powersave_timers_cmd(ar->arWmi, &cmd, size) != A_OK) {
51102 + return -EIO;
51103 + }
51104 +
51105 + return 0;
51106 +}
51107 +
51108 +static int
51109 +ar6000_ioctl_set_wmm(struct net_device *dev, struct ifreq *rq)
51110 +{
51111 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51112 + WMI_SET_WMM_CMD cmd;
51113 + A_STATUS ret;
51114 +
51115 + if ((dev->flags & IFF_UP) != IFF_UP) {
51116 + return -EIO;
51117 + }
51118 + if (ar->arWmiReady == FALSE) {
51119 + return -EIO;
51120 + }
51121 +
51122 + if (copy_from_user(&cmd, (char *)((unsigned int*)rq->ifr_data + 1),
51123 + sizeof(cmd)))
51124 + {
51125 + return -EFAULT;
51126 + }
51127 +
51128 + if (cmd.status == WMI_WMM_ENABLED) {
51129 + ar->arWmmEnabled = TRUE;
51130 + } else {
51131 + ar->arWmmEnabled = FALSE;
51132 + }
51133 +
51134 + ret = wmi_set_wmm_cmd(ar->arWmi, cmd.status);
51135 +
51136 + switch (ret) {
51137 + case A_OK:
51138 + return 0;
51139 + case A_EBUSY :
51140 + return -EBUSY;
51141 + case A_NO_MEMORY:
51142 + return -ENOMEM;
51143 + case A_EINVAL:
51144 + default:
51145 + return -EFAULT;
51146 + }
51147 +}
51148 +
51149 +static int
51150 +ar6000_ioctl_set_txop(struct net_device *dev, struct ifreq *rq)
51151 +{
51152 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51153 + WMI_SET_WMM_TXOP_CMD cmd;
51154 + A_STATUS ret;
51155 +
51156 + if ((dev->flags & IFF_UP) != IFF_UP) {
51157 + return -EIO;
51158 + }
51159 + if (ar->arWmiReady == FALSE) {
51160 + return -EIO;
51161 + }
51162 +
51163 + if (copy_from_user(&cmd, (char *)((unsigned int*)rq->ifr_data + 1),
51164 + sizeof(cmd)))
51165 + {
51166 + return -EFAULT;
51167 + }
51168 +
51169 + ret = wmi_set_wmm_txop(ar->arWmi, cmd.txopEnable);
51170 +
51171 + switch (ret) {
51172 + case A_OK:
51173 + return 0;
51174 + case A_EBUSY :
51175 + return -EBUSY;
51176 + case A_NO_MEMORY:
51177 + return -ENOMEM;
51178 + case A_EINVAL:
51179 + default:
51180 + return -EFAULT;
51181 + }
51182 +}
51183 +
51184 +static int
51185 +ar6000_ioctl_get_rd(struct net_device *dev, struct ifreq *rq)
51186 +{
51187 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51188 + A_STATUS ret = 0;
51189 +
51190 + if ((dev->flags & IFF_UP) != IFF_UP || ar->arWmiReady == FALSE) {
51191 + return -EIO;
51192 + }
51193 +
51194 + if(copy_to_user((char *)((unsigned int*)rq->ifr_data + 1),
51195 + &ar->arRegCode, sizeof(ar->arRegCode)))
51196 + ret = -EFAULT;
51197 +
51198 + return ret;
51199 +}
51200 +
51201 +
51202 +/* Get power mode command */
51203 +static int
51204 +ar6000_ioctl_get_power_mode(struct net_device *dev, struct ifreq *rq)
51205 +{
51206 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51207 + WMI_POWER_MODE_CMD power_mode;
51208 + int ret = 0;
51209 +
51210 + if (ar->arWmiReady == FALSE) {
51211 + return -EIO;
51212 + }
51213 +
51214 + power_mode.powerMode = wmi_get_power_mode_cmd(ar->arWmi);
51215 + if (copy_to_user(rq->ifr_data, &power_mode, sizeof(WMI_POWER_MODE_CMD))) {
51216 + ret = -EFAULT;
51217 + }
51218 +
51219 + return ret;
51220 +}
51221 +
51222 +
51223 +static int
51224 +ar6000_ioctl_set_channelParams(struct net_device *dev, struct ifreq *rq)
51225 +{
51226 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51227 + WMI_CHANNEL_PARAMS_CMD cmd, *cmdp;
51228 + int ret = 0;
51229 +
51230 + if (ar->arWmiReady == FALSE) {
51231 + return -EIO;
51232 + }
51233 +
51234 +
51235 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51236 + return -EFAULT;
51237 + }
51238 +
51239 + if (cmd.numChannels > 1) {
51240 + cmdp = A_MALLOC(130);
51241 + if (copy_from_user(cmdp, rq->ifr_data,
51242 + sizeof (*cmdp) +
51243 + ((cmd.numChannels - 1) * sizeof(A_UINT16))))
51244 + {
51245 + kfree(cmdp);
51246 + return -EFAULT;
51247 + }
51248 + } else {
51249 + cmdp = &cmd;
51250 + }
51251 +
51252 + if ((ar->arPhyCapability == WMI_11G_CAPABILITY) &&
51253 + ((cmdp->phyMode == WMI_11A_MODE) || (cmdp->phyMode == WMI_11AG_MODE)))
51254 + {
51255 + ret = -EINVAL;
51256 + }
51257 +
51258 + if (!ret &&
51259 + (wmi_set_channelParams_cmd(ar->arWmi, cmdp->scanParam, cmdp->phyMode,
51260 + cmdp->numChannels, cmdp->channelList)
51261 + != A_OK))
51262 + {
51263 + ret = -EIO;
51264 + }
51265 +
51266 + if (cmd.numChannels > 1) {
51267 + kfree(cmdp);
51268 + }
51269 +
51270 + return ret;
51271 +}
51272 +
51273 +static int
51274 +ar6000_ioctl_set_snr_threshold(struct net_device *dev, struct ifreq *rq)
51275 +{
51276 +
51277 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51278 + WMI_SNR_THRESHOLD_PARAMS_CMD cmd;
51279 + int ret = 0;
51280 +
51281 + if (ar->arWmiReady == FALSE) {
51282 + return -EIO;
51283 + }
51284 +
51285 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51286 + return -EFAULT;
51287 + }
51288 +
51289 + if( wmi_set_snr_threshold_params(ar->arWmi, &cmd) != A_OK ) {
51290 + ret = -EIO;
51291 + }
51292 +
51293 + return ret;
51294 +}
51295 +
51296 +static int
51297 +ar6000_ioctl_set_rssi_threshold(struct net_device *dev, struct ifreq *rq)
51298 +{
51299 +#define SWAP_THOLD(thold1, thold2) do { \
51300 + USER_RSSI_THOLD tmpThold; \
51301 + tmpThold.tag = thold1.tag; \
51302 + tmpThold.rssi = thold1.rssi; \
51303 + thold1.tag = thold2.tag; \
51304 + thold1.rssi = thold2.rssi; \
51305 + thold2.tag = tmpThold.tag; \
51306 + thold2.rssi = tmpThold.rssi; \
51307 +} while (0)
51308 +
51309 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51310 + WMI_RSSI_THRESHOLD_PARAMS_CMD cmd;
51311 + USER_RSSI_PARAMS rssiParams;
51312 + A_INT32 i, j;
51313 +
51314 + int ret = 0;
51315 +
51316 + if (ar->arWmiReady == FALSE) {
51317 + return -EIO;
51318 + }
51319 +
51320 + if (copy_from_user((char *)&rssiParams, (char *)((unsigned int *)rq->ifr_data + 1), sizeof(USER_RSSI_PARAMS))) {
51321 + return -EFAULT;
51322 + }
51323 + cmd.weight = rssiParams.weight;
51324 + cmd.pollTime = rssiParams.pollTime;
51325 +
51326 + A_MEMCPY(rssi_map, &rssiParams.tholds, sizeof(rssi_map));
51327 + /*
51328 + * only 6 elements, so use bubble sorting, in ascending order
51329 + */
51330 + for (i = 5; i > 0; i--) {
51331 + for (j = 0; j < i; j++) { /* above tholds */
51332 + if (rssi_map[j+1].rssi < rssi_map[j].rssi) {
51333 + SWAP_THOLD(rssi_map[j+1], rssi_map[j]);
51334 + } else if (rssi_map[j+1].rssi == rssi_map[j].rssi) {
51335 + return EFAULT;
51336 + }
51337 + }
51338 + }
51339 + for (i = 11; i > 6; i--) {
51340 + for (j = 6; j < i; j++) { /* below tholds */
51341 + if (rssi_map[j+1].rssi < rssi_map[j].rssi) {
51342 + SWAP_THOLD(rssi_map[j+1], rssi_map[j]);
51343 + } else if (rssi_map[j+1].rssi == rssi_map[j].rssi) {
51344 + return EFAULT;
51345 + }
51346 + }
51347 + }
51348 +
51349 +#ifdef DEBUG
51350 + for (i = 0; i < 12; i++) {
51351 + AR_DEBUG2_PRINTF("thold[%d].tag: %d, thold[%d].rssi: %d \n",
51352 + i, rssi_map[i].tag, i, rssi_map[i].rssi);
51353 + }
51354 +#endif
51355 + cmd.thresholdAbove1_Val = rssi_map[0].rssi;
51356 + cmd.thresholdAbove2_Val = rssi_map[1].rssi;
51357 + cmd.thresholdAbove3_Val = rssi_map[2].rssi;
51358 + cmd.thresholdAbove4_Val = rssi_map[3].rssi;
51359 + cmd.thresholdAbove5_Val = rssi_map[4].rssi;
51360 + cmd.thresholdAbove6_Val = rssi_map[5].rssi;
51361 + cmd.thresholdBelow1_Val = rssi_map[6].rssi;
51362 + cmd.thresholdBelow2_Val = rssi_map[7].rssi;
51363 + cmd.thresholdBelow3_Val = rssi_map[8].rssi;
51364 + cmd.thresholdBelow4_Val = rssi_map[9].rssi;
51365 + cmd.thresholdBelow5_Val = rssi_map[10].rssi;
51366 + cmd.thresholdBelow6_Val = rssi_map[11].rssi;
51367 +
51368 + if( wmi_set_rssi_threshold_params(ar->arWmi, &cmd) != A_OK ) {
51369 + ret = -EIO;
51370 + }
51371 +
51372 + return ret;
51373 +}
51374 +
51375 +static int
51376 +ar6000_ioctl_set_lq_threshold(struct net_device *dev, struct ifreq *rq)
51377 +{
51378 +
51379 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51380 + WMI_LQ_THRESHOLD_PARAMS_CMD cmd;
51381 + int ret = 0;
51382 +
51383 + if (ar->arWmiReady == FALSE) {
51384 + return -EIO;
51385 + }
51386 +
51387 + if (copy_from_user(&cmd, (char *)((unsigned int *)rq->ifr_data + 1), sizeof(cmd))) {
51388 + return -EFAULT;
51389 + }
51390 +
51391 + if( wmi_set_lq_threshold_params(ar->arWmi, &cmd) != A_OK ) {
51392 + ret = -EIO;
51393 + }
51394 +
51395 + return ret;
51396 +}
51397 +
51398 +
51399 +static int
51400 +ar6000_ioctl_set_probedSsid(struct net_device *dev, struct ifreq *rq)
51401 +{
51402 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51403 + WMI_PROBED_SSID_CMD cmd;
51404 + int ret = 0;
51405 +
51406 + if (ar->arWmiReady == FALSE) {
51407 + return -EIO;
51408 + }
51409 +
51410 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51411 + return -EFAULT;
51412 + }
51413 +
51414 + if (wmi_probedSsid_cmd(ar->arWmi, cmd.entryIndex, cmd.flag, cmd.ssidLength,
51415 + cmd.ssid) != A_OK)
51416 + {
51417 + ret = -EIO;
51418 + }
51419 +
51420 + return ret;
51421 +}
51422 +
51423 +static int
51424 +ar6000_ioctl_set_badAp(struct net_device *dev, struct ifreq *rq)
51425 +{
51426 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51427 + WMI_ADD_BAD_AP_CMD cmd;
51428 + int ret = 0;
51429 +
51430 + if (ar->arWmiReady == FALSE) {
51431 + return -EIO;
51432 + }
51433 +
51434 +
51435 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51436 + return -EFAULT;
51437 + }
51438 +
51439 + if (cmd.badApIndex > WMI_MAX_BAD_AP_INDEX) {
51440 + return -EIO;
51441 + }
51442 +
51443 + if (A_MEMCMP(cmd.bssid, null_mac, AR6000_ETH_ADDR_LEN) == 0) {
51444 + /*
51445 + * This is a delete badAP.
51446 + */
51447 + if (wmi_deleteBadAp_cmd(ar->arWmi, cmd.badApIndex) != A_OK) {
51448 + ret = -EIO;
51449 + }
51450 + } else {
51451 + if (wmi_addBadAp_cmd(ar->arWmi, cmd.badApIndex, cmd.bssid) != A_OK) {
51452 + ret = -EIO;
51453 + }
51454 + }
51455 +
51456 + return ret;
51457 +}
51458 +
51459 +static int
51460 +ar6000_ioctl_create_qos(struct net_device *dev, struct ifreq *rq)
51461 +{
51462 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51463 + WMI_CREATE_PSTREAM_CMD cmd;
51464 + A_STATUS ret;
51465 +
51466 + if (ar->arWmiReady == FALSE) {
51467 + return -EIO;
51468 + }
51469 +
51470 +
51471 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51472 + return -EFAULT;
51473 + }
51474 +
51475 + ret = wmi_verify_tspec_params(&cmd, tspecCompliance);
51476 + if (ret == A_OK)
51477 + ret = wmi_create_pstream_cmd(ar->arWmi, &cmd);
51478 +
51479 + switch (ret) {
51480 + case A_OK:
51481 + return 0;
51482 + case A_EBUSY :
51483 + return -EBUSY;
51484 + case A_NO_MEMORY:
51485 + return -ENOMEM;
51486 + case A_EINVAL:
51487 + default:
51488 + return -EFAULT;
51489 + }
51490 +}
51491 +
51492 +static int
51493 +ar6000_ioctl_delete_qos(struct net_device *dev, struct ifreq *rq)
51494 +{
51495 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51496 + WMI_DELETE_PSTREAM_CMD cmd;
51497 + int ret = 0;
51498 +
51499 + if (ar->arWmiReady == FALSE) {
51500 + return -EIO;
51501 + }
51502 +
51503 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51504 + return -EFAULT;
51505 + }
51506 +
51507 + ret = wmi_delete_pstream_cmd(ar->arWmi, cmd.trafficClass, cmd.tsid);
51508 +
51509 + switch (ret) {
51510 + case A_OK:
51511 + return 0;
51512 + case A_EBUSY :
51513 + return -EBUSY;
51514 + case A_NO_MEMORY:
51515 + return -ENOMEM;
51516 + case A_EINVAL:
51517 + default:
51518 + return -EFAULT;
51519 + }
51520 +}
51521 +
51522 +static int
51523 +ar6000_ioctl_get_qos_queue(struct net_device *dev, struct ifreq *rq)
51524 +{
51525 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51526 + struct ar6000_queuereq qreq;
51527 + int ret = 0;
51528 +
51529 + if (ar->arWmiReady == FALSE) {
51530 + return -EIO;
51531 + }
51532 +
51533 + if( copy_from_user(&qreq, rq->ifr_data,
51534 + sizeof(struct ar6000_queuereq)))
51535 + return -EFAULT;
51536 +
51537 + qreq.activeTsids = wmi_get_mapped_qos_queue(ar->arWmi, qreq.trafficClass);
51538 +
51539 + if (copy_to_user(rq->ifr_data, &qreq,
51540 + sizeof(struct ar6000_queuereq)))
51541 + {
51542 + ret = -EFAULT;
51543 + }
51544 +
51545 + return ret;
51546 +}
51547 +
51548 +#ifdef CONFIG_HOST_TCMD_SUPPORT
51549 +static A_STATUS
51550 +ar6000_ioctl_tcmd_get_rx_report(struct net_device *dev,
51551 + struct ifreq *rq, A_UINT8 *data, A_UINT32 len)
51552 +{
51553 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51554 + A_UINT32 buf[2];
51555 + int ret = 0;
51556 +
51557 + if (ar->arWmiReady == FALSE) {
51558 + return -EIO;
51559 + }
51560 +
51561 + if (down_interruptible(&ar->arSem)) {
51562 + return -ERESTARTSYS;
51563 + }
51564 + ar->tcmdRxReport = 0;
51565 + if (wmi_test_cmd(ar->arWmi, data, len) != A_OK) {
51566 + up(&ar->arSem);
51567 + return -EIO;
51568 + }
51569 +
51570 + wait_event_interruptible_timeout(arEvent, ar->tcmdRxReport != 0, wmitimeout * HZ);
51571 +
51572 + if (signal_pending(current)) {
51573 + ret = -EINTR;
51574 + }
51575 +
51576 + buf[0] = ar->tcmdRxTotalPkt;
51577 + buf[1] = ar->tcmdRxRssi;
51578 + if (!ret && copy_to_user(rq->ifr_data, buf, sizeof(buf))) {
51579 + ret = -EFAULT;
51580 + }
51581 +
51582 + up(&ar->arSem);
51583 +
51584 + return ret;
51585 +}
51586 +
51587 +void
51588 +ar6000_tcmd_rx_report_event(void *devt, A_UINT8 * results, int len)
51589 +{
51590 + AR_SOFTC_T *ar = (AR_SOFTC_T *)devt;
51591 + TCMD_CONT_RX * rx_rep = (TCMD_CONT_RX *)results;
51592 +
51593 + ar->tcmdRxTotalPkt = rx_rep->u.report.totalPkt;
51594 + ar->tcmdRxRssi = rx_rep->u.report.rssiInDBm;
51595 + ar->tcmdRxReport = 1;
51596 +
51597 + wake_up(&arEvent);
51598 +}
51599 +#endif /* CONFIG_HOST_TCMD_SUPPORT*/
51600 +
51601 +static int
51602 +ar6000_ioctl_set_error_report_bitmask(struct net_device *dev, struct ifreq *rq)
51603 +{
51604 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51605 + WMI_TARGET_ERROR_REPORT_BITMASK cmd;
51606 + int ret = 0;
51607 +
51608 + if (ar->arWmiReady == FALSE) {
51609 + return -EIO;
51610 + }
51611 +
51612 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51613 + return -EFAULT;
51614 + }
51615 +
51616 + ret = wmi_set_error_report_bitmask(ar->arWmi, cmd.bitmask);
51617 +
51618 + return (ret==0 ? ret : -EINVAL);
51619 +}
51620 +
51621 +static int
51622 +ar6000_clear_target_stats(struct net_device *dev)
51623 +{
51624 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51625 + TARGET_STATS *pStats = &ar->arTargetStats;
51626 + int ret = 0;
51627 +
51628 + if (ar->arWmiReady == FALSE) {
51629 + return -EIO;
51630 + }
51631 + AR6000_SPIN_LOCK(&ar->arLock, 0);
51632 + A_MEMZERO(pStats, sizeof(TARGET_STATS));
51633 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
51634 + return ret;
51635 +}
51636 +
51637 +static int
51638 +ar6000_ioctl_get_target_stats(struct net_device *dev, struct ifreq *rq)
51639 +{
51640 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51641 + TARGET_STATS_CMD cmd;
51642 + TARGET_STATS *pStats = &ar->arTargetStats;
51643 + int ret = 0;
51644 +
51645 + if (ar->arWmiReady == FALSE) {
51646 + return -EIO;
51647 + }
51648 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51649 + return -EFAULT;
51650 + }
51651 + if (down_interruptible(&ar->arSem)) {
51652 + return -ERESTARTSYS;
51653 + }
51654 +
51655 + ar->statsUpdatePending = TRUE;
51656 +
51657 + if(wmi_get_stats_cmd(ar->arWmi) != A_OK) {
51658 + up(&ar->arSem);
51659 + return -EIO;
51660 + }
51661 +
51662 + wait_event_interruptible_timeout(arEvent, ar->statsUpdatePending == FALSE, wmitimeout * HZ);
51663 +
51664 + if (signal_pending(current)) {
51665 + ret = -EINTR;
51666 + }
51667 +
51668 + if (!ret && copy_to_user(rq->ifr_data, pStats, sizeof(*pStats))) {
51669 + ret = -EFAULT;
51670 + }
51671 +
51672 + if (cmd.clearStats == 1) {
51673 + ret = ar6000_clear_target_stats(dev);
51674 + }
51675 +
51676 + up(&ar->arSem);
51677 +
51678 + return ret;
51679 +}
51680 +
51681 +static int
51682 +ar6000_ioctl_set_access_params(struct net_device *dev, struct ifreq *rq)
51683 +{
51684 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51685 + WMI_SET_ACCESS_PARAMS_CMD cmd;
51686 + int ret = 0;
51687 +
51688 + if (ar->arWmiReady == FALSE) {
51689 + return -EIO;
51690 + }
51691 +
51692 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51693 + return -EFAULT;
51694 + }
51695 +
51696 + if (wmi_set_access_params_cmd(ar->arWmi, cmd.txop, cmd.eCWmin, cmd.eCWmax,
51697 + cmd.aifsn) == A_OK)
51698 + {
51699 + ret = 0;
51700 + } else {
51701 + ret = -EINVAL;
51702 + }
51703 +
51704 + return (ret);
51705 +}
51706 +
51707 +static int
51708 +ar6000_ioctl_set_disconnect_timeout(struct net_device *dev, struct ifreq *rq)
51709 +{
51710 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51711 + WMI_DISC_TIMEOUT_CMD cmd;
51712 + int ret = 0;
51713 +
51714 + if (ar->arWmiReady == FALSE) {
51715 + return -EIO;
51716 + }
51717 +
51718 + if (copy_from_user(&cmd, rq->ifr_data, sizeof(cmd))) {
51719 + return -EFAULT;
51720 + }
51721 +
51722 + if (wmi_disctimeout_cmd(ar->arWmi, cmd.disconnectTimeout) == A_OK)
51723 + {
51724 + ret = 0;
51725 + } else {
51726 + ret = -EINVAL;
51727 + }
51728 +
51729 + return (ret);
51730 +}
51731 +
51732 +static int
51733 +ar6000_xioctl_set_voice_pkt_size(struct net_device *dev, char * userdata)
51734 +{
51735 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51736 + WMI_SET_VOICE_PKT_SIZE_CMD cmd;
51737 + int ret = 0;
51738 +
51739 + if (ar->arWmiReady == FALSE) {
51740 + return -EIO;
51741 + }
51742 +
51743 + if (copy_from_user(&cmd, userdata, sizeof(cmd))) {
51744 + return -EFAULT;
51745 + }
51746 +
51747 + if (wmi_set_voice_pkt_size_cmd(ar->arWmi, cmd.voicePktSize) == A_OK)
51748 + {
51749 + ret = 0;
51750 + } else {
51751 + ret = -EINVAL;
51752 + }
51753 +
51754 +
51755 + return (ret);
51756 +}
51757 +
51758 +static int
51759 +ar6000_xioctl_set_max_sp_len(struct net_device *dev, char * userdata)
51760 +{
51761 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51762 + WMI_SET_MAX_SP_LEN_CMD cmd;
51763 + int ret = 0;
51764 +
51765 + if (ar->arWmiReady == FALSE) {
51766 + return -EIO;
51767 + }
51768 +
51769 + if (copy_from_user(&cmd, userdata, sizeof(cmd))) {
51770 + return -EFAULT;
51771 + }
51772 +
51773 + if (wmi_set_max_sp_len_cmd(ar->arWmi, cmd.maxSPLen) == A_OK)
51774 + {
51775 + ret = 0;
51776 + } else {
51777 + ret = -EINVAL;
51778 + }
51779 +
51780 + return (ret);
51781 +}
51782 +
51783 +
51784 +static int
51785 +ar6000_xioctl_set_bt_status_cmd(struct net_device *dev, char * userdata)
51786 +{
51787 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51788 + WMI_SET_BT_STATUS_CMD cmd;
51789 + int ret = 0;
51790 +
51791 + if (ar->arWmiReady == FALSE) {
51792 + return -EIO;
51793 + }
51794 +
51795 + if (copy_from_user(&cmd, userdata, sizeof(cmd))) {
51796 + return -EFAULT;
51797 + }
51798 +
51799 + if (wmi_set_bt_status_cmd(ar->arWmi, cmd.streamType, cmd.status) == A_OK)
51800 + {
51801 + ret = 0;
51802 + } else {
51803 + ret = -EINVAL;
51804 + }
51805 +
51806 + return (ret);
51807 +}
51808 +
51809 +static int
51810 +ar6000_xioctl_set_bt_params_cmd(struct net_device *dev, char * userdata)
51811 +{
51812 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51813 + WMI_SET_BT_PARAMS_CMD cmd;
51814 + int ret = 0;
51815 +
51816 + if (ar->arWmiReady == FALSE) {
51817 + return -EIO;
51818 + }
51819 +
51820 + if (copy_from_user(&cmd, userdata, sizeof(cmd))) {
51821 + return -EFAULT;
51822 + }
51823 +
51824 + if (wmi_set_bt_params_cmd(ar->arWmi, &cmd) == A_OK)
51825 + {
51826 + ret = 0;
51827 + } else {
51828 + ret = -EINVAL;
51829 + }
51830 +
51831 + return (ret);
51832 +}
51833 +
51834 +#ifdef CONFIG_HOST_GPIO_SUPPORT
51835 +struct ar6000_gpio_intr_wait_cmd_s gpio_intr_results;
51836 +/* gpio_reg_results and gpio_data_available are protected by arSem */
51837 +static struct ar6000_gpio_register_cmd_s gpio_reg_results;
51838 +static A_BOOL gpio_data_available; /* Requested GPIO data available */
51839 +static A_BOOL gpio_intr_available; /* GPIO interrupt info available */
51840 +static A_BOOL gpio_ack_received; /* GPIO ack was received */
51841 +
51842 +/* Host-side initialization for General Purpose I/O support */
51843 +void ar6000_gpio_init(void)
51844 +{
51845 + gpio_intr_available = FALSE;
51846 + gpio_data_available = FALSE;
51847 + gpio_ack_received = FALSE;
51848 +}
51849 +
51850 +/*
51851 + * Called when a GPIO interrupt is received from the Target.
51852 + * intr_values shows which GPIO pins have interrupted.
51853 + * input_values shows a recent value of GPIO pins.
51854 + */
51855 +void
51856 +ar6000_gpio_intr_rx(A_UINT32 intr_mask, A_UINT32 input_values)
51857 +{
51858 + gpio_intr_results.intr_mask = intr_mask;
51859 + gpio_intr_results.input_values = input_values;
51860 + *((volatile A_BOOL *)&gpio_intr_available) = TRUE;
51861 + wake_up(&arEvent);
51862 +}
51863 +
51864 +/*
51865 + * This is called when a response is received from the Target
51866 + * for a previous or ar6000_gpio_input_get or ar6000_gpio_register_get
51867 + * call.
51868 + */
51869 +void
51870 +ar6000_gpio_data_rx(A_UINT32 reg_id, A_UINT32 value)
51871 +{
51872 + gpio_reg_results.gpioreg_id = reg_id;
51873 + gpio_reg_results.value = value;
51874 + *((volatile A_BOOL *)&gpio_data_available) = TRUE;
51875 + wake_up(&arEvent);
51876 +}
51877 +
51878 +/*
51879 + * This is called when an acknowledgement is received from the Target
51880 + * for a previous or ar6000_gpio_output_set or ar6000_gpio_register_set
51881 + * call.
51882 + */
51883 +void
51884 +ar6000_gpio_ack_rx(void)
51885 +{
51886 + gpio_ack_received = TRUE;
51887 + wake_up(&arEvent);
51888 +}
51889 +
51890 +A_STATUS
51891 +ar6000_gpio_output_set(struct net_device *dev,
51892 + A_UINT32 set_mask,
51893 + A_UINT32 clear_mask,
51894 + A_UINT32 enable_mask,
51895 + A_UINT32 disable_mask)
51896 +{
51897 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51898 +
51899 + gpio_ack_received = FALSE;
51900 + return wmi_gpio_output_set(ar->arWmi,
51901 + set_mask, clear_mask, enable_mask, disable_mask);
51902 +}
51903 +
51904 +static A_STATUS
51905 +ar6000_gpio_input_get(struct net_device *dev)
51906 +{
51907 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51908 +
51909 + *((volatile A_BOOL *)&gpio_data_available) = FALSE;
51910 + return wmi_gpio_input_get(ar->arWmi);
51911 +}
51912 +
51913 +static A_STATUS
51914 +ar6000_gpio_register_set(struct net_device *dev,
51915 + A_UINT32 gpioreg_id,
51916 + A_UINT32 value)
51917 +{
51918 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51919 +
51920 + gpio_ack_received = FALSE;
51921 + return wmi_gpio_register_set(ar->arWmi, gpioreg_id, value);
51922 +}
51923 +
51924 +static A_STATUS
51925 +ar6000_gpio_register_get(struct net_device *dev,
51926 + A_UINT32 gpioreg_id)
51927 +{
51928 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51929 +
51930 + *((volatile A_BOOL *)&gpio_data_available) = FALSE;
51931 + return wmi_gpio_register_get(ar->arWmi, gpioreg_id);
51932 +}
51933 +
51934 +static A_STATUS
51935 +ar6000_gpio_intr_ack(struct net_device *dev,
51936 + A_UINT32 ack_mask)
51937 +{
51938 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51939 +
51940 + gpio_intr_available = FALSE;
51941 + return wmi_gpio_intr_ack(ar->arWmi, ack_mask);
51942 +}
51943 +#endif /* CONFIG_HOST_GPIO_SUPPORT */
51944 +
51945 +int ar6000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
51946 +{
51947 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
51948 + HIF_DEVICE *hifDevice = ar->arHifDevice;
51949 + int ret, param, param2;
51950 + unsigned int address = 0;
51951 + unsigned int length = 0;
51952 + unsigned char *buffer;
51953 + char *userdata;
51954 + A_UINT32 connectCtrlFlags;
51955 +
51956 +
51957 + static WMI_SCAN_PARAMS_CMD scParams = {0, 0, 0, 0, 0,
51958 + WMI_SHORTSCANRATIO_DEFAULT,
51959 + DEFAULT_SCAN_CTRL_FLAGS,
51960 + 0};
51961 + WMI_SET_AKMP_PARAMS_CMD akmpParams;
51962 + WMI_SET_PMKID_LIST_CMD pmkidInfo;
51963 +
51964 + if (cmd == AR6000_IOCTL_EXTENDED)
51965 + {
51966 + /*
51967 + * This allows for many more wireless ioctls than would otherwise
51968 + * be available. Applications embed the actual ioctl command in
51969 + * the first word of the parameter block, and use the command
51970 + * AR6000_IOCTL_EXTENDED_CMD on the ioctl call.
51971 + */
51972 + get_user(cmd, (int *)rq->ifr_data);
51973 + userdata = (char *)(((unsigned int *)rq->ifr_data)+1);
51974 + }
51975 + else
51976 + {
51977 + userdata = (char *)rq->ifr_data;
51978 + }
51979 +
51980 + if ((ar->arWlanState == WLAN_DISABLED) &&
51981 + ((cmd != AR6000_XIOCTRL_WMI_SET_WLAN_STATE) &&
51982 + (cmd != AR6000_XIOCTL_DIAG_READ) &&
51983 + (cmd != AR6000_XIOCTL_DIAG_WRITE)))
51984 + {
51985 + return -EIO;
51986 + }
51987 +
51988 + ret = 0;
51989 + switch(cmd)
51990 + {
51991 +#ifdef CONFIG_HOST_TCMD_SUPPORT
51992 + case AR6000_XIOCTL_TCMD_CONT_TX:
51993 + {
51994 + TCMD_CONT_TX txCmd;
51995 +
51996 + if (ar->tcmdPm == TCMD_PM_SLEEP) {
51997 + A_PRINTF("Can NOT send tx tcmd when target is asleep! \n");
51998 + return -EFAULT;
51999 + }
52000 +
52001 + if(copy_from_user(&txCmd, userdata, sizeof(TCMD_CONT_TX)))
52002 + return -EFAULT;
52003 + wmi_test_cmd(ar->arWmi,(A_UINT8 *)&txCmd, sizeof(TCMD_CONT_TX));
52004 + }
52005 + break;
52006 + case AR6000_XIOCTL_TCMD_CONT_RX:
52007 + {
52008 + TCMD_CONT_RX rxCmd;
52009 +
52010 + if (ar->tcmdPm == TCMD_PM_SLEEP) {
52011 + A_PRINTF("Can NOT send rx tcmd when target is asleep! \n");
52012 + return -EFAULT;
52013 + }
52014 + if(copy_from_user(&rxCmd, userdata, sizeof(TCMD_CONT_RX)))
52015 + return -EFAULT;
52016 + switch(rxCmd.act)
52017 + {
52018 + case TCMD_CONT_RX_PROMIS:
52019 + case TCMD_CONT_RX_FILTER:
52020 + case TCMD_CONT_RX_SETMAC:
52021 + wmi_test_cmd(ar->arWmi,(A_UINT8 *)&rxCmd,
52022 + sizeof(TCMD_CONT_RX));
52023 + break;
52024 + case TCMD_CONT_RX_REPORT:
52025 + ar6000_ioctl_tcmd_get_rx_report(dev, rq,
52026 + (A_UINT8 *)&rxCmd, sizeof(TCMD_CONT_RX));
52027 + break;
52028 + default:
52029 + A_PRINTF("Unknown Cont Rx mode: %d\n",rxCmd.act);
52030 + return -EINVAL;
52031 + }
52032 + }
52033 + break;
52034 + case AR6000_XIOCTL_TCMD_PM:
52035 + {
52036 + TCMD_PM pmCmd;
52037 +
52038 + if(copy_from_user(&pmCmd, userdata, sizeof(TCMD_PM)))
52039 + return -EFAULT;
52040 + ar->tcmdPm = pmCmd.mode;
52041 + wmi_test_cmd(ar->arWmi, (A_UINT8*)&pmCmd, sizeof(TCMD_PM));
52042 + }
52043 + break;
52044 +#endif /* CONFIG_HOST_TCMD_SUPPORT */
52045 +
52046 + case AR6000_XIOCTL_BMI_DONE:
52047 + if(bmienable)
52048 + {
52049 + ret = ar6000_init(dev);
52050 + }
52051 + else
52052 + {
52053 + ret = BMIDone(hifDevice);
52054 + }
52055 + break;
52056 +
52057 + case AR6000_XIOCTL_BMI_READ_MEMORY:
52058 + get_user(address, (unsigned int *)userdata);
52059 + get_user(length, (unsigned int *)userdata + 1);
52060 + AR_DEBUG_PRINTF("Read Memory (address: 0x%x, length: %d)\n",
52061 + address, length);
52062 + if ((buffer = (unsigned char *)A_MALLOC(length)) != NULL) {
52063 + A_MEMZERO(buffer, length);
52064 + ret = BMIReadMemory(hifDevice, address, buffer, length);
52065 + if (copy_to_user(rq->ifr_data, buffer, length)) {
52066 + ret = -EFAULT;
52067 + }
52068 + A_FREE(buffer);
52069 + } else {
52070 + ret = -ENOMEM;
52071 + }
52072 + break;
52073 +
52074 + case AR6000_XIOCTL_BMI_WRITE_MEMORY:
52075 + get_user(address, (unsigned int *)userdata);
52076 + get_user(length, (unsigned int *)userdata + 1);
52077 + AR_DEBUG_PRINTF("Write Memory (address: 0x%x, length: %d)\n",
52078 + address, length);
52079 + if ((buffer = (unsigned char *)A_MALLOC(length)) != NULL) {
52080 + A_MEMZERO(buffer, length);
52081 + if (copy_from_user(buffer, &userdata[sizeof(address) +
52082 + sizeof(length)], length))
52083 + {
52084 + ret = -EFAULT;
52085 + } else {
52086 + ret = BMIWriteMemory(hifDevice, address, buffer, length);
52087 + }
52088 + A_FREE(buffer);
52089 + } else {
52090 + ret = -ENOMEM;
52091 + }
52092 + break;
52093 +
52094 + case AR6000_XIOCTL_BMI_TEST:
52095 + AR_DEBUG_PRINTF("No longer supported\n");
52096 + ret = -EOPNOTSUPP;
52097 + break;
52098 +
52099 + case AR6000_XIOCTL_BMI_EXECUTE:
52100 + get_user(address, (unsigned int *)userdata);
52101 + get_user(param, (unsigned int *)userdata + 1);
52102 + AR_DEBUG_PRINTF("Execute (address: 0x%x, param: %d)\n",
52103 + address, param);
52104 + ret = BMIExecute(hifDevice, address, &param);
52105 + put_user(param, (unsigned int *)rq->ifr_data); /* return value */
52106 + break;
52107 +
52108 + case AR6000_XIOCTL_BMI_SET_APP_START:
52109 + get_user(address, (unsigned int *)userdata);
52110 + AR_DEBUG_PRINTF("Set App Start (address: 0x%x)\n", address);
52111 + ret = BMISetAppStart(hifDevice, address);
52112 + break;
52113 +
52114 + case AR6000_XIOCTL_BMI_READ_SOC_REGISTER:
52115 + get_user(address, (unsigned int *)userdata);
52116 + ret = BMIReadSOCRegister(hifDevice, address, &param);
52117 + put_user(param, (unsigned int *)rq->ifr_data); /* return value */
52118 + break;
52119 +
52120 + case AR6000_XIOCTL_BMI_WRITE_SOC_REGISTER:
52121 + get_user(address, (unsigned int *)userdata);
52122 + get_user(param, (unsigned int *)userdata + 1);
52123 + ret = BMIWriteSOCRegister(hifDevice, address, param);
52124 + break;
52125 +
52126 +#ifdef HTC_RAW_INTERFACE
52127 + case AR6000_XIOCTL_HTC_RAW_OPEN:
52128 + ret = A_OK;
52129 + if (!arRawIfEnabled(ar)) {
52130 + /* make sure block size is set in case the target was reset since last
52131 + * BMI phase (i.e. flashup downloads) */
52132 + ret = ar6000_SetHTCBlockSize(ar);
52133 + if (A_FAILED(ret)) {
52134 + break;
52135 + }
52136 + /* Terminate the BMI phase */
52137 + ret = BMIDone(hifDevice);
52138 + if (ret == A_OK) {
52139 + ret = ar6000_htc_raw_open(ar);
52140 + }
52141 + }
52142 + break;
52143 +
52144 + case AR6000_XIOCTL_HTC_RAW_CLOSE:
52145 + if (arRawIfEnabled(ar)) {
52146 + ret = ar6000_htc_raw_close(ar);
52147 + arRawIfEnabled(ar) = FALSE;
52148 + } else {
52149 + ret = A_ERROR;
52150 + }
52151 + break;
52152 +
52153 + case AR6000_XIOCTL_HTC_RAW_READ:
52154 + if (arRawIfEnabled(ar)) {
52155 + unsigned int streamID;
52156 + get_user(streamID, (unsigned int *)userdata);
52157 + get_user(length, (unsigned int *)userdata + 1);
52158 + buffer = rq->ifr_data + sizeof(length);
52159 + ret = ar6000_htc_raw_read(ar, (HTC_RAW_STREAM_ID)streamID,
52160 + buffer, length);
52161 + put_user(ret, (unsigned int *)rq->ifr_data);
52162 + } else {
52163 + ret = A_ERROR;
52164 + }
52165 + break;
52166 +
52167 + case AR6000_XIOCTL_HTC_RAW_WRITE:
52168 + if (arRawIfEnabled(ar)) {
52169 + unsigned int streamID;
52170 + get_user(streamID, (unsigned int *)userdata);
52171 + get_user(length, (unsigned int *)userdata + 1);
52172 + buffer = userdata + sizeof(streamID) + sizeof(length);
52173 + ret = ar6000_htc_raw_write(ar, (HTC_RAW_STREAM_ID)streamID,
52174 + buffer, length);
52175 + put_user(ret, (unsigned int *)rq->ifr_data);
52176 + } else {
52177 + ret = A_ERROR;
52178 + }
52179 + break;
52180 +#endif /* HTC_RAW_INTERFACE */
52181 +
52182 + case AR6000_IOCTL_WMI_GETREV:
52183 + {
52184 + if (copy_to_user(rq->ifr_data, &ar->arVersion,
52185 + sizeof(ar->arVersion)))
52186 + {
52187 + ret = -EFAULT;
52188 + }
52189 + break;
52190 + }
52191 + case AR6000_IOCTL_WMI_SETPWR:
52192 + {
52193 + WMI_POWER_MODE_CMD pwrModeCmd;
52194 +
52195 + if (ar->arWmiReady == FALSE) {
52196 + ret = -EIO;
52197 + } else if (copy_from_user(&pwrModeCmd, userdata,
52198 + sizeof(pwrModeCmd)))
52199 + {
52200 + ret = -EFAULT;
52201 + } else {
52202 + if (wmi_powermode_cmd(ar->arWmi, pwrModeCmd.powerMode)
52203 + != A_OK)
52204 + {
52205 + ret = -EIO;
52206 + }
52207 + }
52208 + break;
52209 + }
52210 + case AR6000_IOCTL_WMI_SET_IBSS_PM_CAPS:
52211 + {
52212 + WMI_IBSS_PM_CAPS_CMD ibssPmCaps;
52213 +
52214 + if (ar->arWmiReady == FALSE) {
52215 + ret = -EIO;
52216 + } else if (copy_from_user(&ibssPmCaps, userdata,
52217 + sizeof(ibssPmCaps)))
52218 + {
52219 + ret = -EFAULT;
52220 + } else {
52221 + if (wmi_ibsspmcaps_cmd(ar->arWmi, ibssPmCaps.power_saving, ibssPmCaps.ttl,
52222 + ibssPmCaps.atim_windows, ibssPmCaps.timeout_value) != A_OK)
52223 + {
52224 + ret = -EIO;
52225 + }
52226 + AR6000_SPIN_LOCK(&ar->arLock, 0);
52227 + ar->arIbssPsEnable = ibssPmCaps.power_saving;
52228 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
52229 + }
52230 + break;
52231 + }
52232 + case AR6000_IOCTL_WMI_SET_PMPARAMS:
52233 + {
52234 + WMI_POWER_PARAMS_CMD pmParams;
52235 +
52236 + if (ar->arWmiReady == FALSE) {
52237 + ret = -EIO;
52238 + } else if (copy_from_user(&pmParams, userdata,
52239 + sizeof(pmParams)))
52240 + {
52241 + ret = -EFAULT;
52242 + } else {
52243 + if (wmi_pmparams_cmd(ar->arWmi, pmParams.idle_period,
52244 + pmParams.pspoll_number,
52245 + pmParams.dtim_policy) != A_OK)
52246 + {
52247 + ret = -EIO;
52248 + }
52249 + }
52250 + break;
52251 + }
52252 + case AR6000_IOCTL_WMI_SETSCAN:
52253 + {
52254 + if (ar->arWmiReady == FALSE) {
52255 + ret = -EIO;
52256 + } else if (copy_from_user(&scParams, userdata,
52257 + sizeof(scParams)))
52258 + {
52259 + ret = -EFAULT;
52260 + } else {
52261 + if (CAN_SCAN_IN_CONNECT(scParams.scanCtrlFlags)) {
52262 + ar->arSkipScan = FALSE;
52263 + } else {
52264 + ar->arSkipScan = TRUE;
52265 + }
52266 +
52267 + if (wmi_scanparams_cmd(ar->arWmi, scParams.fg_start_period,
52268 + scParams.fg_end_period,
52269 + scParams.bg_period,
52270 + scParams.minact_chdwell_time,
52271 + scParams.maxact_chdwell_time,
52272 + scParams.pas_chdwell_time,
52273 + scParams.shortScanRatio,
52274 + scParams.scanCtrlFlags,
52275 + scParams.max_dfsch_act_time) != A_OK)
52276 + {
52277 + ret = -EIO;
52278 + }
52279 + }
52280 + break;
52281 + }
52282 + case AR6000_IOCTL_WMI_SETLISTENINT:
52283 + {
52284 + WMI_LISTEN_INT_CMD listenCmd;
52285 +
52286 + if (ar->arWmiReady == FALSE) {
52287 + ret = -EIO;
52288 + } else if (copy_from_user(&listenCmd, userdata,
52289 + sizeof(listenCmd)))
52290 + {
52291 + ret = -EFAULT;
52292 + } else {
52293 + if (wmi_listeninterval_cmd(ar->arWmi, listenCmd.listenInterval, listenCmd.numBeacons) != A_OK) {
52294 + ret = -EIO;
52295 + } else {
52296 + AR6000_SPIN_LOCK(&ar->arLock, 0);
52297 + ar->arListenInterval = param;
52298 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
52299 + }
52300 +
52301 + }
52302 + break;
52303 + }
52304 + case AR6000_IOCTL_WMI_SET_BMISS_TIME:
52305 + {
52306 + WMI_BMISS_TIME_CMD bmissCmd;
52307 +
52308 + if (ar->arWmiReady == FALSE) {
52309 + ret = -EIO;
52310 + } else if (copy_from_user(&bmissCmd, userdata,
52311 + sizeof(bmissCmd)))
52312 + {
52313 + ret = -EFAULT;
52314 + } else {
52315 + if (wmi_bmisstime_cmd(ar->arWmi, bmissCmd.bmissTime, bmissCmd.numBeacons) != A_OK) {
52316 + ret = -EIO;
52317 + }
52318 + }
52319 + break;
52320 + }
52321 + case AR6000_IOCTL_WMI_SETBSSFILTER:
52322 + {
52323 + if (ar->arWmiReady == FALSE) {
52324 + ret = -EIO;
52325 + } else {
52326 +
52327 + get_user(param, (unsigned char *)userdata);
52328 + get_user(param2, (unsigned int *)(userdata + 1));
52329 + printk("SETBSSFILTER: filter 0x%x, mask: 0x%x\n", param, param2);
52330 + if (wmi_bssfilter_cmd(ar->arWmi, param, param2) != A_OK) {
52331 + ret = -EIO;
52332 + }
52333 + }
52334 + break;
52335 + }
52336 + case AR6000_IOCTL_WMI_SET_SNRTHRESHOLD:
52337 + {
52338 + ret = ar6000_ioctl_set_snr_threshold(dev, rq);
52339 + break;
52340 + }
52341 + case AR6000_XIOCTL_WMI_SET_RSSITHRESHOLD:
52342 + {
52343 + ret = ar6000_ioctl_set_rssi_threshold(dev, rq);
52344 + break;
52345 + }
52346 + case AR6000_XIOCTL_WMI_CLR_RSSISNR:
52347 + {
52348 + if (ar->arWmiReady == FALSE) {
52349 + ret = -EIO;
52350 + }
52351 + ret = wmi_clr_rssi_snr(ar->arWmi);
52352 + break;
52353 + }
52354 + case AR6000_XIOCTL_WMI_SET_LQTHRESHOLD:
52355 + {
52356 + ret = ar6000_ioctl_set_lq_threshold(dev, rq);
52357 + break;
52358 + }
52359 + case AR6000_XIOCTL_WMI_SET_LPREAMBLE:
52360 + {
52361 + WMI_SET_LPREAMBLE_CMD setLpreambleCmd;
52362 +
52363 + if (ar->arWmiReady == FALSE) {
52364 + ret = -EIO;
52365 + } else if (copy_from_user(&setLpreambleCmd, userdata,
52366 + sizeof(setLpreambleCmd)))
52367 + {
52368 + ret = -EFAULT;
52369 + } else {
52370 + if (wmi_set_lpreamble_cmd(ar->arWmi, setLpreambleCmd.status)
52371 + != A_OK)
52372 + {
52373 + ret = -EIO;
52374 + }
52375 + }
52376 +
52377 + break;
52378 + }
52379 + case AR6000_XIOCTL_WMI_SET_RTS:
52380 + {
52381 + WMI_SET_RTS_CMD rtsCmd;
52382 +
52383 + if (ar->arWmiReady == FALSE) {
52384 + ret = -EIO;
52385 + } else if (copy_from_user(&rtsCmd, userdata,
52386 + sizeof(rtsCmd)))
52387 + {
52388 + ret = -EFAULT;
52389 + } else {
52390 + if (wmi_set_rts_cmd(ar->arWmi, rtsCmd.threshold)
52391 + != A_OK)
52392 + {
52393 + ret = -EIO;
52394 + }
52395 + }
52396 +
52397 + break;
52398 + }
52399 + case AR6000_XIOCTL_WMI_SET_WMM:
52400 + {
52401 + ret = ar6000_ioctl_set_wmm(dev, rq);
52402 + break;
52403 + }
52404 + case AR6000_XIOCTL_WMI_SET_TXOP:
52405 + {
52406 + ret = ar6000_ioctl_set_txop(dev, rq);
52407 + break;
52408 + }
52409 + case AR6000_XIOCTL_WMI_GET_RD:
52410 + {
52411 + ret = ar6000_ioctl_get_rd(dev, rq);
52412 + break;
52413 + }
52414 + case AR6000_IOCTL_WMI_SET_CHANNELPARAMS:
52415 + {
52416 + ret = ar6000_ioctl_set_channelParams(dev, rq);
52417 + break;
52418 + }
52419 + case AR6000_IOCTL_WMI_SET_PROBEDSSID:
52420 + {
52421 + ret = ar6000_ioctl_set_probedSsid(dev, rq);
52422 + break;
52423 + }
52424 + case AR6000_IOCTL_WMI_SET_BADAP:
52425 + {
52426 + ret = ar6000_ioctl_set_badAp(dev, rq);
52427 + break;
52428 + }
52429 + case AR6000_IOCTL_WMI_CREATE_QOS:
52430 + {
52431 + ret = ar6000_ioctl_create_qos(dev, rq);
52432 + break;
52433 + }
52434 + case AR6000_IOCTL_WMI_DELETE_QOS:
52435 + {
52436 + ret = ar6000_ioctl_delete_qos(dev, rq);
52437 + break;
52438 + }
52439 + case AR6000_IOCTL_WMI_GET_QOS_QUEUE:
52440 + {
52441 + ret = ar6000_ioctl_get_qos_queue(dev, rq);
52442 + break;
52443 + }
52444 + case AR6000_IOCTL_WMI_GET_TARGET_STATS:
52445 + {
52446 + ret = ar6000_ioctl_get_target_stats(dev, rq);
52447 + break;
52448 + }
52449 + case AR6000_IOCTL_WMI_SET_ERROR_REPORT_BITMASK:
52450 + {
52451 + ret = ar6000_ioctl_set_error_report_bitmask(dev, rq);
52452 + break;
52453 + }
52454 + case AR6000_IOCTL_WMI_SET_ASSOC_INFO:
52455 + {
52456 + WMI_SET_ASSOC_INFO_CMD cmd;
52457 + A_UINT8 assocInfo[WMI_MAX_ASSOC_INFO_LEN];
52458 +
52459 + if (ar->arWmiReady == FALSE) {
52460 + ret = -EIO;
52461 + } else {
52462 + get_user(cmd.ieType, userdata);
52463 + if (cmd.ieType >= WMI_MAX_ASSOC_INFO_TYPE) {
52464 + ret = -EIO;
52465 + } else {
52466 + get_user(cmd.bufferSize, userdata + 1);
52467 + if (cmd.bufferSize > WMI_MAX_ASSOC_INFO_LEN) {
52468 + ret = -EFAULT;
52469 + break;
52470 + }
52471 + if (copy_from_user(assocInfo, userdata + 2,
52472 + cmd.bufferSize))
52473 + {
52474 + ret = -EFAULT;
52475 + } else {
52476 + if (wmi_associnfo_cmd(ar->arWmi, cmd.ieType,
52477 + cmd.bufferSize,
52478 + assocInfo) != A_OK)
52479 + {
52480 + ret = -EIO;
52481 + }
52482 + }
52483 + }
52484 + }
52485 + break;
52486 + }
52487 + case AR6000_IOCTL_WMI_SET_ACCESS_PARAMS:
52488 + {
52489 + ret = ar6000_ioctl_set_access_params(dev, rq);
52490 + break;
52491 + }
52492 + case AR6000_IOCTL_WMI_SET_DISC_TIMEOUT:
52493 + {
52494 + ret = ar6000_ioctl_set_disconnect_timeout(dev, rq);
52495 + break;
52496 + }
52497 + case AR6000_XIOCTL_FORCE_TARGET_RESET:
52498 + {
52499 + if (ar->arHtcTarget)
52500 + {
52501 +// HTCForceReset(htcTarget);
52502 + }
52503 + else
52504 + {
52505 + AR_DEBUG_PRINTF("ar6000_ioctl cannot attempt reset.\n");
52506 + }
52507 + break;
52508 + }
52509 + case AR6000_XIOCTL_TARGET_INFO:
52510 + case AR6000_XIOCTL_CHECK_TARGET_READY: /* backwards compatibility */
52511 + {
52512 + /* If we made it to here, then the Target exists and is ready. */
52513 +
52514 + if (cmd == AR6000_XIOCTL_TARGET_INFO) {
52515 + if (copy_to_user((A_UINT32 *)rq->ifr_data, &ar->arVersion.target_ver,
52516 + sizeof(ar->arVersion.target_ver)))
52517 + {
52518 + ret = -EFAULT;
52519 + }
52520 + if (copy_to_user(((A_UINT32 *)rq->ifr_data)+1, &ar->arTargetType,
52521 + sizeof(ar->arTargetType)))
52522 + {
52523 + ret = -EFAULT;
52524 + }
52525 + }
52526 + break;
52527 + }
52528 + case AR6000_XIOCTL_WMI_SET_HB_CHALLENGE_RESP_PARAMS:
52529 + {
52530 + WMI_SET_HB_CHALLENGE_RESP_PARAMS_CMD hbparam;
52531 +
52532 + if (copy_from_user(&hbparam, userdata, sizeof(hbparam)))
52533 + {
52534 + ret = -EFAULT;
52535 + } else {
52536 + AR6000_SPIN_LOCK(&ar->arLock, 0);
52537 + /* Start a cyclic timer with the parameters provided. */
52538 + if (hbparam.frequency) {
52539 + ar->arHBChallengeResp.frequency = hbparam.frequency;
52540 + }
52541 + if (hbparam.threshold) {
52542 + ar->arHBChallengeResp.missThres = hbparam.threshold;
52543 + }
52544 +
52545 + /* Delete the pending timer and start a new one */
52546 + if (timer_pending(&ar->arHBChallengeResp.timer)) {
52547 + A_UNTIMEOUT(&ar->arHBChallengeResp.timer);
52548 + }
52549 + A_TIMEOUT_MS(&ar->arHBChallengeResp.timer, ar->arHBChallengeResp.frequency * 1000, 0);
52550 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
52551 + }
52552 + break;
52553 + }
52554 + case AR6000_XIOCTL_WMI_GET_HB_CHALLENGE_RESP:
52555 + {
52556 + A_UINT32 cookie;
52557 +
52558 + if (copy_from_user(&cookie, userdata, sizeof(cookie))) {
52559 + return -EFAULT;
52560 + }
52561 +
52562 + /* Send the challenge on the control channel */
52563 + if (wmi_get_challenge_resp_cmd(ar->arWmi, cookie, APP_HB_CHALLENGE) != A_OK) {
52564 + return -EIO;
52565 + }
52566 + break;
52567 + }
52568 +#ifdef USER_KEYS
52569 + case AR6000_XIOCTL_USER_SETKEYS:
52570 + {
52571 +
52572 + ar->user_savedkeys_stat = USER_SAVEDKEYS_STAT_RUN;
52573 +
52574 + if (copy_from_user(&ar->user_key_ctrl, userdata,
52575 + sizeof(ar->user_key_ctrl)))
52576 + {
52577 + return -EFAULT;
52578 + }
52579 +
52580 + A_PRINTF("ar6000 USER set key %x\n", ar->user_key_ctrl);
52581 + break;
52582 + }
52583 +#endif /* USER_KEYS */
52584 +
52585 +#ifdef CONFIG_HOST_GPIO_SUPPORT
52586 + case AR6000_XIOCTL_GPIO_OUTPUT_SET:
52587 + {
52588 + struct ar6000_gpio_output_set_cmd_s gpio_output_set_cmd;
52589 +
52590 + if (ar->arWmiReady == FALSE) {
52591 + return -EIO;
52592 + }
52593 + if (down_interruptible(&ar->arSem)) {
52594 + return -ERESTARTSYS;
52595 + }
52596 +
52597 + if (copy_from_user(&gpio_output_set_cmd, userdata,
52598 + sizeof(gpio_output_set_cmd)))
52599 + {
52600 + ret = -EFAULT;
52601 + } else {
52602 + ret = ar6000_gpio_output_set(dev,
52603 + gpio_output_set_cmd.set_mask,
52604 + gpio_output_set_cmd.clear_mask,
52605 + gpio_output_set_cmd.enable_mask,
52606 + gpio_output_set_cmd.disable_mask);
52607 + if (ret != A_OK) {
52608 + ret = EIO;
52609 + }
52610 + }
52611 + up(&ar->arSem);
52612 + break;
52613 + }
52614 + case AR6000_XIOCTL_GPIO_INPUT_GET:
52615 + {
52616 + if (ar->arWmiReady == FALSE) {
52617 + return -EIO;
52618 + }
52619 + if (down_interruptible(&ar->arSem)) {
52620 + return -ERESTARTSYS;
52621 + }
52622 +
52623 + ret = ar6000_gpio_input_get(dev);
52624 + if (ret != A_OK) {
52625 + up(&ar->arSem);
52626 + return -EIO;
52627 + }
52628 +
52629 + /* Wait for Target to respond. */
52630 + wait_event_interruptible(arEvent, gpio_data_available);
52631 + if (signal_pending(current)) {
52632 + ret = -EINTR;
52633 + } else {
52634 + A_ASSERT(gpio_reg_results.gpioreg_id == GPIO_ID_NONE);
52635 +
52636 + if (copy_to_user(userdata, &gpio_reg_results.value,
52637 + sizeof(gpio_reg_results.value)))
52638 + {
52639 + ret = -EFAULT;
52640 + }
52641 + }
52642 + up(&ar->arSem);
52643 + break;
52644 + }
52645 + case AR6000_XIOCTL_GPIO_REGISTER_SET:
52646 + {
52647 + struct ar6000_gpio_register_cmd_s gpio_register_cmd;
52648 +
52649 + if (ar->arWmiReady == FALSE) {
52650 + return -EIO;
52651 + }
52652 + if (down_interruptible(&ar->arSem)) {
52653 + return -ERESTARTSYS;
52654 + }
52655 +
52656 + if (copy_from_user(&gpio_register_cmd, userdata,
52657 + sizeof(gpio_register_cmd)))
52658 + {
52659 + ret = -EFAULT;
52660 + } else {
52661 + ret = ar6000_gpio_register_set(dev,
52662 + gpio_register_cmd.gpioreg_id,
52663 + gpio_register_cmd.value);
52664 + if (ret != A_OK) {
52665 + ret = EIO;
52666 + }
52667 +
52668 + /* Wait for acknowledgement from Target */
52669 + wait_event_interruptible(arEvent, gpio_ack_received);
52670 + if (signal_pending(current)) {
52671 + ret = -EINTR;
52672 + }
52673 + }
52674 + up(&ar->arSem);
52675 + break;
52676 + }
52677 + case AR6000_XIOCTL_GPIO_REGISTER_GET:
52678 + {
52679 + struct ar6000_gpio_register_cmd_s gpio_register_cmd;
52680 +
52681 + if (ar->arWmiReady == FALSE) {
52682 + return -EIO;
52683 + }
52684 + if (down_interruptible(&ar->arSem)) {
52685 + return -ERESTARTSYS;
52686 + }
52687 +
52688 + if (copy_from_user(&gpio_register_cmd, userdata,
52689 + sizeof(gpio_register_cmd)))
52690 + {
52691 + ret = -EFAULT;
52692 + } else {
52693 + ret = ar6000_gpio_register_get(dev, gpio_register_cmd.gpioreg_id);
52694 + if (ret != A_OK) {
52695 + up(&ar->arSem);
52696 + return -EIO;
52697 + }
52698 +
52699 + /* Wait for Target to respond. */
52700 + wait_event_interruptible(arEvent, gpio_data_available);
52701 + if (signal_pending(current)) {
52702 + ret = -EINTR;
52703 + } else {
52704 + A_ASSERT(gpio_register_cmd.gpioreg_id == gpio_reg_results.gpioreg_id);
52705 + if (copy_to_user(userdata, &gpio_reg_results,
52706 + sizeof(gpio_reg_results)))
52707 + {
52708 + ret = -EFAULT;
52709 + }
52710 + }
52711 + }
52712 + up(&ar->arSem);
52713 + break;
52714 + }
52715 + case AR6000_XIOCTL_GPIO_INTR_ACK:
52716 + {
52717 + struct ar6000_gpio_intr_ack_cmd_s gpio_intr_ack_cmd;
52718 +
52719 + if (ar->arWmiReady == FALSE) {
52720 + return -EIO;
52721 + }
52722 + if (down_interruptible(&ar->arSem)) {
52723 + return -ERESTARTSYS;
52724 + }
52725 +
52726 + if (copy_from_user(&gpio_intr_ack_cmd, userdata,
52727 + sizeof(gpio_intr_ack_cmd)))
52728 + {
52729 + ret = -EFAULT;
52730 + } else {
52731 + ret = ar6000_gpio_intr_ack(dev, gpio_intr_ack_cmd.ack_mask);
52732 + if (ret != A_OK) {
52733 + ret = EIO;
52734 + }
52735 + }
52736 + up(&ar->arSem);
52737 + break;
52738 + }
52739 + case AR6000_XIOCTL_GPIO_INTR_WAIT:
52740 + {
52741 + /* Wait for Target to report an interrupt. */
52742 + dev_hold(dev);
52743 + rtnl_unlock();
52744 + wait_event_interruptible(arEvent, gpio_intr_available);
52745 + rtnl_lock();
52746 + __dev_put(dev);
52747 +
52748 + if (signal_pending(current)) {
52749 + ret = -EINTR;
52750 + } else {
52751 + if (copy_to_user(userdata, &gpio_intr_results,
52752 + sizeof(gpio_intr_results)))
52753 + {
52754 + ret = -EFAULT;
52755 + }
52756 + }
52757 + break;
52758 + }
52759 +#endif /* CONFIG_HOST_GPIO_SUPPORT */
52760 +
52761 + case AR6000_XIOCTL_DBGLOG_CFG_MODULE:
52762 + {
52763 + struct ar6000_dbglog_module_config_s config;
52764 +
52765 + if (copy_from_user(&config, userdata, sizeof(config))) {
52766 + return -EFAULT;
52767 + }
52768 +
52769 + /* Send the challenge on the control channel */
52770 + if (wmi_config_debug_module_cmd(ar->arWmi, config.mmask,
52771 + config.tsr, config.rep,
52772 + config.size, config.valid) != A_OK)
52773 + {
52774 + return -EIO;
52775 + }
52776 + break;
52777 + }
52778 +
52779 + case AR6000_XIOCTL_DBGLOG_GET_DEBUG_LOGS:
52780 + {
52781 + /* Send the challenge on the control channel */
52782 + if (ar6000_dbglog_get_debug_logs(ar) != A_OK)
52783 + {
52784 + return -EIO;
52785 + }
52786 + break;
52787 + }
52788 +
52789 + case AR6000_XIOCTL_SET_ADHOC_BSSID:
52790 + {
52791 + WMI_SET_ADHOC_BSSID_CMD adhocBssid;
52792 +
52793 + if (ar->arWmiReady == FALSE) {
52794 + ret = -EIO;
52795 + } else if (copy_from_user(&adhocBssid, userdata,
52796 + sizeof(adhocBssid)))
52797 + {
52798 + ret = -EFAULT;
52799 + } else if (A_MEMCMP(adhocBssid.bssid, bcast_mac,
52800 + AR6000_ETH_ADDR_LEN) == 0)
52801 + {
52802 + ret = -EFAULT;
52803 + } else {
52804 +
52805 + A_MEMCPY(ar->arReqBssid, adhocBssid.bssid, sizeof(ar->arReqBssid));
52806 + }
52807 + break;
52808 + }
52809 +
52810 + case AR6000_XIOCTL_SET_OPT_MODE:
52811 + {
52812 + WMI_SET_OPT_MODE_CMD optModeCmd;
52813 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
52814 +
52815 + if (ar->arWmiReady == FALSE) {
52816 + ret = -EIO;
52817 + } else if (copy_from_user(&optModeCmd, userdata,
52818 + sizeof(optModeCmd)))
52819 + {
52820 + ret = -EFAULT;
52821 + } else if (ar->arConnected && optModeCmd.optMode == SPECIAL_ON) {
52822 + ret = -EFAULT;
52823 +
52824 + } else if (wmi_set_opt_mode_cmd(ar->arWmi, optModeCmd.optMode)
52825 + != A_OK)
52826 + {
52827 + ret = -EIO;
52828 + }
52829 + break;
52830 + }
52831 +
52832 + case AR6000_XIOCTL_OPT_SEND_FRAME:
52833 + {
52834 + WMI_OPT_TX_FRAME_CMD optTxFrmCmd;
52835 + A_UINT8 data[MAX_OPT_DATA_LEN];
52836 +
52837 + if (ar->arWmiReady == FALSE) {
52838 + ret = -EIO;
52839 + } else if (copy_from_user(&optTxFrmCmd, userdata,
52840 + sizeof(optTxFrmCmd)))
52841 + {
52842 + ret = -EFAULT;
52843 + } else if (copy_from_user(data,
52844 + userdata+sizeof(WMI_OPT_TX_FRAME_CMD)-1,
52845 + optTxFrmCmd.optIEDataLen))
52846 + {
52847 + ret = -EFAULT;
52848 + } else {
52849 + ret = wmi_opt_tx_frame_cmd(ar->arWmi,
52850 + optTxFrmCmd.frmType,
52851 + optTxFrmCmd.dstAddr,
52852 + optTxFrmCmd.bssid,
52853 + optTxFrmCmd.optIEDataLen,
52854 + data);
52855 + }
52856 +
52857 + break;
52858 + }
52859 + case AR6000_XIOCTL_WMI_SETRETRYLIMITS:
52860 + {
52861 + WMI_SET_RETRY_LIMITS_CMD setRetryParams;
52862 +
52863 + if (ar->arWmiReady == FALSE) {
52864 + ret = -EIO;
52865 + } else if (copy_from_user(&setRetryParams, userdata,
52866 + sizeof(setRetryParams)))
52867 + {
52868 + ret = -EFAULT;
52869 + } else {
52870 + if (wmi_set_retry_limits_cmd(ar->arWmi, setRetryParams.frameType,
52871 + setRetryParams.trafficClass,
52872 + setRetryParams.maxRetries,
52873 + setRetryParams.enableNotify) != A_OK)
52874 + {
52875 + ret = -EIO;
52876 + }
52877 + AR6000_SPIN_LOCK(&ar->arLock, 0);
52878 + ar->arMaxRetries = setRetryParams.maxRetries;
52879 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
52880 + }
52881 + break;
52882 + }
52883 +
52884 + case AR6000_XIOCTL_SET_ADHOC_BEACON_INTVAL:
52885 + {
52886 + WMI_BEACON_INT_CMD bIntvlCmd;
52887 +
52888 + if (ar->arWmiReady == FALSE) {
52889 + ret = -EIO;
52890 + } else if (copy_from_user(&bIntvlCmd, userdata,
52891 + sizeof(bIntvlCmd)))
52892 + {
52893 + ret = -EFAULT;
52894 + } else if (wmi_set_adhoc_bconIntvl_cmd(ar->arWmi, bIntvlCmd.beaconInterval)
52895 + != A_OK)
52896 + {
52897 + ret = -EIO;
52898 + }
52899 + break;
52900 + }
52901 + case IEEE80211_IOCTL_SETAUTHALG:
52902 + {
52903 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
52904 + struct ieee80211req_authalg req;
52905 +
52906 + if (ar->arWmiReady == FALSE) {
52907 + ret = -EIO;
52908 + } else if (copy_from_user(&req, userdata,
52909 + sizeof(struct ieee80211req_authalg)))
52910 + {
52911 + ret = -EFAULT;
52912 + } else if (req.auth_alg == AUTH_ALG_OPEN_SYSTEM) {
52913 + ar->arDot11AuthMode = OPEN_AUTH;
52914 + ar->arPairwiseCrypto = NONE_CRYPT;
52915 + ar->arGroupCrypto = NONE_CRYPT;
52916 + } else if (req.auth_alg == AUTH_ALG_LEAP) {
52917 + ar->arDot11AuthMode = LEAP_AUTH;
52918 + } else {
52919 + ret = -EIO;
52920 + }
52921 + break;
52922 + }
52923 +
52924 + case AR6000_XIOCTL_SET_VOICE_PKT_SIZE:
52925 + ret = ar6000_xioctl_set_voice_pkt_size(dev, userdata);
52926 + break;
52927 +
52928 + case AR6000_XIOCTL_SET_MAX_SP:
52929 + ret = ar6000_xioctl_set_max_sp_len(dev, userdata);
52930 + break;
52931 +
52932 + case AR6000_XIOCTL_WMI_GET_ROAM_TBL:
52933 + ret = ar6000_ioctl_get_roam_tbl(dev, rq);
52934 + break;
52935 + case AR6000_XIOCTL_WMI_SET_ROAM_CTRL:
52936 + ret = ar6000_ioctl_set_roam_ctrl(dev, userdata);
52937 + break;
52938 + case AR6000_XIOCTRL_WMI_SET_POWERSAVE_TIMERS:
52939 + ret = ar6000_ioctl_set_powersave_timers(dev, userdata);
52940 + break;
52941 + case AR6000_XIOCTRL_WMI_GET_POWER_MODE:
52942 + ret = ar6000_ioctl_get_power_mode(dev, rq);
52943 + break;
52944 + case AR6000_XIOCTRL_WMI_SET_WLAN_STATE:
52945 + get_user(ar->arWlanState, (unsigned int *)userdata);
52946 + if (ar->arWmiReady == FALSE) {
52947 + ret = -EIO;
52948 + break;
52949 + }
52950 +
52951 + if (ar->arWlanState == WLAN_ENABLED) {
52952 + /* Enable foreground scanning */
52953 + if (wmi_scanparams_cmd(ar->arWmi, scParams.fg_start_period,
52954 + scParams.fg_end_period,
52955 + scParams.bg_period,
52956 + scParams.minact_chdwell_time,
52957 + scParams.maxact_chdwell_time,
52958 + scParams.pas_chdwell_time,
52959 + scParams.shortScanRatio,
52960 + scParams.scanCtrlFlags,
52961 + scParams.max_dfsch_act_time) != A_OK)
52962 + {
52963 + ret = -EIO;
52964 + }
52965 + if (ar->arSsidLen) {
52966 + ar->arConnectPending = TRUE;
52967 + if (wmi_connect_cmd(ar->arWmi, ar->arNetworkType,
52968 + ar->arDot11AuthMode, ar->arAuthMode,
52969 + ar->arPairwiseCrypto,
52970 + ar->arPairwiseCryptoLen,
52971 + ar->arGroupCrypto, ar->arGroupCryptoLen,
52972 + ar->arSsidLen, ar->arSsid,
52973 + ar->arReqBssid, ar->arChannelHint,
52974 + ar->arConnectCtrlFlags) != A_OK)
52975 + {
52976 + ret = -EIO;
52977 + ar->arConnectPending = FALSE;
52978 + }
52979 + }
52980 + } else {
52981 + /* Disconnect from the AP and disable foreground scanning */
52982 + AR6000_SPIN_LOCK(&ar->arLock, 0);
52983 + if (ar->arConnected == TRUE || ar->arConnectPending == TRUE) {
52984 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
52985 + wmi_disconnect_cmd(ar->arWmi);
52986 + } else {
52987 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
52988 + }
52989 +
52990 + if (wmi_scanparams_cmd(ar->arWmi, 0xFFFF, 0, 0, 0, 0, 0, 0, 0xFF, 0) != A_OK)
52991 + {
52992 + ret = -EIO;
52993 + }
52994 + }
52995 + break;
52996 + case AR6000_XIOCTL_WMI_GET_ROAM_DATA:
52997 + ret = ar6000_ioctl_get_roam_data(dev, rq);
52998 + break;
52999 + case AR6000_XIOCTL_WMI_SET_BT_STATUS:
53000 + ret = ar6000_xioctl_set_bt_status_cmd(dev, userdata);
53001 + break;
53002 + case AR6000_XIOCTL_WMI_SET_BT_PARAMS:
53003 + ret = ar6000_xioctl_set_bt_params_cmd(dev, userdata);
53004 + break;
53005 + case AR6000_XIOCTL_WMI_STARTSCAN:
53006 + {
53007 + WMI_START_SCAN_CMD setStartScanCmd;
53008 +
53009 + if (ar->arWmiReady == FALSE) {
53010 + ret = -EIO;
53011 + } else if (copy_from_user(&setStartScanCmd, userdata,
53012 + sizeof(setStartScanCmd)))
53013 + {
53014 + ret = -EFAULT;
53015 + } else {
53016 + if (wmi_startscan_cmd(ar->arWmi, setStartScanCmd.scanType,
53017 + setStartScanCmd.forceFgScan,
53018 + setStartScanCmd.isLegacy,
53019 + setStartScanCmd.homeDwellTime,
53020 + setStartScanCmd.forceScanInterval) != A_OK)
53021 + {
53022 + ret = -EIO;
53023 + }
53024 + }
53025 + break;
53026 + }
53027 + case AR6000_XIOCTL_WMI_SETFIXRATES:
53028 + {
53029 + WMI_FIX_RATES_CMD setFixRatesCmd;
53030 + A_STATUS returnStatus;
53031 +
53032 + if (ar->arWmiReady == FALSE) {
53033 + ret = -EIO;
53034 + } else if (copy_from_user(&setFixRatesCmd, userdata,
53035 + sizeof(setFixRatesCmd)))
53036 + {
53037 + ret = -EFAULT;
53038 + } else {
53039 + returnStatus = wmi_set_fixrates_cmd(ar->arWmi, setFixRatesCmd.fixRateMask);
53040 + if (returnStatus == A_EINVAL)
53041 + {
53042 + ret = -EINVAL;
53043 + }
53044 + else if(returnStatus != A_OK) {
53045 + ret = -EIO;
53046 + }
53047 + }
53048 + break;
53049 + }
53050 +
53051 + case AR6000_XIOCTL_WMI_GETFIXRATES:
53052 + {
53053 + WMI_FIX_RATES_CMD getFixRatesCmd;
53054 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
53055 + int ret = 0;
53056 +
53057 + if (ar->arWmiReady == FALSE) {
53058 + return -EIO;
53059 + }
53060 +
53061 + if (down_interruptible(&ar->arSem)) {
53062 + return -ERESTARTSYS;
53063 + }
53064 + /* Used copy_from_user/copy_to_user to access user space data */
53065 + if (copy_from_user(&getFixRatesCmd, userdata, sizeof(getFixRatesCmd))) {
53066 + ret = -EFAULT;
53067 + } else {
53068 + ar->arRateMask = 0xFFFF;
53069 +
53070 + if (wmi_get_ratemask_cmd(ar->arWmi) != A_OK) {
53071 + up(&ar->arSem);
53072 + return -EIO;
53073 + }
53074 +
53075 + wait_event_interruptible_timeout(arEvent, ar->arRateMask != 0xFFFF, wmitimeout * HZ);
53076 +
53077 + if (signal_pending(current)) {
53078 + ret = -EINTR;
53079 + }
53080 +
53081 + if (!ret) {
53082 + getFixRatesCmd.fixRateMask = ar->arRateMask;
53083 + }
53084 +
53085 + if(copy_to_user(userdata, &getFixRatesCmd, sizeof(getFixRatesCmd))) {
53086 + ret = -EFAULT;
53087 + }
53088 +
53089 + up(&ar->arSem);
53090 + }
53091 + break;
53092 + }
53093 + case AR6000_XIOCTL_WMI_SET_AUTHMODE:
53094 + {
53095 + WMI_SET_AUTH_MODE_CMD setAuthMode;
53096 +
53097 + if (ar->arWmiReady == FALSE) {
53098 + ret = -EIO;
53099 + } else if (copy_from_user(&setAuthMode, userdata,
53100 + sizeof(setAuthMode)))
53101 + {
53102 + ret = -EFAULT;
53103 + } else {
53104 + if (wmi_set_authmode_cmd(ar->arWmi, setAuthMode.mode) != A_OK)
53105 + {
53106 + ret = -EIO;
53107 + }
53108 + }
53109 + break;
53110 + }
53111 + case AR6000_XIOCTL_WMI_SET_REASSOCMODE:
53112 + {
53113 + WMI_SET_REASSOC_MODE_CMD setReassocMode;
53114 +
53115 + if (ar->arWmiReady == FALSE) {
53116 + ret = -EIO;
53117 + } else if (copy_from_user(&setReassocMode, userdata,
53118 + sizeof(setReassocMode)))
53119 + {
53120 + ret = -EFAULT;
53121 + } else {
53122 + if (wmi_set_reassocmode_cmd(ar->arWmi, setReassocMode.mode) != A_OK)
53123 + {
53124 + ret = -EIO;
53125 + }
53126 + }
53127 + break;
53128 + }
53129 + case AR6000_XIOCTL_DIAG_READ:
53130 + {
53131 + A_UINT32 addr, data;
53132 + get_user(addr, (unsigned int *)userdata);
53133 + if (ar6000_ReadRegDiag(ar->arHifDevice, &addr, &data) != A_OK) {
53134 + ret = -EIO;
53135 + }
53136 + put_user(data, (unsigned int *)userdata + 1);
53137 + break;
53138 + }
53139 + case AR6000_XIOCTL_DIAG_WRITE:
53140 + {
53141 + A_UINT32 addr, data;
53142 + get_user(addr, (unsigned int *)userdata);
53143 + get_user(data, (unsigned int *)userdata + 1);
53144 + if (ar6000_WriteRegDiag(ar->arHifDevice, &addr, &data) != A_OK) {
53145 + ret = -EIO;
53146 + }
53147 + break;
53148 + }
53149 + case AR6000_XIOCTL_WMI_SET_KEEPALIVE:
53150 + {
53151 + WMI_SET_KEEPALIVE_CMD setKeepAlive;
53152 + if (ar->arWmiReady == FALSE) {
53153 + return -EIO;
53154 + } else if (copy_from_user(&setKeepAlive, userdata,
53155 + sizeof(setKeepAlive))){
53156 + ret = -EFAULT;
53157 + } else {
53158 + if (wmi_set_keepalive_cmd(ar->arWmi, setKeepAlive.keepaliveInterval) != A_OK) {
53159 + ret = -EIO;
53160 + }
53161 + }
53162 + break;
53163 + }
53164 + case AR6000_XIOCTL_WMI_GET_KEEPALIVE:
53165 + {
53166 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
53167 + WMI_GET_KEEPALIVE_CMD getKeepAlive;
53168 + int ret = 0;
53169 + if (ar->arWmiReady == FALSE) {
53170 + return -EIO;
53171 + }
53172 + if (down_interruptible(&ar->arSem)) {
53173 + return -ERESTARTSYS;
53174 + }
53175 + if (copy_from_user(&getKeepAlive, userdata,sizeof(getKeepAlive))) {
53176 + ret = -EFAULT;
53177 + } else {
53178 + getKeepAlive.keepaliveInterval = wmi_get_keepalive_cmd(ar->arWmi);
53179 + ar->arKeepaliveConfigured = 0xFF;
53180 + if (wmi_get_keepalive_configured(ar->arWmi) != A_OK){
53181 + up(&ar->arSem);
53182 + return -EIO;
53183 + }
53184 + wait_event_interruptible_timeout(arEvent, ar->arKeepaliveConfigured != 0xFF, wmitimeout * HZ);
53185 + if (signal_pending(current)) {
53186 + ret = -EINTR;
53187 + }
53188 +
53189 + if (!ret) {
53190 + getKeepAlive.configured = ar->arKeepaliveConfigured;
53191 + }
53192 + if (copy_to_user(userdata, &getKeepAlive, sizeof(getKeepAlive))) {
53193 + ret = -EFAULT;
53194 + }
53195 + up(&ar->arSem);
53196 + }
53197 + break;
53198 + }
53199 + case AR6000_XIOCTL_WMI_SET_APPIE:
53200 + {
53201 + WMI_SET_APPIE_CMD appIEcmd;
53202 + A_UINT8 appIeInfo[IEEE80211_APPIE_FRAME_MAX_LEN];
53203 + A_UINT32 fType,ieLen;
53204 +
53205 + if (ar->arWmiReady == FALSE) {
53206 + return -EIO;
53207 + }
53208 + get_user(fType, (A_UINT32 *)userdata);
53209 + appIEcmd.mgmtFrmType = fType;
53210 + if (appIEcmd.mgmtFrmType >= IEEE80211_APPIE_NUM_OF_FRAME) {
53211 + ret = -EIO;
53212 + } else {
53213 + get_user(ieLen, (A_UINT32 *)(userdata + 4));
53214 + appIEcmd.ieLen = ieLen;
53215 + if (appIEcmd.ieLen > IEEE80211_APPIE_FRAME_MAX_LEN) {
53216 + ret = -EIO;
53217 + break;
53218 + }
53219 + if (copy_from_user(appIeInfo, userdata + 8, appIEcmd.ieLen)) {
53220 + ret = -EFAULT;
53221 + } else {
53222 + if (wmi_set_appie_cmd(ar->arWmi, appIEcmd.mgmtFrmType,
53223 + appIEcmd.ieLen, appIeInfo) != A_OK)
53224 + {
53225 + ret = -EIO;
53226 + }
53227 + }
53228 + }
53229 + break;
53230 + }
53231 + case AR6000_XIOCTL_WMI_SET_MGMT_FRM_RX_FILTER:
53232 + {
53233 + WMI_BSS_FILTER_CMD cmd;
53234 + A_UINT32 filterType;
53235 +
53236 + if (copy_from_user(&filterType, userdata, sizeof(A_UINT32)))
53237 + {
53238 + return -EFAULT;
53239 + }
53240 + if (filterType & (IEEE80211_FILTER_TYPE_BEACON |
53241 + IEEE80211_FILTER_TYPE_PROBE_RESP))
53242 + {
53243 + cmd.bssFilter = ALL_BSS_FILTER;
53244 + } else {
53245 + cmd.bssFilter = NONE_BSS_FILTER;
53246 + }
53247 + if (wmi_bssfilter_cmd(ar->arWmi, cmd.bssFilter, 0) != A_OK) {
53248 + ret = -EIO;
53249 + }
53250 +
53251 + AR6000_SPIN_LOCK(&ar->arLock, 0);
53252 + ar->arMgmtFilter = filterType;
53253 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
53254 + break;
53255 + }
53256 + case AR6000_XIOCTL_WMI_SET_WSC_STATUS:
53257 + {
53258 + A_UINT32 wsc_status;
53259 +
53260 + if (copy_from_user(&wsc_status, userdata, sizeof(A_UINT32)))
53261 + {
53262 + return -EFAULT;
53263 + }
53264 + if (wmi_set_wsc_status_cmd(ar->arWmi, wsc_status) != A_OK) {
53265 + ret = -EIO;
53266 + }
53267 + break;
53268 + }
53269 + case AR6000_XIOCTL_BMI_ROMPATCH_INSTALL:
53270 + {
53271 + A_UINT32 ROM_addr;
53272 + A_UINT32 RAM_addr;
53273 + A_UINT32 nbytes;
53274 + A_UINT32 do_activate;
53275 + A_UINT32 rompatch_id;
53276 +
53277 + get_user(ROM_addr, (A_UINT32 *)userdata);
53278 + get_user(RAM_addr, (A_UINT32 *)userdata + 1);
53279 + get_user(nbytes, (A_UINT32 *)userdata + 2);
53280 + get_user(do_activate, (A_UINT32 *)userdata + 3);
53281 + AR_DEBUG_PRINTF("Install rompatch from ROM: 0x%x to RAM: 0x%x length: %d\n",
53282 + ROM_addr, RAM_addr, nbytes);
53283 + ret = BMIrompatchInstall(hifDevice, ROM_addr, RAM_addr,
53284 + nbytes, do_activate, &rompatch_id);
53285 + if (ret == A_OK) {
53286 + put_user(rompatch_id, (unsigned int *)rq->ifr_data); /* return value */
53287 + }
53288 + break;
53289 + }
53290 +
53291 + case AR6000_XIOCTL_BMI_ROMPATCH_UNINSTALL:
53292 + {
53293 + A_UINT32 rompatch_id;
53294 +
53295 + get_user(rompatch_id, (A_UINT32 *)userdata);
53296 + AR_DEBUG_PRINTF("UNinstall rompatch_id %d\n", rompatch_id);
53297 + ret = BMIrompatchUninstall(hifDevice, rompatch_id);
53298 + break;
53299 + }
53300 +
53301 + case AR6000_XIOCTL_BMI_ROMPATCH_ACTIVATE:
53302 + case AR6000_XIOCTL_BMI_ROMPATCH_DEACTIVATE:
53303 + {
53304 + A_UINT32 rompatch_count;
53305 +
53306 + get_user(rompatch_count, (A_UINT32 *)userdata);
53307 + AR_DEBUG_PRINTF("Change rompatch activation count=%d\n", rompatch_count);
53308 + length = sizeof(A_UINT32) * rompatch_count;
53309 + if ((buffer = (unsigned char *)A_MALLOC(length)) != NULL) {
53310 + A_MEMZERO(buffer, length);
53311 + if (copy_from_user(buffer, &userdata[sizeof(rompatch_count)], length))
53312 + {
53313 + ret = -EFAULT;
53314 + } else {
53315 + if (cmd == AR6000_XIOCTL_BMI_ROMPATCH_ACTIVATE) {
53316 + ret = BMIrompatchActivate(hifDevice, rompatch_count, (A_UINT32 *)buffer);
53317 + } else {
53318 + ret = BMIrompatchDeactivate(hifDevice, rompatch_count, (A_UINT32 *)buffer);
53319 + }
53320 + }
53321 + A_FREE(buffer);
53322 + } else {
53323 + ret = -ENOMEM;
53324 + }
53325 +
53326 + break;
53327 + }
53328 +
53329 + case AR6000_XIOCTL_WMI_SET_HOST_SLEEP_MODE:
53330 + {
53331 + WMI_SET_HOST_SLEEP_MODE_CMD setHostSleepMode;
53332 +
53333 + if (ar->arWmiReady == FALSE) {
53334 + ret = -EIO;
53335 + } else if (copy_from_user(&setHostSleepMode, userdata,
53336 + sizeof(setHostSleepMode)))
53337 + {
53338 + ret = -EFAULT;
53339 + } else {
53340 + if (wmi_set_host_sleep_mode_cmd(ar->arWmi,
53341 + &setHostSleepMode) != A_OK)
53342 + {
53343 + ret = -EIO;
53344 + }
53345 + }
53346 + break;
53347 + }
53348 + case AR6000_XIOCTL_WMI_SET_WOW_MODE:
53349 + {
53350 + WMI_SET_WOW_MODE_CMD setWowMode;
53351 +
53352 + if (ar->arWmiReady == FALSE) {
53353 + ret = -EIO;
53354 + } else if (copy_from_user(&setWowMode, userdata,
53355 + sizeof(setWowMode)))
53356 + {
53357 + ret = -EFAULT;
53358 + } else {
53359 + if (wmi_set_wow_mode_cmd(ar->arWmi,
53360 + &setWowMode) != A_OK)
53361 + {
53362 + ret = -EIO;
53363 + }
53364 + }
53365 + break;
53366 + }
53367 + case AR6000_XIOCTL_WMI_GET_WOW_LIST:
53368 + {
53369 + WMI_GET_WOW_LIST_CMD getWowList;
53370 +
53371 + if (ar->arWmiReady == FALSE) {
53372 + ret = -EIO;
53373 + } else if (copy_from_user(&getWowList, userdata,
53374 + sizeof(getWowList)))
53375 + {
53376 + ret = -EFAULT;
53377 + } else {
53378 + if (wmi_get_wow_list_cmd(ar->arWmi,
53379 + &getWowList) != A_OK)
53380 + {
53381 + ret = -EIO;
53382 + }
53383 + }
53384 + break;
53385 + }
53386 + case AR6000_XIOCTL_WMI_ADD_WOW_PATTERN:
53387 + {
53388 +#define WOW_PATTERN_SIZE 64
53389 +#define WOW_MASK_SIZE 64
53390 +
53391 + WMI_ADD_WOW_PATTERN_CMD cmd;
53392 + A_UINT8 mask_data[WOW_PATTERN_SIZE]={0};
53393 + A_UINT8 pattern_data[WOW_PATTERN_SIZE]={0};
53394 +
53395 + if (ar->arWmiReady == FALSE) {
53396 + ret = -EIO;
53397 + } else {
53398 +
53399 + if(copy_from_user(&cmd, userdata,
53400 + sizeof(WMI_ADD_WOW_PATTERN_CMD)))
53401 + return -EFAULT;
53402 + if (copy_from_user(pattern_data,
53403 + userdata + 3,
53404 + cmd.filter_size)){
53405 + ret = -EFAULT;
53406 + break;
53407 + }
53408 + if (copy_from_user(mask_data,
53409 + (userdata + 3 + cmd.filter_size),
53410 + cmd.filter_size)){
53411 + ret = -EFAULT;
53412 + break;
53413 + } else {
53414 + if (wmi_add_wow_pattern_cmd(ar->arWmi,
53415 + &cmd, pattern_data, mask_data, cmd.filter_size) != A_OK){
53416 + ret = -EIO;
53417 + }
53418 + }
53419 + }
53420 +#undef WOW_PATTERN_SIZE
53421 +#undef WOW_MASK_SIZE
53422 + break;
53423 + }
53424 + case AR6000_XIOCTL_WMI_DEL_WOW_PATTERN:
53425 + {
53426 + WMI_DEL_WOW_PATTERN_CMD delWowPattern;
53427 +
53428 + if (ar->arWmiReady == FALSE) {
53429 + ret = -EIO;
53430 + } else if (copy_from_user(&delWowPattern, userdata,
53431 + sizeof(delWowPattern)))
53432 + {
53433 + ret = -EFAULT;
53434 + } else {
53435 + if (wmi_del_wow_pattern_cmd(ar->arWmi,
53436 + &delWowPattern) != A_OK)
53437 + {
53438 + ret = -EIO;
53439 + }
53440 + }
53441 + break;
53442 + }
53443 + case AR6000_XIOCTL_DUMP_HTC_CREDIT_STATE:
53444 + if (ar->arHtcTarget != NULL) {
53445 + HTCDumpCreditStates(ar->arHtcTarget);
53446 + }
53447 + break;
53448 + case AR6000_XIOCTL_TRAFFIC_ACTIVITY_CHANGE:
53449 + if (ar->arHtcTarget != NULL) {
53450 + struct ar6000_traffic_activity_change data;
53451 +
53452 + if (copy_from_user(&data, userdata, sizeof(data)))
53453 + {
53454 + return -EFAULT;
53455 + }
53456 + /* note, this is used for testing (mbox ping testing), indicate activity
53457 + * change using the stream ID as the traffic class */
53458 + ar6000_indicate_tx_activity(ar,
53459 + (A_UINT8)data.StreamID,
53460 + data.Active ? TRUE : FALSE);
53461 + }
53462 + break;
53463 + case AR6000_XIOCTL_WMI_SET_CONNECT_CTRL_FLAGS:
53464 + if (ar->arWmiReady == FALSE) {
53465 + ret = -EIO;
53466 + } else if (copy_from_user(&connectCtrlFlags, userdata,
53467 + sizeof(connectCtrlFlags)))
53468 + {
53469 + ret = -EFAULT;
53470 + } else {
53471 + ar->arConnectCtrlFlags = connectCtrlFlags;
53472 + }
53473 + break;
53474 + case AR6000_XIOCTL_WMI_SET_AKMP_PARAMS:
53475 + if (ar->arWmiReady == FALSE) {
53476 + ret = -EIO;
53477 + } else if (copy_from_user(&akmpParams, userdata,
53478 + sizeof(WMI_SET_AKMP_PARAMS_CMD)))
53479 + {
53480 + ret = -EFAULT;
53481 + } else {
53482 + if (wmi_set_akmp_params_cmd(ar->arWmi, &akmpParams) != A_OK) {
53483 + ret = -EIO;
53484 + }
53485 + }
53486 + break;
53487 + case AR6000_XIOCTL_WMI_SET_PMKID_LIST:
53488 + if (ar->arWmiReady == FALSE) {
53489 + ret = -EIO;
53490 + } else {
53491 + if (copy_from_user(&pmkidInfo.numPMKID, userdata,
53492 + sizeof(pmkidInfo.numPMKID)))
53493 + {
53494 + ret = -EFAULT;
53495 + break;
53496 + }
53497 + if (copy_from_user(&pmkidInfo.pmkidList,
53498 + userdata + sizeof(pmkidInfo.numPMKID),
53499 + pmkidInfo.numPMKID * sizeof(WMI_PMKID)))
53500 + {
53501 + ret = -EFAULT;
53502 + break;
53503 + }
53504 + if (wmi_set_pmkid_list_cmd(ar->arWmi, &pmkidInfo) != A_OK) {
53505 + ret = -EIO;
53506 + }
53507 + }
53508 + break;
53509 + case AR6000_XIOCTL_WMI_GET_PMKID_LIST:
53510 + if (ar->arWmiReady == FALSE) {
53511 + ret = -EIO;
53512 + } else {
53513 + if (wmi_get_pmkid_list_cmd(ar->arWmi) != A_OK) {
53514 + ret = -EIO;
53515 + }
53516 + }
53517 + break;
53518 + default:
53519 + ret = -EOPNOTSUPP;
53520 + }
53521 + return ret;
53522 +}
53523 +
53524 Index: linux-2.6.28/drivers/ar6000/ar6000/netbuf.c
53525 ===================================================================
53526 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
53527 +++ linux-2.6.28/drivers/ar6000/ar6000/netbuf.c 2009-01-02 00:01:56.000000000 +0100
53528 @@ -0,0 +1,225 @@
53529 +
53530 +/*
53531 + *
53532 + * Copyright (c) 2004-2007 Atheros Communications Inc.
53533 + * All rights reserved.
53534 + *
53535 + *
53536 + * This program is free software; you can redistribute it and/or modify
53537 + * it under the terms of the GNU General Public License version 2 as
53538 + * published by the Free Software Foundation;
53539 + *
53540 + * Software distributed under the License is distributed on an "AS
53541 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
53542 + * implied. See the License for the specific language governing
53543 + * rights and limitations under the License.
53544 + *
53545 + *
53546 + *
53547 + */
53548 +#include <linux/kernel.h>
53549 +#include <linux/skbuff.h>
53550 +#include <a_config.h>
53551 +#include "athdefs.h"
53552 +#include "a_types.h"
53553 +#include "a_osapi.h"
53554 +#include "htc_packet.h"
53555 +
53556 +#define AR6000_DATA_OFFSET 64
53557 +
53558 +void a_netbuf_enqueue(A_NETBUF_QUEUE_T *q, void *pkt)
53559 +{
53560 + skb_queue_tail((struct sk_buff_head *) q, (struct sk_buff *) pkt);
53561 +}
53562 +
53563 +void a_netbuf_prequeue(A_NETBUF_QUEUE_T *q, void *pkt)
53564 +{
53565 + skb_queue_head((struct sk_buff_head *) q, (struct sk_buff *) pkt);
53566 +}
53567 +
53568 +void *a_netbuf_dequeue(A_NETBUF_QUEUE_T *q)
53569 +{
53570 + return((void *) skb_dequeue((struct sk_buff_head *) q));
53571 +}
53572 +
53573 +int a_netbuf_queue_size(A_NETBUF_QUEUE_T *q)
53574 +{
53575 + return(skb_queue_len((struct sk_buff_head *) q));
53576 +}
53577 +
53578 +int a_netbuf_queue_empty(A_NETBUF_QUEUE_T *q)
53579 +{
53580 + return(skb_queue_empty((struct sk_buff_head *) q));
53581 +}
53582 +
53583 +void a_netbuf_queue_init(A_NETBUF_QUEUE_T *q)
53584 +{
53585 + skb_queue_head_init((struct sk_buff_head *) q);
53586 +}
53587 +
53588 +void *
53589 +a_netbuf_alloc(int size)
53590 +{
53591 + struct sk_buff *skb;
53592 + skb = dev_alloc_skb(AR6000_DATA_OFFSET + sizeof(HTC_PACKET) + size);
53593 + skb_reserve(skb, AR6000_DATA_OFFSET + sizeof(HTC_PACKET));
53594 + return ((void *)skb);
53595 +}
53596 +
53597 +/*
53598 + * Allocate an SKB w.o. any encapsulation requirement.
53599 + */
53600 +void *
53601 +a_netbuf_alloc_raw(int size)
53602 +{
53603 + struct sk_buff *skb;
53604 +
53605 + skb = dev_alloc_skb(size);
53606 +
53607 + return ((void *)skb);
53608 +}
53609 +
53610 +void
53611 +a_netbuf_free(void *bufPtr)
53612 +{
53613 + struct sk_buff *skb = (struct sk_buff *)bufPtr;
53614 +
53615 + dev_kfree_skb(skb);
53616 +}
53617 +
53618 +A_UINT32
53619 +a_netbuf_to_len(void *bufPtr)
53620 +{
53621 + return (((struct sk_buff *)bufPtr)->len);
53622 +}
53623 +
53624 +void *
53625 +a_netbuf_to_data(void *bufPtr)
53626 +{
53627 + return (((struct sk_buff *)bufPtr)->data);
53628 +}
53629 +
53630 +/*
53631 + * Add len # of bytes to the beginning of the network buffer
53632 + * pointed to by bufPtr
53633 + */
53634 +A_STATUS
53635 +a_netbuf_push(void *bufPtr, A_INT32 len)
53636 +{
53637 + skb_push((struct sk_buff *)bufPtr, len);
53638 +
53639 + return A_OK;
53640 +}
53641 +
53642 +/*
53643 + * Add len # of bytes to the beginning of the network buffer
53644 + * pointed to by bufPtr and also fill with data
53645 + */
53646 +A_STATUS
53647 +a_netbuf_push_data(void *bufPtr, char *srcPtr, A_INT32 len)
53648 +{
53649 + skb_push((struct sk_buff *) bufPtr, len);
53650 + A_MEMCPY(((struct sk_buff *)bufPtr)->data, srcPtr, len);
53651 +
53652 + return A_OK;
53653 +}
53654 +
53655 +/*
53656 + * Add len # of bytes to the end of the network buffer
53657 + * pointed to by bufPtr
53658 + */
53659 +A_STATUS
53660 +a_netbuf_put(void *bufPtr, A_INT32 len)
53661 +{
53662 + skb_put((struct sk_buff *)bufPtr, len);
53663 +
53664 + return A_OK;
53665 +}
53666 +
53667 +/*
53668 + * Add len # of bytes to the end of the network buffer
53669 + * pointed to by bufPtr and also fill with data
53670 + */
53671 +A_STATUS
53672 +a_netbuf_put_data(void *bufPtr, char *srcPtr, A_INT32 len)
53673 +{
53674 + char *start = ((struct sk_buff *)bufPtr)->data +
53675 + ((struct sk_buff *)bufPtr)->len;
53676 + skb_put((struct sk_buff *)bufPtr, len);
53677 + A_MEMCPY(start, srcPtr, len);
53678 +
53679 + return A_OK;
53680 +}
53681 +
53682 +
53683 +/*
53684 + * Trim the network buffer pointed to by bufPtr to len # of bytes
53685 + */
53686 +A_STATUS
53687 +a_netbuf_setlen(void *bufPtr, A_INT32 len)
53688 +{
53689 + skb_trim((struct sk_buff *)bufPtr, len);
53690 +
53691 + return A_OK;
53692 +}
53693 +
53694 +/*
53695 + * Chop of len # of bytes from the end of the buffer.
53696 + */
53697 +A_STATUS
53698 +a_netbuf_trim(void *bufPtr, A_INT32 len)
53699 +{
53700 + skb_trim((struct sk_buff *)bufPtr, ((struct sk_buff *)bufPtr)->len - len);
53701 +
53702 + return A_OK;
53703 +}
53704 +
53705 +/*
53706 + * Chop of len # of bytes from the end of the buffer and return the data.
53707 + */
53708 +A_STATUS
53709 +a_netbuf_trim_data(void *bufPtr, char *dstPtr, A_INT32 len)
53710 +{
53711 + char *start = ((struct sk_buff *)bufPtr)->data +
53712 + (((struct sk_buff *)bufPtr)->len - len);
53713 +
53714 + A_MEMCPY(dstPtr, start, len);
53715 + skb_trim((struct sk_buff *)bufPtr, ((struct sk_buff *)bufPtr)->len - len);
53716 +
53717 + return A_OK;
53718 +}
53719 +
53720 +
53721 +/*
53722 + * Returns the number of bytes available to a a_netbuf_push()
53723 + */
53724 +A_INT32
53725 +a_netbuf_headroom(void *bufPtr)
53726 +{
53727 + return (skb_headroom((struct sk_buff *)bufPtr));
53728 +}
53729 +
53730 +/*
53731 + * Removes specified number of bytes from the beginning of the buffer
53732 + */
53733 +A_STATUS
53734 +a_netbuf_pull(void *bufPtr, A_INT32 len)
53735 +{
53736 + skb_pull((struct sk_buff *)bufPtr, len);
53737 +
53738 + return A_OK;
53739 +}
53740 +
53741 +/*
53742 + * Removes specified number of bytes from the beginning of the buffer
53743 + * and return the data
53744 + */
53745 +A_STATUS
53746 +a_netbuf_pull_data(void *bufPtr, char *dstPtr, A_INT32 len)
53747 +{
53748 + A_MEMCPY(dstPtr, ((struct sk_buff *)bufPtr)->data, len);
53749 + skb_pull((struct sk_buff *)bufPtr, len);
53750 +
53751 + return A_OK;
53752 +}
53753 +
53754 Index: linux-2.6.28/drivers/ar6000/ar6000/osapi_linux.h
53755 ===================================================================
53756 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
53757 +++ linux-2.6.28/drivers/ar6000/ar6000/osapi_linux.h 2009-01-02 00:01:56.000000000 +0100
53758 @@ -0,0 +1,319 @@
53759 +/*
53760 + * $Id: //depot/sw/releases/olca2.0-GPL/host/os/linux/include/osapi_linux.h#1 $
53761 + *
53762 + * This file contains the definitions of the basic atheros data types.
53763 + * It is used to map the data types in atheros files to a platform specific
53764 + * type.
53765 + *
53766 + * Copyright 2003-2005 Atheros Communications, Inc., All Rights Reserved.
53767 + *
53768 + *
53769 + * This program is free software; you can redistribute it and/or modify
53770 + * it under the terms of the GNU General Public License version 2 as
53771 + * published by the Free Software Foundation;
53772 + *
53773 + * Software distributed under the License is distributed on an "AS
53774 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
53775 + * implied. See the License for the specific language governing
53776 + * rights and limitations under the License.
53777 + *
53778 + *
53779 + *
53780 + */
53781 +
53782 +#ifndef _OSAPI_LINUX_H_
53783 +#define _OSAPI_LINUX_H_
53784 +
53785 +#ifdef __KERNEL__
53786 +
53787 +#include <linux/version.h>
53788 +#include <linux/types.h>
53789 +#include <linux/kernel.h>
53790 +#include <linux/string.h>
53791 +#include <linux/skbuff.h>
53792 +#include <linux/netdevice.h>
53793 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
53794 +#include <linux/jiffies.h>
53795 +#endif
53796 +#include <linux/timer.h>
53797 +#include <linux/delay.h>
53798 +#include <linux/wait.h>
53799 +#ifdef KERNEL_2_4
53800 +#include <asm/arch/irq.h>
53801 +#include <asm/irq.h>
53802 +#endif
53803 +
53804 +#ifdef __GNUC__
53805 +#define __ATTRIB_PACK __attribute__ ((packed))
53806 +#define __ATTRIB_PRINTF __attribute__ ((format (printf, 1, 2)))
53807 +#define __ATTRIB_NORETURN __attribute__ ((noreturn))
53808 +#ifndef INLINE
53809 +#define INLINE __inline__
53810 +#endif
53811 +#else /* Not GCC */
53812 +#define __ATTRIB_PACK
53813 +#define __ATTRIB_PRINTF
53814 +#define __ATTRIB_NORETURN
53815 +#ifndef INLINE
53816 +#define INLINE __inline
53817 +#endif
53818 +#endif /* End __GNUC__ */
53819 +
53820 +#define PREPACK
53821 +#define POSTPACK __ATTRIB_PACK
53822 +
53823 +/*
53824 + * Endianes macros
53825 + */
53826 +#define A_BE2CPU8(x) ntohb(x)
53827 +#define A_BE2CPU16(x) ntohs(x)
53828 +#define A_BE2CPU32(x) ntohl(x)
53829 +
53830 +#define A_LE2CPU8(x) (x)
53831 +#define A_LE2CPU16(x) (x)
53832 +#define A_LE2CPU32(x) (x)
53833 +
53834 +#define A_CPU2BE8(x) htonb(x)
53835 +#define A_CPU2BE16(x) htons(x)
53836 +#define A_CPU2BE32(x) htonl(x)
53837 +
53838 +#define A_MEMCPY(dst, src, len) memcpy((A_UINT8 *)(dst), (src), (len))
53839 +#define A_MEMZERO(addr, len) memset(addr, 0, len)
53840 +#define A_MEMCMP(addr1, addr2, len) memcmp((addr1), (addr2), (len))
53841 +#define A_MALLOC(size) kmalloc((size), GFP_KERNEL)
53842 +#define A_MALLOC_NOWAIT(size) kmalloc((size), GFP_ATOMIC)
53843 +#define A_FREE(addr) kfree(addr)
53844 +#define A_PRINTF(args...) printk(args)
53845 +
53846 +/* Mutual Exclusion */
53847 +typedef spinlock_t A_MUTEX_T;
53848 +#define A_MUTEX_INIT(mutex) spin_lock_init(mutex)
53849 +#define A_MUTEX_LOCK(mutex) spin_lock_bh(mutex)
53850 +#define A_MUTEX_UNLOCK(mutex) spin_unlock_bh(mutex)
53851 +#define A_IS_MUTEX_VALID(mutex) TRUE /* okay to return true, since A_MUTEX_DELETE does nothing */
53852 +#define A_MUTEX_DELETE(mutex) /* spin locks are not kernel resources so nothing to free.. */
53853 +
53854 +/* Get current time in ms adding a constant offset (in ms) */
53855 +#define A_GET_MS(offset) \
53856 + (jiffies + ((offset) / 1000) * HZ)
53857 +
53858 +/*
53859 + * Timer Functions
53860 + */
53861 +#define A_MDELAY(msecs) mdelay(msecs)
53862 +typedef struct timer_list A_TIMER;
53863 +
53864 +#define A_INIT_TIMER(pTimer, pFunction, pArg) do { \
53865 + init_timer(pTimer); \
53866 + (pTimer)->function = (pFunction); \
53867 + (pTimer)->data = (unsigned long)(pArg); \
53868 +} while (0)
53869 +
53870 +/*
53871 + * Start a Timer that elapses after 'periodMSec' milli-seconds
53872 + * Support is provided for a one-shot timer. The 'repeatFlag' is
53873 + * ignored.
53874 + */
53875 +#define A_TIMEOUT_MS(pTimer, periodMSec, repeatFlag) do { \
53876 + if (repeatFlag) { \
53877 + printk("\n" __FILE__ ":%d: Timer Repeat requested\n",__LINE__); \
53878 + panic("Timer Repeat"); \
53879 + } \
53880 + mod_timer((pTimer), jiffies + HZ * (periodMSec) / 1000); \
53881 +} while (0)
53882 +
53883 +/*
53884 + * Cancel the Timer.
53885 + */
53886 +#define A_UNTIMEOUT(pTimer) do { \
53887 + del_timer((pTimer)); \
53888 +} while (0)
53889 +
53890 +#define A_DELETE_TIMER(pTimer) do { \
53891 +} while (0)
53892 +
53893 +/*
53894 + * Wait Queue related functions
53895 + */
53896 +typedef wait_queue_head_t A_WAITQUEUE_HEAD;
53897 +#define A_INIT_WAITQUEUE_HEAD(head) init_waitqueue_head(head)
53898 +#ifndef wait_event_interruptible_timeout
53899 +#define __wait_event_interruptible_timeout(wq, condition, ret) \
53900 +do { \
53901 + wait_queue_t __wait; \
53902 + init_waitqueue_entry(&__wait, current); \
53903 + \
53904 + add_wait_queue(&wq, &__wait); \
53905 + for (;;) { \
53906 + set_current_state(TASK_INTERRUPTIBLE); \
53907 + if (condition) \
53908 + break; \
53909 + if (!signal_pending(current)) { \
53910 + ret = schedule_timeout(ret); \
53911 + if (!ret) \
53912 + break; \
53913 + continue; \
53914 + } \
53915 + ret = -ERESTARTSYS; \
53916 + break; \
53917 + } \
53918 + current->state = TASK_RUNNING; \
53919 + remove_wait_queue(&wq, &__wait); \
53920 +} while (0)
53921 +
53922 +#define wait_event_interruptible_timeout(wq, condition, timeout) \
53923 +({ \
53924 + long __ret = timeout; \
53925 + if (!(condition)) \
53926 + __wait_event_interruptible_timeout(wq, condition, __ret); \
53927 + __ret; \
53928 +})
53929 +#endif /* wait_event_interruptible_timeout */
53930 +
53931 +#define A_WAIT_EVENT_INTERRUPTIBLE_TIMEOUT(head, condition, timeout) do { \
53932 + wait_event_interruptible_timeout(head, condition, timeout); \
53933 +} while (0)
53934 +
53935 +#define A_WAKE_UP(head) wake_up(head)
53936 +
53937 +#ifdef DEBUG
53938 +#define A_ASSERT(expr) \
53939 + if (!(expr)) { \
53940 + printk(KERN_ALERT "\n" __FILE__ ":%d: Assertion " #expr " failed!\n",__LINE__); \
53941 + panic(#expr); \
53942 + }
53943 +
53944 +#else
53945 +#define A_ASSERT(expr)
53946 +#endif /* DEBUG */
53947 +
53948 +/*
53949 + * Initialization of the network buffer subsystem
53950 + */
53951 +#define A_NETBUF_INIT()
53952 +
53953 +/*
53954 + * Network buffer queue support
53955 + */
53956 +typedef struct sk_buff_head A_NETBUF_QUEUE_T;
53957 +
53958 +#define A_NETBUF_QUEUE_INIT(q) \
53959 + a_netbuf_queue_init(q)
53960 +
53961 +#define A_NETBUF_ENQUEUE(q, pkt) \
53962 + a_netbuf_enqueue((q), (pkt))
53963 +#define A_NETBUF_PREQUEUE(q, pkt) \
53964 + a_netbuf_prequeue((q), (pkt))
53965 +#define A_NETBUF_DEQUEUE(q) \
53966 + (a_netbuf_dequeue(q))
53967 +#define A_NETBUF_QUEUE_SIZE(q) \
53968 + a_netbuf_queue_size(q)
53969 +#define A_NETBUF_QUEUE_EMPTY(q) \
53970 + a_netbuf_queue_empty(q)
53971 +
53972 +/*
53973 + * Network buffer support
53974 + */
53975 +#define A_NETBUF_ALLOC(size) \
53976 + a_netbuf_alloc(size)
53977 +#define A_NETBUF_ALLOC_RAW(size) \
53978 + a_netbuf_alloc_raw(size)
53979 +#define A_NETBUF_FREE(bufPtr) \
53980 + a_netbuf_free(bufPtr)
53981 +#define A_NETBUF_DATA(bufPtr) \
53982 + a_netbuf_to_data(bufPtr)
53983 +#define A_NETBUF_LEN(bufPtr) \
53984 + a_netbuf_to_len(bufPtr)
53985 +#define A_NETBUF_PUSH(bufPtr, len) \
53986 + a_netbuf_push(bufPtr, len)
53987 +#define A_NETBUF_PUT(bufPtr, len) \
53988 + a_netbuf_put(bufPtr, len)
53989 +#define A_NETBUF_TRIM(bufPtr,len) \
53990 + a_netbuf_trim(bufPtr, len)
53991 +#define A_NETBUF_PULL(bufPtr, len) \
53992 + a_netbuf_pull(bufPtr, len)
53993 +#define A_NETBUF_HEADROOM(bufPtr)\
53994 + a_netbuf_headroom(bufPtr)
53995 +#define A_NETBUF_SETLEN(bufPtr,len) \
53996 + a_netbuf_setlen(bufPtr, len)
53997 +
53998 +/* Add data to end of a buffer */
53999 +#define A_NETBUF_PUT_DATA(bufPtr, srcPtr, len) \
54000 + a_netbuf_put_data(bufPtr, srcPtr, len)
54001 +
54002 +/* Add data to start of the buffer */
54003 +#define A_NETBUF_PUSH_DATA(bufPtr, srcPtr, len) \
54004 + a_netbuf_push_data(bufPtr, srcPtr, len)
54005 +
54006 +/* Remove data at start of the buffer */
54007 +#define A_NETBUF_PULL_DATA(bufPtr, dstPtr, len) \
54008 + a_netbuf_pull_data(bufPtr, dstPtr, len)
54009 +
54010 +/* Remove data from the end of the buffer */
54011 +#define A_NETBUF_TRIM_DATA(bufPtr, dstPtr, len) \
54012 + a_netbuf_trim_data(bufPtr, dstPtr, len)
54013 +
54014 +/* View data as "size" contiguous bytes of type "t" */
54015 +#define A_NETBUF_VIEW_DATA(bufPtr, t, size) \
54016 + (t )( ((struct skbuf *)(bufPtr))->data)
54017 +
54018 +/* return the beginning of the headroom for the buffer */
54019 +#define A_NETBUF_HEAD(bufPtr) \
54020 + ((((struct sk_buff *)(bufPtr))->head))
54021 +
54022 +/*
54023 + * OS specific network buffer access routines
54024 + */
54025 +void *a_netbuf_alloc(int size);
54026 +void *a_netbuf_alloc_raw(int size);
54027 +void a_netbuf_free(void *bufPtr);
54028 +void *a_netbuf_to_data(void *bufPtr);
54029 +A_UINT32 a_netbuf_to_len(void *bufPtr);
54030 +A_STATUS a_netbuf_push(void *bufPtr, A_INT32 len);
54031 +A_STATUS a_netbuf_push_data(void *bufPtr, char *srcPtr, A_INT32 len);
54032 +A_STATUS a_netbuf_put(void *bufPtr, A_INT32 len);
54033 +A_STATUS a_netbuf_put_data(void *bufPtr, char *srcPtr, A_INT32 len);
54034 +A_STATUS a_netbuf_pull(void *bufPtr, A_INT32 len);
54035 +A_STATUS a_netbuf_pull_data(void *bufPtr, char *dstPtr, A_INT32 len);
54036 +A_STATUS a_netbuf_trim(void *bufPtr, A_INT32 len);
54037 +A_STATUS a_netbuf_trim_data(void *bufPtr, char *dstPtr, A_INT32 len);
54038 +A_STATUS a_netbuf_setlen(void *bufPtr, A_INT32 len);
54039 +A_INT32 a_netbuf_headroom(void *bufPtr);
54040 +void a_netbuf_enqueue(A_NETBUF_QUEUE_T *q, void *pkt);
54041 +void a_netbuf_prequeue(A_NETBUF_QUEUE_T *q, void *pkt);
54042 +void *a_netbuf_dequeue(A_NETBUF_QUEUE_T *q);
54043 +int a_netbuf_queue_size(A_NETBUF_QUEUE_T *q);
54044 +int a_netbuf_queue_empty(A_NETBUF_QUEUE_T *q);
54045 +int a_netbuf_queue_empty(A_NETBUF_QUEUE_T *q);
54046 +void a_netbuf_queue_init(A_NETBUF_QUEUE_T *q);
54047 +
54048 +/*
54049 + * Kernel v.s User space functions
54050 + */
54051 +A_UINT32 a_copy_to_user(void *to, const void *from, A_UINT32 n);
54052 +A_UINT32 a_copy_from_user(void *to, const void *from, A_UINT32 n);
54053 +
54054 +#else /* __KERNEL__ */
54055 +
54056 +#ifdef __GNUC__
54057 +#define __ATTRIB_PACK __attribute__ ((packed))
54058 +#define __ATTRIB_PRINTF __attribute__ ((format (printf, 1, 2)))
54059 +#define __ATTRIB_NORETURN __attribute__ ((noreturn))
54060 +#ifndef INLINE
54061 +#define INLINE __inline__
54062 +#endif
54063 +#else /* Not GCC */
54064 +#define __ATTRIB_PACK
54065 +#define __ATTRIB_PRINTF
54066 +#define __ATTRIB_NORETURN
54067 +#ifndef INLINE
54068 +#define INLINE __inline
54069 +#endif
54070 +#endif /* End __GNUC__ */
54071 +
54072 +#define PREPACK
54073 +#define POSTPACK __ATTRIB_PACK
54074 +
54075 +#endif /* __KERNEL__ */
54076 +
54077 +#endif /* _OSAPI_LINUX_H_ */
54078 Index: linux-2.6.28/drivers/ar6000/ar6000/wireless_ext.c
54079 ===================================================================
54080 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
54081 +++ linux-2.6.28/drivers/ar6000/ar6000/wireless_ext.c 2009-01-02 00:01:56.000000000 +0100
54082 @@ -0,0 +1,1972 @@
54083 +/*
54084 + *
54085 + * Copyright (c) 2004-2007 Atheros Communications Inc.
54086 + * All rights reserved.
54087 + *
54088 + *
54089 + * This program is free software; you can redistribute it and/or modify
54090 + * it under the terms of the GNU General Public License version 2 as
54091 + * published by the Free Software Foundation;
54092 + *
54093 + * Software distributed under the License is distributed on an "AS
54094 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
54095 + * implied. See the License for the specific language governing
54096 + * rights and limitations under the License.
54097 + *
54098 + *
54099 + *
54100 + */
54101 +
54102 +#include "ar6000_drv.h"
54103 +
54104 +static A_UINT8 bcast_mac[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
54105 +static void ar6000_set_quality(struct iw_quality *iq, A_INT8 rssi);
54106 +extern unsigned int wmitimeout;
54107 +extern A_WAITQUEUE_HEAD arEvent;
54108 +extern wait_queue_head_t ar6000_scan_queue;
54109 +
54110 +/*
54111 + * Encode a WPA or RSN information element as a custom
54112 + * element using the hostap format.
54113 + */
54114 +static u_int
54115 +encode_ie(void *buf, size_t bufsize,
54116 + const u_int8_t *ie, size_t ielen,
54117 + const char *leader, size_t leader_len)
54118 +{
54119 + u_int8_t *p;
54120 + int i;
54121 +
54122 + if (bufsize < leader_len)
54123 + return 0;
54124 + p = buf;
54125 + memcpy(p, leader, leader_len);
54126 + bufsize -= leader_len;
54127 + p += leader_len;
54128 + for (i = 0; i < ielen && bufsize > 2; i++)
54129 + p += sprintf(p, "%02x", ie[i]);
54130 + return (i == ielen ? p - (u_int8_t *)buf : 0);
54131 +}
54132 +
54133 +void
54134 +ar6000_scan_node(void *arg, bss_t *ni)
54135 +{
54136 + struct iw_event iwe;
54137 +#if WIRELESS_EXT > 14
54138 + char buf[64*2 + 30];
54139 +#endif
54140 + struct ar_giwscan_param *param;
54141 + A_CHAR *current_ev;
54142 + A_CHAR *end_buf;
54143 + struct ieee80211_common_ie *cie;
54144 + struct iw_request_info info;
54145 +
54146 + info.cmd = 0;
54147 + info.flags = 0;
54148 +
54149 + param = (struct ar_giwscan_param *)arg;
54150 +
54151 + if (param->current_ev >= param->end_buf) {
54152 + return;
54153 + }
54154 + if ((param->firstPass == TRUE) &&
54155 + ((ni->ni_cie.ie_wpa == NULL) && (ni->ni_cie.ie_rsn == NULL))) {
54156 + /*
54157 + * Only forward wpa bss's in first pass
54158 + */
54159 + return;
54160 + }
54161 +
54162 + if ((param->firstPass == FALSE) &&
54163 + ((ni->ni_cie.ie_wpa != NULL) || (ni->ni_cie.ie_rsn != NULL))) {
54164 + /*
54165 + * Only forward non-wpa bss's in 2nd pass
54166 + */
54167 + return;
54168 + }
54169 +
54170 + current_ev = param->current_ev;
54171 + end_buf = param->end_buf;
54172 +
54173 + cie = &ni->ni_cie;
54174 +
54175 + A_MEMZERO(&iwe, sizeof(iwe));
54176 + iwe.cmd = SIOCGIWAP;
54177 + iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
54178 + A_MEMCPY(iwe.u.ap_addr.sa_data, ni->ni_macaddr, 6);
54179 + current_ev = iwe_stream_add_event(&info, current_ev, end_buf, &iwe,
54180 + IW_EV_ADDR_LEN);
54181 +
54182 + A_MEMZERO(&iwe, sizeof(iwe));
54183 + iwe.cmd = SIOCGIWESSID;
54184 + iwe.u.data.flags = 1;
54185 + iwe.u.data.length = cie->ie_ssid[1];
54186 + current_ev = iwe_stream_add_point(&info, current_ev, end_buf, &iwe,
54187 + &cie->ie_ssid[2]);
54188 +
54189 + if (cie->ie_capInfo & (IEEE80211_CAPINFO_ESS|IEEE80211_CAPINFO_IBSS)) {
54190 + A_MEMZERO(&iwe, sizeof(iwe));
54191 + iwe.cmd = SIOCGIWMODE;
54192 + iwe.u.mode = cie->ie_capInfo & IEEE80211_CAPINFO_ESS ?
54193 + IW_MODE_MASTER : IW_MODE_ADHOC;
54194 + current_ev = iwe_stream_add_event(&info, current_ev, end_buf, &iwe,
54195 + IW_EV_UINT_LEN);
54196 + }
54197 +
54198 + A_MEMZERO(&iwe, sizeof(iwe));
54199 + iwe.cmd = SIOCGIWFREQ;
54200 + iwe.u.freq.m = cie->ie_chan * 100000;
54201 + iwe.u.freq.e = 1;
54202 + current_ev = iwe_stream_add_event(&info, current_ev, end_buf, &iwe,
54203 + IW_EV_FREQ_LEN);
54204 +
54205 + A_MEMZERO(&iwe, sizeof(iwe));
54206 + iwe.cmd = IWEVQUAL;
54207 + ar6000_set_quality(&iwe.u.qual, ni->ni_snr);
54208 + current_ev = iwe_stream_add_event(&info, current_ev, end_buf, &iwe,
54209 + IW_EV_QUAL_LEN);
54210 +
54211 + A_MEMZERO(&iwe, sizeof(iwe));
54212 + iwe.cmd = SIOCGIWENCODE;
54213 + if (cie->ie_capInfo & IEEE80211_CAPINFO_PRIVACY) {
54214 + iwe.u.data.flags = IW_ENCODE_ENABLED | IW_ENCODE_NOKEY;
54215 + } else {
54216 + iwe.u.data.flags = IW_ENCODE_DISABLED;
54217 + }
54218 + iwe.u.data.length = 0;
54219 + current_ev = iwe_stream_add_point(&info, current_ev, end_buf, &iwe, "");
54220 +
54221 + A_MEMZERO(&iwe, sizeof(iwe));
54222 + iwe.cmd = IWEVCUSTOM;
54223 + snprintf(buf, sizeof(buf), "bcn_int=%d", cie->ie_beaconInt);
54224 + iwe.u.data.length = strlen(buf);
54225 + current_ev = iwe_stream_add_point(&info, current_ev, end_buf, &iwe, buf);
54226 +
54227 + if (cie->ie_wpa != NULL) {
54228 + static const char wpa_leader[] = "wpa_ie=";
54229 +
54230 + A_MEMZERO(&iwe, sizeof(iwe));
54231 + iwe.cmd = IWEVCUSTOM;
54232 + iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_wpa,
54233 + cie->ie_wpa[1]+2,
54234 + wpa_leader, sizeof(wpa_leader)-1);
54235 +
54236 + if (iwe.u.data.length != 0) {
54237 + current_ev = iwe_stream_add_point(&info, current_ev, end_buf, &iwe,
54238 + buf);
54239 + }
54240 + }
54241 +
54242 + if (cie->ie_rsn != NULL && cie->ie_rsn[0] == IEEE80211_ELEMID_RSN) {
54243 + static const char rsn_leader[] = "rsn_ie=";
54244 +
54245 + A_MEMZERO(&iwe, sizeof(iwe));
54246 + iwe.cmd = IWEVCUSTOM;
54247 + iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_rsn,
54248 + cie->ie_rsn[1]+2,
54249 + rsn_leader, sizeof(rsn_leader)-1);
54250 +
54251 + if (iwe.u.data.length != 0) {
54252 + current_ev = iwe_stream_add_point(&info, current_ev, end_buf, &iwe,
54253 + buf);
54254 + }
54255 + }
54256 +
54257 + if (cie->ie_wmm != NULL) {
54258 + static const char wmm_leader[] = "wmm_ie=";
54259 +
54260 + A_MEMZERO(&iwe, sizeof(iwe));
54261 + iwe.cmd = IWEVCUSTOM;
54262 + iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_wmm,
54263 + cie->ie_wmm[1]+2,
54264 + wmm_leader, sizeof(wmm_leader)-1);
54265 + if (iwe.u.data.length != 0) {
54266 + current_ev = iwe_stream_add_point(&info, current_ev, end_buf, &iwe,
54267 + buf);
54268 + }
54269 + }
54270 +
54271 + if (cie->ie_ath != NULL) {
54272 + static const char ath_leader[] = "ath_ie=";
54273 +
54274 + A_MEMZERO(&iwe, sizeof(iwe));
54275 + iwe.cmd = IWEVCUSTOM;
54276 + iwe.u.data.length = encode_ie(buf, sizeof(buf), cie->ie_ath,
54277 + cie->ie_ath[1]+2,
54278 + ath_leader, sizeof(ath_leader)-1);
54279 + if (iwe.u.data.length != 0) {
54280 + current_ev = iwe_stream_add_point(&info, current_ev, end_buf, &iwe,
54281 + buf);
54282 + }
54283 + }
54284 +
54285 + param->current_ev = current_ev;
54286 +}
54287 +
54288 +int
54289 +ar6000_ioctl_giwscan(struct net_device *dev,
54290 + struct iw_request_info *info,
54291 + struct iw_point *data, char *extra)
54292 +{
54293 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54294 + struct ar_giwscan_param param;
54295 + int i;
54296 +
54297 + if (ar->arWlanState == WLAN_DISABLED) {
54298 + return -EIO;
54299 + }
54300 +
54301 + if (ar->arWmiReady == FALSE) {
54302 + return -EIO;
54303 + }
54304 +
54305 + param.current_ev = extra;
54306 + param.end_buf = extra + IW_SCAN_MAX_DATA;
54307 + param.firstPass = TRUE;
54308 +
54309 + /*
54310 + * Do two passes to insure WPA scan candidates
54311 + * are sorted to the front. This is a hack to deal with
54312 + * the wireless extensions capping scan results at
54313 + * IW_SCAN_MAX_DATA bytes. In densely populated environments
54314 + * it's easy to overflow this buffer (especially with WPA/RSN
54315 + * information elements). Note this sorting hack does not
54316 + * guarantee we won't overflow anyway.
54317 + */
54318 + for (i = 0; i < 2; i++) {
54319 + /*
54320 + * Translate data to WE format.
54321 + */
54322 + wmi_iterate_nodes(ar->arWmi, ar6000_scan_node, &param);
54323 + param.firstPass = FALSE;
54324 + if (param.current_ev >= param.end_buf) {
54325 + data->length = param.current_ev - extra;
54326 + return -E2BIG;
54327 + }
54328 + }
54329 +
54330 + if(!(data->length = param.current_ev - extra)) {
54331 + printk("%s(): data length %d\n", __FUNCTION__, data->length);
54332 + return -EAGAIN;
54333 + }
54334 + return 0;
54335 +}
54336 +
54337 +extern int reconnect_flag;
54338 +/* SIOCSIWESSID */
54339 +static int
54340 +ar6000_ioctl_siwessid(struct net_device *dev,
54341 + struct iw_request_info *info,
54342 + struct iw_point *data, char *ssid)
54343 +{
54344 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54345 + A_STATUS status;
54346 + A_UINT8 arNetworkType;
54347 +
54348 + if (ar->arWlanState == WLAN_DISABLED) {
54349 + return -EIO;
54350 + }
54351 +
54352 + if (ar->arWmiReady == FALSE) {
54353 + return -EIO;
54354 + }
54355 +
54356 + /*
54357 + * iwconfig passes a string with length excluding any trailing NUL.
54358 + * FIXME: we should be able to set an ESSID of 32 bytes, yet things fall
54359 + * over badly if we do. So we limit the ESSID to 31 bytes.
54360 + */
54361 + if (data->flags && (!data->length || data->length >= sizeof(ar->arSsid))) {
54362 + /*
54363 + * ssid is invalid
54364 + */
54365 + return -EINVAL;
54366 + }
54367 + /* Added for bug 25178, return an IOCTL error instead of target returning
54368 + Illegal parameter error when either the BSSID or channel is missing
54369 + and we cannot scan during connect.
54370 + */
54371 + if (data->flags) {
54372 + if (ar->arSkipScan == TRUE &&
54373 + (ar->arChannelHint == 0 ||
54374 + (!ar->arReqBssid[0] && !ar->arReqBssid[1] && !ar->arReqBssid[2] &&
54375 + !ar->arReqBssid[3] && !ar->arReqBssid[4] && !ar->arReqBssid[5])))
54376 + {
54377 + return -EINVAL;
54378 + }
54379 + }
54380 +
54381 + if (down_interruptible(&ar->arSem)) {
54382 + return -ERESTARTSYS;
54383 + }
54384 +
54385 + if (ar->arTxPending[WMI_CONTROL_PRI]) {
54386 + /*
54387 + * sleep until the command queue drains
54388 + */
54389 + wait_event_interruptible_timeout(arEvent,
54390 + ar->arTxPending[WMI_CONTROL_PRI] == 0, wmitimeout * HZ);
54391 + if (signal_pending(current)) {
54392 + return -EINTR;
54393 + }
54394 + }
54395 +
54396 + if (!data->flags) {
54397 + arNetworkType = ar->arNetworkType;
54398 + ar6000_init_profile_info(ar);
54399 + ar->arNetworkType = arNetworkType;
54400 + }
54401 +
54402 + /*
54403 + * The original logic here prevented a disconnect if issuing an "essid off"
54404 + * if no ESSID was set, presumably to prevent sending multiple disconnects
54405 + * to the WMI.
54406 + *
54407 + * Unfortunately, this also meant that no disconnect was sent when we were
54408 + * already connected, but the profile has been changed since (which also
54409 + * clears the ESSID as a reminder that the WMI needs updating.)
54410 + *
54411 + * The "1 ||" makes sure we always disconnect or reconnect. The WMI doesn't
54412 + * seem to mind being sent multiple disconnects.
54413 + */
54414 + if (1 || (ar->arSsidLen) || (!data->flags))
54415 + {
54416 + if ((!data->flags) ||
54417 + (A_MEMCMP(ar->arSsid, ssid, ar->arSsidLen) != 0) ||
54418 + (ar->arSsidLen != (data->length)))
54419 + {
54420 + /*
54421 + * SSID set previously or essid off has been issued.
54422 + *
54423 + * Disconnect Command is issued in two cases after wmi is ready
54424 + * (1) ssid is different from the previous setting
54425 + * (2) essid off has been issued
54426 + *
54427 + */
54428 + if (ar->arWmiReady == TRUE) {
54429 + reconnect_flag = 0;
54430 + status = wmi_disconnect_cmd(ar->arWmi);
54431 + A_MEMZERO(ar->arSsid, sizeof(ar->arSsid));
54432 + ar->arSsidLen = 0;
54433 + if (ar->arSkipScan == FALSE) {
54434 + A_MEMZERO(ar->arReqBssid, sizeof(ar->arReqBssid));
54435 + }
54436 + if (!data->flags) {
54437 + up(&ar->arSem);
54438 + return 0;
54439 + }
54440 + } else {
54441 + up(&ar->arSem);
54442 + }
54443 + }
54444 + else
54445 + {
54446 + /*
54447 + * SSID is same, so we assume profile hasn't changed.
54448 + * If the interface is up and wmi is ready, we issue
54449 + * a reconnect cmd. Issue a reconnect only we are already
54450 + * connected.
54451 + */
54452 + if((ar->arConnected == TRUE) && (ar->arWmiReady == TRUE))
54453 + {
54454 + reconnect_flag = TRUE;
54455 + status = wmi_reconnect_cmd(ar->arWmi,ar->arReqBssid,
54456 + ar->arChannelHint);
54457 + up(&ar->arSem);
54458 + if (status != A_OK) {
54459 + return -EIO;
54460 + }
54461 + return 0;
54462 + }
54463 + else{
54464 + /*
54465 + * Dont return if connect is pending.
54466 + */
54467 + if(!(ar->arConnectPending)) {
54468 + up(&ar->arSem);
54469 + return 0;
54470 + }
54471 + }
54472 + }
54473 + }
54474 +
54475 + ar->arSsidLen = data->length;
54476 + A_MEMCPY(ar->arSsid, ssid, ar->arSsidLen);
54477 +
54478 + /* The ssid length check prevents second "essid off" from the user,
54479 + to be treated as a connect cmd. The second "essid off" is ignored.
54480 + */
54481 + if((ar->arWmiReady == TRUE) && (ar->arSsidLen > 0) )
54482 + {
54483 + AR6000_SPIN_LOCK(&ar->arLock, 0);
54484 + if (SHARED_AUTH == ar->arDot11AuthMode) {
54485 + ar6000_install_static_wep_keys(ar);
54486 + }
54487 + AR_DEBUG_PRINTF("Connect called with authmode %d dot11 auth %d"\
54488 + " PW crypto %d PW crypto Len %d GRP crypto %d"\
54489 + " GRP crypto Len %d\n",
54490 + ar->arAuthMode, ar->arDot11AuthMode,
54491 + ar->arPairwiseCrypto, ar->arPairwiseCryptoLen,
54492 + ar->arGroupCrypto, ar->arGroupCryptoLen);
54493 + reconnect_flag = 0;
54494 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
54495 + status = wmi_connect_cmd(ar->arWmi, ar->arNetworkType,
54496 + ar->arDot11AuthMode, ar->arAuthMode,
54497 + ar->arPairwiseCrypto, ar->arPairwiseCryptoLen,
54498 + ar->arGroupCrypto,ar->arGroupCryptoLen,
54499 + ar->arSsidLen, ar->arSsid,
54500 + ar->arReqBssid, ar->arChannelHint,
54501 + ar->arConnectCtrlFlags);
54502 +
54503 +
54504 + up(&ar->arSem);
54505 +
54506 + if (status != A_OK) {
54507 + return -EIO;
54508 + }
54509 + ar->arConnectPending = TRUE;
54510 + }else{
54511 + up(&ar->arSem);
54512 + }
54513 + return 0;
54514 +}
54515 +
54516 +/* SIOCGIWESSID */
54517 +static int
54518 +ar6000_ioctl_giwessid(struct net_device *dev,
54519 + struct iw_request_info *info,
54520 + struct iw_point *data, char *essid)
54521 +{
54522 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54523 +
54524 + if (ar->arWlanState == WLAN_DISABLED) {
54525 + return -EIO;
54526 + }
54527 +
54528 + data->flags = 1;
54529 + data->length = ar->arSsidLen;
54530 + A_MEMCPY(essid, ar->arSsid, ar->arSsidLen);
54531 +
54532 + return 0;
54533 +}
54534 +
54535 +
54536 +void ar6000_install_static_wep_keys(AR_SOFTC_T *ar)
54537 +{
54538 + A_UINT8 index;
54539 + A_UINT8 keyUsage;
54540 +
54541 + for (index = WMI_MIN_KEY_INDEX; index <= WMI_MAX_KEY_INDEX; index++) {
54542 + if (ar->arWepKeyList[index].arKeyLen) {
54543 + keyUsage = GROUP_USAGE;
54544 + if (index == ar->arDefTxKeyIndex) {
54545 + keyUsage |= TX_USAGE;
54546 + }
54547 + wmi_addKey_cmd(ar->arWmi,
54548 + index,
54549 + WEP_CRYPT,
54550 + keyUsage,
54551 + ar->arWepKeyList[index].arKeyLen,
54552 + NULL,
54553 + ar->arWepKeyList[index].arKey, KEY_OP_INIT_VAL,
54554 + NO_SYNC_WMIFLAG);
54555 + }
54556 + }
54557 +}
54558 +
54559 +int
54560 +ar6000_ioctl_delkey(struct net_device *dev, struct iw_request_info *info,
54561 + void *w, char *extra)
54562 +{
54563 + return 0;
54564 +}
54565 +
54566 +int
54567 +ar6000_ioctl_setmlme(struct net_device *dev, struct iw_request_info *info,
54568 + void *w, char *extra)
54569 +{
54570 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54571 + struct ieee80211req_mlme *mlme = (struct ieee80211req_mlme *)extra;
54572 +
54573 + if ((ar->arWmiReady == FALSE) || (ar->arConnected != TRUE))
54574 + return -EIO;
54575 +
54576 + switch (mlme->im_op) {
54577 + case IEEE80211_MLME_DISASSOC:
54578 + case IEEE80211_MLME_DEAUTH:
54579 + /* Not Supported */
54580 + break;
54581 + default:
54582 + break;
54583 + }
54584 + return 0;
54585 +}
54586 +
54587 +
54588 +int
54589 +ar6000_ioctl_setwmmparams(struct net_device *dev, struct iw_request_info *info,
54590 + void *w, char *extra)
54591 +{
54592 + return -EIO; /* for now */
54593 +}
54594 +
54595 +int
54596 +ar6000_ioctl_getwmmparams(struct net_device *dev, struct iw_request_info *info,
54597 + void *w, char *extra)
54598 +{
54599 + return -EIO; /* for now */
54600 +}
54601 +
54602 +int ar6000_ioctl_setoptie(struct net_device *dev, struct iw_request_info *info,
54603 + struct iw_point *data, char *extra)
54604 +{
54605 + /* The target generates the WPA/RSN IE */
54606 + return 0;
54607 +}
54608 +
54609 +int
54610 +ar6000_ioctl_setauthalg(struct net_device *dev, struct iw_request_info *info,
54611 + void *w, char *extra)
54612 +{
54613 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54614 + struct ieee80211req_authalg *req = (struct ieee80211req_authalg *)extra;
54615 + int ret = 0;
54616 +
54617 +
54618 + AR6000_SPIN_LOCK(&ar->arLock, 0);
54619 +
54620 + if (req->auth_alg == AUTH_ALG_OPEN_SYSTEM) {
54621 + ar->arDot11AuthMode = OPEN_AUTH;
54622 + } else if (req->auth_alg == AUTH_ALG_LEAP) {
54623 + ar->arDot11AuthMode = LEAP_AUTH;
54624 + ar->arPairwiseCrypto = WEP_CRYPT;
54625 + ar->arGroupCrypto = WEP_CRYPT;
54626 + } else {
54627 + ret = -EIO;
54628 + }
54629 +
54630 + AR6000_SPIN_UNLOCK(&ar->arLock, 0);
54631 +
54632 + return ret;
54633 +}
54634 +static int
54635 +ar6000_ioctl_addpmkid(struct net_device *dev, struct iw_request_info *info,
54636 + void *w, char *extra)
54637 +{
54638 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54639 + struct ieee80211req_addpmkid *req = (struct ieee80211req_addpmkid *)extra;
54640 + A_STATUS status;
54641 +
54642 + if (ar->arWlanState == WLAN_DISABLED) {
54643 + return -EIO;
54644 + }
54645 +
54646 + AR_DEBUG_PRINTF("Add pmkid for %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x en=%d\n",
54647 + req->pi_bssid[0], req->pi_bssid[1], req->pi_bssid[2],
54648 + req->pi_bssid[3], req->pi_bssid[4], req->pi_bssid[5],
54649 + req->pi_enable);
54650 +
54651 + status = wmi_setPmkid_cmd(ar->arWmi, req->pi_bssid, req->pi_pmkid,
54652 + req->pi_enable);
54653 +
54654 + if (status != A_OK) {
54655 + return -EIO;
54656 + }
54657 +
54658 + return 0;
54659 +}
54660 +
54661 +/*
54662 + * SIOCSIWRATE
54663 + */
54664 +int
54665 +ar6000_ioctl_siwrate(struct net_device *dev,
54666 + struct iw_request_info *info,
54667 + struct iw_param *rrq, char *extra)
54668 +{
54669 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54670 + A_UINT32 kbps;
54671 +
54672 + if (rrq->fixed) {
54673 + kbps = rrq->value / 1000; /* rrq->value is in bps */
54674 + } else {
54675 + kbps = -1; /* -1 indicates auto rate */
54676 + }
54677 + if(kbps != -1 && wmi_validate_bitrate(ar->arWmi, kbps) == A_EINVAL)
54678 + {
54679 + AR_DEBUG_PRINTF("BitRate is not Valid %d\n", kbps);
54680 + return -EINVAL;
54681 + }
54682 + ar->arBitRate = kbps;
54683 + if(ar->arWmiReady == TRUE)
54684 + {
54685 + if (wmi_set_bitrate_cmd(ar->arWmi, kbps) != A_OK) {
54686 + return -EINVAL;
54687 + }
54688 + }
54689 + return 0;
54690 +}
54691 +
54692 +/*
54693 + * SIOCGIWRATE
54694 + */
54695 +int
54696 +ar6000_ioctl_giwrate(struct net_device *dev,
54697 + struct iw_request_info *info,
54698 + struct iw_param *rrq, char *extra)
54699 +{
54700 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54701 + int ret = 0;
54702 +
54703 + if (down_interruptible(&ar->arSem)) {
54704 + return -ERESTARTSYS;
54705 + }
54706 + if(ar->arWmiReady == TRUE)
54707 + {
54708 + ar->arBitRate = 0xFFFF;
54709 + if (wmi_get_bitrate_cmd(ar->arWmi) != A_OK) {
54710 + up(&ar->arSem);
54711 + return -EIO;
54712 + }
54713 + wait_event_interruptible_timeout(arEvent, ar->arBitRate != 0xFFFF, wmitimeout * HZ);
54714 + if (signal_pending(current)) {
54715 + ret = -EINTR;
54716 + }
54717 + }
54718 + /* If the interface is down or wmi is not ready or the target is not
54719 + connected - return the value stored in the device structure */
54720 + if (!ret) {
54721 + if (ar->arBitRate == -1) {
54722 + rrq->fixed = TRUE;
54723 + rrq->value = 0;
54724 + } else {
54725 + rrq->value = ar->arBitRate * 1000;
54726 + }
54727 + }
54728 +
54729 + up(&ar->arSem);
54730 +
54731 + return ret;
54732 +}
54733 +
54734 +/*
54735 + * SIOCSIWTXPOW
54736 + */
54737 +static int
54738 +ar6000_ioctl_siwtxpow(struct net_device *dev,
54739 + struct iw_request_info *info,
54740 + struct iw_param *rrq, char *extra)
54741 +{
54742 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54743 + A_UINT8 dbM;
54744 +
54745 + if (ar->arWlanState == WLAN_DISABLED) {
54746 + return -EIO;
54747 + }
54748 +
54749 + if (ar->arRadioSwitch == WLAN_ENABLED
54750 + && rrq->disabled) {
54751 + if (wmi_switch_radio(ar->arWmi, WLAN_DISABLED) < 0)
54752 + return -EIO;
54753 + ar->arRadioSwitch = WLAN_DISABLED;
54754 + } else if (ar->arRadioSwitch == WLAN_DISABLED
54755 + && !rrq->disabled) {
54756 + if (wmi_switch_radio(ar->arWmi, WLAN_ENABLED) < 0)
54757 + return -EIO;
54758 + ar->arRadioSwitch = WLAN_ENABLED;
54759 + }
54760 +
54761 + if (rrq->fixed) {
54762 + if (rrq->flags != IW_TXPOW_DBM) {
54763 + return -EOPNOTSUPP;
54764 + }
54765 + ar->arTxPwr= dbM = rrq->value;
54766 + ar->arTxPwrSet = TRUE;
54767 + } else {
54768 + ar->arTxPwr = dbM = 0;
54769 + ar->arTxPwrSet = FALSE;
54770 + }
54771 + if(ar->arWmiReady == TRUE)
54772 + {
54773 + AR_DEBUG_PRINTF("Set tx pwr cmd %d dbM\n", dbM);
54774 + wmi_set_txPwr_cmd(ar->arWmi, dbM);
54775 + }
54776 + return 0;
54777 +}
54778 +
54779 +/*
54780 + * SIOCGIWTXPOW
54781 + */
54782 +int
54783 +ar6000_ioctl_giwtxpow(struct net_device *dev,
54784 + struct iw_request_info *info,
54785 + struct iw_param *rrq, char *extra)
54786 +{
54787 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54788 + int ret = 0;
54789 +
54790 + if (ar->arWlanState == WLAN_DISABLED) {
54791 + return -EIO;
54792 + }
54793 +
54794 + if (ar->arRadioSwitch == WLAN_DISABLED) {
54795 + rrq->disabled = 1;
54796 + return 0;
54797 + }
54798 +
54799 + if (down_interruptible(&ar->arSem)) {
54800 + return -ERESTARTSYS;
54801 + }
54802 + if((ar->arWmiReady == TRUE) && (ar->arConnected == TRUE))
54803 + {
54804 + ar->arTxPwr = 0;
54805 +
54806 + if (wmi_get_txPwr_cmd(ar->arWmi) != A_OK) {
54807 + up(&ar->arSem);
54808 + return -EIO;
54809 + }
54810 +
54811 + wait_event_interruptible_timeout(arEvent, ar->arTxPwr != 0, wmitimeout * HZ);
54812 +
54813 + if (signal_pending(current)) {
54814 + ret = -EINTR;
54815 + }
54816 + }
54817 + /* If the interace is down or wmi is not ready or target is not connected
54818 + then return value stored in the device structure */
54819 +
54820 + if (!ret) {
54821 + if (ar->arTxPwrSet == TRUE) {
54822 + rrq->fixed = TRUE;
54823 + }
54824 + rrq->value = ar->arTxPwr;
54825 + rrq->flags = IW_TXPOW_DBM;
54826 + }
54827 +
54828 + up(&ar->arSem);
54829 +
54830 + return ret;
54831 +}
54832 +
54833 +/*
54834 + * SIOCSIWRETRY
54835 + * since iwconfig only provides us with one max retry value, we use it
54836 + * to apply to data frames of the BE traffic class.
54837 + */
54838 +static int
54839 +ar6000_ioctl_siwretry(struct net_device *dev,
54840 + struct iw_request_info *info,
54841 + struct iw_param *rrq, char *extra)
54842 +{
54843 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54844 +
54845 + if (ar->arWlanState == WLAN_DISABLED) {
54846 + return -EIO;
54847 + }
54848 +
54849 + if (rrq->disabled) {
54850 + return -EOPNOTSUPP;
54851 + }
54852 +
54853 + if ((rrq->flags & IW_RETRY_TYPE) != IW_RETRY_LIMIT) {
54854 + return -EOPNOTSUPP;
54855 + }
54856 +
54857 + if ( !(rrq->value >= WMI_MIN_RETRIES) || !(rrq->value <= WMI_MAX_RETRIES)) {
54858 + return - EINVAL;
54859 + }
54860 + if(ar->arWmiReady == TRUE)
54861 + {
54862 + if (wmi_set_retry_limits_cmd(ar->arWmi, DATA_FRAMETYPE, WMM_AC_BE,
54863 + rrq->value, 0) != A_OK){
54864 + return -EINVAL;
54865 + }
54866 + }
54867 + ar->arMaxRetries = rrq->value;
54868 + return 0;
54869 +}
54870 +
54871 +/*
54872 + * SIOCGIWRETRY
54873 + */
54874 +static int
54875 +ar6000_ioctl_giwretry(struct net_device *dev,
54876 + struct iw_request_info *info,
54877 + struct iw_param *rrq, char *extra)
54878 +{
54879 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54880 +
54881 + if (ar->arWlanState == WLAN_DISABLED) {
54882 + return -EIO;
54883 + }
54884 +
54885 + rrq->disabled = 0;
54886 + switch (rrq->flags & IW_RETRY_TYPE) {
54887 + case IW_RETRY_LIFETIME:
54888 + return -EOPNOTSUPP;
54889 + break;
54890 + case IW_RETRY_LIMIT:
54891 + rrq->flags = IW_RETRY_LIMIT;
54892 + switch (rrq->flags & IW_RETRY_MODIFIER) {
54893 + case IW_RETRY_MIN:
54894 + rrq->flags |= IW_RETRY_MIN;
54895 + rrq->value = WMI_MIN_RETRIES;
54896 + break;
54897 + case IW_RETRY_MAX:
54898 + rrq->flags |= IW_RETRY_MAX;
54899 + rrq->value = ar->arMaxRetries;
54900 + break;
54901 + }
54902 + break;
54903 + }
54904 + return 0;
54905 +}
54906 +
54907 +/*
54908 + * SIOCSIWENCODE
54909 + */
54910 +static int
54911 +ar6000_ioctl_siwencode(struct net_device *dev,
54912 + struct iw_request_info *info,
54913 + struct iw_point *erq, char *keybuf)
54914 +{
54915 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
54916 + int index;
54917 + A_INT32 auth = ar->arDot11AuthMode;
54918 +
54919 + if (ar->arWlanState == WLAN_DISABLED) {
54920 + return -EIO;
54921 + }
54922 +
54923 + index = erq->flags & IW_ENCODE_INDEX;
54924 +
54925 + if (index && (((index - 1) < WMI_MIN_KEY_INDEX) ||
54926 + ((index - 1) > WMI_MAX_KEY_INDEX)))
54927 + {
54928 + return -EIO;
54929 + }
54930 +
54931 + if (erq->flags & IW_ENCODE_DISABLED) {
54932 + /*
54933 + * Encryption disabled
54934 + */
54935 + if (index) {
54936 + /*
54937 + * If key index was specified then clear the specified key
54938 + */
54939 + index--;
54940 + A_MEMZERO(ar->arWepKeyList[index].arKey,
54941 + sizeof(ar->arWepKeyList[index].arKey));
54942 + ar->arWepKeyList[index].arKeyLen = 0;
54943 + }
54944 + ar->arDot11AuthMode = OPEN_AUTH;
54945 + ar->arPairwiseCrypto = NONE_CRYPT;
54946 + ar->arGroupCrypto = NONE_CRYPT;
54947 + ar->arAuthMode = NONE_AUTH;
54948 + } else {
54949 + /*
54950 + * Enabling WEP encryption
54951 + */
54952 + if (index) {
54953 + index--; /* keyindex is off base 1 in iwconfig */
54954 + }
54955 +
54956 + if (erq->flags & IW_ENCODE_OPEN) {
54957 + auth = OPEN_AUTH;
54958 + } else if (erq->flags & IW_ENCODE_RESTRICTED) {
54959 + auth = SHARED_AUTH;
54960 + }
54961 +
54962 + if (erq->length) {
54963 + if (!IEEE80211_IS_VALID_WEP_CIPHER_LEN(erq->length)) {
54964 + return -EIO;
54965 + }
54966 +
54967 + A_MEMZERO(ar->arWepKeyList[index].arKey,
54968 + sizeof(ar->arWepKeyList[index].arKey));
54969 + A_MEMCPY(ar->arWepKeyList[index].arKey, keybuf, erq->length);
54970 + ar->arWepKeyList[index].arKeyLen = erq->length;
54971 + } else {
54972 + if (ar->arWepKeyList[index].arKeyLen == 0) {
54973 + return -EIO;
54974 + }
54975 + ar->arDefTxKeyIndex = index;
54976 + }
54977 +
54978 + ar->arPairwiseCrypto = WEP_CRYPT;
54979 + ar->arGroupCrypto = WEP_CRYPT;
54980 + ar->arDot11AuthMode = auth;
54981 + ar->arAuthMode = NONE_AUTH;
54982 + }
54983 +
54984 + /*
54985 + * profile has changed. Erase ssid to signal change
54986 + */
54987 + A_MEMZERO(ar->arSsid, sizeof(ar->arSsid));
54988 + ar->arSsidLen = 0;
54989 +
54990 + return 0;
54991 +}
54992 +
54993 +static int
54994 +ar6000_ioctl_giwencode(struct net_device *dev,
54995 + struct iw_request_info *info,
54996 + struct iw_point *erq, char *key)
54997 +{
54998 + AR_SOFTC_T *ar = (AR_SOFTC_T *)netdev_priv(dev);
54999 + A_UINT8 keyIndex;
55000 + struct ar_wep_key *wk;
55001 +
55002 + if (ar->arWlanState == WLAN_DISABLED) {
55003 + return -EIO;
55004 + }
55005 +
55006 + if (ar->arPairwiseCrypto == NONE_CRYPT) {
55007 + erq->length = 0;
55008 + erq->flags = IW_ENCODE_DISABLED;
55009 + } else {
55010 + /* get the keyIndex */
55011 + keyIndex = erq->flags & IW_ENCODE_INDEX;
55012 + if (0 == keyIndex) {
55013 + keyIndex = ar->arDefTxKeyIndex;
55014 + } else if ((keyIndex - 1 < WMI_MIN_KEY_INDEX) ||
55015 + (keyIndex - 1 > WMI_MAX_KEY_INDEX))
55016 + {
55017 + keyIndex = WMI_MIN_KEY_INDEX;
55018 + } else {
55019 + keyIndex--;
55020 + }
55021 + erq->flags = keyIndex + 1;
55022 + erq->flags |= IW_ENCODE_ENABLED;
55023 + wk = &ar->arWepKeyList[keyIndex];
55024 + if (erq->length > wk->arKeyLen) {
55025 + erq->length = wk->arKeyLen;
55026 + }
55027 + if (wk->arKeyLen) {
55028 + A_MEMCPY(key, wk->arKey, erq->length);
55029 + }
55030 + if (ar->arDot11AuthMode == OPEN_AUTH) {
55031 + erq->flags |= IW_ENCODE_OPEN;
55032 + } else if (ar->arDot11AuthMode == SHARED_AUTH) {
55033 + erq->flags |= IW_ENCODE_RESTRICTED;
55034 + }
55035 + }
55036 +
55037 + return 0;
55038 +}
55039 +
55040 +static int ar6000_ioctl_siwpower(struct net_device *dev,
55041 + struct iw_request_info *info,
55042 + union iwreq_data *wrqu, char *extra)
55043 +{
55044 + AR_SOFTC_T *ar = (AR_SOFTC_T *)netdev_priv(dev);
55045 + WMI_POWER_MODE power_mode;
55046 +
55047 + if (wrqu->power.disabled)
55048 + power_mode = MAX_PERF_POWER;
55049 + else
55050 + power_mode = REC_POWER;
55051 +
55052 + if (wmi_powermode_cmd(ar->arWmi, power_mode) < 0)
55053 + return -EIO;
55054 +
55055 + return 0;
55056 +}
55057 +
55058 +static int ar6000_ioctl_giwpower(struct net_device *dev,
55059 + struct iw_request_info *info,
55060 + union iwreq_data *wrqu, char *extra)
55061 +{
55062 + AR_SOFTC_T *ar = (AR_SOFTC_T *)netdev_priv(dev);
55063 +
55064 + return wmi_get_power_mode_cmd(ar->arWmi);
55065 +}
55066 +
55067 +static int ar6000_ioctl_siwgenie(struct net_device *dev,
55068 + struct iw_request_info *info,
55069 + struct iw_point *dwrq,
55070 + char *extra)
55071 +{
55072 + /* The target does that for us */
55073 + return 0;
55074 +}
55075 +
55076 +static int ar6000_ioctl_giwgenie(struct net_device *dev,
55077 + struct iw_request_info *info,
55078 + struct iw_point *dwrq,
55079 + char *extra)
55080 +{
55081 + return 0;
55082 +}
55083 +
55084 +static int ar6000_ioctl_siwauth(struct net_device *dev,
55085 + struct iw_request_info *info,
55086 + struct iw_param *param,
55087 + char *extra)
55088 +{
55089 + AR_SOFTC_T *ar = (AR_SOFTC_T *)netdev_priv(dev);
55090 + int reset = 0;
55091 +
55092 + switch (param->flags & IW_AUTH_INDEX) {
55093 + case IW_AUTH_WPA_VERSION:
55094 + if (param->value & IW_AUTH_WPA_VERSION_DISABLED) {
55095 + ar->arAuthMode = NONE_AUTH;
55096 + }
55097 + if (param->value & IW_AUTH_WPA_VERSION_WPA) {
55098 + ar->arAuthMode = WPA_AUTH;
55099 + }
55100 + if (param->value & IW_AUTH_WPA_VERSION_WPA2) {
55101 + ar->arAuthMode = WPA2_AUTH;
55102 + }
55103 +
55104 + reset = 1;
55105 + break;
55106 + case IW_AUTH_CIPHER_PAIRWISE:
55107 + if (param->value & IW_AUTH_CIPHER_NONE) {
55108 + ar->arPairwiseCrypto = NONE_CRYPT;
55109 + }
55110 + if (param->value & IW_AUTH_CIPHER_WEP40) {
55111 + ar->arPairwiseCrypto = WEP_CRYPT;
55112 + }
55113 + if (param->value & IW_AUTH_CIPHER_TKIP) {
55114 + ar->arPairwiseCrypto = TKIP_CRYPT;
55115 + }
55116 + if (param->value & IW_AUTH_CIPHER_CCMP) {
55117 + ar->arPairwiseCrypto = AES_CRYPT;
55118 + }
55119 +
55120 + reset = 1;
55121 + break;
55122 + case IW_AUTH_CIPHER_GROUP:
55123 + if (param->value & IW_AUTH_CIPHER_NONE) {
55124 + ar->arGroupCrypto = NONE_CRYPT;
55125 + }
55126 + if (param->value & IW_AUTH_CIPHER_WEP40) {
55127 + ar->arGroupCrypto = WEP_CRYPT;
55128 + }
55129 + if (param->value & IW_AUTH_CIPHER_TKIP) {
55130 + ar->arGroupCrypto = TKIP_CRYPT;
55131 + }
55132 + if (param->value & IW_AUTH_CIPHER_CCMP) {
55133 + ar->arGroupCrypto = AES_CRYPT;
55134 + }
55135 +
55136 + reset = 1;
55137 + break;
55138 + case IW_AUTH_KEY_MGMT:
55139 + if (param->value & IW_AUTH_KEY_MGMT_PSK) {
55140 + if (ar->arAuthMode == WPA_AUTH) {
55141 + ar->arAuthMode = WPA_PSK_AUTH;
55142 + } else if (ar->arAuthMode == WPA2_AUTH) {
55143 + ar->arAuthMode = WPA2_PSK_AUTH;
55144 + }
55145 +
55146 + reset = 1;
55147 + }
55148 + break;
55149 +
55150 + case IW_AUTH_TKIP_COUNTERMEASURES:
55151 + if (ar->arWmiReady == FALSE) {
55152 + return -EIO;
55153 + }
55154 + wmi_set_tkip_countermeasures_cmd(ar->arWmi, param->value);
55155 + break;
55156 +
55157 + case IW_AUTH_DROP_UNENCRYPTED:
55158 + break;
55159 +
55160 + case IW_AUTH_80211_AUTH_ALG:
55161 + if (param->value & IW_AUTH_ALG_OPEN_SYSTEM) {
55162 + ar->arDot11AuthMode = OPEN_AUTH;
55163 + }
55164 + if (param->value & IW_AUTH_ALG_SHARED_KEY) {
55165 + ar->arDot11AuthMode = SHARED_AUTH;
55166 + }
55167 + if (param->value & IW_AUTH_ALG_LEAP) {
55168 + ar->arDot11AuthMode = LEAP_AUTH;
55169 + ar->arPairwiseCrypto = WEP_CRYPT;
55170 + ar->arGroupCrypto = WEP_CRYPT;
55171 + }
55172 +
55173 + reset = 1;
55174 + break;
55175 +
55176 + case IW_AUTH_WPA_ENABLED:
55177 + reset = 1;
55178 + break;
55179 +
55180 + case IW_AUTH_RX_UNENCRYPTED_EAPOL:
55181 + break;
55182 +
55183 + case IW_AUTH_PRIVACY_INVOKED:
55184 + break;
55185 +
55186 + default:
55187 + printk("%s(): Unknown flag 0x%x\n", __FUNCTION__, param->flags);
55188 + return -EOPNOTSUPP;
55189 + }
55190 +
55191 + if (reset) {
55192 + A_MEMZERO(ar->arSsid, sizeof(ar->arSsid));
55193 + ar->arSsidLen = 0;
55194 + }
55195 +
55196 + return 0;
55197 +}
55198 +
55199 +static int ar6000_ioctl_giwauth(struct net_device *dev,
55200 + struct iw_request_info *info,
55201 + struct iw_param *dwrq,
55202 + char *extra)
55203 +{
55204 + return 0;
55205 +}
55206 +
55207 +static int ar6000_ioctl_siwencodeext(struct net_device *dev,
55208 + struct iw_request_info *info,
55209 + union iwreq_data *wrqu,
55210 + char *extra)
55211 +{
55212 + AR_SOFTC_T *ar = (AR_SOFTC_T *)netdev_priv(dev);
55213 + struct iw_point *encoding = &wrqu->encoding;
55214 + struct iw_encode_ext *ext = (struct iw_encode_ext *)extra;
55215 + int alg = ext->alg, idx;
55216 +
55217 + if (ar->arWlanState == WLAN_DISABLED) {
55218 + return -EIO;
55219 + }
55220 +
55221 + /* Determine and validate the key index */
55222 + idx = (encoding->flags & IW_ENCODE_INDEX) - 1;
55223 + if (idx) {
55224 + if (idx < 0 || idx > 3)
55225 + return -EINVAL;
55226 + }
55227 +
55228 + if ((alg == IW_ENCODE_ALG_TKIP) || (alg == IW_ENCODE_ALG_CCMP)) {
55229 + struct ieee80211req_key ik;
55230 + KEY_USAGE key_usage;
55231 + CRYPTO_TYPE key_type = NONE_CRYPT;
55232 + int status;
55233 +
55234 + ar->user_saved_keys.keyOk = FALSE;
55235 +
55236 + if (alg == IW_ENCODE_ALG_TKIP) {
55237 + key_type = TKIP_CRYPT;
55238 + ik.ik_type = IEEE80211_CIPHER_TKIP;
55239 + } else {
55240 + key_type = AES_CRYPT;
55241 + ik.ik_type = IEEE80211_CIPHER_AES_CCM;
55242 + }
55243 +
55244 + ik.ik_keyix = idx;
55245 + ik.ik_keylen = ext->key_len;
55246 + ik.ik_flags = IEEE80211_KEY_RECV;
55247 + if (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY) {
55248 + ik.ik_flags |= IEEE80211_KEY_XMIT
55249 + | IEEE80211_KEY_DEFAULT;
55250 + }
55251 +
55252 + if (ext->ext_flags & IW_ENCODE_EXT_RX_SEQ_VALID) {
55253 + memcpy(&ik.ik_keyrsc, ext->rx_seq, 8);
55254 + }
55255 +
55256 + memcpy(ik.ik_keydata, ext->key, ext->key_len);
55257 +
55258 + ar->user_saved_keys.keyType = key_type;
55259 + if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY) {
55260 + key_usage = GROUP_USAGE;
55261 + memset(ik.ik_macaddr, 0, ETH_ALEN);
55262 + memcpy(&ar->user_saved_keys.bcast_ik, &ik,
55263 + sizeof(struct ieee80211req_key));
55264 + } else {
55265 + key_usage = PAIRWISE_USAGE;
55266 + memcpy(ik.ik_macaddr, ext->addr.sa_data, ETH_ALEN);
55267 + memcpy(&ar->user_saved_keys.ucast_ik, &ik,
55268 + sizeof(struct ieee80211req_key));
55269 + }
55270 +
55271 + status = wmi_addKey_cmd(ar->arWmi, ik.ik_keyix, key_type,
55272 + key_usage, ik.ik_keylen,
55273 + (A_UINT8 *)&ik.ik_keyrsc,
55274 + ik.ik_keydata,
55275 + KEY_OP_INIT_VAL, SYNC_BEFORE_WMIFLAG);
55276 +
55277 + if (status < 0)
55278 + return -EIO;
55279 +
55280 + ar->user_saved_keys.keyOk = TRUE;
55281 +
55282 + return 0;
55283 +
55284 + } else {
55285 + /* WEP falls back to SIWENCODE */
55286 + return -EOPNOTSUPP;
55287 + }
55288 +
55289 + return 0;
55290 +}
55291 +
55292 +
55293 +static int ar6000_ioctl_giwencodeext(struct net_device *dev,
55294 + struct iw_request_info *info,
55295 + struct iw_point *dwrq,
55296 + char *extra)
55297 +{
55298 + return 0;
55299 +}
55300 +
55301 +
55302 +static int
55303 +ar6000_ioctl_setparam(struct net_device *dev,
55304 + struct iw_request_info *info,
55305 + void *erq, char *extra)
55306 +{
55307 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55308 + int *i = (int *)extra;
55309 + int param = i[0];
55310 + int value = i[1];
55311 + int ret = 0;
55312 + A_BOOL profChanged = FALSE;
55313 +
55314 + if (ar->arWlanState == WLAN_DISABLED) {
55315 + return -EIO;
55316 + }
55317 +
55318 + switch (param) {
55319 + case IEEE80211_PARAM_WPA:
55320 + switch (value) {
55321 + case WPA_MODE_WPA1:
55322 + ar->arAuthMode = WPA_AUTH;
55323 + profChanged = TRUE;
55324 + break;
55325 + case WPA_MODE_WPA2:
55326 + ar->arAuthMode = WPA2_AUTH;
55327 + profChanged = TRUE;
55328 + break;
55329 + case WPA_MODE_NONE:
55330 + ar->arAuthMode = NONE_AUTH;
55331 + profChanged = TRUE;
55332 + break;
55333 + default:
55334 + printk("IEEE80211_PARAM_WPA: Unknown value %d\n", value);
55335 + }
55336 + break;
55337 + case IEEE80211_PARAM_AUTHMODE:
55338 + switch(value) {
55339 + case IEEE80211_AUTH_WPA_PSK:
55340 + if (WPA_AUTH == ar->arAuthMode) {
55341 + ar->arAuthMode = WPA_PSK_AUTH;
55342 + profChanged = TRUE;
55343 + } else if (WPA2_AUTH == ar->arAuthMode) {
55344 + ar->arAuthMode = WPA2_PSK_AUTH;
55345 + profChanged = TRUE;
55346 + } else {
55347 + AR_DEBUG_PRINTF("Error - Setting PSK mode when WPA "\
55348 + "param was set to %d\n",
55349 + ar->arAuthMode);
55350 + ret = -1;
55351 + }
55352 + break;
55353 + case IEEE80211_AUTH_WPA_CCKM:
55354 + if (WPA2_AUTH == ar->arAuthMode) {
55355 + ar->arAuthMode = WPA2_AUTH_CCKM;
55356 + } else {
55357 + ar->arAuthMode = WPA_AUTH_CCKM;
55358 + }
55359 + break;
55360 + default:
55361 + break;
55362 + }
55363 + break;
55364 + case IEEE80211_PARAM_UCASTCIPHER:
55365 + switch (value) {
55366 + case IEEE80211_CIPHER_AES_CCM:
55367 + ar->arPairwiseCrypto = AES_CRYPT;
55368 + profChanged = TRUE;
55369 + break;
55370 + case IEEE80211_CIPHER_TKIP:
55371 + ar->arPairwiseCrypto = TKIP_CRYPT;
55372 + profChanged = TRUE;
55373 + break;
55374 + case IEEE80211_CIPHER_WEP:
55375 + ar->arPairwiseCrypto = WEP_CRYPT;
55376 + profChanged = TRUE;
55377 + break;
55378 + case IEEE80211_CIPHER_NONE:
55379 + ar->arPairwiseCrypto = NONE_CRYPT;
55380 + profChanged = TRUE;
55381 + break;
55382 + }
55383 + break;
55384 + case IEEE80211_PARAM_UCASTKEYLEN:
55385 + if (!IEEE80211_IS_VALID_WEP_CIPHER_LEN(value)) {
55386 + ret = -EIO;
55387 + } else {
55388 + ar->arPairwiseCryptoLen = value;
55389 + }
55390 + break;
55391 + case IEEE80211_PARAM_MCASTCIPHER:
55392 + switch (value) {
55393 + case IEEE80211_CIPHER_AES_CCM:
55394 + ar->arGroupCrypto = AES_CRYPT;
55395 + profChanged = TRUE;
55396 + break;
55397 + case IEEE80211_CIPHER_TKIP:
55398 + ar->arGroupCrypto = TKIP_CRYPT;
55399 + profChanged = TRUE;
55400 + break;
55401 + case IEEE80211_CIPHER_WEP:
55402 + ar->arGroupCrypto = WEP_CRYPT;
55403 + profChanged = TRUE;
55404 + break;
55405 + case IEEE80211_CIPHER_NONE:
55406 + ar->arGroupCrypto = NONE_CRYPT;
55407 + profChanged = TRUE;
55408 + break;
55409 + }
55410 + break;
55411 + case IEEE80211_PARAM_MCASTKEYLEN:
55412 + if (!IEEE80211_IS_VALID_WEP_CIPHER_LEN(value)) {
55413 + ret = -EIO;
55414 + } else {
55415 + ar->arGroupCryptoLen = value;
55416 + }
55417 + break;
55418 + case IEEE80211_PARAM_COUNTERMEASURES:
55419 + if (ar->arWmiReady == FALSE) {
55420 + return -EIO;
55421 + }
55422 + wmi_set_tkip_countermeasures_cmd(ar->arWmi, value);
55423 + break;
55424 + default:
55425 + break;
55426 + }
55427 +
55428 + if (profChanged == TRUE) {
55429 + /*
55430 + * profile has changed. Erase ssid to signal change
55431 + */
55432 + A_MEMZERO(ar->arSsid, sizeof(ar->arSsid));
55433 + ar->arSsidLen = 0;
55434 + }
55435 +
55436 + return ret;
55437 +}
55438 +
55439 +int
55440 +ar6000_ioctl_getparam(struct net_device *dev, struct iw_request_info *info,
55441 + void *w, char *extra)
55442 +{
55443 + return -EIO; /* for now */
55444 +}
55445 +
55446 +int
55447 +ar6000_ioctl_setkey(struct net_device *dev, struct iw_request_info *info,
55448 + void *w, char *extra)
55449 +{
55450 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55451 + struct ieee80211req_key *ik = (struct ieee80211req_key *)extra;
55452 + KEY_USAGE keyUsage;
55453 + A_STATUS status;
55454 + CRYPTO_TYPE keyType = NONE_CRYPT;
55455 +
55456 + if (ar->arWlanState == WLAN_DISABLED) {
55457 + return -EIO;
55458 + }
55459 +
55460 + ar->user_saved_keys.keyOk = FALSE;
55461 +
55462 + if ( 0 == memcmp(ik->ik_macaddr, "\x00\x00\x00\x00\x00\x00",
55463 + IEEE80211_ADDR_LEN)) {
55464 + keyUsage = GROUP_USAGE;
55465 + A_MEMCPY(&ar->user_saved_keys.bcast_ik, ik,
55466 + sizeof(struct ieee80211req_key));
55467 + } else {
55468 + keyUsage = PAIRWISE_USAGE;
55469 + A_MEMCPY(&ar->user_saved_keys.ucast_ik, ik,
55470 + sizeof(struct ieee80211req_key));
55471 + }
55472 +
55473 + switch (ik->ik_type) {
55474 + case IEEE80211_CIPHER_WEP:
55475 + keyType = WEP_CRYPT;
55476 + break;
55477 + case IEEE80211_CIPHER_TKIP:
55478 + keyType = TKIP_CRYPT;
55479 + break;
55480 + case IEEE80211_CIPHER_AES_CCM:
55481 + keyType = AES_CRYPT;
55482 + break;
55483 + default:
55484 + break;
55485 + }
55486 + ar->user_saved_keys.keyType = keyType;
55487 +
55488 + if (IEEE80211_CIPHER_CCKM_KRK != ik->ik_type) {
55489 + if (NONE_CRYPT == keyType) {
55490 + return -EIO;
55491 + }
55492 +
55493 + status = wmi_addKey_cmd(ar->arWmi, ik->ik_keyix, keyType, keyUsage,
55494 + ik->ik_keylen, (A_UINT8 *)&ik->ik_keyrsc,
55495 + ik->ik_keydata, KEY_OP_INIT_VAL,
55496 + SYNC_BEFORE_WMIFLAG);
55497 +
55498 + if (status != A_OK) {
55499 + return -EIO;
55500 + }
55501 + } else {
55502 + status = wmi_add_krk_cmd(ar->arWmi, ik->ik_keydata);
55503 + }
55504 +
55505 + ar->user_saved_keys.keyOk = TRUE;
55506 +
55507 + return 0;
55508 +}
55509 +
55510 +
55511 +/*
55512 + * SIOCGIWNAME
55513 + */
55514 +int
55515 +ar6000_ioctl_giwname(struct net_device *dev,
55516 + struct iw_request_info *info,
55517 + char *name, char *extra)
55518 +{
55519 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55520 +
55521 + if (ar->arWlanState == WLAN_DISABLED) {
55522 + return -EIO;
55523 + }
55524 +
55525 + switch (ar->arPhyCapability) {
55526 + case (WMI_11A_CAPABILITY):
55527 + strncpy(name, "AR6000 802.11a", IFNAMSIZ);
55528 + break;
55529 + case (WMI_11G_CAPABILITY):
55530 + strncpy(name, "AR6000 802.11g", IFNAMSIZ);
55531 + break;
55532 + case (WMI_11AG_CAPABILITY):
55533 + strncpy(name, "AR6000 802.11ag", IFNAMSIZ);
55534 + break;
55535 + default:
55536 + strncpy(name, "AR6000 802.11", IFNAMSIZ);
55537 + break;
55538 + }
55539 +
55540 + return 0;
55541 +}
55542 +
55543 +/*
55544 + * SIOCSIWFREQ
55545 + */
55546 +int
55547 +ar6000_ioctl_siwfreq(struct net_device *dev,
55548 + struct iw_request_info *info,
55549 + struct iw_freq *freq, char *extra)
55550 +{
55551 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55552 +
55553 + if (ar->arWlanState == WLAN_DISABLED) {
55554 + return -EIO;
55555 + }
55556 +
55557 + /*
55558 + * We support limiting the channels via wmiconfig.
55559 + *
55560 + * We use this command to configure the channel hint for the connect cmd
55561 + * so it is possible the target will end up connecting to a different
55562 + * channel.
55563 + */
55564 + if (freq->e > 1) {
55565 + return -EINVAL;
55566 + } else if (freq->e == 1) {
55567 + ar->arChannelHint = freq->m / 100000;
55568 + } else {
55569 + ar->arChannelHint = wlan_ieee2freq(freq->m);
55570 + }
55571 +
55572 + A_PRINTF("channel hint set to %d\n", ar->arChannelHint);
55573 + return 0;
55574 +}
55575 +
55576 +/*
55577 + * SIOCGIWFREQ
55578 + */
55579 +int
55580 +ar6000_ioctl_giwfreq(struct net_device *dev,
55581 + struct iw_request_info *info,
55582 + struct iw_freq *freq, char *extra)
55583 +{
55584 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55585 +
55586 + if (ar->arWlanState == WLAN_DISABLED) {
55587 + return -EIO;
55588 + }
55589 +
55590 + if (ar->arConnected != TRUE) {
55591 + return -EINVAL;
55592 + }
55593 +
55594 + freq->m = ar->arBssChannel * 100000;
55595 + freq->e = 1;
55596 +
55597 + return 0;
55598 +}
55599 +
55600 +/*
55601 + * SIOCSIWMODE
55602 + */
55603 +int
55604 +ar6000_ioctl_siwmode(struct net_device *dev,
55605 + struct iw_request_info *info,
55606 + __u32 *mode, char *extra)
55607 +{
55608 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55609 +
55610 + if (ar->arWlanState == WLAN_DISABLED) {
55611 + return -EIO;
55612 + }
55613 +
55614 + switch (*mode) {
55615 + case IW_MODE_INFRA:
55616 + ar->arNetworkType = INFRA_NETWORK;
55617 + break;
55618 + case IW_MODE_ADHOC:
55619 + ar->arNetworkType = ADHOC_NETWORK;
55620 + break;
55621 + default:
55622 + return -EINVAL;
55623 + }
55624 +
55625 + return 0;
55626 +}
55627 +
55628 +/*
55629 + * SIOCGIWMODE
55630 + */
55631 +int
55632 +ar6000_ioctl_giwmode(struct net_device *dev,
55633 + struct iw_request_info *info,
55634 + __u32 *mode, char *extra)
55635 +{
55636 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55637 +
55638 + if (ar->arWlanState == WLAN_DISABLED) {
55639 + return -EIO;
55640 + }
55641 +
55642 + switch (ar->arNetworkType) {
55643 + case INFRA_NETWORK:
55644 + *mode = IW_MODE_INFRA;
55645 + break;
55646 + case ADHOC_NETWORK:
55647 + *mode = IW_MODE_ADHOC;
55648 + break;
55649 + default:
55650 + return -EIO;
55651 + }
55652 + return 0;
55653 +}
55654 +
55655 +/*
55656 + * SIOCSIWSENS
55657 + */
55658 +int
55659 +ar6000_ioctl_siwsens(struct net_device *dev,
55660 + struct iw_request_info *info,
55661 + struct iw_param *sens, char *extra)
55662 +{
55663 + return 0;
55664 +}
55665 +
55666 +/*
55667 + * SIOCGIWSENS
55668 + */
55669 +int
55670 +ar6000_ioctl_giwsens(struct net_device *dev,
55671 + struct iw_request_info *info,
55672 + struct iw_param *sens, char *extra)
55673 +{
55674 + sens->value = 0;
55675 + sens->fixed = 1;
55676 +
55677 + return 0;
55678 +}
55679 +
55680 +/*
55681 + * SIOCGIWRANGE
55682 + */
55683 +int
55684 +ar6000_ioctl_giwrange(struct net_device *dev,
55685 + struct iw_request_info *info,
55686 + struct iw_point *data, char *extra)
55687 +{
55688 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55689 + struct iw_range *range = (struct iw_range *) extra;
55690 + int i, ret = 0;
55691 +
55692 + if (ar->arWmiReady == FALSE) {
55693 + return -EIO;
55694 + }
55695 +
55696 + if (ar->arWlanState == WLAN_DISABLED) {
55697 + return -EIO;
55698 + }
55699 +
55700 + if (down_interruptible(&ar->arSem)) {
55701 + return -ERESTARTSYS;
55702 + }
55703 + ar->arNumChannels = -1;
55704 + A_MEMZERO(ar->arChannelList, sizeof (ar->arChannelList));
55705 +
55706 + if (wmi_get_channelList_cmd(ar->arWmi) != A_OK) {
55707 + up(&ar->arSem);
55708 + return -EIO;
55709 + }
55710 +
55711 + wait_event_interruptible_timeout(arEvent, ar->arNumChannels != -1, wmitimeout * HZ);
55712 +
55713 + if (signal_pending(current)) {
55714 + up(&ar->arSem);
55715 + return -EINTR;
55716 + }
55717 +
55718 + data->length = sizeof(struct iw_range);
55719 + A_MEMZERO(range, sizeof(struct iw_range));
55720 +
55721 + range->txpower_capa = IW_TXPOW_DBM;
55722 +
55723 + range->min_pmp = 1 * 1024;
55724 + range->max_pmp = 65535 * 1024;
55725 + range->min_pmt = 1 * 1024;
55726 + range->max_pmt = 1000 * 1024;
55727 + range->pmp_flags = IW_POWER_PERIOD;
55728 + range->pmt_flags = IW_POWER_TIMEOUT;
55729 + range->pm_capa = 0;
55730 +
55731 + range->we_version_compiled = WIRELESS_EXT;
55732 + range->we_version_source = 13;
55733 +
55734 + range->retry_capa = IW_RETRY_LIMIT;
55735 + range->retry_flags = IW_RETRY_LIMIT;
55736 + range->min_retry = 0;
55737 + range->max_retry = 255;
55738 +
55739 + range->num_frequency = range->num_channels = ar->arNumChannels;
55740 + for (i = 0; i < ar->arNumChannels; i++) {
55741 + range->freq[i].i = wlan_freq2ieee(ar->arChannelList[i]);
55742 + range->freq[i].m = ar->arChannelList[i] * 100000;
55743 + range->freq[i].e = 1;
55744 + /*
55745 + * Linux supports max of 32 channels, bail out once you
55746 + * reach the max.
55747 + */
55748 + if (i == IW_MAX_FREQUENCIES) {
55749 + break;
55750 + }
55751 + }
55752 +
55753 + /* Max quality is max field value minus noise floor */
55754 + range->max_qual.qual = 0xff - 161;
55755 +
55756 + /*
55757 + * In order to use dBm measurements, 'level' must be lower
55758 + * than any possible measurement (see iw_print_stats() in
55759 + * wireless tools). It's unclear how this is meant to be
55760 + * done, but setting zero in these values forces dBm and
55761 + * the actual numbers are not used.
55762 + */
55763 + range->max_qual.level = 0;
55764 + range->max_qual.noise = 0;
55765 +
55766 + range->sensitivity = 3;
55767 +
55768 + range->max_encoding_tokens = 4;
55769 + /* XXX query driver to find out supported key sizes */
55770 + range->num_encoding_sizes = 3;
55771 + range->encoding_size[0] = 5; /* 40-bit */
55772 + range->encoding_size[1] = 13; /* 104-bit */
55773 + range->encoding_size[2] = 16; /* 128-bit */
55774 +
55775 + range->num_bitrates = 0;
55776 +
55777 + /* estimated maximum TCP throughput values (bps) */
55778 + range->throughput = 22000000;
55779 +
55780 + range->min_rts = 0;
55781 + range->max_rts = 2347;
55782 + range->min_frag = 256;
55783 + range->max_frag = 2346;
55784 +
55785 + up(&ar->arSem);
55786 +
55787 + return ret;
55788 +}
55789 +
55790 +
55791 +/*
55792 + * SIOCSIWAP
55793 + * This ioctl is used to set the desired bssid for the connect command.
55794 + */
55795 +int
55796 +ar6000_ioctl_siwap(struct net_device *dev,
55797 + struct iw_request_info *info,
55798 + struct sockaddr *ap_addr, char *extra)
55799 +{
55800 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55801 +
55802 + if (ar->arWlanState == WLAN_DISABLED) {
55803 + return -EIO;
55804 + }
55805 +
55806 + if (ap_addr->sa_family != ARPHRD_ETHER) {
55807 + return -EIO;
55808 + }
55809 +
55810 + if (A_MEMCMP(&ap_addr->sa_data, bcast_mac, AR6000_ETH_ADDR_LEN) == 0) {
55811 + A_MEMZERO(ar->arReqBssid, sizeof(ar->arReqBssid));
55812 + } else {
55813 + A_MEMCPY(ar->arReqBssid, &ap_addr->sa_data, sizeof(ar->arReqBssid));
55814 + }
55815 +
55816 + return 0;
55817 +}
55818 +
55819 +/*
55820 + * SIOCGIWAP
55821 + */
55822 +int
55823 +ar6000_ioctl_giwap(struct net_device *dev,
55824 + struct iw_request_info *info,
55825 + struct sockaddr *ap_addr, char *extra)
55826 +{
55827 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55828 +
55829 + if (ar->arWlanState == WLAN_DISABLED) {
55830 + return -EIO;
55831 + }
55832 +
55833 + if (ar->arConnected != TRUE) {
55834 + return -EINVAL;
55835 + }
55836 +
55837 + A_MEMCPY(&ap_addr->sa_data, ar->arBssid, sizeof(ar->arBssid));
55838 + ap_addr->sa_family = ARPHRD_ETHER;
55839 +
55840 + return 0;
55841 +}
55842 +
55843 +/*
55844 + * SIOCGIWAPLIST
55845 + */
55846 +int
55847 +ar6000_ioctl_iwaplist(struct net_device *dev,
55848 + struct iw_request_info *info,
55849 + struct iw_point *data, char *extra)
55850 +{
55851 + return -EIO; /* for now */
55852 +}
55853 +
55854 +/*
55855 + * SIOCSIWSCAN
55856 + */
55857 +int
55858 +ar6000_ioctl_siwscan(struct net_device *dev,
55859 + struct iw_request_info *info,
55860 + struct iw_point *data, char *extra)
55861 +{
55862 +#define ACT_DWELLTIME_DEFAULT 105
55863 +#define HOME_TXDRAIN_TIME 100
55864 +#define SCAN_INT HOME_TXDRAIN_TIME + ACT_DWELLTIME_DEFAULT
55865 + AR_SOFTC_T *ar = (AR_SOFTC_T *)dev->priv;
55866 + int ret = 0;
55867 +
55868 + if (ar->arWmiReady == FALSE) {
55869 + return -EIO;
55870 + }
55871 +
55872 + if (ar->arWlanState == WLAN_DISABLED) {
55873 + return -EIO;
55874 + }
55875 +
55876 + /* We ask for everything from the target */
55877 + if (wmi_bssfilter_cmd(ar->arWmi, ALL_BSS_FILTER, 0) != A_OK) {
55878 + printk("Couldn't set filtering\n");
55879 + ret = -EIO;
55880 + }
55881 +
55882 + if (wmi_startscan_cmd(ar->arWmi, WMI_LONG_SCAN, FALSE, FALSE, \
55883 + HOME_TXDRAIN_TIME, SCAN_INT) != A_OK) {
55884 + ret = -EIO;
55885 + }
55886 +
55887 + ar->scan_complete = 0;
55888 + wait_event_interruptible_timeout(ar6000_scan_queue, ar->scan_complete,
55889 + 5 * HZ);
55890 +
55891 + if (wmi_bssfilter_cmd(ar->arWmi, NONE_BSS_FILTER, 0) != A_OK) {
55892 + printk("Couldn't set filtering\n");
55893 + ret = -EIO;
55894 + }
55895 +
55896 + return ret;
55897 +#undef ACT_DWELLTIME_DEFAULT
55898 +#undef HOME_TXDRAIN_TIME
55899 +#undef SCAN_INT
55900 +}
55901 +
55902 +
55903 +/*
55904 + * Units are in db above the noise floor. That means the
55905 + * rssi values reported in the tx/rx descriptors in the
55906 + * driver are the SNR expressed in db.
55907 + *
55908 + * If you assume that the noise floor is -95, which is an
55909 + * excellent assumption 99.5 % of the time, then you can
55910 + * derive the absolute signal level (i.e. -95 + rssi).
55911 + * There are some other slight factors to take into account
55912 + * depending on whether the rssi measurement is from 11b,
55913 + * 11g, or 11a. These differences are at most 2db and
55914 + * can be documented.
55915 + *
55916 + * NB: various calculations are based on the orinoco/wavelan
55917 + * drivers for compatibility
55918 + */
55919 +static void
55920 +ar6000_set_quality(struct iw_quality *iq, A_INT8 rssi)
55921 +{
55922 + if (rssi < 0) {
55923 + iq->qual = 0;
55924 + } else {
55925 + iq->qual = rssi;
55926 + }
55927 +
55928 + /* NB: max is 94 because noise is hardcoded to 161 */
55929 + if (iq->qual > 94)
55930 + iq->qual = 94;
55931 +
55932 + iq->noise = 161; /* -95dBm */
55933 + iq->level = iq->noise + iq->qual;
55934 + iq->updated = 7;
55935 +}
55936 +
55937 +
55938 +/* Structures to export the Wireless Handlers */
55939 +static const iw_handler ath_handlers[] = {
55940 + (iw_handler) NULL, /* SIOCSIWCOMMIT */
55941 + (iw_handler) ar6000_ioctl_giwname, /* SIOCGIWNAME */
55942 + (iw_handler) NULL, /* SIOCSIWNWID */
55943 + (iw_handler) NULL, /* SIOCGIWNWID */
55944 + (iw_handler) ar6000_ioctl_siwfreq, /* SIOCSIWFREQ */
55945 + (iw_handler) ar6000_ioctl_giwfreq, /* SIOCGIWFREQ */
55946 + (iw_handler) ar6000_ioctl_siwmode, /* SIOCSIWMODE */
55947 + (iw_handler) ar6000_ioctl_giwmode, /* SIOCGIWMODE */
55948 + (iw_handler) ar6000_ioctl_siwsens, /* SIOCSIWSENS */
55949 + (iw_handler) ar6000_ioctl_giwsens, /* SIOCGIWSENS */
55950 + (iw_handler) NULL /* not _used */, /* SIOCSIWRANGE */
55951 + (iw_handler) ar6000_ioctl_giwrange, /* SIOCGIWRANGE */
55952 + (iw_handler) NULL /* not used */, /* SIOCSIWPRIV */
55953 + (iw_handler) NULL /* kernel code */, /* SIOCGIWPRIV */
55954 + (iw_handler) NULL /* not used */, /* SIOCSIWSTATS */
55955 + (iw_handler) NULL /* kernel code */, /* SIOCGIWSTATS */
55956 + (iw_handler) NULL, /* SIOCSIWSPY */
55957 + (iw_handler) NULL, /* SIOCGIWSPY */
55958 + (iw_handler) NULL, /* SIOCSIWTHRSPY */
55959 + (iw_handler) NULL, /* SIOCGIWTHRSPY */
55960 + (iw_handler) ar6000_ioctl_siwap, /* SIOCSIWAP */
55961 + (iw_handler) ar6000_ioctl_giwap, /* SIOCGIWAP */
55962 + (iw_handler) NULL, /* -- hole -- */
55963 + (iw_handler) ar6000_ioctl_iwaplist, /* SIOCGIWAPLIST */
55964 + (iw_handler) ar6000_ioctl_siwscan, /* SIOCSIWSCAN */
55965 + (iw_handler) ar6000_ioctl_giwscan, /* SIOCGIWSCAN */
55966 + (iw_handler) ar6000_ioctl_siwessid, /* SIOCSIWESSID */
55967 + (iw_handler) ar6000_ioctl_giwessid, /* SIOCGIWESSID */
55968 + (iw_handler) NULL, /* SIOCSIWNICKN */
55969 + (iw_handler) NULL, /* SIOCGIWNICKN */
55970 + (iw_handler) NULL, /* -- hole -- */
55971 + (iw_handler) NULL, /* -- hole -- */
55972 + (iw_handler) ar6000_ioctl_siwrate, /* SIOCSIWRATE */
55973 + (iw_handler) ar6000_ioctl_giwrate, /* SIOCGIWRATE */
55974 + (iw_handler) NULL, /* SIOCSIWRTS */
55975 + (iw_handler) NULL, /* SIOCGIWRTS */
55976 + (iw_handler) NULL, /* SIOCSIWFRAG */
55977 + (iw_handler) NULL, /* SIOCGIWFRAG */
55978 + (iw_handler) ar6000_ioctl_siwtxpow, /* SIOCSIWTXPOW */
55979 + (iw_handler) ar6000_ioctl_giwtxpow, /* SIOCGIWTXPOW */
55980 + (iw_handler) ar6000_ioctl_siwretry, /* SIOCSIWRETRY */
55981 + (iw_handler) ar6000_ioctl_giwretry, /* SIOCGIWRETRY */
55982 + (iw_handler) ar6000_ioctl_siwencode, /* SIOCSIWENCODE */
55983 + (iw_handler) ar6000_ioctl_giwencode, /* SIOCGIWENCODE */
55984 + (iw_handler) ar6000_ioctl_siwpower, /* SIOCSIWPOWER */
55985 + (iw_handler) ar6000_ioctl_giwpower, /* SIOCGIWPOWER */
55986 + (iw_handler) NULL, /* -- hole -- */
55987 + (iw_handler) NULL, /* -- hole -- */
55988 + (iw_handler) ar6000_ioctl_siwgenie, /* SIOCSIWGENIE */
55989 + (iw_handler) ar6000_ioctl_giwgenie, /* SIOCGIWGENIE */
55990 + (iw_handler) ar6000_ioctl_siwauth, /* SIOCSIWAUTH */
55991 + (iw_handler) ar6000_ioctl_giwauth, /* SIOCGIWAUTH */
55992 + (iw_handler) ar6000_ioctl_siwencodeext,/* SIOCSIWENCODEEXT */
55993 + (iw_handler) ar6000_ioctl_giwencodeext,/* SIOCGIWENCODEEXT */
55994 + (iw_handler) NULL, /* SIOCSIWPMKSA */
55995 +};
55996 +
55997 +static const iw_handler ath_priv_handlers[] = {
55998 + (iw_handler) ar6000_ioctl_setparam, /* SIOCWFIRSTPRIV+0 */
55999 + (iw_handler) ar6000_ioctl_getparam, /* SIOCWFIRSTPRIV+1 */
56000 + (iw_handler) ar6000_ioctl_setkey, /* SIOCWFIRSTPRIV+2 */
56001 + (iw_handler) ar6000_ioctl_setwmmparams, /* SIOCWFIRSTPRIV+3 */
56002 + (iw_handler) ar6000_ioctl_delkey, /* SIOCWFIRSTPRIV+4 */
56003 + (iw_handler) ar6000_ioctl_getwmmparams, /* SIOCWFIRSTPRIV+5 */
56004 + (iw_handler) ar6000_ioctl_setoptie, /* SIOCWFIRSTPRIV+6 */
56005 + (iw_handler) ar6000_ioctl_setmlme, /* SIOCWFIRSTPRIV+7 */
56006 + (iw_handler) ar6000_ioctl_addpmkid, /* SIOCWFIRSTPRIV+8 */
56007 +};
56008 +
56009 +#define IW_PRIV_TYPE_KEY \
56010 + (IW_PRIV_TYPE_BYTE | sizeof(struct ieee80211req_key))
56011 +#define IW_PRIV_TYPE_DELKEY \
56012 + (IW_PRIV_TYPE_BYTE | sizeof(struct ieee80211req_del_key))
56013 +#define IW_PRIV_TYPE_MLME \
56014 + (IW_PRIV_TYPE_BYTE | sizeof(struct ieee80211req_mlme))
56015 +#define IW_PRIV_TYPE_ADDPMKID \
56016 + (IW_PRIV_TYPE_BYTE | sizeof(struct ieee80211req_addpmkid))
56017 +
56018 +static const struct iw_priv_args ar6000_priv_args[] = {
56019 + { IEEE80211_IOCTL_SETKEY,
56020 + IW_PRIV_TYPE_KEY | IW_PRIV_SIZE_FIXED, 0, "setkey"},
56021 + { IEEE80211_IOCTL_DELKEY,
56022 + IW_PRIV_TYPE_DELKEY | IW_PRIV_SIZE_FIXED, 0, "delkey"},
56023 + { IEEE80211_IOCTL_SETPARAM,
56024 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, 0, "setparam"},
56025 + { IEEE80211_IOCTL_GETPARAM,
56026 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
56027 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "getparam"},
56028 + { IEEE80211_IOCTL_SETWMMPARAMS,
56029 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 4, 0, "setwmmparams"},
56030 + { IEEE80211_IOCTL_GETWMMPARAMS,
56031 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 3,
56032 + IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, "getwmmparams"},
56033 + { IEEE80211_IOCTL_SETOPTIE,
56034 + IW_PRIV_TYPE_BYTE, 0, "setie"},
56035 + { IEEE80211_IOCTL_SETMLME,
56036 + IW_PRIV_TYPE_MLME, 0, "setmlme"},
56037 + { IEEE80211_IOCTL_ADDPMKID,
56038 + IW_PRIV_TYPE_ADDPMKID | IW_PRIV_SIZE_FIXED, 0, "addpmkid"},
56039 +};
56040 +
56041 +void ar6000_ioctl_iwsetup(struct iw_handler_def *def)
56042 +{
56043 + def->private_args = (struct iw_priv_args *)ar6000_priv_args;
56044 + def->num_private_args = ARRAY_SIZE(ar6000_priv_args);
56045 +}
56046 +
56047 +struct iw_handler_def ath_iw_handler_def = {
56048 + .standard = (iw_handler *)ath_handlers,
56049 + .num_standard = ARRAY_SIZE(ath_handlers),
56050 + .private = (iw_handler *)ath_priv_handlers,
56051 + .num_private = ARRAY_SIZE(ath_priv_handlers),
56052 +};
56053 +
56054 +
56055 Index: linux-2.6.28/drivers/ar6000/bmi/bmi.c
56056 ===================================================================
56057 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
56058 +++ linux-2.6.28/drivers/ar6000/bmi/bmi.c 2009-01-02 00:01:56.000000000 +0100
56059 @@ -0,0 +1,657 @@
56060 +/*
56061 + * Copyright (c) 2004-2007 Atheros Communications Inc.
56062 + * All rights reserved.
56063 + *
56064 + *
56065 + * This program is free software; you can redistribute it and/or modify
56066 + * it under the terms of the GNU General Public License version 2 as
56067 + * published by the Free Software Foundation;
56068 + *
56069 + * Software distributed under the License is distributed on an "AS
56070 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
56071 + * implied. See the License for the specific language governing
56072 + * rights and limitations under the License.
56073 + *
56074 + *
56075 + *
56076 + */
56077 +
56078 +#include "hif.h"
56079 +#include "bmi.h"
56080 +#include "htc_api.h"
56081 +#include "bmi_internal.h"
56082 +
56083 +/*
56084 +Although we had envisioned BMI to run on top of HTC, this is not what the
56085 +final implementation boiled down to on dragon. Its a part of BSP and does
56086 +not use the HTC protocol either. On the host side, however, we were still
56087 +living with the original idea. I think the time has come to accept the truth
56088 +and separate it from HTC which has been carrying BMI's burden all this while.
56089 +It shall make HTC state machine relatively simpler
56090 +*/
56091 +
56092 +/* APIs visible to the driver */
56093 +void
56094 +BMIInit(void)
56095 +{
56096 + bmiDone = FALSE;
56097 +}
56098 +
56099 +A_STATUS
56100 +BMIDone(HIF_DEVICE *device)
56101 +{
56102 + A_STATUS status;
56103 + A_UINT32 cid;
56104 +
56105 + if (bmiDone) {
56106 + AR_DEBUG_PRINTF (ATH_DEBUG_BMI, ("BMIDone skipped\n"));
56107 + return A_OK;
56108 + }
56109 +
56110 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Done: Enter (device: 0x%p)\n", device));
56111 + bmiDone = TRUE;
56112 + cid = BMI_DONE;
56113 +
56114 + status = bmiBufferSend(device, (A_UCHAR *)&cid, sizeof(cid));
56115 + if (status != A_OK) {
56116 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56117 + return A_ERROR;
56118 + }
56119 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Done: Exit\n"));
56120 +
56121 + return A_OK;
56122 +}
56123 +
56124 +A_STATUS
56125 +BMIGetTargetInfo(HIF_DEVICE *device, struct bmi_target_info *targ_info)
56126 +{
56127 + A_STATUS status;
56128 + A_UINT32 cid;
56129 +
56130 + if (bmiDone) {
56131 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56132 + return A_ERROR;
56133 + }
56134 +
56135 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Get Target Info: Enter (device: 0x%p)\n", device));
56136 + cid = BMI_GET_TARGET_INFO;
56137 +
56138 + status = bmiBufferSend(device, (A_UCHAR *)&cid, sizeof(cid));
56139 + if (status != A_OK) {
56140 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56141 + return A_ERROR;
56142 + }
56143 +
56144 + status = bmiBufferReceive(device, (A_UCHAR *)&targ_info->target_ver,
56145 + sizeof(targ_info->target_ver));
56146 + if (status != A_OK) {
56147 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read Target Version from the device\n"));
56148 + return A_ERROR;
56149 + }
56150 +
56151 + if (targ_info->target_ver == TARGET_VERSION_SENTINAL) {
56152 + /* Determine how many bytes are in the Target's targ_info */
56153 + status = bmiBufferReceive(device, (A_UCHAR *)&targ_info->target_info_byte_count,
56154 + sizeof(targ_info->target_info_byte_count));
56155 + if (status != A_OK) {
56156 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read Target Info Byte Count from the device\n"));
56157 + return A_ERROR;
56158 + }
56159 +
56160 + /*
56161 + * The Target's targ_info doesn't match the Host's targ_info.
56162 + * We need to do some backwards compatibility work to make this OK.
56163 + */
56164 + A_ASSERT(targ_info->target_info_byte_count == sizeof(*targ_info));
56165 +
56166 + /* Read the remainder of the targ_info */
56167 + status = bmiBufferReceive(device,
56168 + ((A_UCHAR *)targ_info)+sizeof(targ_info->target_info_byte_count),
56169 + sizeof(*targ_info)-sizeof(targ_info->target_info_byte_count));
56170 + if (status != A_OK) {
56171 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read Target Info (%d bytes) from the device\n",
56172 + targ_info->target_info_byte_count));
56173 + return A_ERROR;
56174 + }
56175 + } else {
56176 + /*
56177 + * Target must be an AR6001 whose firmware does not
56178 + * support BMI_GET_TARGET_INFO. Construct the data
56179 + * that it would have sent.
56180 + */
56181 + targ_info->target_info_byte_count = sizeof(targ_info);
56182 + targ_info->target_type = TARGET_TYPE_AR6001;
56183 + }
56184 +
56185 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Get Target Info: Exit (ver: 0x%x type: 0x%x)\n",
56186 + targ_info->target_ver, targ_info->target_type));
56187 + printk("BMI Get Target Info: Exit (ver: 0x%x type: 0x%x)\n",
56188 + targ_info->target_ver, targ_info->target_type);
56189 +
56190 + return A_OK;
56191 +}
56192 +
56193 +A_STATUS
56194 +BMIReadMemory(HIF_DEVICE *device,
56195 + A_UINT32 address,
56196 + A_UCHAR *buffer,
56197 + A_UINT32 length)
56198 +{
56199 + A_UINT32 cid;
56200 + A_STATUS status;
56201 + A_UINT32 offset;
56202 + A_UINT32 remaining, rxlen;
56203 + static A_UCHAR data[BMI_DATASZ_MAX + sizeof(cid) + sizeof(address) + sizeof(length)];
56204 + memset (&data, 0, BMI_DATASZ_MAX + sizeof(cid) + sizeof(address) + sizeof(length));
56205 +
56206 + if (bmiDone) {
56207 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56208 + return A_ERROR;
56209 + }
56210 +
56211 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56212 + ("BMI Read Memory: Enter (device: 0x%p, address: 0x%x, length: %d)\n",
56213 + device, address, length));
56214 +
56215 + cid = BMI_READ_MEMORY;
56216 +
56217 + remaining = length;
56218 +
56219 + while (remaining)
56220 + {
56221 + rxlen = (remaining < BMI_DATASZ_MAX) ? remaining : BMI_DATASZ_MAX;
56222 + offset = 0;
56223 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56224 + offset += sizeof(cid);
56225 + A_MEMCPY(&data[offset], &address, sizeof(address));
56226 + offset += sizeof(address);
56227 + A_MEMCPY(&data[offset], &rxlen, sizeof(rxlen));
56228 + offset += sizeof(length);
56229 +
56230 + status = bmiBufferSend(device, data, offset);
56231 + if (status != A_OK) {
56232 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56233 + return A_ERROR;
56234 + }
56235 + status = bmiBufferReceive(device, data, rxlen);
56236 + if (status != A_OK) {
56237 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read from the device\n"));
56238 + return A_ERROR;
56239 + }
56240 + A_MEMCPY(&buffer[length - remaining], data, rxlen);
56241 + remaining -= rxlen; address += rxlen;
56242 + }
56243 +
56244 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Read Memory: Exit\n"));
56245 + return A_OK;
56246 +}
56247 +
56248 +A_STATUS
56249 +BMIWriteMemory(HIF_DEVICE *device,
56250 + A_UINT32 address,
56251 + A_UCHAR *buffer,
56252 + A_UINT32 length)
56253 +{
56254 + A_UINT32 cid;
56255 + A_STATUS status;
56256 + A_UINT32 offset;
56257 + A_UINT32 remaining, txlen;
56258 + const A_UINT32 header = sizeof(cid) + sizeof(address) + sizeof(length);
56259 + static A_UCHAR data[BMI_DATASZ_MAX + sizeof(cid) + sizeof(address) + sizeof(length)];
56260 + memset (&data, 0, header);
56261 +
56262 + if (bmiDone) {
56263 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56264 + return A_ERROR;
56265 + }
56266 +
56267 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56268 + ("BMI Write Memory: Enter (device: 0x%p, address: 0x%x, length: %d)\n",
56269 + device, address, length));
56270 +
56271 + cid = BMI_WRITE_MEMORY;
56272 +
56273 + remaining = length;
56274 + while (remaining)
56275 + {
56276 + txlen = (remaining < (BMI_DATASZ_MAX - header)) ?
56277 + remaining : (BMI_DATASZ_MAX - header);
56278 + offset = 0;
56279 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56280 + offset += sizeof(cid);
56281 + A_MEMCPY(&data[offset], &address, sizeof(address));
56282 + offset += sizeof(address);
56283 + A_MEMCPY(&data[offset], &txlen, sizeof(txlen));
56284 + offset += sizeof(txlen);
56285 + A_MEMCPY(&data[offset], &buffer[length - remaining], txlen);
56286 + offset += txlen;
56287 + status = bmiBufferSend(device, data, offset);
56288 + if (status != A_OK) {
56289 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56290 + return A_ERROR;
56291 + }
56292 + remaining -= txlen; address += txlen;
56293 + }
56294 +
56295 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Write Memory: Exit\n"));
56296 +
56297 + return A_OK;
56298 +}
56299 +
56300 +A_STATUS
56301 +BMIExecute(HIF_DEVICE *device,
56302 + A_UINT32 address,
56303 + A_UINT32 *param)
56304 +{
56305 + A_UINT32 cid;
56306 + A_STATUS status;
56307 + A_UINT32 offset;
56308 + static A_UCHAR data[sizeof(cid) + sizeof(address) + sizeof(*param)];
56309 + memset (&data, 0, sizeof(cid) + sizeof(address) + sizeof(*param));
56310 +
56311 + if (bmiDone) {
56312 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56313 + return A_ERROR;
56314 + }
56315 +
56316 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56317 + ("BMI Execute: Enter (device: 0x%p, address: 0x%x, param: %d)\n",
56318 + device, address, *param));
56319 +
56320 + cid = BMI_EXECUTE;
56321 +
56322 + offset = 0;
56323 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56324 + offset += sizeof(cid);
56325 + A_MEMCPY(&data[offset], &address, sizeof(address));
56326 + offset += sizeof(address);
56327 + A_MEMCPY(&data[offset], param, sizeof(*param));
56328 + offset += sizeof(*param);
56329 + status = bmiBufferSend(device, data, offset);
56330 + if (status != A_OK) {
56331 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56332 + return A_ERROR;
56333 + }
56334 +
56335 + status = bmiBufferReceive(device, data, sizeof(*param));
56336 + if (status != A_OK) {
56337 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read from the device\n"));
56338 + return A_ERROR;
56339 + }
56340 +
56341 + A_MEMCPY(param, data, sizeof(*param));
56342 +
56343 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Execute: Exit (param: %d)\n", *param));
56344 + return A_OK;
56345 +}
56346 +
56347 +A_STATUS
56348 +BMISetAppStart(HIF_DEVICE *device,
56349 + A_UINT32 address)
56350 +{
56351 + A_UINT32 cid;
56352 + A_STATUS status;
56353 + A_UINT32 offset;
56354 + static A_UCHAR data[sizeof(cid) + sizeof(address)];
56355 + memset (&data, 0, sizeof(cid) + sizeof(address));
56356 +
56357 + if (bmiDone) {
56358 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56359 + return A_ERROR;
56360 + }
56361 +
56362 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56363 + ("BMI Set App Start: Enter (device: 0x%p, address: 0x%x)\n",
56364 + device, address));
56365 +
56366 + cid = BMI_SET_APP_START;
56367 +
56368 + offset = 0;
56369 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56370 + offset += sizeof(cid);
56371 + A_MEMCPY(&data[offset], &address, sizeof(address));
56372 + offset += sizeof(address);
56373 + status = bmiBufferSend(device, data, offset);
56374 + if (status != A_OK) {
56375 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56376 + return A_ERROR;
56377 + }
56378 +
56379 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Set App Start: Exit\n"));
56380 + return A_OK;
56381 +}
56382 +
56383 +A_STATUS
56384 +BMIReadSOCRegister(HIF_DEVICE *device,
56385 + A_UINT32 address,
56386 + A_UINT32 *param)
56387 +{
56388 + A_UINT32 cid;
56389 + A_STATUS status;
56390 + A_UINT32 offset;
56391 + static A_UCHAR data[sizeof(cid) + sizeof(address)];
56392 + memset (&data, 0, sizeof(cid) + sizeof(address));
56393 +
56394 + if (bmiDone) {
56395 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56396 + return A_ERROR;
56397 + }
56398 +
56399 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56400 + ("BMI Read SOC Register: Enter (device: 0x%p, address: 0x%x)\n",
56401 + device, address));
56402 +
56403 + cid = BMI_READ_SOC_REGISTER;
56404 +
56405 + offset = 0;
56406 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56407 + offset += sizeof(cid);
56408 + A_MEMCPY(&data[offset], &address, sizeof(address));
56409 + offset += sizeof(address);
56410 +
56411 + status = bmiBufferSend(device, data, offset);
56412 + if (status != A_OK) {
56413 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56414 + return A_ERROR;
56415 + }
56416 +
56417 + status = bmiBufferReceive(device, data, sizeof(*param));
56418 + if (status != A_OK) {
56419 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read from the device\n"));
56420 + return A_ERROR;
56421 + }
56422 + A_MEMCPY(param, data, sizeof(*param));
56423 +
56424 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Read SOC Register: Exit (value: %d)\n", *param));
56425 + return A_OK;
56426 +}
56427 +
56428 +A_STATUS
56429 +BMIWriteSOCRegister(HIF_DEVICE *device,
56430 + A_UINT32 address,
56431 + A_UINT32 param)
56432 +{
56433 + A_UINT32 cid;
56434 + A_STATUS status;
56435 + A_UINT32 offset;
56436 + static A_UCHAR data[sizeof(cid) + sizeof(address) + sizeof(param)];
56437 +
56438 + memset (&data, 0, sizeof(cid) + sizeof(address) + sizeof(param));
56439 +
56440 + if (bmiDone) {
56441 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56442 + return A_ERROR;
56443 + }
56444 +
56445 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56446 + ("BMI Write SOC Register: Enter (device: 0x%p, address: 0x%x, param: %d)\n",
56447 + device, address, param));
56448 +
56449 + cid = BMI_WRITE_SOC_REGISTER;
56450 +
56451 + offset = 0;
56452 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56453 + offset += sizeof(cid);
56454 + A_MEMCPY(&data[offset], &address, sizeof(address));
56455 + offset += sizeof(address);
56456 + A_MEMCPY(&data[offset], &param, sizeof(param));
56457 + offset += sizeof(param);
56458 + status = bmiBufferSend(device, data, offset);
56459 + if (status != A_OK) {
56460 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56461 + return A_ERROR;
56462 + }
56463 +
56464 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Read SOC Register: Exit\n"));
56465 + return A_OK;
56466 +}
56467 +
56468 +A_STATUS
56469 +BMIrompatchInstall(HIF_DEVICE *device,
56470 + A_UINT32 ROM_addr,
56471 + A_UINT32 RAM_addr,
56472 + A_UINT32 nbytes,
56473 + A_UINT32 do_activate,
56474 + A_UINT32 *rompatch_id)
56475 +{
56476 + A_UINT32 cid;
56477 + A_STATUS status;
56478 + A_UINT32 offset;
56479 + static A_UCHAR data[sizeof(cid) + sizeof(ROM_addr) + sizeof(RAM_addr) +
56480 + sizeof(nbytes) + sizeof(do_activate)];
56481 +
56482 + memset (&data, 0, sizeof(cid) + sizeof(ROM_addr) + sizeof(RAM_addr) +
56483 + sizeof(nbytes) + sizeof(do_activate));
56484 +
56485 + if (bmiDone) {
56486 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56487 + return A_ERROR;
56488 + }
56489 +
56490 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56491 + ("BMI rompatch Install: Enter (device: 0x%p, ROMaddr: 0x%x, RAMaddr: 0x%x length: %d activate: %d)\n",
56492 + device, ROM_addr, RAM_addr, nbytes, do_activate));
56493 +
56494 + cid = BMI_ROMPATCH_INSTALL;
56495 +
56496 + offset = 0;
56497 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56498 + offset += sizeof(cid);
56499 + A_MEMCPY(&data[offset], &ROM_addr, sizeof(ROM_addr));
56500 + offset += sizeof(ROM_addr);
56501 + A_MEMCPY(&data[offset], &RAM_addr, sizeof(RAM_addr));
56502 + offset += sizeof(RAM_addr);
56503 + A_MEMCPY(&data[offset], &nbytes, sizeof(nbytes));
56504 + offset += sizeof(nbytes);
56505 + A_MEMCPY(&data[offset], &do_activate, sizeof(do_activate));
56506 + offset += sizeof(do_activate);
56507 + status = bmiBufferSend(device, data, offset);
56508 + if (status != A_OK) {
56509 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56510 + return A_ERROR;
56511 + }
56512 +
56513 + status = bmiBufferReceive(device, (A_UCHAR *)rompatch_id, sizeof(*rompatch_id));
56514 + if (status != A_OK) {
56515 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read from the device\n"));
56516 + return A_ERROR;
56517 + }
56518 +
56519 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI rompatch Install: (rompatch_id=%d)\n", *rompatch_id));
56520 + return A_OK;
56521 +}
56522 +
56523 +A_STATUS
56524 +BMIrompatchUninstall(HIF_DEVICE *device,
56525 + A_UINT32 rompatch_id)
56526 +{
56527 + A_UINT32 cid;
56528 + A_STATUS status;
56529 + A_UINT32 offset;
56530 + static A_UCHAR data[sizeof(cid) + sizeof(rompatch_id)];
56531 + memset (&data, 0, sizeof(cid) + sizeof(rompatch_id));
56532 +
56533 + if (bmiDone) {
56534 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56535 + return A_ERROR;
56536 + }
56537 +
56538 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56539 + ("BMI rompatch Uninstall: Enter (device: 0x%p, rompatch_id: %d)\n",
56540 + device, rompatch_id));
56541 +
56542 + cid = BMI_ROMPATCH_UNINSTALL;
56543 +
56544 + offset = 0;
56545 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56546 + offset += sizeof(cid);
56547 + A_MEMCPY(&data[offset], &rompatch_id, sizeof(rompatch_id));
56548 + offset += sizeof(rompatch_id);
56549 + status = bmiBufferSend(device, data, offset);
56550 + if (status != A_OK) {
56551 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56552 + return A_ERROR;
56553 + }
56554 +
56555 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI rompatch UNinstall: (rompatch_id=0x%x)\n", rompatch_id));
56556 + return A_OK;
56557 +}
56558 +
56559 +static A_STATUS
56560 +_BMIrompatchChangeActivation(HIF_DEVICE *device,
56561 + A_UINT32 rompatch_count,
56562 + A_UINT32 *rompatch_list,
56563 + A_UINT32 do_activate)
56564 +{
56565 + A_UINT32 cid;
56566 + A_STATUS status;
56567 + A_UINT32 offset;
56568 + static A_UCHAR data[BMI_DATASZ_MAX + sizeof(cid) + sizeof(rompatch_count)];
56569 + A_UINT32 length;
56570 +
56571 + memset (&data, 0, BMI_DATASZ_MAX + sizeof(cid) + sizeof(rompatch_count));
56572 +
56573 + if (bmiDone) {
56574 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Command disallowed\n"));
56575 + return A_ERROR;
56576 + }
56577 +
56578 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI,
56579 + ("BMI Change rompatch Activation: Enter (device: 0x%p, count: %d)\n",
56580 + device, rompatch_count));
56581 +
56582 + cid = do_activate ? BMI_ROMPATCH_ACTIVATE : BMI_ROMPATCH_DEACTIVATE;
56583 +
56584 + offset = 0;
56585 + A_MEMCPY(&data[offset], &cid, sizeof(cid));
56586 + offset += sizeof(cid);
56587 + A_MEMCPY(&data[offset], &rompatch_count, sizeof(rompatch_count));
56588 + offset += sizeof(rompatch_count);
56589 + length = rompatch_count * sizeof(*rompatch_list);
56590 + A_MEMCPY(&data[offset], rompatch_list, length);
56591 + offset += length;
56592 + status = bmiBufferSend(device, data, offset);
56593 + if (status != A_OK) {
56594 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to write to the device\n"));
56595 + return A_ERROR;
56596 + }
56597 +
56598 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Change rompatch Activation: Exit\n"));
56599 +
56600 + return A_OK;
56601 +}
56602 +
56603 +A_STATUS
56604 +BMIrompatchActivate(HIF_DEVICE *device,
56605 + A_UINT32 rompatch_count,
56606 + A_UINT32 *rompatch_list)
56607 +{
56608 + return _BMIrompatchChangeActivation(device, rompatch_count, rompatch_list, 1);
56609 +}
56610 +
56611 +A_STATUS
56612 +BMIrompatchDeactivate(HIF_DEVICE *device,
56613 + A_UINT32 rompatch_count,
56614 + A_UINT32 *rompatch_list)
56615 +{
56616 + return _BMIrompatchChangeActivation(device, rompatch_count, rompatch_list, 0);
56617 +}
56618 +
56619 +/* BMI Access routines */
56620 +A_STATUS
56621 +bmiBufferSend(HIF_DEVICE *device,
56622 + A_UCHAR *buffer,
56623 + A_UINT32 length)
56624 +{
56625 + A_STATUS status;
56626 + A_UINT32 timeout;
56627 + A_UINT32 address;
56628 + static A_UINT32 cmdCredits;
56629 + A_UINT32 mboxAddress[HTC_MAILBOX_NUM_MAX];
56630 +
56631 + HIFConfigureDevice(device, HIF_DEVICE_GET_MBOX_ADDR,
56632 + &mboxAddress, sizeof(mboxAddress));
56633 +
56634 + cmdCredits = 0;
56635 + timeout = BMI_COMMUNICATION_TIMEOUT;
56636 +
56637 + while(timeout-- && !cmdCredits) {
56638 + /* Read the counter register to get the command credits */
56639 + address = COUNT_DEC_ADDRESS + (HTC_MAILBOX_NUM_MAX + ENDPOINT1) * 4;
56640 + /* hit the credit counter with a 4-byte access, the first byte read will hit the counter and cause
56641 + * a decrement, while the remaining 3 bytes has no effect. The rationale behind this is to
56642 + * make all HIF accesses 4-byte aligned */
56643 + status = HIFReadWrite(device, address, (A_UINT8 *)&cmdCredits, 4,
56644 + HIF_RD_SYNC_BYTE_INC, NULL);
56645 + if (status != A_OK) {
56646 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to decrement the command credit count register\n"));
56647 + return A_ERROR;
56648 + }
56649 + /* the counter is only 8=bits, ignore anything in the upper 3 bytes */
56650 + cmdCredits &= 0xFF;
56651 + }
56652 +
56653 + if (cmdCredits) {
56654 + address = mboxAddress[ENDPOINT1];
56655 + status = HIFReadWrite(device, address, buffer, length,
56656 + HIF_WR_SYNC_BYTE_INC, NULL);
56657 + if (status != A_OK) {
56658 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to send the BMI data to the device\n"));
56659 + return A_ERROR;
56660 + }
56661 + } else {
56662 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("BMI Communication timeout\n"));
56663 + return A_ERROR;
56664 + }
56665 +
56666 + return status;
56667 +}
56668 +
56669 +A_STATUS
56670 +bmiBufferReceive(HIF_DEVICE *device,
56671 + A_UCHAR *buffer,
56672 + A_UINT32 length)
56673 +{
56674 + A_STATUS status;
56675 + A_UINT32 address;
56676 + A_UINT32 timeout;
56677 + static A_UINT32 cmdCredits;
56678 + A_UINT32 mboxAddress[HTC_MAILBOX_NUM_MAX];
56679 +
56680 + HIFConfigureDevice(device, HIF_DEVICE_GET_MBOX_ADDR,
56681 + &mboxAddress, sizeof(mboxAddress));
56682 +
56683 + cmdCredits = 0;
56684 + timeout = BMI_COMMUNICATION_TIMEOUT;
56685 + while(timeout-- && !cmdCredits) {
56686 + /* Read the counter register to get the command credits */
56687 + address = COUNT_ADDRESS + (HTC_MAILBOX_NUM_MAX + ENDPOINT1) * 1;
56688 + /* read the counter using a 4-byte read. Since the counter is NOT auto-decrementing,
56689 + * we can read this counter multiple times using a non-incrementing address mode.
56690 + * The rationale here is to make all HIF accesses a multiple of 4 bytes */
56691 + status = HIFReadWrite(device, address, (A_UINT8 *)&cmdCredits, sizeof(cmdCredits),
56692 + HIF_RD_SYNC_BYTE_FIX, NULL);
56693 + if (status != A_OK) {
56694 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read the command credit count register\n"));
56695 + return A_ERROR;
56696 + }
56697 + /* we did a 4-byte read to the same count register so mask off upper bytes */
56698 + cmdCredits &= 0xFF;
56699 + status = A_ERROR;
56700 + }
56701 +
56702 + if (cmdCredits) {
56703 + address = mboxAddress[ENDPOINT1];
56704 + status = HIFReadWrite(device, address, buffer, length,
56705 + HIF_RD_SYNC_BYTE_INC, NULL);
56706 + if (status != A_OK) {
56707 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to read the BMI data from the device\n"));
56708 + return A_ERROR;
56709 + }
56710 + } else {
56711 + AR_DEBUG_PRINTF(ATH_DEBUG_BMI, ("BMI Communication timeout\n"));
56712 + return A_ERROR;
56713 + }
56714 +
56715 + return status;
56716 +}
56717 Index: linux-2.6.28/drivers/ar6000/bmi/bmi_internal.h
56718 ===================================================================
56719 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
56720 +++ linux-2.6.28/drivers/ar6000/bmi/bmi_internal.h 2009-01-02 00:01:56.000000000 +0100
56721 @@ -0,0 +1,45 @@
56722 +#ifndef BMI_INTERNAL_H
56723 +#define BMI_INTERNAL_H
56724 +/*
56725 + *
56726 + * Copyright (c) 2004-2007 Atheros Communications Inc.
56727 + * All rights reserved.
56728 + *
56729 + *
56730 + * This program is free software; you can redistribute it and/or modify
56731 + * it under the terms of the GNU General Public License version 2 as
56732 + * published by the Free Software Foundation;
56733 + *
56734 + * Software distributed under the License is distributed on an "AS
56735 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
56736 + * implied. See the License for the specific language governing
56737 + * rights and limitations under the License.
56738 + *
56739 + *
56740 + *
56741 + */
56742 +
56743 +#include "a_config.h"
56744 +#include "athdefs.h"
56745 +#include "a_types.h"
56746 +#include "a_osapi.h"
56747 +#include "a_debug.h"
56748 +#include "AR6Khwreg.h"
56749 +#include "bmi_msg.h"
56750 +
56751 +#define BMI_COMMUNICATION_TIMEOUT 100000
56752 +
56753 +/* ------ Global Variable Declarations ------- */
56754 +A_BOOL bmiDone;
56755 +
56756 +A_STATUS
56757 +bmiBufferSend(HIF_DEVICE *device,
56758 + A_UCHAR *buffer,
56759 + A_UINT32 length);
56760 +
56761 +A_STATUS
56762 +bmiBufferReceive(HIF_DEVICE *device,
56763 + A_UCHAR *buffer,
56764 + A_UINT32 length);
56765 +
56766 +#endif
56767 Index: linux-2.6.28/drivers/ar6000/hif/hif2.c
56768 ===================================================================
56769 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
56770 +++ linux-2.6.28/drivers/ar6000/hif/hif2.c 2009-01-02 00:01:56.000000000 +0100
56771 @@ -0,0 +1,646 @@
56772 +/*
56773 + * hif2.c - HIF layer re-implementation for the Linux SDIO stack
56774 + *
56775 + * Copyright (C) 2008 by OpenMoko, Inc.
56776 + * Written by Werner Almesberger <werner@openmoko.org>
56777 + * All Rights Reserved
56778 + *
56779 + * This program is free software; you can redistribute it and/or modify
56780 + * it under the terms of the GNU General Public License version 2 as
56781 + * published by the Free Software Foundation;
56782 + *
56783 + * Based on:
56784 + *
56785 + * @abstract: HIF layer reference implementation for Atheros SDIO stack
56786 + * @notice: Copyright (c) 2004-2006 Atheros Communications Inc.
56787 + */
56788 +
56789 +
56790 +#include <linux/kernel.h>
56791 +#include <linux/kthread.h>
56792 +#include <linux/list.h>
56793 +#include <linux/wait.h>
56794 +#include <linux/spinlock.h>
56795 +#include <linux/sched.h>
56796 +#include <linux/mmc/sdio_func.h>
56797 +#include <linux/mmc/sdio.h>
56798 +#include <linux/mmc/sdio_ids.h>
56799 +#include <asm/gpio.h>
56800 +
56801 +#include "athdefs.h"
56802 +#include "a_types.h"
56803 +#include "hif.h"
56804 +
56805 +
56806 +/*
56807 + * KNOWN BUGS:
56808 + *
56809 + * - HIF_DEVICE_IRQ_ASYNC_SYNC doesn't work yet (gets MMC errors)
56810 + * - latency can reach hundreds of ms, probably because of scheduling delays
56811 + * - packets go through about three queues before finally hitting the network
56812 + */
56813 +
56814 +/*
56815 + * Differences from Atheros' HIFs:
56816 + *
56817 + * - synchronous and asynchronous requests may get reordered with respect to
56818 + * each other, e.g., if HIFReadWrite returns for an asynchronous request and
56819 + * then HIFReadWrite is called for a synchronous request, the synchronous
56820 + * request may be executed before the asynchronous request.
56821 + *
56822 + * - request queue locking seems unnecessarily complex in the Atheros HIFs.
56823 + *
56824 + * - Atheros mask interrupts by calling sdio_claim_irq/sdio_release_irq, which
56825 + * can cause quite a bit of overhead. This HIF has its own light-weight
56826 + * interrupt masking.
56827 + *
56828 + * - Atheros call deviceInsertedHandler from a thread spawned off the probe or
56829 + * device insertion function. The original explanation for the Atheros SDIO
56830 + * stack said that this is done because a delay is needed to let the chip
56831 + * complete initialization. There is indeed a one second delay in the thread.
56832 + *
56833 + * The Atheros Linux SDIO HIF removes the delay and only retains the thread.
56834 + * Experimentally removing the thread didn't show any conflicts, so let's get
56835 + * rid of it for good.
56836 + *
56837 + * - The Atheros SDIO stack with Samuel's driver sets SDIO_CCCR_POWER in
56838 + * SDIO_POWER_EMPC. Atheros' Linux SDIO code apparently doesn't. We don't
56839 + * either, and this seems to work fine.
56840 + * @@@ Need to check this with Atheros.
56841 + */
56842 +
56843 +
56844 +#define MBOXES 4
56845 +
56846 +#define HIF_MBOX_BLOCK_SIZE 128
56847 +#define HIF_MBOX_BASE_ADDR 0x800
56848 +#define HIF_MBOX_WIDTH 0x800
56849 +#define HIF_MBOX_START_ADDR(mbox) \
56850 + (HIF_MBOX_BASE_ADDR+(mbox)*HIF_MBOX_WIDTH)
56851 +
56852 +
56853 +struct hif_device {
56854 + void *htc_handle;
56855 + struct sdio_func *func;
56856 +
56857 + /*
56858 + * @@@ our sweet little bit of bogosity - the mechanism that lets us
56859 + * use the SDIO stack from softirqs. This really wants to use skbs.
56860 + */
56861 + struct list_head queue;
56862 + spinlock_t queue_lock;
56863 + struct task_struct *io_task;
56864 + wait_queue_head_t wait;
56865 +};
56866 +
56867 +struct hif_request {
56868 + struct list_head list;
56869 + struct sdio_func *func;
56870 + int (*read)(struct sdio_func *func,
56871 + void *dst, unsigned int addr, int count);
56872 + int (*write)(struct sdio_func *func,
56873 + unsigned int addr, void *src, int count);
56874 + void *buf;
56875 + unsigned long addr;
56876 + int len;
56877 + A_STATUS (*completion)(void *context, A_STATUS status);
56878 + void *context;
56879 +};
56880 +
56881 +
56882 +static HTC_CALLBACKS htcCallbacks;
56883 +
56884 +/*
56885 + * shutdown_lock prevents recursion through HIFShutDownDevice
56886 + */
56887 +static DEFINE_MUTEX(shutdown_lock);
56888 +
56889 +
56890 +/* ----- Request processing ------------------------------------------------ */
56891 +
56892 +
56893 +static A_STATUS process_request(struct hif_request *req)
56894 +{
56895 + int ret;
56896 + A_STATUS status;
56897 +
56898 + dev_dbg(&req->func->dev, "process_request(req %p)\n", req);
56899 + sdio_claim_host(req->func);
56900 + if (req->read)
56901 + ret = req->read(req->func, req->buf, req->addr, req->len);
56902 + else
56903 + ret = req->write(req->func, req->addr, req->buf, req->len);
56904 + sdio_release_host(req->func);
56905 + status = ret ? A_ERROR : A_OK;
56906 + if (req->completion)
56907 + req->completion(req->context, status);
56908 + kfree(req);
56909 + return status;
56910 +}
56911 +
56912 +
56913 +static void enqueue_request(struct hif_device *hif, struct hif_request *req)
56914 +{
56915 + unsigned long flags;
56916 +
56917 + dev_dbg(&req->func->dev, "enqueue_request(req %p)\n", req);
56918 + spin_lock_irqsave(&hif->queue_lock, flags);
56919 + list_add_tail(&req->list, &hif->queue);
56920 + spin_unlock_irqrestore(&hif->queue_lock, flags);
56921 + wake_up(&hif->wait);
56922 +}
56923 +
56924 +
56925 +static struct hif_request *dequeue_request(struct hif_device *hif)
56926 +{
56927 + struct hif_request *req;
56928 + unsigned long flags;
56929 +
56930 + spin_lock_irqsave(&hif->queue_lock, flags);
56931 + if (list_empty(&hif->queue))
56932 + req = NULL;
56933 + else {
56934 + req = list_first_entry(&hif->queue,
56935 + struct hif_request, list);
56936 + list_del(&req->list);
56937 + }
56938 + spin_unlock_irqrestore(&hif->queue_lock, flags);
56939 + return req;
56940 +}
56941 +
56942 +
56943 +static void wait_queue_empty(struct hif_device *hif)
56944 +{
56945 + unsigned long flags;
56946 + int empty;
56947 +
56948 + while (1) {
56949 + spin_lock_irqsave(&hif->queue_lock, flags);
56950 + empty = list_empty(&hif->queue);
56951 + spin_unlock_irqrestore(&hif->queue_lock, flags);
56952 + if (empty)
56953 + break;
56954 + else
56955 + yield();
56956 + }
56957 +}
56958 +
56959 +
56960 +static int io(void *data)
56961 +{
56962 + struct hif_device *hif = data;
56963 + struct sched_param param = { .sched_priority = 2 };
56964 + /* one priority level slower than ksdioirqd (which is at 1) */
56965 + DEFINE_WAIT(wait);
56966 + struct hif_request *req;
56967 +
56968 + sched_setscheduler(current, SCHED_FIFO, &param);
56969 +
56970 + while (1) {
56971 + while (1) {
56972 + /*
56973 + * Since we never use signals here, one might think
56974 + * that this ought to be TASK_UNINTERRUPTIBLE. However,
56975 + * such a task would increase the load average and,
56976 + * worse, it would trigger the softlockup check.
56977 + */
56978 + prepare_to_wait(&hif->wait, &wait, TASK_INTERRUPTIBLE);
56979 + if (kthread_should_stop()) {
56980 + finish_wait(&hif->wait, &wait);
56981 + return 0;
56982 + }
56983 + req = dequeue_request(hif);
56984 + if (req)
56985 + break;
56986 + schedule();
56987 + }
56988 + finish_wait(&hif->wait, &wait);
56989 +
56990 + (void) process_request(req);
56991 + }
56992 + return 0;
56993 +}
56994 +
56995 +
56996 +A_STATUS HIFReadWrite(HIF_DEVICE *hif, A_UINT32 address, A_UCHAR *buffer,
56997 + A_UINT32 length, A_UINT32 request, void *context)
56998 +{
56999 + struct device *dev = HIFGetOSDevice(hif);
57000 + struct hif_request *req;
57001 +
57002 + dev_dbg(dev, "HIFReadWrite(device %p, address 0x%x, buffer %p, "
57003 + "length %d, request 0x%x, context %p)\n",
57004 + hif, address, buffer, length, request, context);
57005 +
57006 + BUG_ON(!(request & (HIF_SYNCHRONOUS | HIF_ASYNCHRONOUS)));
57007 + BUG_ON(!(request & (HIF_BYTE_BASIS | HIF_BLOCK_BASIS)));
57008 + BUG_ON(!(request & (HIF_READ | HIF_WRITE)));
57009 + BUG_ON(!(request & HIF_EXTENDED_IO));
57010 +
57011 + if (address >= HIF_MBOX_START_ADDR(0) &&
57012 + address < HIF_MBOX_START_ADDR(MBOXES+1)) {
57013 + BUG_ON(length > HIF_MBOX_WIDTH);
57014 + /* Adjust the address so that the last byte falls on the EOM
57015 + address. */
57016 + address += HIF_MBOX_WIDTH-length;
57017 + }
57018 +
57019 + req = kzalloc(sizeof(*req), GFP_ATOMIC);
57020 + if (!req) {
57021 + if (request & HIF_ASYNCHRONOUS)
57022 + htcCallbacks.rwCompletionHandler(context, A_ERROR);
57023 + return A_ERROR;
57024 + }
57025 +
57026 + req->func = hif->func;
57027 + req->addr = address;
57028 + req->buf = buffer;
57029 + req->len = length;
57030 +
57031 + if (request & HIF_READ) {
57032 + if (request & HIF_FIXED_ADDRESS)
57033 + req->read = sdio_readsb;
57034 + else
57035 + req->read = sdio_memcpy_fromio;
57036 + } else {
57037 + if (request & HIF_FIXED_ADDRESS)
57038 + req->write = sdio_writesb;
57039 + else
57040 + req->write = sdio_memcpy_toio;
57041 + }
57042 +
57043 + if (!(request & HIF_ASYNCHRONOUS))
57044 + return process_request(req);
57045 +
57046 + req->completion = htcCallbacks.rwCompletionHandler;
57047 + req->context = context;
57048 + enqueue_request(hif, req);
57049 +
57050 + return A_OK;
57051 +}
57052 +
57053 +
57054 +/* ----- Interrupt handling ------------------------------------------------ */
57055 +
57056 +/*
57057 + * Volatile ought to be good enough to make gcc do the right thing on S3C24xx.
57058 + * No need to use atomic or put barriers, keeping the code more readable.
57059 + *
57060 + * Warning: this story changes if going SMP/SMT.
57061 + */
57062 +
57063 +static volatile int masked = 1;
57064 +static volatile int pending;
57065 +static volatile int in_interrupt;
57066 +
57067 +
57068 +static void ar6000_do_irq(struct sdio_func *func)
57069 +{
57070 + HIF_DEVICE *hif = sdio_get_drvdata(func);
57071 + struct device *dev = HIFGetOSDevice(hif);
57072 + A_STATUS status;
57073 +
57074 + dev_dbg(dev, "ar6000_do_irq -> %p\n", htcCallbacks.dsrHandler);
57075 +
57076 + status = htcCallbacks.dsrHandler(hif->htc_handle);
57077 + BUG_ON(status != A_OK);
57078 +}
57079 +
57080 +
57081 +static void sdio_ar6000_irq(struct sdio_func *func)
57082 +{
57083 + HIF_DEVICE *hif = sdio_get_drvdata(func);
57084 + struct device *dev = HIFGetOSDevice(hif);
57085 +
57086 + dev_dbg(dev, "sdio_ar6000_irq\n");
57087 +
57088 + in_interrupt = 1;
57089 + if (masked) {
57090 + in_interrupt = 0;
57091 + pending++;
57092 + return;
57093 + }
57094 + /*
57095 + * @@@ This is ugly. If we don't drop the lock, we'll deadlock when
57096 + * the handler tries to do SDIO. So there are four choices:
57097 + *
57098 + * 1) Break the call chain by calling the callback from a workqueue.
57099 + * Ugh.
57100 + * 2) Make process_request aware that we already have the lock.
57101 + * 3) Drop the lock. Which is ugly but should be safe as long as we're
57102 + * making sure the device doesn't go away.
57103 + * 4) Change the AR6k driver such that it only issues asynchronous
57104 + * quests when called from an interrupt.
57105 + *
57106 + * Solution 2) is probably the best for now. Will try it later.
57107 + */
57108 + sdio_release_host(func);
57109 + ar6000_do_irq(func);
57110 + sdio_claim_host(func);
57111 + in_interrupt = 0;
57112 +}
57113 +
57114 +
57115 +void HIFAckInterrupt(HIF_DEVICE *hif)
57116 +{
57117 + struct device *dev = HIFGetOSDevice(hif);
57118 +
57119 + dev_dbg(dev, "HIFAckInterrupt\n");
57120 + /* do nothing */
57121 +}
57122 +
57123 +
57124 +void HIFUnMaskInterrupt(HIF_DEVICE *hif)
57125 +{
57126 + struct device *dev = HIFGetOSDevice(hif);
57127 +
57128 + dev_dbg(dev, "HIFUnMaskInterrupt\n");
57129 + do {
57130 + masked = 1;
57131 + if (pending) {
57132 + pending = 0;
57133 + ar6000_do_irq(hif->func);
57134 + /* We may take an interrupt before unmasking and thus
57135 + get it pending. In this case, we just loop back. */
57136 + }
57137 + masked = 0;
57138 + }
57139 + while (pending);
57140 +}
57141 +
57142 +
57143 +void HIFMaskInterrupt(HIF_DEVICE *hif)
57144 +{
57145 + struct device *dev = HIFGetOSDevice(hif);
57146 +
57147 + dev_dbg(dev, "HIFMaskInterrupt\n");
57148 + /*
57149 + * Since sdio_ar6000_irq can also be called from a process context, we
57150 + * may conceivably end up racing with it. Thus, we need to wait until
57151 + * we can be sure that no concurrent interrupt processing is going on
57152 + * before we return.
57153 + *
57154 + * Note: this may be a bit on the paranoid side - the callers may
57155 + * actually be nice enough to disable scheduling. Check later.
57156 + */
57157 + masked = 1;
57158 + while (in_interrupt)
57159 + yield();
57160 +}
57161 +
57162 +
57163 +/* ----- HIF API glue functions -------------------------------------------- */
57164 +
57165 +
57166 +struct device *HIFGetOSDevice(HIF_DEVICE *hif)
57167 +{
57168 + return &hif->func->dev;
57169 +}
57170 +
57171 +
57172 +void HIFSetHandle(void *hif_handle, void *handle)
57173 +{
57174 + HIF_DEVICE *hif = (HIF_DEVICE *) hif_handle;
57175 +
57176 + hif->htc_handle = handle;
57177 +}
57178 +
57179 +
57180 +/* ----- Device configuration (HIF side) ----------------------------------- */
57181 +
57182 +
57183 +A_STATUS HIFConfigureDevice(HIF_DEVICE *hif,
57184 + HIF_DEVICE_CONFIG_OPCODE opcode, void *config, A_UINT32 configLen)
57185 +{
57186 + struct device *dev = HIFGetOSDevice(hif);
57187 + HIF_DEVICE_IRQ_PROCESSING_MODE *ipm_cfg = config;
57188 + A_UINT32 *mbs_cfg = config;
57189 + int i;
57190 +
57191 + dev_dbg(dev, "HIFConfigureDevice\n");
57192 +
57193 + switch (opcode) {
57194 + case HIF_DEVICE_GET_MBOX_BLOCK_SIZE:
57195 + for (i = 0; i != MBOXES; i++)
57196 + mbs_cfg[i] = HIF_MBOX_BLOCK_SIZE;
57197 + break;
57198 + case HIF_DEVICE_GET_MBOX_ADDR:
57199 + for (i = 0; i != MBOXES; i++)
57200 + mbs_cfg[i] = HIF_MBOX_START_ADDR(i);
57201 + break;
57202 + case HIF_DEVICE_GET_IRQ_PROC_MODE:
57203 + *ipm_cfg = HIF_DEVICE_IRQ_SYNC_ONLY;
57204 +// *ipm_cfg = HIF_DEVICE_IRQ_ASYNC_SYNC;
57205 + break;
57206 + default:
57207 + return A_ERROR;
57208 + }
57209 + return A_OK;
57210 +}
57211 +
57212 +
57213 +/* ----- Device probe and removal (Linux side) ----------------------------- */
57214 +
57215 +
57216 +static int sdio_ar6000_probe(struct sdio_func *func,
57217 + const struct sdio_device_id *id)
57218 +{
57219 + struct device *dev = &func->dev;
57220 + struct hif_device *hif;
57221 + int ret;
57222 +
57223 + dev_dbg(dev, "sdio_ar6000_probe\n");
57224 + BUG_ON(!htcCallbacks.deviceInsertedHandler);
57225 +
57226 + hif = kzalloc(sizeof(*hif), GFP_KERNEL);
57227 + if (!hif)
57228 + return -ENOMEM;
57229 +
57230 + sdio_set_drvdata(func, hif);
57231 + sdio_claim_host(func);
57232 + sdio_enable_func(func);
57233 +
57234 + hif->func = func;
57235 + INIT_LIST_HEAD(&hif->queue);
57236 + init_waitqueue_head(&hif->wait);
57237 + spin_lock_init(&hif->queue_lock);
57238 +
57239 + ret = sdio_set_block_size(func, HIF_MBOX_BLOCK_SIZE);
57240 + if (ret < 0) {
57241 + dev_err(dev, "sdio_set_block_size returns %d\n", ret);
57242 + goto out_enabled;
57243 + }
57244 + ret = sdio_claim_irq(func, sdio_ar6000_irq);
57245 + if (ret) {
57246 + dev_err(dev, "sdio_claim_irq returns %d\n", ret);
57247 + goto out_enabled;
57248 + }
57249 + /* Set SDIO_BUS_CD_DISABLE in SDIO_CCCR_IF ? */
57250 +#if 0
57251 + sdio_f0_writeb(func, SDIO_CCCR_CAP_E4MI, SDIO_CCCR_CAPS, &ret);
57252 + if (ret) {
57253 + dev_err(dev, "sdio_f0_writeb(SDIO_CCCR_CAPS) returns %d\n",
57254 + ret);
57255 + goto out_got_irq;
57256 + }
57257 +#else
57258 + if (0) /* avoid warning */
57259 + goto out_got_irq;
57260 +#endif
57261 +
57262 + sdio_release_host(func);
57263 +
57264 + hif->io_task = kthread_run(io, hif, "ar6000_io");
57265 + if (IS_ERR(hif->io_task)) {
57266 + dev_err(dev, "kthread_run(ar6000_io): %d\n", ret);
57267 + goto out_func_ready;
57268 + }
57269 +
57270 + ret = htcCallbacks.deviceInsertedHandler(hif);
57271 + if (ret == A_OK)
57272 + return 0;
57273 +
57274 + dev_err(dev, "deviceInsertedHandler: %d\n", ret);
57275 +
57276 + ret = kthread_stop(hif->io_task);
57277 + if (ret)
57278 + dev_err(dev, "kthread_stop (ar6000_io): %d\n", ret);
57279 +
57280 +out_func_ready:
57281 + sdio_claim_host(func);
57282 +
57283 +out_got_irq:
57284 + sdio_release_irq(func);
57285 +
57286 +out_enabled:
57287 + sdio_set_drvdata(func, NULL);
57288 + sdio_disable_func(func);
57289 + sdio_release_host(func);
57290 +
57291 + return ret;
57292 +}
57293 +
57294 +
57295 +static void sdio_ar6000_remove(struct sdio_func *func)
57296 +{
57297 + struct device *dev = &func->dev;
57298 + HIF_DEVICE *hif = sdio_get_drvdata(func);
57299 + int ret;
57300 +
57301 + dev_dbg(dev, "sdio_ar6000_remove\n");
57302 + if (mutex_trylock(&shutdown_lock)) {
57303 + /*
57304 + * Funny, Atheros' HIF does this call, but this just puts us in
57305 + * a recursion through HTCShutDown/HIFShutDown if unloading the
57306 + * module.
57307 + *
57308 + * However, we need it for suspend/resume. See the comment at
57309 + * HIFShutDown, below.
57310 + */
57311 + ret = htcCallbacks.deviceRemovedHandler(hif->htc_handle, A_OK);
57312 + if (ret != A_OK)
57313 + dev_err(dev, "deviceRemovedHandler: %d\n", ret);
57314 + mutex_unlock(&shutdown_lock);
57315 + }
57316 + wait_queue_empty(hif);
57317 + ret = kthread_stop(hif->io_task);
57318 + if (ret)
57319 + dev_err(dev, "kthread_stop (ar6000_io): %d\n", ret);
57320 + sdio_claim_host(func);
57321 + sdio_release_irq(func);
57322 + sdio_set_drvdata(func, NULL);
57323 + sdio_disable_func(func);
57324 + sdio_release_host(func);
57325 + kfree(hif);
57326 +}
57327 +
57328 +
57329 +/* ----- Device registration/unregistration (called by HIF) ---------------- */
57330 +
57331 +
57332 +#define ATHEROS_SDIO_DEVICE(id, offset) \
57333 + SDIO_DEVICE(SDIO_VENDOR_ID_ATHEROS, SDIO_DEVICE_ID_ATHEROS_##id | (offset))
57334 +
57335 +static const struct sdio_device_id sdio_ar6000_ids[] = {
57336 + { ATHEROS_SDIO_DEVICE(AR6000, 0) },
57337 + { ATHEROS_SDIO_DEVICE(AR6000, 0x1) },
57338 + { ATHEROS_SDIO_DEVICE(AR6000, 0x8) },
57339 + { ATHEROS_SDIO_DEVICE(AR6000, 0x9) },
57340 + { ATHEROS_SDIO_DEVICE(AR6000, 0xa) },
57341 + { ATHEROS_SDIO_DEVICE(AR6000, 0xb) },
57342 + { /* end: all zeroes */ },
57343 +};
57344 +
57345 +MODULE_DEVICE_TABLE(sdio, sdio_ar6000_ids);
57346 +
57347 +
57348 +static struct sdio_driver sdio_ar6000_driver = {
57349 + .probe = sdio_ar6000_probe,
57350 + .remove = sdio_ar6000_remove,
57351 + .name = "sdio_ar6000",
57352 + .id_table = sdio_ar6000_ids,
57353 +};
57354 +
57355 +
57356 +int HIFInit(HTC_CALLBACKS *callbacks)
57357 +{
57358 + int ret;
57359 +
57360 + BUG_ON(!callbacks);
57361 +
57362 + printk(KERN_DEBUG "HIFInit\n");
57363 + htcCallbacks = *callbacks;
57364 +
57365 + ret = sdio_register_driver(&sdio_ar6000_driver);
57366 + if (ret) {
57367 + printk(KERN_ERR
57368 + "sdio_register_driver(sdio_ar6000_driver): %d\n", ret);
57369 + return A_ERROR;
57370 + }
57371 +
57372 + return 0;
57373 +}
57374 +
57375 +
57376 +/*
57377 + * We have three possible call chains here:
57378 + *
57379 + * System shutdown/reboot:
57380 + *
57381 + * kernel_restart_prepare ...> device_shutdown ... > s3cmci_shutdown ->
57382 + * mmc_remove_host ..> sdio_bus_remove -> sdio_ar6000_remove ->
57383 + * deviceRemovedHandler (HTCTargetRemovedHandler) -> HIFShutDownDevice
57384 + *
57385 + * This is roughly the same sequence as suspend, described below.
57386 + *
57387 + * Module removal:
57388 + *
57389 + * sys_delete_module -> ar6000_cleanup_module -> HTCShutDown ->
57390 + * HIFShutDownDevice -> sdio_unregister_driver ...> sdio_bus_remove ->
57391 + * sdio_ar6000_remove
57392 + *
57393 + * In this case, HIFShutDownDevice must call sdio_unregister_driver to
57394 + * notify the driver about its removal. sdio_ar6000_remove must not call
57395 + * deviceRemovedHandler, because that would loop back into HIFShutDownDevice.
57396 + *
57397 + * Suspend:
57398 + *
57399 + * device_suspend ...> s3cmci_suspend ...> sdio_bus_remove ->
57400 + * sdio_ar6000_remove -> deviceRemovedHandler (HTCTargetRemovedHandler) ->
57401 + * HIFShutDownDevice
57402 + *
57403 + * We must call deviceRemovedHandler to inform the ar6k stack that the device
57404 + * has been removed. Since HTCTargetRemovedHandler calls back into
57405 + * HIFShutDownDevice, we must also prevent the call to
57406 + * sdio_unregister_driver, or we'd end up recursing into the SDIO stack,
57407 + * eventually deadlocking somewhere.
57408 + */
57409 +
57410 +void HIFShutDownDevice(HIF_DEVICE *hif)
57411 +{
57412 + /* Beware, HTCShutDown calls us with hif == NULL ! */
57413 + if (mutex_trylock(&shutdown_lock)) {
57414 + sdio_unregister_driver(&sdio_ar6000_driver);
57415 + mutex_unlock(&shutdown_lock);
57416 + }
57417 +}
57418 Index: linux-2.6.28/drivers/ar6000/hif/hif.c
57419 ===================================================================
57420 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
57421 +++ linux-2.6.28/drivers/ar6000/hif/hif.c 2009-01-02 00:01:56.000000000 +0100
57422 @@ -0,0 +1,824 @@
57423 +/*
57424 + * @file: hif.c
57425 + *
57426 + * @abstract: HIF layer reference implementation for Atheros SDIO stack
57427 + *
57428 + * @notice: Copyright (c) 2004-2006 Atheros Communications Inc.
57429 + *
57430 + *
57431 + * This program is free software; you can redistribute it and/or modify
57432 + * it under the terms of the GNU General Public License version 2 as
57433 + * published by the Free Software Foundation;
57434 + *
57435 + * Software distributed under the License is distributed on an "AS
57436 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
57437 + * implied. See the License for the specific language governing
57438 + * rights and limitations under the License.
57439 + *
57440 + *
57441 + *
57442 + */
57443 +
57444 +#include "hif_internal.h"
57445 +
57446 +/* ------ Static Variables ------ */
57447 +
57448 +/* ------ Global Variable Declarations ------- */
57449 +SD_PNP_INFO Ids[] = {
57450 + {
57451 + .SDIO_ManufacturerID = MANUFACTURER_ID_AR6001_BASE | 0xB,
57452 + .SDIO_ManufacturerCode = MANUFACTURER_CODE,
57453 + .SDIO_FunctionClass = FUNCTION_CLASS,
57454 + .SDIO_FunctionNo = 1
57455 + },
57456 + {
57457 + .SDIO_ManufacturerID = MANUFACTURER_ID_AR6001_BASE | 0xA,
57458 + .SDIO_ManufacturerCode = MANUFACTURER_CODE,
57459 + .SDIO_FunctionClass = FUNCTION_CLASS,
57460 + .SDIO_FunctionNo = 1
57461 + },
57462 + {
57463 + .SDIO_ManufacturerID = MANUFACTURER_ID_AR6001_BASE | 0x9,
57464 + .SDIO_ManufacturerCode = MANUFACTURER_CODE,
57465 + .SDIO_FunctionClass = FUNCTION_CLASS,
57466 + .SDIO_FunctionNo = 1
57467 + },
57468 + {
57469 + .SDIO_ManufacturerID = MANUFACTURER_ID_AR6001_BASE | 0x8,
57470 + .SDIO_ManufacturerCode = MANUFACTURER_CODE,
57471 + .SDIO_FunctionClass = FUNCTION_CLASS,
57472 + .SDIO_FunctionNo = 1
57473 + },
57474 + {
57475 + .SDIO_ManufacturerID = MANUFACTURER_ID_AR6002_BASE | 0x0,
57476 + .SDIO_ManufacturerCode = MANUFACTURER_CODE,
57477 + .SDIO_FunctionClass = FUNCTION_CLASS,
57478 + .SDIO_FunctionNo = 1
57479 + },
57480 + {
57481 + .SDIO_ManufacturerID = MANUFACTURER_ID_AR6002_BASE | 0x1,
57482 + .SDIO_ManufacturerCode = MANUFACTURER_CODE,
57483 + .SDIO_FunctionClass = FUNCTION_CLASS,
57484 + .SDIO_FunctionNo = 1
57485 + },
57486 + {
57487 + } //list is null termintaed
57488 +};
57489 +
57490 +TARGET_FUNCTION_CONTEXT FunctionContext = {
57491 + .function.Version = CT_SDIO_STACK_VERSION_CODE,
57492 + .function.pName = "sdio_wlan",
57493 + .function.MaxDevices = 1,
57494 + .function.NumDevices = 0,
57495 + .function.pIds = Ids,
57496 + .function.pProbe = hifDeviceInserted,
57497 + .function.pRemove = hifDeviceRemoved,
57498 + .function.pSuspend = NULL,
57499 + .function.pResume = NULL,
57500 + .function.pWake = NULL,
57501 + .function.pContext = &FunctionContext,
57502 +};
57503 +
57504 +HIF_DEVICE hifDevice[HIF_MAX_DEVICES];
57505 +HTC_CALLBACKS htcCallbacks;
57506 +BUS_REQUEST busRequest[BUS_REQUEST_MAX_NUM];
57507 +static BUS_REQUEST *s_busRequestFreeQueue = NULL;
57508 +OS_CRITICALSECTION lock;
57509 +extern A_UINT32 onebitmode;
57510 +extern A_UINT32 busspeedlow;
57511 +
57512 +#ifdef DEBUG
57513 +extern A_UINT32 debughif;
57514 +#define ATH_DEBUG_ERROR 1
57515 +#define ATH_DEBUG_WARN 2
57516 +#define ATH_DEBUG_TRACE 3
57517 +#define _AR_DEBUG_PRINTX_ARG(arg...) arg
57518 +#define AR_DEBUG_PRINTF(lvl, args)\
57519 + {if (lvl <= debughif)\
57520 + A_PRINTF(KERN_ALERT _AR_DEBUG_PRINTX_ARG args);\
57521 + }
57522 +#else
57523 +#define AR_DEBUG_PRINTF(lvl, args)
57524 +#endif
57525 +
57526 +static BUS_REQUEST *hifAllocateBusRequest(void);
57527 +static void hifFreeBusRequest(BUS_REQUEST *busrequest);
57528 +static THREAD_RETURN insert_helper_func(POSKERNEL_HELPER pHelper);
57529 +static void ResetAllCards(void);
57530 +
57531 +/* ------ Functions ------ */
57532 +int HIFInit(HTC_CALLBACKS *callbacks)
57533 +{
57534 + SDIO_STATUS status;
57535 + DBG_ASSERT(callbacks != NULL);
57536 +
57537 + /* Store the callback and event handlers */
57538 + htcCallbacks.deviceInsertedHandler = callbacks->deviceInsertedHandler;
57539 + htcCallbacks.deviceRemovedHandler = callbacks->deviceRemovedHandler;
57540 + htcCallbacks.deviceSuspendHandler = callbacks->deviceSuspendHandler;
57541 + htcCallbacks.deviceResumeHandler = callbacks->deviceResumeHandler;
57542 + htcCallbacks.deviceWakeupHandler = callbacks->deviceWakeupHandler;
57543 + htcCallbacks.rwCompletionHandler = callbacks->rwCompletionHandler;
57544 + htcCallbacks.dsrHandler = callbacks->dsrHandler;
57545 +
57546 + CriticalSectionInit(&lock);
57547 +
57548 + /* Register with bus driver core */
57549 + status = SDIO_RegisterFunction(&FunctionContext.function);
57550 + DBG_ASSERT(SDIO_SUCCESS(status));
57551 +
57552 + return(0);
57553 +}
57554 +
57555 +A_STATUS
57556 +HIFReadWrite(HIF_DEVICE *device,
57557 + A_UINT32 address,
57558 + A_UCHAR *buffer,
57559 + A_UINT32 length,
57560 + A_UINT32 request,
57561 + void *context)
57562 +{
57563 + A_UINT8 rw;
57564 + A_UINT8 mode;
57565 + A_UINT8 funcNo;
57566 + A_UINT8 opcode;
57567 + A_UINT16 count;
57568 + SDREQUEST *sdrequest;
57569 + SDIO_STATUS sdiostatus;
57570 + BUS_REQUEST *busrequest;
57571 + A_STATUS status = A_OK;
57572 +
57573 + DBG_ASSERT(device != NULL);
57574 + DBG_ASSERT(device->handle != NULL);
57575 +
57576 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Device: %p\n", device));
57577 +
57578 + do {
57579 + busrequest = hifAllocateBusRequest();
57580 + if (busrequest == NULL) {
57581 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("HIF Unable to allocate bus request\n"));
57582 + status = A_NO_RESOURCE;
57583 + break;
57584 + }
57585 +
57586 + sdrequest = busrequest->request;
57587 + busrequest->context = context;
57588 +
57589 + sdrequest->pDataBuffer = buffer;
57590 + if (request & HIF_SYNCHRONOUS) {
57591 + sdrequest->Flags = SDREQ_FLAGS_RESP_SDIO_R5 | SDREQ_FLAGS_DATA_TRANS;
57592 + sdrequest->pCompleteContext = NULL;
57593 + sdrequest->pCompletion = NULL;
57594 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Execution mode: Synchronous\n"));
57595 + } else if (request & HIF_ASYNCHRONOUS) {
57596 + sdrequest->Flags = SDREQ_FLAGS_RESP_SDIO_R5 | SDREQ_FLAGS_DATA_TRANS |
57597 + SDREQ_FLAGS_TRANS_ASYNC;
57598 + sdrequest->pCompleteContext = busrequest;
57599 + sdrequest->pCompletion = hifRWCompletionHandler;
57600 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Execution mode: Asynchronous\n"));
57601 + } else {
57602 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57603 + ("Invalid execution mode: 0x%08x\n", request));
57604 + status = A_EINVAL;
57605 + break;
57606 + }
57607 +
57608 + if (request & HIF_EXTENDED_IO) {
57609 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Command type: CMD53\n"));
57610 + sdrequest->Command = CMD53;
57611 + } else {
57612 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57613 + ("Invalid command type: 0x%08x\n", request));
57614 + status = A_EINVAL;
57615 + break;
57616 + }
57617 +
57618 + if (request & HIF_BLOCK_BASIS) {
57619 + mode = CMD53_BLOCK_BASIS;
57620 + sdrequest->BlockLen = HIF_MBOX_BLOCK_SIZE;
57621 + sdrequest->BlockCount = length / HIF_MBOX_BLOCK_SIZE;
57622 + count = sdrequest->BlockCount;
57623 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
57624 + ("Block mode (BlockLen: %d, BlockCount: %d)\n",
57625 + sdrequest->BlockLen, sdrequest->BlockCount));
57626 + } else if (request & HIF_BYTE_BASIS) {
57627 + mode = CMD53_BYTE_BASIS;
57628 + sdrequest->BlockLen = length;
57629 + sdrequest->BlockCount = 1;
57630 + count = sdrequest->BlockLen;
57631 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
57632 + ("Byte mode (BlockLen: %d, BlockCount: %d)\n",
57633 + sdrequest->BlockLen, sdrequest->BlockCount));
57634 + } else {
57635 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57636 + ("Invalid data mode: 0x%08x\n", request));
57637 + status = A_EINVAL;
57638 + break;
57639 + }
57640 +
57641 +#if 0
57642 + /* useful for checking register accesses */
57643 + if (length & 0x3) {
57644 + A_PRINTF(KERN_ALERT"HIF (%s) is not a multiple of 4 bytes, addr:0x%X, len:%d\n",
57645 + request & HIF_WRITE ? "write":"read", address, length);
57646 + }
57647 +#endif
57648 +
57649 + if ((address >= HIF_MBOX_START_ADDR(0)) &&
57650 + (address <= HIF_MBOX_END_ADDR(3)))
57651 + {
57652 +
57653 + DBG_ASSERT(length <= HIF_MBOX_WIDTH);
57654 +
57655 + /*
57656 + * Mailbox write. Adjust the address so that the last byte
57657 + * falls on the EOM address.
57658 + */
57659 + address += (HIF_MBOX_WIDTH - length);
57660 + }
57661 +
57662 +
57663 +
57664 + if (request & HIF_WRITE) {
57665 + rw = CMD53_WRITE;
57666 + sdrequest->Flags |= SDREQ_FLAGS_DATA_WRITE;
57667 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Direction: Write\n"));
57668 + } else if (request & HIF_READ) {
57669 + rw = CMD53_READ;
57670 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Direction: Read\n"));
57671 + } else {
57672 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57673 + ("Invalid direction: 0x%08x\n", request));
57674 + status = A_EINVAL;
57675 + break;
57676 + }
57677 +
57678 + if (request & HIF_FIXED_ADDRESS) {
57679 + opcode = CMD53_FIXED_ADDRESS;
57680 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Address mode: Fixed\n"));
57681 + } else if (request & HIF_INCREMENTAL_ADDRESS) {
57682 + opcode = CMD53_INCR_ADDRESS;
57683 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Address mode: Incremental\n"));
57684 + } else {
57685 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57686 + ("Invalid address mode: 0x%08x\n", request));
57687 + status = A_EINVAL;
57688 + break;
57689 + }
57690 +
57691 + funcNo = SDDEVICE_GET_SDIO_FUNCNO(device->handle);
57692 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Function number: %d\n", funcNo));
57693 + SDIO_SET_CMD53_ARG(sdrequest->Argument, rw, funcNo,
57694 + mode, opcode, address, count);
57695 +
57696 + /* Send the command out */
57697 + sdiostatus = SDDEVICE_CALL_REQUEST_FUNC(device->handle, sdrequest);
57698 +
57699 + if (!SDIO_SUCCESS(sdiostatus)) {
57700 + status = A_ERROR;
57701 + }
57702 +
57703 + } while (FALSE);
57704 +
57705 + if (A_FAILED(status) || (request & HIF_SYNCHRONOUS)) {
57706 + if (busrequest != NULL) {
57707 + hifFreeBusRequest(busrequest);
57708 + }
57709 + }
57710 +
57711 + if (A_FAILED(status) && (request & HIF_ASYNCHRONOUS)) {
57712 + /* call back async handler on failure */
57713 + htcCallbacks.rwCompletionHandler(context, status);
57714 + }
57715 +
57716 + return status;
57717 +}
57718 +
57719 +A_STATUS
57720 +HIFConfigureDevice(HIF_DEVICE *device, HIF_DEVICE_CONFIG_OPCODE opcode,
57721 + void *config, A_UINT32 configLen)
57722 +{
57723 + A_UINT32 count;
57724 +
57725 + switch(opcode) {
57726 + case HIF_DEVICE_GET_MBOX_BLOCK_SIZE:
57727 + ((A_UINT32 *)config)[0] = HIF_MBOX0_BLOCK_SIZE;
57728 + ((A_UINT32 *)config)[1] = HIF_MBOX1_BLOCK_SIZE;
57729 + ((A_UINT32 *)config)[2] = HIF_MBOX2_BLOCK_SIZE;
57730 + ((A_UINT32 *)config)[3] = HIF_MBOX3_BLOCK_SIZE;
57731 + break;
57732 +
57733 + case HIF_DEVICE_GET_MBOX_ADDR:
57734 + for (count = 0; count < 4; count ++) {
57735 + ((A_UINT32 *)config)[count] = HIF_MBOX_START_ADDR(count);
57736 + }
57737 + break;
57738 + case HIF_DEVICE_GET_IRQ_PROC_MODE:
57739 + /* the SDIO stack allows the interrupts to be processed either way, ASYNC or SYNC */
57740 + *((HIF_DEVICE_IRQ_PROCESSING_MODE *)config) = HIF_DEVICE_IRQ_ASYNC_SYNC;
57741 + break;
57742 + default:
57743 + AR_DEBUG_PRINTF(ATH_DEBUG_WARN,
57744 + ("Unsupported configuration opcode: %d\n", opcode));
57745 + return A_ERROR;
57746 + }
57747 +
57748 + return A_OK;
57749 +}
57750 +
57751 +void
57752 +HIFShutDownDevice(HIF_DEVICE *device)
57753 +{
57754 + A_UINT8 data;
57755 + A_UINT32 count;
57756 + SDIO_STATUS status;
57757 + SDCONFIG_BUS_MODE_DATA busSettings;
57758 + SDCONFIG_FUNC_ENABLE_DISABLE_DATA fData;
57759 +
57760 + if (device != NULL) {
57761 + DBG_ASSERT(device->handle != NULL);
57762 +
57763 + /* Remove the allocated current if any */
57764 + status = SDLIB_IssueConfig(device->handle,
57765 + SDCONFIG_FUNC_FREE_SLOT_CURRENT, NULL, 0);
57766 + DBG_ASSERT(SDIO_SUCCESS(status));
57767 +
57768 + /* Disable the card */
57769 + fData.EnableFlags = SDCONFIG_DISABLE_FUNC;
57770 + fData.TimeOut = 1;
57771 + status = SDLIB_IssueConfig(device->handle, SDCONFIG_FUNC_ENABLE_DISABLE,
57772 + &fData, sizeof(fData));
57773 + DBG_ASSERT(SDIO_SUCCESS(status));
57774 +
57775 + /* Perform a soft I/O reset */
57776 + data = SDIO_IO_RESET;
57777 + status = SDLIB_IssueCMD52(device->handle, 0, SDIO_IO_ABORT_REG,
57778 + &data, 1, 1);
57779 + DBG_ASSERT(SDIO_SUCCESS(status));
57780 +
57781 + /*
57782 + * WAR - Codetelligence driver does not seem to shutdown correctly in 1
57783 + * bit mode. By default it configures the HC in the 4 bit. Its later in
57784 + * our driver that we switch to 1 bit mode. If we try to shutdown, the
57785 + * driver hangs so we revert to 4 bit mode, to be transparent to the
57786 + * underlying bus driver.
57787 + */
57788 + if (onebitmode) {
57789 + ZERO_OBJECT(busSettings);
57790 + busSettings.BusModeFlags = SDDEVICE_GET_BUSMODE_FLAGS(device->handle);
57791 + SDCONFIG_SET_BUS_WIDTH(busSettings.BusModeFlags,
57792 + SDCONFIG_BUS_WIDTH_4_BIT);
57793 +
57794 + /* Issue config request to change the bus width to 4 bit */
57795 + status = SDLIB_IssueConfig(device->handle, SDCONFIG_BUS_MODE_CTRL,
57796 + &busSettings,
57797 + sizeof(SDCONFIG_BUS_MODE_DATA));
57798 + DBG_ASSERT(SDIO_SUCCESS(status));
57799 + }
57800 +
57801 + /* Free the bus requests */
57802 + for (count = 0; count < BUS_REQUEST_MAX_NUM; count ++) {
57803 + SDDeviceFreeRequest(device->handle, busRequest[count].request);
57804 + }
57805 + /* Clean up the queue */
57806 + s_busRequestFreeQueue = NULL;
57807 + } else {
57808 + /* since we are unloading the driver anyways, reset all cards in case the SDIO card
57809 + * is externally powered and we are unloading the SDIO stack. This avoids the problem when
57810 + * the SDIO stack is reloaded and attempts are made to re-enumerate a card that is already
57811 + * enumerated */
57812 + ResetAllCards();
57813 + /* Unregister with bus driver core */
57814 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
57815 + ("Unregistering with the bus driver\n"));
57816 + status = SDIO_UnregisterFunction(&FunctionContext.function);
57817 + DBG_ASSERT(SDIO_SUCCESS(status));
57818 + }
57819 +}
57820 +
57821 +void
57822 +hifRWCompletionHandler(SDREQUEST *request)
57823 +{
57824 + A_STATUS status;
57825 + void *context;
57826 + BUS_REQUEST *busrequest;
57827 +
57828 + if (SDIO_SUCCESS(request->Status)) {
57829 + status = A_OK;
57830 + } else {
57831 + status = A_ERROR;
57832 + }
57833 +
57834 + DBG_ASSERT(status == A_OK);
57835 + busrequest = (BUS_REQUEST *) request->pCompleteContext;
57836 + context = (void *) busrequest->context;
57837 + /* free the request before calling the callback, in case the
57838 + * callback submits another request, this guarantees that
57839 + * there is at least 1 free request available everytime the callback
57840 + * is invoked */
57841 + hifFreeBusRequest(busrequest);
57842 + htcCallbacks.rwCompletionHandler(context, status);
57843 +}
57844 +
57845 +void
57846 +hifIRQHandler(void *context)
57847 +{
57848 + A_STATUS status;
57849 + HIF_DEVICE *device;
57850 +
57851 + device = (HIF_DEVICE *)context;
57852 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Device: %p\n", device));
57853 + status = htcCallbacks.dsrHandler(device->htc_handle);
57854 + DBG_ASSERT(status == A_OK);
57855 +}
57856 +
57857 +BOOL
57858 +hifDeviceInserted(SDFUNCTION *function, SDDEVICE *handle)
57859 +{
57860 + BOOL enabled;
57861 + A_UINT8 data;
57862 + A_UINT32 count;
57863 + HIF_DEVICE *device;
57864 + SDIO_STATUS status;
57865 + A_UINT16 maxBlocks;
57866 + A_UINT16 maxBlockSize;
57867 + SDCONFIG_BUS_MODE_DATA busSettings;
57868 + SDCONFIG_FUNC_ENABLE_DISABLE_DATA fData;
57869 + TARGET_FUNCTION_CONTEXT *functionContext;
57870 + SDCONFIG_FUNC_SLOT_CURRENT_DATA slotCurrent;
57871 + SD_BUSCLOCK_RATE currentBusClock;
57872 +
57873 + DBG_ASSERT(function != NULL);
57874 + DBG_ASSERT(handle != NULL);
57875 +
57876 + device = addHifDevice(handle);
57877 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Device: %p\n", device));
57878 + functionContext = (TARGET_FUNCTION_CONTEXT *)function->pContext;
57879 +
57880 + /*
57881 + * Issue commands to get the manufacturer ID and stuff and compare it
57882 + * against the rev Id derived from the ID registered during the
57883 + * initialization process. Report the device only in the case there
57884 + * is a match. In the case od SDIO, the bus driver has already queried
57885 + * these details so we just need to use their data structures to get the
57886 + * relevant values. Infact, the driver has already matched it against
57887 + * the Ids that we registered with it so we dont need to the step here.
57888 + */
57889 +
57890 + /* Configure the SDIO Bus Width */
57891 + if (onebitmode) {
57892 + data = SDIO_BUS_WIDTH_1_BIT;
57893 + status = SDLIB_IssueCMD52(handle, 0, SDIO_BUS_IF_REG, &data, 1, 1);
57894 + if (!SDIO_SUCCESS(status)) {
57895 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57896 + ("Unable to set the bus width to 1 bit\n"));
57897 + return FALSE;
57898 + }
57899 + }
57900 +
57901 + /* Get current bus flags */
57902 + ZERO_OBJECT(busSettings);
57903 +
57904 + busSettings.BusModeFlags = SDDEVICE_GET_BUSMODE_FLAGS(handle);
57905 + if (onebitmode) {
57906 + SDCONFIG_SET_BUS_WIDTH(busSettings.BusModeFlags,
57907 + SDCONFIG_BUS_WIDTH_1_BIT);
57908 + }
57909 +
57910 + /* get the current operating clock, the bus driver sets us up based
57911 + * on what our CIS reports and what the host controller can handle
57912 + * we can use this to determine whether we want to drop our clock rate
57913 + * down */
57914 + currentBusClock = SDDEVICE_GET_OPER_CLOCK(handle);
57915 + busSettings.ClockRate = currentBusClock;
57916 +
57917 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
57918 + ("HIF currently running at: %d \n",currentBusClock));
57919 +
57920 + /* see if HIF wants to run at a lower clock speed, we may already be
57921 + * at that lower clock speed */
57922 + if (currentBusClock > (SDIO_CLOCK_FREQUENCY_DEFAULT >> busspeedlow)) {
57923 + busSettings.ClockRate = SDIO_CLOCK_FREQUENCY_DEFAULT >> busspeedlow;
57924 + AR_DEBUG_PRINTF(ATH_DEBUG_WARN,
57925 + ("HIF overriding clock to %d \n",busSettings.ClockRate));
57926 + }
57927 +
57928 + /* Issue config request to override clock rate */
57929 + status = SDLIB_IssueConfig(handle, SDCONFIG_FUNC_CHANGE_BUS_MODE, &busSettings,
57930 + sizeof(SDCONFIG_BUS_MODE_DATA));
57931 + if (!SDIO_SUCCESS(status)) {
57932 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57933 + ("Unable to configure the host clock\n"));
57934 + return FALSE;
57935 + } else {
57936 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
57937 + ("Configured clock: %d, Maximum clock: %d\n",
57938 + busSettings.ActualClockRate,
57939 + SDDEVICE_GET_MAX_CLOCK(handle)));
57940 + }
57941 +
57942 + /*
57943 + * Check if the target supports block mode. This result of this check
57944 + * can be used to implement the HIFReadWrite API.
57945 + */
57946 + if (SDDEVICE_GET_SDIO_FUNC_MAXBLKSIZE(handle)) {
57947 + /* Limit block size to operational block limit or card function
57948 + capability */
57949 + maxBlockSize = min(SDDEVICE_GET_OPER_BLOCK_LEN(handle),
57950 + SDDEVICE_GET_SDIO_FUNC_MAXBLKSIZE(handle));
57951 +
57952 + /* check if the card support multi-block transfers */
57953 + if (!(SDDEVICE_GET_SDIOCARD_CAPS(handle) & SDIO_CAPS_MULTI_BLOCK)) {
57954 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Byte basis only\n"));
57955 +
57956 + /* Limit block size to max byte basis */
57957 + maxBlockSize = min(maxBlockSize,
57958 + (A_UINT16)SDIO_MAX_LENGTH_BYTE_BASIS);
57959 + maxBlocks = 1;
57960 + } else {
57961 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Multi-block capable\n"));
57962 + maxBlocks = SDDEVICE_GET_OPER_BLOCKS(handle);
57963 + status = SDLIB_SetFunctionBlockSize(handle, HIF_MBOX_BLOCK_SIZE);
57964 + if (!SDIO_SUCCESS(status)) {
57965 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57966 + ("Failed to set block size. Err:%d\n", status));
57967 + return FALSE;
57968 + }
57969 + }
57970 +
57971 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
57972 + ("Bytes Per Block: %d bytes, Block Count:%d \n",
57973 + maxBlockSize, maxBlocks));
57974 + } else {
57975 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57976 + ("Function does not support Block Mode!\n"));
57977 + return FALSE;
57978 + }
57979 +
57980 + /* Allocate the slot current */
57981 + status = SDLIB_GetDefaultOpCurrent(handle, &slotCurrent.SlotCurrent);
57982 + if (SDIO_SUCCESS(status)) {
57983 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Allocating Slot current: %d mA\n",
57984 + slotCurrent.SlotCurrent));
57985 + status = SDLIB_IssueConfig(handle, SDCONFIG_FUNC_ALLOC_SLOT_CURRENT,
57986 + &slotCurrent, sizeof(slotCurrent));
57987 + if (!SDIO_SUCCESS(status)) {
57988 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
57989 + ("Failed to allocate slot current %d\n", status));
57990 + return FALSE;
57991 + }
57992 + }
57993 +
57994 + /* Enable the dragon function */
57995 + count = 0;
57996 + enabled = FALSE;
57997 + fData.TimeOut = 1;
57998 + fData.EnableFlags = SDCONFIG_ENABLE_FUNC;
57999 + while ((count++ < SDWLAN_ENABLE_DISABLE_TIMEOUT) && !enabled)
58000 + {
58001 + /* Enable dragon */
58002 + status = SDLIB_IssueConfig(handle, SDCONFIG_FUNC_ENABLE_DISABLE,
58003 + &fData, sizeof(fData));
58004 + if (!SDIO_SUCCESS(status)) {
58005 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
58006 + ("Attempting to enable the card again\n"));
58007 + continue;
58008 + }
58009 +
58010 + /* Mark the status as enabled */
58011 + enabled = TRUE;
58012 + }
58013 +
58014 + /* Check if we were succesful in enabling the target */
58015 + if (!enabled) {
58016 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR,
58017 + ("Failed to communicate with the target\n"));
58018 + return FALSE;
58019 + }
58020 +
58021 + /* Allocate the bus requests to be used later */
58022 + A_MEMZERO(busRequest, sizeof(busRequest));
58023 + for (count = 0; count < BUS_REQUEST_MAX_NUM; count ++) {
58024 + if ((busRequest[count].request = SDDeviceAllocRequest(handle)) == NULL){
58025 + AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("Unable to allocate memory\n"));
58026 + /* TODO: Free the memory that has already been allocated */
58027 + return FALSE;
58028 + }
58029 + hifFreeBusRequest(&busRequest[count]);
58030 +
58031 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
58032 + ("0x%08x = busRequest[%d].request = 0x%08x\n",
58033 + (unsigned int) &busRequest[count], count,
58034 + (unsigned int) busRequest[count].request));
58035 + }
58036 +
58037 + /* Schedule a worker to handle device inserted, this is a temporary workaround
58038 + * to fix a deadlock if the device fails to intialize in the insertion handler
58039 + * The failure causes the instance to shutdown the HIF layer and unregister the
58040 + * function driver within the busdriver probe context which can deadlock
58041 + *
58042 + * NOTE: we cannot use the default work queue because that would block
58043 + * SD bus request processing for all synchronous I/O. We must use a kernel
58044 + * thread that is creating using the helper library.
58045 + * */
58046 +
58047 + if (SDIO_SUCCESS(SDLIB_OSCreateHelper(&device->insert_helper,
58048 + insert_helper_func,
58049 + device))) {
58050 + device->helper_started = TRUE;
58051 + }
58052 +
58053 + return TRUE;
58054 +}
58055 +
58056 +static THREAD_RETURN insert_helper_func(POSKERNEL_HELPER pHelper)
58057 +{
58058 +
58059 + /*
58060 + * Adding a wait of around a second before we issue the very first
58061 + * command to dragon. During the process of loading/unloading the
58062 + * driver repeatedly it was observed that we get a data timeout
58063 + * while accessing function 1 registers in the chip. The theory at
58064 + * this point is that some initialization delay in dragon is
58065 + * causing the SDIO state in dragon core to be not ready even after
58066 + * the ready bit indicates that function 1 is ready. Accomodating
58067 + * for this behavior by adding some delay in the driver before it
58068 + * issues the first command after switching on dragon. Need to
58069 + * investigate this a bit more - TODO
58070 + */
58071 +
58072 + A_MDELAY(1000);
58073 + /* Inform HTC */
58074 + if ((htcCallbacks.deviceInsertedHandler(SD_GET_OS_HELPER_CONTEXT(pHelper))) != A_OK) {
58075 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("Device rejected\n"));
58076 + }
58077 +
58078 + return 0;
58079 +}
58080 +
58081 +void
58082 +HIFAckInterrupt(HIF_DEVICE *device)
58083 +{
58084 + SDIO_STATUS status;
58085 + DBG_ASSERT(device != NULL);
58086 + DBG_ASSERT(device->handle != NULL);
58087 +
58088 + /* Acknowledge our function IRQ */
58089 + status = SDLIB_IssueConfig(device->handle, SDCONFIG_FUNC_ACK_IRQ,
58090 + NULL, 0);
58091 + DBG_ASSERT(SDIO_SUCCESS(status));
58092 +}
58093 +
58094 +void
58095 +HIFUnMaskInterrupt(HIF_DEVICE *device)
58096 +{
58097 + SDIO_STATUS status;
58098 +
58099 + DBG_ASSERT(device != NULL);
58100 + DBG_ASSERT(device->handle != NULL);
58101 +
58102 + /* Register the IRQ Handler */
58103 + SDDEVICE_SET_IRQ_HANDLER(device->handle, hifIRQHandler, device);
58104 +
58105 + /* Unmask our function IRQ */
58106 + status = SDLIB_IssueConfig(device->handle, SDCONFIG_FUNC_UNMASK_IRQ,
58107 + NULL, 0);
58108 + DBG_ASSERT(SDIO_SUCCESS(status));
58109 +}
58110 +
58111 +void HIFMaskInterrupt(HIF_DEVICE *device)
58112 +{
58113 + SDIO_STATUS status;
58114 + DBG_ASSERT(device != NULL);
58115 + DBG_ASSERT(device->handle != NULL);
58116 +
58117 + /* Mask our function IRQ */
58118 + status = SDLIB_IssueConfig(device->handle, SDCONFIG_FUNC_MASK_IRQ,
58119 + NULL, 0);
58120 + DBG_ASSERT(SDIO_SUCCESS(status));
58121 +
58122 + /* Unregister the IRQ Handler */
58123 + SDDEVICE_SET_IRQ_HANDLER(device->handle, NULL, NULL);
58124 +}
58125 +
58126 +static BUS_REQUEST *hifAllocateBusRequest(void)
58127 +{
58128 + BUS_REQUEST *busrequest;
58129 +
58130 + /* Acquire lock */
58131 + CriticalSectionAcquire(&lock);
58132 +
58133 + /* Remove first in list */
58134 + if((busrequest = s_busRequestFreeQueue) != NULL)
58135 + {
58136 + s_busRequestFreeQueue = busrequest->next;
58137 + }
58138 +
58139 + /* Release lock */
58140 + CriticalSectionRelease(&lock);
58141 +
58142 + return busrequest;
58143 +}
58144 +
58145 +static void
58146 +hifFreeBusRequest(BUS_REQUEST *busrequest)
58147 +{
58148 + DBG_ASSERT(busrequest != NULL);
58149 +
58150 + /* Acquire lock */
58151 + CriticalSectionAcquire(&lock);
58152 +
58153 + /* Insert first in list */
58154 + busrequest->next = s_busRequestFreeQueue;
58155 + s_busRequestFreeQueue = busrequest;
58156 +
58157 + /* Release lock */
58158 + CriticalSectionRelease(&lock);
58159 +}
58160 +
58161 +void
58162 +hifDeviceRemoved(SDFUNCTION *function, SDDEVICE *handle)
58163 +{
58164 + A_STATUS status;
58165 + HIF_DEVICE *device;
58166 + DBG_ASSERT(function != NULL);
58167 + DBG_ASSERT(handle != NULL);
58168 +
58169 + device = getHifDevice(handle);
58170 + status = htcCallbacks.deviceRemovedHandler(device->htc_handle, A_OK);
58171 +
58172 + /* cleanup the helper thread */
58173 + if (device->helper_started) {
58174 + SDLIB_OSDeleteHelper(&device->insert_helper);
58175 + device->helper_started = FALSE;
58176 + }
58177 +
58178 + delHifDevice(handle);
58179 + DBG_ASSERT(status == A_OK);
58180 +}
58181 +
58182 +HIF_DEVICE *
58183 +addHifDevice(SDDEVICE *handle)
58184 +{
58185 + DBG_ASSERT(handle != NULL);
58186 + hifDevice[0].handle = handle;
58187 + return &hifDevice[0];
58188 +}
58189 +
58190 +HIF_DEVICE *
58191 +getHifDevice(SDDEVICE *handle)
58192 +{
58193 + DBG_ASSERT(handle != NULL);
58194 + return &hifDevice[0];
58195 +}
58196 +
58197 +void
58198 +delHifDevice(SDDEVICE *handle)
58199 +{
58200 + DBG_ASSERT(handle != NULL);
58201 + hifDevice[0].handle = NULL;
58202 +}
58203 +
58204 +struct device*
58205 +HIFGetOSDevice(HIF_DEVICE *device)
58206 +{
58207 + return &device->handle->Device->dev;
58208 +}
58209 +
58210 +static void ResetAllCards(void)
58211 +{
58212 + UINT8 data;
58213 + SDIO_STATUS status;
58214 + int i;
58215 +
58216 + data = SDIO_IO_RESET;
58217 +
58218 + /* set the I/O CARD reset bit:
58219 + * NOTE: we are exploiting a "feature" of the SDIO core that resets the core when you
58220 + * set the RES bit in the SDIO_IO_ABORT register. This bit however "normally" resets the
58221 + * I/O functions leaving the SDIO core in the same state (as per SDIO spec).
58222 + * In this design, this reset can be used to reset the SDIO core itself */
58223 + for (i = 0; i < HIF_MAX_DEVICES; i++) {
58224 + if (hifDevice[i].handle != NULL) {
58225 + AR_DEBUG_PRINTF(ATH_DEBUG_TRACE,
58226 + ("Issuing I/O Card reset for instance: %d \n",i));
58227 + /* set the I/O Card reset bit */
58228 + status = SDLIB_IssueCMD52(hifDevice[i].handle,
58229 + 0, /* function 0 space */
58230 + SDIO_IO_ABORT_REG,
58231 + &data,
58232 + 1, /* 1 byte */
58233 + TRUE); /* write */
58234 + }
58235 + }
58236 +
58237 +}
58238 +
58239 +void HIFSetHandle(void *hif_handle, void *handle)
58240 +{
58241 + HIF_DEVICE *device = (HIF_DEVICE *) hif_handle;
58242 +
58243 + device->htc_handle = handle;
58244 +
58245 + return;
58246 +}
58247 Index: linux-2.6.28/drivers/ar6000/hif/hif_internal.h
58248 ===================================================================
58249 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
58250 +++ linux-2.6.28/drivers/ar6000/hif/hif_internal.h 2009-01-02 00:01:56.000000000 +0100
58251 @@ -0,0 +1,102 @@
58252 +/*
58253 + * @file: hif_internal.h
58254 + *
58255 + * @abstract: internal header file for hif layer
58256 + *
58257 + * @notice: Copyright (c) 2004-2006 Atheros Communications Inc.
58258 + *
58259 + *
58260 + * This program is free software; you can redistribute it and/or modify
58261 + * it under the terms of the GNU General Public License version 2 as
58262 + * published by the Free Software Foundation;
58263 + *
58264 + * Software distributed under the License is distributed on an "AS
58265 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
58266 + * implied. See the License for the specific language governing
58267 + * rights and limitations under the License.
58268 + *
58269 + *
58270 + *
58271 + */
58272 +
58273 +#include <linux/sdio/ctsystem.h>
58274 +#include <linux/sdio/sdio_busdriver.h>
58275 +#include <linux/sdio/_sdio_defs.h>
58276 +#include <linux/sdio/sdio_lib.h>
58277 +#include "a_config.h"
58278 +#include "athdefs.h"
58279 +#include "a_types.h"
58280 +#include "a_osapi.h"
58281 +#include "hif.h"
58282 +
58283 +#define MANUFACTURER_ID_AR6001_BASE 0x100
58284 +#define MANUFACTURER_ID_AR6002_BASE 0x200
58285 +#define FUNCTION_CLASS 0x0
58286 +#define MANUFACTURER_CODE 0x271
58287 +
58288 +#define BUS_REQUEST_MAX_NUM 64
58289 +
58290 +#define SDIO_CLOCK_FREQUENCY_DEFAULT 25000000
58291 +#define SDWLAN_ENABLE_DISABLE_TIMEOUT 20
58292 +#define FLAGS_CARD_ENAB 0x02
58293 +#define FLAGS_CARD_IRQ_UNMSK 0x04
58294 +
58295 +#define HIF_MBOX_BLOCK_SIZE 128
58296 +#define HIF_MBOX_BASE_ADDR 0x800
58297 +#define HIF_MBOX_WIDTH 0x800
58298 +#define HIF_MBOX0_BLOCK_SIZE 1
58299 +#define HIF_MBOX1_BLOCK_SIZE HIF_MBOX_BLOCK_SIZE
58300 +#define HIF_MBOX2_BLOCK_SIZE HIF_MBOX_BLOCK_SIZE
58301 +#define HIF_MBOX3_BLOCK_SIZE HIF_MBOX_BLOCK_SIZE
58302 +
58303 +#define HIF_MBOX_START_ADDR(mbox) \
58304 + HIF_MBOX_BASE_ADDR + mbox * HIF_MBOX_WIDTH
58305 +
58306 +#define HIF_MBOX_END_ADDR(mbox) \
58307 + HIF_MBOX_START_ADDR(mbox) + HIF_MBOX_WIDTH - 1
58308 +
58309 +struct hif_device {
58310 + SDDEVICE *handle;
58311 + void *htc_handle;
58312 + OSKERNEL_HELPER insert_helper;
58313 + BOOL helper_started;
58314 +};
58315 +
58316 +typedef struct target_function_context {
58317 + SDFUNCTION function; /* function description of the bus driver */
58318 + OS_SEMAPHORE instanceSem; /* instance lock. Unused */
58319 + SDLIST instanceList; /* list of instances. Unused */
58320 +} TARGET_FUNCTION_CONTEXT;
58321 +
58322 +typedef struct bus_request {
58323 + struct bus_request *next;
58324 + SDREQUEST *request;
58325 + void *context;
58326 +} BUS_REQUEST;
58327 +
58328 +BOOL
58329 +hifDeviceInserted(SDFUNCTION *function, SDDEVICE *device);
58330 +
58331 +void
58332 +hifDeviceRemoved(SDFUNCTION *function, SDDEVICE *device);
58333 +
58334 +SDREQUEST *
58335 +hifAllocateDeviceRequest(SDDEVICE *device);
58336 +
58337 +void
58338 +hifFreeDeviceRequest(SDREQUEST *request);
58339 +
58340 +void
58341 +hifRWCompletionHandler(SDREQUEST *request);
58342 +
58343 +void
58344 +hifIRQHandler(void *context);
58345 +
58346 +HIF_DEVICE *
58347 +addHifDevice(SDDEVICE *handle);
58348 +
58349 +HIF_DEVICE *
58350 +getHifDevice(SDDEVICE *handle);
58351 +
58352 +void
58353 +delHifDevice(SDDEVICE *handle);
58354 Index: linux-2.6.28/drivers/ar6000/htc/ar6k.c
58355 ===================================================================
58356 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
58357 +++ linux-2.6.28/drivers/ar6000/htc/ar6k.c 2009-01-02 00:01:56.000000000 +0100
58358 @@ -0,0 +1,991 @@
58359 +/*
58360 + * AR6K device layer that handles register level I/O
58361 + *
58362 + * Copyright (c) 2007 Atheros Communications Inc.
58363 + * All rights reserved.
58364 + *
58365 + *
58366 + * This program is free software; you can redistribute it and/or modify
58367 + * it under the terms of the GNU General Public License version 2 as
58368 + * published by the Free Software Foundation;
58369 + *
58370 + * Software distributed under the License is distributed on an "AS
58371 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
58372 + * implied. See the License for the specific language governing
58373 + * rights and limitations under the License.
58374 + *
58375 + *
58376 + *
58377 + */
58378 +#include "a_config.h"
58379 +#include "athdefs.h"
58380 +#include "a_types.h"
58381 +#include "AR6Khwreg.h"
58382 +#include "a_osapi.h"
58383 +#include "a_debug.h"
58384 +#include "hif.h"
58385 +#include "htc_packet.h"
58386 +#include "ar6k.h"
58387 +
58388 +#define MAILBOX_FOR_BLOCK_SIZE 1
58389 +
58390 +extern A_UINT32 resetok;
58391 +
58392 +static A_STATUS DevEnableInterrupts(AR6K_DEVICE *pDev);
58393 +static A_STATUS DevDisableInterrupts(AR6K_DEVICE *pDev);
58394 +
58395 +#define LOCK_AR6K(p) A_MUTEX_LOCK(&(p)->Lock);
58396 +#define UNLOCK_AR6K(p) A_MUTEX_UNLOCK(&(p)->Lock);
58397 +
58398 +void AR6KFreeIOPacket(AR6K_DEVICE *pDev, HTC_PACKET *pPacket)
58399 +{
58400 + LOCK_AR6K(pDev);
58401 + HTC_PACKET_ENQUEUE(&pDev->RegisterIOList,pPacket);
58402 + UNLOCK_AR6K(pDev);
58403 +}
58404 +
58405 +HTC_PACKET *AR6KAllocIOPacket(AR6K_DEVICE *pDev)
58406 +{
58407 + HTC_PACKET *pPacket;
58408 +
58409 + LOCK_AR6K(pDev);
58410 + pPacket = HTC_PACKET_DEQUEUE(&pDev->RegisterIOList);
58411 + UNLOCK_AR6K(pDev);
58412 +
58413 + return pPacket;
58414 +}
58415 +
58416 +A_STATUS DevSetup(AR6K_DEVICE *pDev)
58417 +{
58418 + A_UINT32 mailboxaddrs[AR6K_MAILBOXES];
58419 + A_UINT32 blocksizes[AR6K_MAILBOXES];
58420 + A_STATUS status = A_OK;
58421 + int i;
58422 +
58423 + AR_DEBUG_ASSERT(AR6K_IRQ_PROC_REGS_SIZE == 16);
58424 + AR_DEBUG_ASSERT(AR6K_IRQ_ENABLE_REGS_SIZE == 4);
58425 +
58426 + do {
58427 + /* give a handle to HIF for this target */
58428 + HIFSetHandle(pDev->HIFDevice, (void *)pDev);
58429 + /* initialize our free list of IO packets */
58430 + INIT_HTC_PACKET_QUEUE(&pDev->RegisterIOList);
58431 + A_MUTEX_INIT(&pDev->Lock);
58432 +
58433 + /* get the addresses for all 4 mailboxes */
58434 + status = HIFConfigureDevice(pDev->HIFDevice, HIF_DEVICE_GET_MBOX_ADDR,
58435 + mailboxaddrs, sizeof(mailboxaddrs));
58436 +
58437 + if (status != A_OK) {
58438 + AR_DEBUG_ASSERT(FALSE);
58439 + break;
58440 + }
58441 +
58442 + /* carve up register I/O packets (these are for ASYNC register I/O ) */
58443 + for (i = 0; i < AR6K_MAX_REG_IO_BUFFERS; i++) {
58444 + HTC_PACKET *pIOPacket;
58445 + pIOPacket = &pDev->RegIOBuffers[i].HtcPacket;
58446 + SET_HTC_PACKET_INFO_RX_REFILL(pIOPacket,
58447 + pDev,
58448 + pDev->RegIOBuffers[i].Buffer,
58449 + AR6K_REG_IO_BUFFER_SIZE,
58450 + 0); /* don't care */
58451 + AR6KFreeIOPacket(pDev,pIOPacket);
58452 + }
58453 +
58454 + /* get the address of the mailbox we are using */
58455 + pDev->MailboxAddress = mailboxaddrs[HTC_MAILBOX];
58456 +
58457 + /* get the block sizes */
58458 + status = HIFConfigureDevice(pDev->HIFDevice, HIF_DEVICE_GET_MBOX_BLOCK_SIZE,
58459 + blocksizes, sizeof(blocksizes));
58460 +
58461 + if (status != A_OK) {
58462 + AR_DEBUG_ASSERT(FALSE);
58463 + break;
58464 + }
58465 +
58466 + /* note: we actually get the block size of a mailbox other than 0, for SDIO the block
58467 + * size on mailbox 0 is artificially set to 1. So we use the block size that is set
58468 + * for the other 3 mailboxes */
58469 + pDev->BlockSize = blocksizes[MAILBOX_FOR_BLOCK_SIZE];
58470 + /* must be a power of 2 */
58471 + AR_DEBUG_ASSERT((pDev->BlockSize & (pDev->BlockSize - 1)) == 0);
58472 +
58473 + /* assemble mask, used for padding to a block */
58474 + pDev->BlockMask = pDev->BlockSize - 1;
58475 +
58476 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("BlockSize: %d, MailboxAddress:0x%X \n",
58477 + pDev->BlockSize, pDev->MailboxAddress));
58478 +
58479 + pDev->GetPendingEventsFunc = NULL;
58480 + /* see if the HIF layer implements the get pending events function */
58481 + HIFConfigureDevice(pDev->HIFDevice,
58482 + HIF_DEVICE_GET_PENDING_EVENTS_FUNC,
58483 + &pDev->GetPendingEventsFunc,
58484 + sizeof(pDev->GetPendingEventsFunc));
58485 +
58486 + /* assume we can process HIF interrupt events asynchronously */
58487 + pDev->HifIRQProcessingMode = HIF_DEVICE_IRQ_ASYNC_SYNC;
58488 +
58489 + /* see if the HIF layer overrides this assumption */
58490 + HIFConfigureDevice(pDev->HIFDevice,
58491 + HIF_DEVICE_GET_IRQ_PROC_MODE,
58492 + &pDev->HifIRQProcessingMode,
58493 + sizeof(pDev->HifIRQProcessingMode));
58494 +
58495 + switch (pDev->HifIRQProcessingMode) {
58496 + case HIF_DEVICE_IRQ_SYNC_ONLY:
58497 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("HIF Interrupt processing is SYNC ONLY\n"));
58498 + break;
58499 + case HIF_DEVICE_IRQ_ASYNC_SYNC:
58500 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("HIF Interrupt processing is ASYNC and SYNC\n"));
58501 + break;
58502 + default:
58503 + AR_DEBUG_ASSERT(FALSE);
58504 + }
58505 +
58506 + pDev->HifMaskUmaskRecvEvent = NULL;
58507 +
58508 + /* see if the HIF layer implements the mask/unmask recv events function */
58509 + HIFConfigureDevice(pDev->HIFDevice,
58510 + HIF_DEVICE_GET_RECV_EVENT_MASK_UNMASK_FUNC,
58511 + &pDev->HifMaskUmaskRecvEvent,
58512 + sizeof(pDev->HifMaskUmaskRecvEvent));
58513 +
58514 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("HIF special overrides : 0x%X , 0x%X\n",
58515 + (A_UINT32)pDev->GetPendingEventsFunc, (A_UINT32)pDev->HifMaskUmaskRecvEvent));
58516 +
58517 + status = DevDisableInterrupts(pDev);
58518 +
58519 + } while (FALSE);
58520 +
58521 + if (A_FAILED(status)) {
58522 + /* make sure handle is cleared */
58523 + HIFSetHandle(pDev->HIFDevice, NULL);
58524 + }
58525 +
58526 + return status;
58527 +
58528 +}
58529 +
58530 +static A_STATUS DevEnableInterrupts(AR6K_DEVICE *pDev)
58531 +{
58532 + A_STATUS status;
58533 + AR6K_IRQ_ENABLE_REGISTERS regs;
58534 +
58535 + LOCK_AR6K(pDev);
58536 +
58537 + /* Enable all the interrupts except for the dragon interrupt */
58538 + pDev->IrqEnableRegisters.int_status_enable = INT_STATUS_ENABLE_ERROR_SET(0x01) |
58539 + INT_STATUS_ENABLE_CPU_SET(0x01) |
58540 + INT_STATUS_ENABLE_COUNTER_SET(0x01);
58541 +
58542 + if (NULL == pDev->GetPendingEventsFunc) {
58543 + pDev->IrqEnableRegisters.int_status_enable |= INT_STATUS_ENABLE_MBOX_DATA_SET(0x01);
58544 + } else {
58545 + /* The HIF layer provided us with a pending events function which means that
58546 + * the detection of pending mbox messages is handled in the HIF layer.
58547 + * This is the case for the SPI2 interface.
58548 + * In the normal case we enable MBOX interrupts, for the case
58549 + * with HIFs that offer this mechanism, we keep these interrupts
58550 + * masked */
58551 + pDev->IrqEnableRegisters.int_status_enable &= ~INT_STATUS_ENABLE_MBOX_DATA_SET(0x01);
58552 + }
58553 +
58554 +
58555 + /* Set up the CPU Interrupt Status Register */
58556 + pDev->IrqEnableRegisters.cpu_int_status_enable = CPU_INT_STATUS_ENABLE_BIT_SET(0x00);
58557 +
58558 + /* Set up the Error Interrupt Status Register */
58559 + pDev->IrqEnableRegisters.error_status_enable =
58560 + ERROR_STATUS_ENABLE_RX_UNDERFLOW_SET(0x01) |
58561 + ERROR_STATUS_ENABLE_TX_OVERFLOW_SET(0x01);
58562 +
58563 + /* Set up the Counter Interrupt Status Register (only for debug interrupt to catch fatal errors) */
58564 + pDev->IrqEnableRegisters.counter_int_status_enable =
58565 + COUNTER_INT_STATUS_ENABLE_BIT_SET(AR6K_TARGET_DEBUG_INTR_MASK);
58566 +
58567 + /* copy into our temp area */
58568 + A_MEMCPY(&regs,&pDev->IrqEnableRegisters,AR6K_IRQ_ENABLE_REGS_SIZE);
58569 +
58570 + UNLOCK_AR6K(pDev);
58571 +
58572 + /* always synchronous */
58573 + status = HIFReadWrite(pDev->HIFDevice,
58574 + INT_STATUS_ENABLE_ADDRESS,
58575 + &regs.int_status_enable,
58576 + AR6K_IRQ_ENABLE_REGS_SIZE,
58577 + HIF_WR_SYNC_BYTE_INC,
58578 + NULL);
58579 +
58580 + if (status != A_OK) {
58581 + /* Can't write it for some reason */
58582 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
58583 + ("Failed to update interrupt control registers err: %d\n", status));
58584 +
58585 + }
58586 +
58587 + return status;
58588 +}
58589 +
58590 +static A_STATUS DevDisableInterrupts(AR6K_DEVICE *pDev)
58591 +{
58592 + AR6K_IRQ_ENABLE_REGISTERS regs;
58593 +
58594 + LOCK_AR6K(pDev);
58595 + /* Disable all interrupts */
58596 + pDev->IrqEnableRegisters.int_status_enable = 0;
58597 + pDev->IrqEnableRegisters.cpu_int_status_enable = 0;
58598 + pDev->IrqEnableRegisters.error_status_enable = 0;
58599 + pDev->IrqEnableRegisters.counter_int_status_enable = 0;
58600 + /* copy into our temp area */
58601 + A_MEMCPY(&regs,&pDev->IrqEnableRegisters,AR6K_IRQ_ENABLE_REGS_SIZE);
58602 +
58603 + UNLOCK_AR6K(pDev);
58604 +
58605 + /* always synchronous */
58606 + return HIFReadWrite(pDev->HIFDevice,
58607 + INT_STATUS_ENABLE_ADDRESS,
58608 + &regs.int_status_enable,
58609 + AR6K_IRQ_ENABLE_REGS_SIZE,
58610 + HIF_WR_SYNC_BYTE_INC,
58611 + NULL);
58612 +}
58613 +
58614 +/* enable device interrupts */
58615 +A_STATUS DevUnmaskInterrupts(AR6K_DEVICE *pDev)
58616 +{
58617 + /* Unmask the host controller interrupts */
58618 + HIFUnMaskInterrupt(pDev->HIFDevice);
58619 +
58620 + return DevEnableInterrupts(pDev);
58621 +}
58622 +
58623 +/* disable all device interrupts */
58624 +A_STATUS DevMaskInterrupts(AR6K_DEVICE *pDev)
58625 +{
58626 + A_STATUS status;
58627 +
58628 + status = DevDisableInterrupts(pDev);
58629 +
58630 + if (A_SUCCESS(status)) {
58631 + /* Disable the interrupt at the HIF layer */
58632 + HIFMaskInterrupt(pDev->HIFDevice);
58633 + }
58634 +
58635 + return status;
58636 +}
58637 +
58638 +/* callback when our fetch to enable/disable completes */
58639 +static void DevDoEnableDisableRecvAsyncHandler(void *Context, HTC_PACKET *pPacket)
58640 +{
58641 + AR6K_DEVICE *pDev = (AR6K_DEVICE *)Context;
58642 +
58643 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("+DevDoEnableDisableRecvAsyncHandler: (dev: 0x%X)\n", (A_UINT32)pDev));
58644 +
58645 + if (A_FAILED(pPacket->Status)) {
58646 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
58647 + (" Failed to disable receiver, status:%d \n", pPacket->Status));
58648 + }
58649 + /* free this IO packet */
58650 + AR6KFreeIOPacket(pDev,pPacket);
58651 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("-DevDoEnableDisableRecvAsyncHandler \n"));
58652 +}
58653 +
58654 +/* disable packet reception (used in case the host runs out of buffers)
58655 + * this is the "override" method when the HIF reports another methods to
58656 + * disable recv events */
58657 +static A_STATUS DevDoEnableDisableRecvOverride(AR6K_DEVICE *pDev, A_BOOL EnableRecv, A_BOOL AsyncMode)
58658 +{
58659 + A_STATUS status = A_OK;
58660 + HTC_PACKET *pIOPacket = NULL;
58661 +
58662 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("DevDoEnableDisableRecvOverride: Enable:%d Mode:%d\n",
58663 + EnableRecv,AsyncMode));
58664 +
58665 + do {
58666 +
58667 + if (AsyncMode) {
58668 +
58669 + pIOPacket = AR6KAllocIOPacket(pDev);
58670 +
58671 + if (NULL == pIOPacket) {
58672 + status = A_NO_MEMORY;
58673 + AR_DEBUG_ASSERT(FALSE);
58674 + break;
58675 + }
58676 +
58677 + /* stick in our completion routine when the I/O operation completes */
58678 + pIOPacket->Completion = DevDoEnableDisableRecvAsyncHandler;
58679 + pIOPacket->pContext = pDev;
58680 +
58681 + /* call the HIF layer override and do this asynchronously */
58682 + status = pDev->HifMaskUmaskRecvEvent(pDev->HIFDevice,
58683 + EnableRecv ? HIF_UNMASK_RECV : HIF_MASK_RECV,
58684 + pIOPacket);
58685 + break;
58686 + }
58687 +
58688 + /* if we get here we are doing it synchronously */
58689 + status = pDev->HifMaskUmaskRecvEvent(pDev->HIFDevice,
58690 + EnableRecv ? HIF_UNMASK_RECV : HIF_MASK_RECV,
58691 + NULL);
58692 +
58693 + } while (FALSE);
58694 +
58695 + if (A_FAILED(status) && (pIOPacket != NULL)) {
58696 + AR6KFreeIOPacket(pDev,pIOPacket);
58697 + }
58698 +
58699 + return status;
58700 +}
58701 +
58702 +/* disable packet reception (used in case the host runs out of buffers)
58703 + * this is the "normal" method using the interrupt enable registers through
58704 + * the host I/F */
58705 +static A_STATUS DevDoEnableDisableRecvNormal(AR6K_DEVICE *pDev, A_BOOL EnableRecv, A_BOOL AsyncMode)
58706 +{
58707 + A_STATUS status = A_OK;
58708 + HTC_PACKET *pIOPacket = NULL;
58709 + AR6K_IRQ_ENABLE_REGISTERS regs;
58710 +
58711 + /* take the lock to protect interrupt enable shadows */
58712 + LOCK_AR6K(pDev);
58713 +
58714 + if (EnableRecv) {
58715 + pDev->IrqEnableRegisters.int_status_enable |= INT_STATUS_ENABLE_MBOX_DATA_SET(0x01);
58716 + } else {
58717 + pDev->IrqEnableRegisters.int_status_enable &= ~INT_STATUS_ENABLE_MBOX_DATA_SET(0x01);
58718 + }
58719 +
58720 + /* copy into our temp area */
58721 + A_MEMCPY(&regs,&pDev->IrqEnableRegisters,AR6K_IRQ_ENABLE_REGS_SIZE);
58722 + UNLOCK_AR6K(pDev);
58723 +
58724 + do {
58725 +
58726 + if (AsyncMode) {
58727 +
58728 + pIOPacket = AR6KAllocIOPacket(pDev);
58729 +
58730 + if (NULL == pIOPacket) {
58731 + status = A_NO_MEMORY;
58732 + AR_DEBUG_ASSERT(FALSE);
58733 + break;
58734 + }
58735 +
58736 + /* copy values to write to our async I/O buffer */
58737 + A_MEMCPY(pIOPacket->pBuffer,&regs,AR6K_IRQ_ENABLE_REGS_SIZE);
58738 +
58739 + /* stick in our completion routine when the I/O operation completes */
58740 + pIOPacket->Completion = DevDoEnableDisableRecvAsyncHandler;
58741 + pIOPacket->pContext = pDev;
58742 +
58743 + /* write it out asynchronously */
58744 + HIFReadWrite(pDev->HIFDevice,
58745 + INT_STATUS_ENABLE_ADDRESS,
58746 + pIOPacket->pBuffer,
58747 + AR6K_IRQ_ENABLE_REGS_SIZE,
58748 + HIF_WR_ASYNC_BYTE_INC,
58749 + pIOPacket);
58750 + break;
58751 + }
58752 +
58753 + /* if we get here we are doing it synchronously */
58754 +
58755 + status = HIFReadWrite(pDev->HIFDevice,
58756 + INT_STATUS_ENABLE_ADDRESS,
58757 + &regs.int_status_enable,
58758 + AR6K_IRQ_ENABLE_REGS_SIZE,
58759 + HIF_WR_SYNC_BYTE_INC,
58760 + NULL);
58761 +
58762 + } while (FALSE);
58763 +
58764 + if (A_FAILED(status) && (pIOPacket != NULL)) {
58765 + AR6KFreeIOPacket(pDev,pIOPacket);
58766 + }
58767 +
58768 + return status;
58769 +}
58770 +
58771 +
58772 +A_STATUS DevStopRecv(AR6K_DEVICE *pDev, A_BOOL AsyncMode)
58773 +{
58774 + if (NULL == pDev->HifMaskUmaskRecvEvent) {
58775 + return DevDoEnableDisableRecvNormal(pDev,FALSE,AsyncMode);
58776 + } else {
58777 + return DevDoEnableDisableRecvOverride(pDev,FALSE,AsyncMode);
58778 + }
58779 +}
58780 +
58781 +A_STATUS DevEnableRecv(AR6K_DEVICE *pDev, A_BOOL AsyncMode)
58782 +{
58783 + if (NULL == pDev->HifMaskUmaskRecvEvent) {
58784 + return DevDoEnableDisableRecvNormal(pDev,TRUE,AsyncMode);
58785 + } else {
58786 + return DevDoEnableDisableRecvOverride(pDev,TRUE,AsyncMode);
58787 + }
58788 +}
58789 +
58790 +void DevDumpRegisters(AR6K_IRQ_PROC_REGISTERS *pIrqProcRegs,
58791 + AR6K_IRQ_ENABLE_REGISTERS *pIrqEnableRegs)
58792 +{
58793 +
58794 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP, ("\n<------- Register Table -------->\n"));
58795 +
58796 + if (pIrqProcRegs != NULL) {
58797 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58798 + ("Int Status: 0x%x\n",pIrqProcRegs->host_int_status));
58799 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58800 + ("CPU Int Status: 0x%x\n",pIrqProcRegs->cpu_int_status));
58801 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58802 + ("Error Int Status: 0x%x\n",pIrqProcRegs->error_int_status));
58803 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58804 + ("Counter Int Status: 0x%x\n",pIrqProcRegs->counter_int_status));
58805 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58806 + ("Mbox Frame: 0x%x\n",pIrqProcRegs->mbox_frame));
58807 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58808 + ("Rx Lookahead Valid: 0x%x\n",pIrqProcRegs->rx_lookahead_valid));
58809 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58810 + ("Rx Lookahead 0: 0x%x\n",pIrqProcRegs->rx_lookahead[0]));
58811 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58812 + ("Rx Lookahead 1: 0x%x\n",pIrqProcRegs->rx_lookahead[1]));
58813 + }
58814 +
58815 + if (pIrqEnableRegs != NULL) {
58816 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58817 + ("Int Status Enable: 0x%x\n",pIrqEnableRegs->int_status_enable));
58818 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP,
58819 + ("Counter Int Status Enable: 0x%x\n",pIrqEnableRegs->counter_int_status_enable));
58820 + AR_DEBUG_PRINTF(ATH_DEBUG_DUMP, ("<------------------------------->\n"));
58821 + }
58822 +}
58823 +
58824 +
58825 +#ifdef MBOXHW_UNIT_TEST
58826 +
58827 +
58828 +/* This is a mailbox hardware unit test that must be called in a schedulable context
58829 + * This test is very simple, it will send a list of buffers with a counting pattern
58830 + * and the target will invert the data and send the message back
58831 + *
58832 + * the unit test has the following constraints:
58833 + *
58834 + * The target has at least 8 buffers of 256 bytes each. The host will send
58835 + * the following pattern of buffers in rapid succession :
58836 + *
58837 + * 1 buffer - 128 bytes
58838 + * 1 buffer - 256 bytes
58839 + * 1 buffer - 512 bytes
58840 + * 1 buffer - 1024 bytes
58841 + *
58842 + * The host will send the buffers to one mailbox and wait for buffers to be reflected
58843 + * back from the same mailbox. The target sends the buffers FIFO order.
58844 + * Once the final buffer has been received for a mailbox, the next mailbox is tested.
58845 + *
58846 + *
58847 + * Note: To simplifythe test , we assume that the chosen buffer sizes
58848 + * will fall on a nice block pad
58849 + *
58850 + * It is expected that higher-order tests will be written to stress the mailboxes using
58851 + * a message-based protocol (with some performance timming) that can create more
58852 + * randomness in the packets sent over mailboxes.
58853 + *
58854 + * */
58855 +
58856 +#define A_ROUND_UP_PWR2(x, align) (((int) (x) + ((align)-1)) & ~((align)-1))
58857 +
58858 +#define BUFFER_BLOCK_PAD 128
58859 +
58860 +#if 0
58861 +#define BUFFER1 128
58862 +#define BUFFER2 256
58863 +#define BUFFER3 512
58864 +#define BUFFER4 1024
58865 +#endif
58866 +
58867 +#if 1
58868 +#define BUFFER1 80
58869 +#define BUFFER2 200
58870 +#define BUFFER3 444
58871 +#define BUFFER4 800
58872 +#endif
58873 +
58874 +#define TOTAL_BYTES (A_ROUND_UP_PWR2(BUFFER1,BUFFER_BLOCK_PAD) + \
58875 + A_ROUND_UP_PWR2(BUFFER2,BUFFER_BLOCK_PAD) + \
58876 + A_ROUND_UP_PWR2(BUFFER3,BUFFER_BLOCK_PAD) + \
58877 + A_ROUND_UP_PWR2(BUFFER4,BUFFER_BLOCK_PAD) )
58878 +
58879 +#define TEST_BYTES (BUFFER1 + BUFFER2 + BUFFER3 + BUFFER4)
58880 +
58881 +#define TEST_CREDITS_RECV_TIMEOUT 100
58882 +
58883 +static A_UINT8 g_Buffer[TOTAL_BYTES];
58884 +static A_UINT32 g_MailboxAddrs[AR6K_MAILBOXES];
58885 +static A_UINT32 g_BlockSizes[AR6K_MAILBOXES];
58886 +
58887 +#define BUFFER_PROC_LIST_DEPTH 4
58888 +
58889 +typedef struct _BUFFER_PROC_LIST{
58890 + A_UINT8 *pBuffer;
58891 + A_UINT32 length;
58892 +}BUFFER_PROC_LIST;
58893 +
58894 +
58895 +#define PUSH_BUFF_PROC_ENTRY(pList,len,pCurrpos) \
58896 +{ \
58897 + (pList)->pBuffer = (pCurrpos); \
58898 + (pList)->length = (len); \
58899 + (pCurrpos) += (len); \
58900 + (pList)++; \
58901 +}
58902 +
58903 +/* a simple and crude way to send different "message" sizes */
58904 +static void AssembleBufferList(BUFFER_PROC_LIST *pList)
58905 +{
58906 + A_UINT8 *pBuffer = g_Buffer;
58907 +
58908 +#if BUFFER_PROC_LIST_DEPTH < 4
58909 +#error "Buffer processing list depth is not deep enough!!"
58910 +#endif
58911 +
58912 + PUSH_BUFF_PROC_ENTRY(pList,BUFFER1,pBuffer);
58913 + PUSH_BUFF_PROC_ENTRY(pList,BUFFER2,pBuffer);
58914 + PUSH_BUFF_PROC_ENTRY(pList,BUFFER3,pBuffer);
58915 + PUSH_BUFF_PROC_ENTRY(pList,BUFFER4,pBuffer);
58916 +
58917 +}
58918 +
58919 +#define FILL_ZERO TRUE
58920 +#define FILL_COUNTING FALSE
58921 +static void InitBuffers(A_BOOL Zero)
58922 +{
58923 + A_UINT16 *pBuffer16 = (A_UINT16 *)g_Buffer;
58924 + int i;
58925 +
58926 + /* fill buffer with 16 bit counting pattern or zeros */
58927 + for (i = 0; i < (TOTAL_BYTES / 2) ; i++) {
58928 + if (!Zero) {
58929 + pBuffer16[i] = (A_UINT16)i;
58930 + } else {
58931 + pBuffer16[i] = 0;
58932 + }
58933 + }
58934 +}
58935 +
58936 +
58937 +static A_BOOL CheckOneBuffer(A_UINT16 *pBuffer16, int Length)
58938 +{
58939 + int i;
58940 + A_UINT16 startCount;
58941 + A_BOOL success = TRUE;
58942 +
58943 + /* get the starting count */
58944 + startCount = pBuffer16[0];
58945 + /* invert it, this is the expected value */
58946 + startCount = ~startCount;
58947 + /* scan the buffer and verify */
58948 + for (i = 0; i < (Length / 2) ; i++,startCount++) {
58949 + /* target will invert all the data */
58950 + if ((A_UINT16)pBuffer16[i] != (A_UINT16)~startCount) {
58951 + success = FALSE;
58952 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Invalid Data Got:0x%X, Expecting:0x%X (offset:%d, total:%d) \n",
58953 + pBuffer16[i], ((A_UINT16)~startCount), i, Length));
58954 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("0x%X 0x%X 0x%X 0x%X \n",
58955 + pBuffer16[i], pBuffer16[i + 1], pBuffer16[i + 2],pBuffer16[i+3]));
58956 + break;
58957 + }
58958 + }
58959 +
58960 + return success;
58961 +}
58962 +
58963 +static A_BOOL CheckBuffers(void)
58964 +{
58965 + int i;
58966 + A_BOOL success = TRUE;
58967 + BUFFER_PROC_LIST checkList[BUFFER_PROC_LIST_DEPTH];
58968 +
58969 + /* assemble the list */
58970 + AssembleBufferList(checkList);
58971 +
58972 + /* scan the buffers and verify */
58973 + for (i = 0; i < BUFFER_PROC_LIST_DEPTH ; i++) {
58974 + success = CheckOneBuffer((A_UINT16 *)checkList[i].pBuffer, checkList[i].length);
58975 + if (!success) {
58976 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Buffer : 0x%X, Length:%d failed verify \n",
58977 + (A_UINT32)checkList[i].pBuffer, checkList[i].length));
58978 + break;
58979 + }
58980 + }
58981 +
58982 + return success;
58983 +}
58984 +
58985 + /* find the end marker for the last buffer we will be sending */
58986 +static A_UINT16 GetEndMarker(void)
58987 +{
58988 + A_UINT8 *pBuffer;
58989 + BUFFER_PROC_LIST checkList[BUFFER_PROC_LIST_DEPTH];
58990 +
58991 + /* fill up buffers with the normal counting pattern */
58992 + InitBuffers(FILL_COUNTING);
58993 +
58994 + /* assemble the list we will be sending down */
58995 + AssembleBufferList(checkList);
58996 + /* point to the last 2 bytes of the last buffer */
58997 + pBuffer = &(checkList[BUFFER_PROC_LIST_DEPTH - 1].pBuffer[(checkList[BUFFER_PROC_LIST_DEPTH - 1].length) - 2]);
58998 +
58999 + /* the last count in the last buffer is the marker */
59000 + return (A_UINT16)pBuffer[0] | ((A_UINT16)pBuffer[1] << 8);
59001 +}
59002 +
59003 +#define ATH_PRINT_OUT_ZONE ATH_DEBUG_ERR
59004 +
59005 +/* send the ordered buffers to the target */
59006 +static A_STATUS SendBuffers(AR6K_DEVICE *pDev, int mbox)
59007 +{
59008 + A_STATUS status = A_OK;
59009 + A_UINT32 request = HIF_WR_SYNC_BLOCK_INC;
59010 + BUFFER_PROC_LIST sendList[BUFFER_PROC_LIST_DEPTH];
59011 + int i;
59012 + int totalBytes = 0;
59013 + int paddedLength;
59014 + int totalwPadding = 0;
59015 +
59016 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Sending buffers on mailbox : %d \n",mbox));
59017 +
59018 + /* fill buffer with counting pattern */
59019 + InitBuffers(FILL_COUNTING);
59020 +
59021 + /* assemble the order in which we send */
59022 + AssembleBufferList(sendList);
59023 +
59024 + for (i = 0; i < BUFFER_PROC_LIST_DEPTH; i++) {
59025 +
59026 + /* we are doing block transfers, so we need to pad everything to a block size */
59027 + paddedLength = (sendList[i].length + (g_BlockSizes[mbox] - 1)) &
59028 + (~(g_BlockSizes[mbox] - 1));
59029 +
59030 + /* send each buffer synchronously */
59031 + status = HIFReadWrite(pDev->HIFDevice,
59032 + g_MailboxAddrs[mbox],
59033 + sendList[i].pBuffer,
59034 + paddedLength,
59035 + request,
59036 + NULL);
59037 + if (status != A_OK) {
59038 + break;
59039 + }
59040 + totalBytes += sendList[i].length;
59041 + totalwPadding += paddedLength;
59042 + }
59043 +
59044 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Sent %d bytes (%d padded bytes) to mailbox : %d \n",totalBytes,totalwPadding,mbox));
59045 +
59046 + return status;
59047 +}
59048 +
59049 +/* poll the mailbox credit counter until we get a credit or timeout */
59050 +static A_STATUS GetCredits(AR6K_DEVICE *pDev, int mbox, int *pCredits)
59051 +{
59052 + A_STATUS status = A_OK;
59053 + int timeout = TEST_CREDITS_RECV_TIMEOUT;
59054 + A_UINT8 credits = 0;
59055 + A_UINT32 address;
59056 +
59057 + while (TRUE) {
59058 +
59059 + /* Read the counter register to get credits, this auto-decrements */
59060 + address = COUNT_DEC_ADDRESS + (AR6K_MAILBOXES + mbox) * 4;
59061 + status = HIFReadWrite(pDev->HIFDevice, address, &credits, sizeof(credits),
59062 + HIF_RD_SYNC_BYTE_FIX, NULL);
59063 + if (status != A_OK) {
59064 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
59065 + ("Unable to decrement the command credit count register (mbox=%d)\n",mbox));
59066 + status = A_ERROR;
59067 + break;
59068 + }
59069 +
59070 + if (credits) {
59071 + break;
59072 + }
59073 +
59074 + timeout--;
59075 +
59076 + if (timeout <= 0) {
59077 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
59078 + (" Timeout reading credit registers (mbox=%d, address:0x%X) \n",mbox,address));
59079 + status = A_ERROR;
59080 + break;
59081 + }
59082 +
59083 + /* delay a little, target may not be ready */
59084 + A_MDELAY(1000);
59085 +
59086 + }
59087 +
59088 + if (status == A_OK) {
59089 + *pCredits = credits;
59090 + }
59091 +
59092 + return status;
59093 +}
59094 +
59095 +
59096 +/* wait for the buffers to come back */
59097 +static A_STATUS RecvBuffers(AR6K_DEVICE *pDev, int mbox)
59098 +{
59099 + A_STATUS status = A_OK;
59100 + A_UINT32 request = HIF_RD_SYNC_BLOCK_INC;
59101 + BUFFER_PROC_LIST recvList[BUFFER_PROC_LIST_DEPTH];
59102 + int curBuffer;
59103 + int credits;
59104 + int i;
59105 + int totalBytes = 0;
59106 + int paddedLength;
59107 + int totalwPadding = 0;
59108 +
59109 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Waiting for buffers on mailbox : %d \n",mbox));
59110 +
59111 + /* zero the buffers */
59112 + InitBuffers(FILL_ZERO);
59113 +
59114 + /* assemble the order in which we should receive */
59115 + AssembleBufferList(recvList);
59116 +
59117 + curBuffer = 0;
59118 +
59119 + while (curBuffer < BUFFER_PROC_LIST_DEPTH) {
59120 +
59121 + /* get number of buffers that have been completed, this blocks
59122 + * until we get at least 1 credit or it times out */
59123 + status = GetCredits(pDev, mbox, &credits);
59124 +
59125 + if (status != A_OK) {
59126 + break;
59127 + }
59128 +
59129 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Got %d messages on mailbox : %d \n",credits, mbox));
59130 +
59131 + /* get all the buffers that are sitting on the queue */
59132 + for (i = 0; i < credits; i++) {
59133 + AR_DEBUG_ASSERT(curBuffer < BUFFER_PROC_LIST_DEPTH);
59134 + /* recv the current buffer synchronously, the buffers should come back in
59135 + * order... with padding applied by the target */
59136 + paddedLength = (recvList[curBuffer].length + (g_BlockSizes[mbox] - 1)) &
59137 + (~(g_BlockSizes[mbox] - 1));
59138 +
59139 + status = HIFReadWrite(pDev->HIFDevice,
59140 + g_MailboxAddrs[mbox],
59141 + recvList[curBuffer].pBuffer,
59142 + paddedLength,
59143 + request,
59144 + NULL);
59145 + if (status != A_OK) {
59146 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Failed to read %d bytes on mailbox:%d : address:0x%X \n",
59147 + recvList[curBuffer].length, mbox, g_MailboxAddrs[mbox]));
59148 + break;
59149 + }
59150 +
59151 + totalwPadding += paddedLength;
59152 + totalBytes += recvList[curBuffer].length;
59153 + curBuffer++;
59154 + }
59155 +
59156 + if (status != A_OK) {
59157 + break;
59158 + }
59159 + /* go back and get some more */
59160 + credits = 0;
59161 + }
59162 +
59163 + if (totalBytes != TEST_BYTES) {
59164 + AR_DEBUG_ASSERT(FALSE);
59165 + } else {
59166 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Got all buffers on mbox:%d total recv :%d (w/Padding : %d) \n",
59167 + mbox, totalBytes, totalwPadding));
59168 + }
59169 +
59170 + return status;
59171 +
59172 +
59173 +}
59174 +
59175 +static A_STATUS DoOneMboxHWTest(AR6K_DEVICE *pDev, int mbox)
59176 +{
59177 + A_STATUS status;
59178 +
59179 + do {
59180 + /* send out buffers */
59181 + status = SendBuffers(pDev,mbox);
59182 +
59183 + if (status != A_OK) {
59184 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Sending buffers Failed : %d mbox:%d\n",status,mbox));
59185 + break;
59186 + }
59187 +
59188 + /* go get them, this will block */
59189 + status = RecvBuffers(pDev, mbox);
59190 +
59191 + if (status != A_OK) {
59192 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Recv buffers Failed : %d mbox:%d\n",status,mbox));
59193 + break;
59194 + }
59195 +
59196 + /* check the returned data patterns */
59197 + if (!CheckBuffers()) {
59198 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Buffer Verify Failed : mbox:%d\n",mbox));
59199 + status = A_ERROR;
59200 + break;
59201 + }
59202 +
59203 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, (" Send/Recv success! mailbox : %d \n",mbox));
59204 +
59205 + } while (FALSE);
59206 +
59207 + return status;
59208 +}
59209 +
59210 +/* here is where the test starts */
59211 +A_STATUS DoMboxHWTest(AR6K_DEVICE *pDev)
59212 +{
59213 + int i;
59214 + A_STATUS status;
59215 + int credits = 0;
59216 + A_UINT8 params[4];
59217 + int numBufs;
59218 + int bufferSize;
59219 + A_UINT16 temp;
59220 +
59221 +
59222 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, (" DoMboxHWTest START - \n"));
59223 +
59224 + do {
59225 + /* get the addresses for all 4 mailboxes */
59226 + status = HIFConfigureDevice(pDev->HIFDevice, HIF_DEVICE_GET_MBOX_ADDR,
59227 + g_MailboxAddrs, sizeof(g_MailboxAddrs));
59228 +
59229 + if (status != A_OK) {
59230 + AR_DEBUG_ASSERT(FALSE);
59231 + break;
59232 + }
59233 +
59234 + /* get the block sizes */
59235 + status = HIFConfigureDevice(pDev->HIFDevice, HIF_DEVICE_GET_MBOX_BLOCK_SIZE,
59236 + g_BlockSizes, sizeof(g_BlockSizes));
59237 +
59238 + if (status != A_OK) {
59239 + AR_DEBUG_ASSERT(FALSE);
59240 + break;
59241 + }
59242 +
59243 + /* note, the HIF layer usually reports mbox 0 to have a block size of
59244 + * 1, but our test wants to run in block-mode for all mailboxes, so we treat all mailboxes
59245 + * the same. */
59246 + g_BlockSizes[0] = g_BlockSizes[1];
59247 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Block Size to use: %d \n",g_BlockSizes[0]));
59248 +
59249 + if (g_BlockSizes[1] > BUFFER_BLOCK_PAD) {
59250 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("%d Block size is too large for buffer pad %d\n",
59251 + g_BlockSizes[1], BUFFER_BLOCK_PAD));
59252 + break;
59253 + }
59254 +
59255 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Waiting for target.... \n"));
59256 +
59257 + /* the target lets us know it is ready by giving us 1 credit on
59258 + * mailbox 0 */
59259 + status = GetCredits(pDev, 0, &credits);
59260 +
59261 + if (status != A_OK) {
59262 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Failed to wait for target ready \n"));
59263 + break;
59264 + }
59265 +
59266 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Target is ready ...\n"));
59267 +
59268 + /* read the first 4 scratch registers */
59269 + status = HIFReadWrite(pDev->HIFDevice,
59270 + SCRATCH_ADDRESS,
59271 + params,
59272 + 4,
59273 + HIF_RD_SYNC_BYTE_INC,
59274 + NULL);
59275 +
59276 + if (status != A_OK) {
59277 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Failed to wait get parameters \n"));
59278 + break;
59279 + }
59280 +
59281 + numBufs = params[0];
59282 + bufferSize = (int)(((A_UINT16)params[2] << 8) | (A_UINT16)params[1]);
59283 +
59284 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE,
59285 + ("Target parameters: bufs per mailbox:%d, buffer size:%d bytes (total space: %d, minimum required space (w/padding): %d) \n",
59286 + numBufs, bufferSize, (numBufs * bufferSize), TOTAL_BYTES));
59287 +
59288 + if ((numBufs * bufferSize) < TOTAL_BYTES) {
59289 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Not Enough buffer space to run test! need:%d, got:%d \n",
59290 + TOTAL_BYTES, (numBufs*bufferSize)));
59291 + status = A_ERROR;
59292 + break;
59293 + }
59294 +
59295 + temp = GetEndMarker();
59296 +
59297 + status = HIFReadWrite(pDev->HIFDevice,
59298 + SCRATCH_ADDRESS + 4,
59299 + (A_UINT8 *)&temp,
59300 + 2,
59301 + HIF_WR_SYNC_BYTE_INC,
59302 + NULL);
59303 +
59304 + if (status != A_OK) {
59305 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Failed to write end marker \n"));
59306 + break;
59307 + }
59308 +
59309 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("End Marker: 0x%X \n",temp));
59310 +
59311 + temp = (A_UINT16)g_BlockSizes[1];
59312 + /* convert to a mask */
59313 + temp = temp - 1;
59314 + status = HIFReadWrite(pDev->HIFDevice,
59315 + SCRATCH_ADDRESS + 6,
59316 + (A_UINT8 *)&temp,
59317 + 2,
59318 + HIF_WR_SYNC_BYTE_INC,
59319 + NULL);
59320 +
59321 + if (status != A_OK) {
59322 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Failed to write block mask \n"));
59323 + break;
59324 + }
59325 +
59326 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, ("Set Block Mask: 0x%X \n",temp));
59327 +
59328 + /* execute the test on each mailbox */
59329 + for (i = 0; i < AR6K_MAILBOXES; i++) {
59330 + status = DoOneMboxHWTest(pDev, i);
59331 + if (status != A_OK) {
59332 + break;
59333 + }
59334 + }
59335 +
59336 + } while (FALSE);
59337 +
59338 + if (status == A_OK) {
59339 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, (" DoMboxHWTest DONE - SUCCESS! - \n"));
59340 + } else {
59341 + AR_DEBUG_PRINTF(ATH_PRINT_OUT_ZONE, (" DoMboxHWTest DONE - FAILED! - \n"));
59342 + }
59343 + /* don't let HTC_Start continue, the target is actually not running any HTC code */
59344 + return A_ERROR;
59345 +}
59346 +#endif
59347 +
59348 +
59349 +
59350 Index: linux-2.6.28/drivers/ar6000/htc/ar6k_events.c
59351 ===================================================================
59352 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
59353 +++ linux-2.6.28/drivers/ar6000/htc/ar6k_events.c 2009-01-02 00:01:56.000000000 +0100
59354 @@ -0,0 +1,638 @@
59355 +/*
59356 + * AR6K Driver layer event handling (i.e. interrupts, message polling)
59357 + *
59358 + * Copyright (c) 2007 Atheros Communications Inc.
59359 + * All rights reserved.
59360 + *
59361 + *
59362 + * This program is free software; you can redistribute it and/or modify
59363 + * it under the terms of the GNU General Public License version 2 as
59364 + * published by the Free Software Foundation;
59365 + *
59366 + * Software distributed under the License is distributed on an "AS
59367 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
59368 + * implied. See the License for the specific language governing
59369 + * rights and limitations under the License.
59370 + *
59371 + *
59372 + *
59373 + */
59374 +#include "a_config.h"
59375 +#include "athdefs.h"
59376 +#include "a_types.h"
59377 +#include "AR6Khwreg.h"
59378 +#include "a_osapi.h"
59379 +#include "a_debug.h"
59380 +#include "hif.h"
59381 +#include "htc_packet.h"
59382 +#include "ar6k.h"
59383 +
59384 +extern void AR6KFreeIOPacket(AR6K_DEVICE *pDev, HTC_PACKET *pPacket);
59385 +extern HTC_PACKET *AR6KAllocIOPacket(AR6K_DEVICE *pDev);
59386 +
59387 +static A_STATUS DevServiceDebugInterrupt(AR6K_DEVICE *pDev);
59388 +
59389 +#define DELAY_PER_INTERVAL_MS 10 /* 10 MS delay per polling interval */
59390 +
59391 +/* completion routine for ALL HIF layer async I/O */
59392 +A_STATUS DevRWCompletionHandler(void *context, A_STATUS status)
59393 +{
59394 + HTC_PACKET *pPacket = (HTC_PACKET *)context;
59395 +
59396 + COMPLETE_HTC_PACKET(pPacket,status);
59397 +
59398 + return A_OK;
59399 +}
59400 +
59401 +/* mailbox recv message polling */
59402 +A_STATUS DevPollMboxMsgRecv(AR6K_DEVICE *pDev,
59403 + A_UINT32 *pLookAhead,
59404 + int TimeoutMS)
59405 +{
59406 + A_STATUS status = A_OK;
59407 + int timeout = TimeoutMS/DELAY_PER_INTERVAL_MS;
59408 +
59409 + AR_DEBUG_ASSERT(timeout > 0);
59410 +
59411 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,("+DevPollMboxMsgRecv \n"));
59412 +
59413 + while (TRUE) {
59414 +
59415 + if (pDev->GetPendingEventsFunc != NULL)
59416 + {
59417 +
59418 + HIF_PENDING_EVENTS_INFO events;
59419 +
59420 + /* the HIF layer uses a special mechanism to get events, do this
59421 + * synchronously */
59422 + status = pDev->GetPendingEventsFunc(pDev->HIFDevice,
59423 + &events,
59424 + NULL);
59425 + if (A_FAILED(status))
59426 + {
59427 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("Failed to get pending events \n"));
59428 + break;
59429 + }
59430 +
59431 + if (events.Events & HIF_RECV_MSG_AVAIL)
59432 + {
59433 + /* there is a message available, the lookahead should be valid now */
59434 + *pLookAhead = events.LookAhead;
59435 +
59436 + break;
59437 + }
59438 + }
59439 + else
59440 + {
59441 +
59442 + /* this is the standard HIF way.... */
59443 + /* load the register table */
59444 + status = HIFReadWrite(pDev->HIFDevice,
59445 + HOST_INT_STATUS_ADDRESS,
59446 + (A_UINT8 *)&pDev->IrqProcRegisters,
59447 + AR6K_IRQ_PROC_REGS_SIZE,
59448 + HIF_RD_SYNC_BYTE_INC,
59449 + NULL);
59450 +
59451 + if (A_FAILED(status))
59452 + {
59453 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("Failed to read register table \n"));
59454 + break;
59455 + }
59456 +
59457 + /* check for MBOX data and valid lookahead */
59458 + if (pDev->IrqProcRegisters.host_int_status & (1 << HTC_MAILBOX))
59459 + {
59460 + if (pDev->IrqProcRegisters.rx_lookahead_valid & (1 << HTC_MAILBOX))
59461 + {
59462 + /* mailbox has a message and the look ahead is valid */
59463 + *pLookAhead = pDev->IrqProcRegisters.rx_lookahead[HTC_MAILBOX];
59464 + break;
59465 + }
59466 + }
59467 +
59468 + }
59469 +
59470 + timeout--;
59471 +
59472 + if (timeout <= 0)
59473 + {
59474 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, (" Timeout waiting for recv message \n"));
59475 + status = A_ERROR;
59476 +
59477 + /* check if the target asserted */
59478 + if ( pDev->IrqProcRegisters.counter_int_status & AR6K_TARGET_DEBUG_INTR_MASK) {
59479 + /* target signaled an assert, process this pending interrupt
59480 + * this will call the target failure handler */
59481 + DevServiceDebugInterrupt(pDev);
59482 + }
59483 +
59484 + break;
59485 + }
59486 +
59487 + /* delay a little */
59488 + A_MDELAY(DELAY_PER_INTERVAL_MS);
59489 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,(" Retry Mbox Poll : %d \n",timeout));
59490 + }
59491 +
59492 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,("-DevPollMboxMsgRecv \n"));
59493 +
59494 + return status;
59495 +}
59496 +
59497 +static A_STATUS DevServiceCPUInterrupt(AR6K_DEVICE *pDev)
59498 +{
59499 + A_STATUS status;
59500 + A_UINT8 cpu_int_status;
59501 + A_UINT8 regBuffer[4];
59502 +
59503 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ, ("CPU Interrupt\n"));
59504 + cpu_int_status = pDev->IrqProcRegisters.cpu_int_status &
59505 + pDev->IrqEnableRegisters.cpu_int_status_enable;
59506 + AR_DEBUG_ASSERT(cpu_int_status);
59507 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,
59508 + ("Valid interrupt source(s) in CPU_INT_STATUS: 0x%x\n",
59509 + cpu_int_status));
59510 +
59511 + /* Clear the interrupt */
59512 + pDev->IrqProcRegisters.cpu_int_status &= ~cpu_int_status; /* W1C */
59513 +
59514 + /* set up the register transfer buffer to hit the register 4 times , this is done
59515 + * to make the access 4-byte aligned to mitigate issues with host bus interconnects that
59516 + * restrict bus transfer lengths to be a multiple of 4-bytes */
59517 +
59518 + /* set W1C value to clear the interrupt, this hits the register first */
59519 + regBuffer[0] = cpu_int_status;
59520 + /* the remaining 4 values are set to zero which have no-effect */
59521 + regBuffer[1] = 0;
59522 + regBuffer[2] = 0;
59523 + regBuffer[3] = 0;
59524 +
59525 + status = HIFReadWrite(pDev->HIFDevice,
59526 + CPU_INT_STATUS_ADDRESS,
59527 + regBuffer,
59528 + 4,
59529 + HIF_WR_SYNC_BYTE_FIX,
59530 + NULL);
59531 +
59532 + AR_DEBUG_ASSERT(status == A_OK);
59533 + return status;
59534 +}
59535 +
59536 +
59537 +static A_STATUS DevServiceErrorInterrupt(AR6K_DEVICE *pDev)
59538 +{
59539 + A_STATUS status;
59540 + A_UINT8 error_int_status;
59541 + A_UINT8 regBuffer[4];
59542 +
59543 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ, ("Error Interrupt\n"));
59544 + error_int_status = pDev->IrqProcRegisters.error_int_status & 0x0F;
59545 + AR_DEBUG_ASSERT(error_int_status);
59546 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,
59547 + ("Valid interrupt source(s) in ERROR_INT_STATUS: 0x%x\n",
59548 + error_int_status));
59549 +
59550 + if (ERROR_INT_STATUS_WAKEUP_GET(error_int_status)) {
59551 + /* Wakeup */
59552 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ, ("Error : Wakeup\n"));
59553 + }
59554 +
59555 + if (ERROR_INT_STATUS_RX_UNDERFLOW_GET(error_int_status)) {
59556 + /* Rx Underflow */
59557 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Error : Rx Underflow\n"));
59558 + }
59559 +
59560 + if (ERROR_INT_STATUS_TX_OVERFLOW_GET(error_int_status)) {
59561 + /* Tx Overflow */
59562 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Error : Tx Overflow\n"));
59563 + }
59564 +
59565 + /* Clear the interrupt */
59566 + pDev->IrqProcRegisters.error_int_status &= ~error_int_status; /* W1C */
59567 +
59568 + /* set up the register transfer buffer to hit the register 4 times , this is done
59569 + * to make the access 4-byte aligned to mitigate issues with host bus interconnects that
59570 + * restrict bus transfer lengths to be a multiple of 4-bytes */
59571 +
59572 + /* set W1C value to clear the interrupt, this hits the register first */
59573 + regBuffer[0] = error_int_status;
59574 + /* the remaining 4 values are set to zero which have no-effect */
59575 + regBuffer[1] = 0;
59576 + regBuffer[2] = 0;
59577 + regBuffer[3] = 0;
59578 +
59579 + status = HIFReadWrite(pDev->HIFDevice,
59580 + ERROR_INT_STATUS_ADDRESS,
59581 + regBuffer,
59582 + 4,
59583 + HIF_WR_SYNC_BYTE_FIX,
59584 + NULL);
59585 +
59586 + AR_DEBUG_ASSERT(status == A_OK);
59587 + return status;
59588 +}
59589 +
59590 +static A_STATUS DevServiceDebugInterrupt(AR6K_DEVICE *pDev)
59591 +{
59592 + A_UINT32 dummy;
59593 + A_STATUS status;
59594 +
59595 + /* Send a target failure event to the application */
59596 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Target debug interrupt\n"));
59597 +
59598 + if (pDev->TargetFailureCallback != NULL) {
59599 + pDev->TargetFailureCallback(pDev->HTCContext);
59600 + }
59601 +
59602 + /* clear the interrupt , the debug error interrupt is
59603 + * counter 0 */
59604 + /* read counter to clear interrupt */
59605 + status = HIFReadWrite(pDev->HIFDevice,
59606 + COUNT_DEC_ADDRESS,
59607 + (A_UINT8 *)&dummy,
59608 + 4,
59609 + HIF_RD_SYNC_BYTE_INC,
59610 + NULL);
59611 +
59612 + AR_DEBUG_ASSERT(status == A_OK);
59613 + return status;
59614 +}
59615 +
59616 +static A_STATUS DevServiceCounterInterrupt(AR6K_DEVICE *pDev)
59617 +{
59618 + A_UINT8 counter_int_status;
59619 +
59620 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ, ("Counter Interrupt\n"));
59621 +
59622 + counter_int_status = pDev->IrqProcRegisters.counter_int_status &
59623 + pDev->IrqEnableRegisters.counter_int_status_enable;
59624 +
59625 + AR_DEBUG_ASSERT(counter_int_status);
59626 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,
59627 + ("Valid interrupt source(s) in COUNTER_INT_STATUS: 0x%x\n",
59628 + counter_int_status));
59629 +
59630 + /* Check if the debug interrupt is pending */
59631 + if (counter_int_status & AR6K_TARGET_DEBUG_INTR_MASK) {
59632 + return DevServiceDebugInterrupt(pDev);
59633 + }
59634 +
59635 + return A_OK;
59636 +}
59637 +
59638 +/* callback when our fetch to get interrupt status registers completes */
59639 +static void DevGetEventAsyncHandler(void *Context, HTC_PACKET *pPacket)
59640 +{
59641 + AR6K_DEVICE *pDev = (AR6K_DEVICE *)Context;
59642 + A_UINT32 lookAhead = 0;
59643 + A_BOOL otherInts = FALSE;
59644 +
59645 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("+DevGetEventAsyncHandler: (dev: 0x%X)\n", (A_UINT32)pDev));
59646 +
59647 + do {
59648 +
59649 + if (A_FAILED(pPacket->Status)) {
59650 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
59651 + (" GetEvents I/O request failed, status:%d \n", pPacket->Status));
59652 + /* bail out, don't unmask HIF interrupt */
59653 + break;
59654 + }
59655 +
59656 + if (pDev->GetPendingEventsFunc != NULL) {
59657 + /* the HIF layer collected the information for us */
59658 + HIF_PENDING_EVENTS_INFO *pEvents = (HIF_PENDING_EVENTS_INFO *)pPacket->pBuffer;
59659 + if (pEvents->Events & HIF_RECV_MSG_AVAIL) {
59660 + lookAhead = pEvents->LookAhead;
59661 + if (0 == lookAhead) {
59662 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(" DevGetEventAsyncHandler1, lookAhead is zero! \n"));
59663 + }
59664 + }
59665 + if (pEvents->Events & HIF_OTHER_EVENTS) {
59666 + otherInts = TRUE;
59667 + }
59668 + } else {
59669 + /* standard interrupt table handling.... */
59670 + AR6K_IRQ_PROC_REGISTERS *pReg = (AR6K_IRQ_PROC_REGISTERS *)pPacket->pBuffer;
59671 + A_UINT8 host_int_status;
59672 +
59673 + host_int_status = pReg->host_int_status & pDev->IrqEnableRegisters.int_status_enable;
59674 +
59675 + if (host_int_status & (1 << HTC_MAILBOX)) {
59676 + host_int_status &= ~(1 << HTC_MAILBOX);
59677 + if (pReg->rx_lookahead_valid & (1 << HTC_MAILBOX)) {
59678 + /* mailbox has a message and the look ahead is valid */
59679 + lookAhead = pReg->rx_lookahead[HTC_MAILBOX];
59680 + if (0 == lookAhead) {
59681 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(" DevGetEventAsyncHandler2, lookAhead is zero! \n"));
59682 + }
59683 + }
59684 + }
59685 +
59686 + if (host_int_status) {
59687 + /* there are other interrupts to handle */
59688 + otherInts = TRUE;
59689 + }
59690 + }
59691 +
59692 + if (otherInts || (lookAhead == 0)) {
59693 + /* if there are other interrupts to process, we cannot do this in the async handler so
59694 + * ack the interrupt which will cause our sync handler to run again
59695 + * if however there are no more messages, we can now ack the interrupt */
59696 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,
59697 + (" Acking interrupt from DevGetEventAsyncHandler (otherints:%d, lookahead:0x%X)\n",
59698 + otherInts, lookAhead));
59699 + HIFAckInterrupt(pDev->HIFDevice);
59700 + } else {
59701 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,
59702 + (" DevGetEventAsyncHandler : detected another message, lookahead :0x%X \n",
59703 + lookAhead));
59704 + /* lookahead is non-zero and there are no other interrupts to service,
59705 + * go get the next message */
59706 + pDev->MessagePendingCallback(pDev->HTCContext, lookAhead, NULL);
59707 + }
59708 +
59709 + } while (FALSE);
59710 +
59711 + /* free this IO packet */
59712 + AR6KFreeIOPacket(pDev,pPacket);
59713 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("-DevGetEventAsyncHandler \n"));
59714 +}
59715 +
59716 +/* called by the HTC layer when it wants us to check if the device has any more pending
59717 + * recv messages, this starts off a series of async requests to read interrupt registers */
59718 +A_STATUS DevCheckPendingRecvMsgsAsync(void *context)
59719 +{
59720 + AR6K_DEVICE *pDev = (AR6K_DEVICE *)context;
59721 + A_STATUS status = A_OK;
59722 + HTC_PACKET *pIOPacket;
59723 +
59724 + /* this is called in an ASYNC only context, we may NOT block, sleep or call any apis that can
59725 + * cause us to switch contexts */
59726 +
59727 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("+DevCheckPendingRecvMsgsAsync: (dev: 0x%X)\n", (A_UINT32)pDev));
59728 +
59729 + do {
59730 +
59731 + if (HIF_DEVICE_IRQ_SYNC_ONLY == pDev->HifIRQProcessingMode) {
59732 + /* break the async processing chain right here, no need to continue.
59733 + * The DevDsrHandler() will handle things in a loop when things are driven
59734 + * synchronously */
59735 + break;
59736 + }
59737 + /* first allocate one of our HTC packets we created for async I/O
59738 + * we reuse HTC packet definitions so that we can use the completion mechanism
59739 + * in DevRWCompletionHandler() */
59740 + pIOPacket = AR6KAllocIOPacket(pDev);
59741 +
59742 + if (NULL == pIOPacket) {
59743 + /* there should be only 1 asynchronous request out at a time to read these registers
59744 + * so this should actually never happen */
59745 + status = A_NO_MEMORY;
59746 + AR_DEBUG_ASSERT(FALSE);
59747 + break;
59748 + }
59749 +
59750 + /* stick in our completion routine when the I/O operation completes */
59751 + pIOPacket->Completion = DevGetEventAsyncHandler;
59752 + pIOPacket->pContext = pDev;
59753 +
59754 + if (pDev->GetPendingEventsFunc) {
59755 + /* HIF layer has it's own mechanism, pass the IO to it.. */
59756 + status = pDev->GetPendingEventsFunc(pDev->HIFDevice,
59757 + (HIF_PENDING_EVENTS_INFO *)pIOPacket->pBuffer,
59758 + pIOPacket);
59759 +
59760 + } else {
59761 + /* standard way, read the interrupt register table asynchronously again */
59762 + status = HIFReadWrite(pDev->HIFDevice,
59763 + HOST_INT_STATUS_ADDRESS,
59764 + pIOPacket->pBuffer,
59765 + AR6K_IRQ_PROC_REGS_SIZE,
59766 + HIF_RD_ASYNC_BYTE_INC,
59767 + pIOPacket);
59768 + }
59769 +
59770 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,(" Async IO issued to get interrupt status...\n"));
59771 + } while (FALSE);
59772 +
59773 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("-DevCheckPendingRecvMsgsAsync \n"));
59774 +
59775 + return status;
59776 +}
59777 +
59778 +/* process pending interrupts synchronously */
59779 +static A_STATUS ProcessPendingIRQs(AR6K_DEVICE *pDev, A_BOOL *pDone, A_BOOL *pASyncProcessing)
59780 +{
59781 + A_STATUS status = A_OK;
59782 + A_UINT8 host_int_status = 0;
59783 + A_UINT32 lookAhead = 0;
59784 +
59785 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("+ProcessPendingIRQs: (dev: 0x%X)\n", (A_UINT32)pDev));
59786 +
59787 + /*** NOTE: the HIF implementation guarantees that the context of this call allows
59788 + * us to perform SYNCHRONOUS I/O, that is we can block, sleep or call any API that
59789 + * can block or switch thread/task ontexts.
59790 + * This is a fully schedulable context.
59791 + * */
59792 + do {
59793 +
59794 + if (pDev->GetPendingEventsFunc != NULL) {
59795 + HIF_PENDING_EVENTS_INFO events;
59796 +
59797 + /* the HIF layer uses a special mechanism to get events
59798 + * get this synchronously */
59799 + status = pDev->GetPendingEventsFunc(pDev->HIFDevice,
59800 + &events,
59801 + NULL);
59802 +
59803 + if (A_FAILED(status)) {
59804 + break;
59805 + }
59806 +
59807 + if (events.Events & HIF_RECV_MSG_AVAIL) {
59808 + lookAhead = events.LookAhead;
59809 + if (0 == lookAhead) {
59810 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(" ProcessPendingIRQs1 lookAhead is zero! \n"));
59811 + }
59812 + }
59813 +
59814 + if (!(events.Events & HIF_OTHER_EVENTS) ||
59815 + !(pDev->IrqEnableRegisters.int_status_enable & OTHER_INTS_ENABLED)) {
59816 + /* no need to read the register table, no other interesting interrupts.
59817 + * Some interfaces (like SPI) can shadow interrupt sources without
59818 + * requiring the host to do a full table read */
59819 + break;
59820 + }
59821 +
59822 + /* otherwise fall through and read the register table */
59823 + }
59824 +
59825 + /*
59826 + * Read the first 28 bytes of the HTC register table. This will yield us
59827 + * the value of different int status registers and the lookahead
59828 + * registers.
59829 + * length = sizeof(int_status) + sizeof(cpu_int_status) +
59830 + * sizeof(error_int_status) + sizeof(counter_int_status) +
59831 + * sizeof(mbox_frame) + sizeof(rx_lookahead_valid) +
59832 + * sizeof(hole) + sizeof(rx_lookahead) +
59833 + * sizeof(int_status_enable) + sizeof(cpu_int_status_enable) +
59834 + * sizeof(error_status_enable) +
59835 + * sizeof(counter_int_status_enable);
59836 + *
59837 + */
59838 + status = HIFReadWrite(pDev->HIFDevice,
59839 + HOST_INT_STATUS_ADDRESS,
59840 + (A_UINT8 *)&pDev->IrqProcRegisters,
59841 + AR6K_IRQ_PROC_REGS_SIZE,
59842 + HIF_RD_SYNC_BYTE_INC,
59843 + NULL);
59844 +
59845 + if (A_FAILED(status)) {
59846 + break;
59847 + }
59848 +
59849 + if (AR_DEBUG_LVL_CHECK(ATH_DEBUG_IRQ)) {
59850 + DevDumpRegisters(&pDev->IrqProcRegisters,
59851 + &pDev->IrqEnableRegisters);
59852 + }
59853 +
59854 + /* Update only those registers that are enabled */
59855 + host_int_status = pDev->IrqProcRegisters.host_int_status &
59856 + pDev->IrqEnableRegisters.int_status_enable;
59857 +
59858 + if (NULL == pDev->GetPendingEventsFunc) {
59859 + /* only look at mailbox status if the HIF layer did not provide this function,
59860 + * on some HIF interfaces reading the RX lookahead is not valid to do */
59861 + if (host_int_status & (1 << HTC_MAILBOX)) {
59862 + /* mask out pending mailbox value, we use "lookAhead" as the real flag for
59863 + * mailbox processing below */
59864 + host_int_status &= ~(1 << HTC_MAILBOX);
59865 + if (pDev->IrqProcRegisters.rx_lookahead_valid & (1 << HTC_MAILBOX)) {
59866 + /* mailbox has a message and the look ahead is valid */
59867 + lookAhead = pDev->IrqProcRegisters.rx_lookahead[HTC_MAILBOX];
59868 + if (0 == lookAhead) {
59869 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(" ProcessPendingIRQs2, lookAhead is zero! \n"));
59870 + }
59871 + }
59872 + }
59873 + } else {
59874 + /* not valid to check if the HIF has another mechanism for reading mailbox pending status*/
59875 + host_int_status &= ~(1 << HTC_MAILBOX);
59876 + }
59877 +
59878 + } while (FALSE);
59879 +
59880 +
59881 + do {
59882 +
59883 + /* did the interrupt status fetches succeed? */
59884 + if (A_FAILED(status)) {
59885 + break;
59886 + }
59887 +
59888 + if ((0 == host_int_status) && (0 == lookAhead)) {
59889 + /* nothing to process, the caller can use this to break out of a loop */
59890 + *pDone = TRUE;
59891 + break;
59892 + }
59893 +
59894 + if (lookAhead != 0) {
59895 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("Pending mailbox message, LookAhead: 0x%X\n",lookAhead));
59896 + /* Mailbox Interrupt, the HTC layer may issue async requests to empty the
59897 + * mailbox...
59898 + * When emptying the recv mailbox we use the async handler above called from the
59899 + * completion routine of the callers read request. This can improve performance
59900 + * by reducing context switching when we rapidly pull packets */
59901 + status = pDev->MessagePendingCallback(pDev->HTCContext, lookAhead, pASyncProcessing);
59902 + if (A_FAILED(status)) {
59903 + break;
59904 + }
59905 + }
59906 +
59907 + /* now handle the rest of them */
59908 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,
59909 + (" Valid interrupt source(s) for OTHER interrupts: 0x%x\n",
59910 + host_int_status));
59911 +
59912 + if (HOST_INT_STATUS_CPU_GET(host_int_status)) {
59913 + /* CPU Interrupt */
59914 + status = DevServiceCPUInterrupt(pDev);
59915 + if (A_FAILED(status)){
59916 + break;
59917 + }
59918 + }
59919 +
59920 + if (HOST_INT_STATUS_ERROR_GET(host_int_status)) {
59921 + /* Error Interrupt */
59922 + status = DevServiceErrorInterrupt(pDev);
59923 + if (A_FAILED(status)){
59924 + break;
59925 + }
59926 + }
59927 +
59928 + if (HOST_INT_STATUS_COUNTER_GET(host_int_status)) {
59929 + /* Counter Interrupt */
59930 + status = DevServiceCounterInterrupt(pDev);
59931 + if (A_FAILED(status)){
59932 + break;
59933 + }
59934 + }
59935 +
59936 + } while (FALSE);
59937 +
59938 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("-ProcessPendingIRQs: (done:%d, async:%d) status=%d \n",
59939 + *pDone, *pASyncProcessing, status));
59940 +
59941 + return status;
59942 +}
59943 +
59944 +
59945 +/* Synchronousinterrupt handler, this handler kicks off all interrupt processing.*/
59946 +A_STATUS DevDsrHandler(void *context)
59947 +{
59948 + AR6K_DEVICE *pDev = (AR6K_DEVICE *)context;
59949 + A_STATUS status = A_OK;
59950 + A_BOOL done = FALSE;
59951 + A_BOOL asyncProc = FALSE;
59952 +
59953 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("+DevDsrHandler: (dev: 0x%X)\n", (A_UINT32)pDev));
59954 +
59955 +
59956 + while (!done) {
59957 + status = ProcessPendingIRQs(pDev, &done, &asyncProc);
59958 + if (A_FAILED(status)) {
59959 + break;
59960 + }
59961 +
59962 + if (HIF_DEVICE_IRQ_SYNC_ONLY == pDev->HifIRQProcessingMode) {
59963 + /* the HIF layer does not allow async IRQ processing, override the asyncProc flag */
59964 + asyncProc = FALSE;
59965 + /* this will cause us to re-enter ProcessPendingIRQ() and re-read interrupt status registers.
59966 + * this has a nice side effect of blocking us until all async read requests are completed.
59967 + * This behavior is required on some HIF implementations that do not allow ASYNC
59968 + * processing in interrupt handlers (like Windows CE) */
59969 + }
59970 +
59971 + if (asyncProc) {
59972 + /* the function performed some async I/O for performance, we
59973 + need to exit the ISR immediately, the check below will prevent the interrupt from being
59974 + Ack'd while we handle it asynchronously */
59975 + break;
59976 + }
59977 +
59978 + }
59979 +
59980 + if (A_SUCCESS(status) && !asyncProc) {
59981 + /* Ack the interrupt only if :
59982 + * 1. we did not get any errors in processing interrupts
59983 + * 2. there are no outstanding async processing requests */
59984 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,(" Acking interrupt from DevDsrHandler \n"));
59985 + HIFAckInterrupt(pDev->HIFDevice);
59986 + }
59987 +
59988 + AR_DEBUG_PRINTF(ATH_DEBUG_IRQ,("-DevDsrHandler \n"));
59989 + return A_OK;
59990 +}
59991 +
59992 +
59993 Index: linux-2.6.28/drivers/ar6000/htc/ar6k.h
59994 ===================================================================
59995 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
59996 +++ linux-2.6.28/drivers/ar6000/htc/ar6k.h 2009-01-02 00:01:56.000000000 +0100
59997 @@ -0,0 +1,191 @@
59998 +/*
59999 + *
60000 + * Copyright (c) 2007 Atheros Communications Inc.
60001 + * All rights reserved.
60002 + *
60003 + *
60004 + * This program is free software; you can redistribute it and/or modify
60005 + * it under the terms of the GNU General Public License version 2 as
60006 + * published by the Free Software Foundation;
60007 + *
60008 + * Software distributed under the License is distributed on an "AS
60009 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
60010 + * implied. See the License for the specific language governing
60011 + * rights and limitations under the License.
60012 + *
60013 + *
60014 + *
60015 + */
60016 +
60017 +#ifndef AR6K_H_
60018 +#define AR6K_H_
60019 +
60020 +#define AR6K_MAILBOXES 4
60021 +
60022 +/* HTC runs over mailbox 0 */
60023 +#define HTC_MAILBOX 0
60024 +
60025 +#define AR6K_TARGET_DEBUG_INTR_MASK 0x01
60026 +
60027 +#define OTHER_INTS_ENABLED (INT_STATUS_ENABLE_ERROR_MASK | \
60028 + INT_STATUS_ENABLE_CPU_MASK | \
60029 + INT_STATUS_ENABLE_COUNTER_MASK)
60030 +
60031 +//#define MBOXHW_UNIT_TEST 1
60032 +
60033 +#include "athstartpack.h"
60034 +typedef PREPACK struct _AR6K_IRQ_PROC_REGISTERS {
60035 + A_UINT8 host_int_status;
60036 + A_UINT8 cpu_int_status;
60037 + A_UINT8 error_int_status;
60038 + A_UINT8 counter_int_status;
60039 + A_UINT8 mbox_frame;
60040 + A_UINT8 rx_lookahead_valid;
60041 + A_UINT8 hole[2];
60042 + A_UINT32 rx_lookahead[2];
60043 +} POSTPACK AR6K_IRQ_PROC_REGISTERS;
60044 +
60045 +#define AR6K_IRQ_PROC_REGS_SIZE sizeof(AR6K_IRQ_PROC_REGISTERS)
60046 +
60047 +
60048 +
60049 +typedef PREPACK struct _AR6K_IRQ_ENABLE_REGISTERS {
60050 + A_UINT8 int_status_enable;
60051 + A_UINT8 cpu_int_status_enable;
60052 + A_UINT8 error_status_enable;
60053 + A_UINT8 counter_int_status_enable;
60054 +} POSTPACK AR6K_IRQ_ENABLE_REGISTERS;
60055 +
60056 +#include "athendpack.h"
60057 +
60058 +#define AR6K_IRQ_ENABLE_REGS_SIZE sizeof(AR6K_IRQ_ENABLE_REGISTERS)
60059 +
60060 +#define AR6K_REG_IO_BUFFER_SIZE 32
60061 +#define AR6K_MAX_REG_IO_BUFFERS 8
60062 +
60063 +/* buffers for ASYNC I/O */
60064 +typedef struct AR6K_ASYNC_REG_IO_BUFFER {
60065 + HTC_PACKET HtcPacket; /* we use an HTC packet as a wrapper for our async register-based I/O */
60066 + A_UINT8 Buffer[AR6K_REG_IO_BUFFER_SIZE];
60067 +} AR6K_ASYNC_REG_IO_BUFFER;
60068 +
60069 +typedef struct _AR6K_DEVICE {
60070 + A_MUTEX_T Lock;
60071 + AR6K_IRQ_PROC_REGISTERS IrqProcRegisters;
60072 + AR6K_IRQ_ENABLE_REGISTERS IrqEnableRegisters;
60073 + void *HIFDevice;
60074 + A_UINT32 BlockSize;
60075 + A_UINT32 BlockMask;
60076 + A_UINT32 MailboxAddress;
60077 + HIF_PENDING_EVENTS_FUNC GetPendingEventsFunc;
60078 + void *HTCContext;
60079 + HTC_PACKET_QUEUE RegisterIOList;
60080 + AR6K_ASYNC_REG_IO_BUFFER RegIOBuffers[AR6K_MAX_REG_IO_BUFFERS];
60081 + void (*TargetFailureCallback)(void *Context);
60082 + A_STATUS (*MessagePendingCallback)(void *Context, A_UINT32 LookAhead, A_BOOL *pAsyncProc);
60083 + HIF_DEVICE_IRQ_PROCESSING_MODE HifIRQProcessingMode;
60084 + HIF_MASK_UNMASK_RECV_EVENT HifMaskUmaskRecvEvent;
60085 +} AR6K_DEVICE;
60086 +
60087 +#define IS_DEV_IRQ_PROCESSING_ASYNC_ALLOWED(pDev) ((pDev)->HifIRQProcessingMode != HIF_DEVICE_IRQ_SYNC_ONLY)
60088 +
60089 +A_STATUS DevSetup(AR6K_DEVICE *pDev);
60090 +A_STATUS DevUnmaskInterrupts(AR6K_DEVICE *pDev);
60091 +A_STATUS DevMaskInterrupts(AR6K_DEVICE *pDev);
60092 +A_STATUS DevPollMboxMsgRecv(AR6K_DEVICE *pDev,
60093 + A_UINT32 *pLookAhead,
60094 + int TimeoutMS);
60095 +A_STATUS DevRWCompletionHandler(void *context, A_STATUS status);
60096 +A_STATUS DevDsrHandler(void *context);
60097 +A_STATUS DevCheckPendingRecvMsgsAsync(void *context);
60098 +void DevDumpRegisters(AR6K_IRQ_PROC_REGISTERS *pIrqProcRegs,
60099 + AR6K_IRQ_ENABLE_REGISTERS *pIrqEnableRegs);
60100 +
60101 +#define DEV_STOP_RECV_ASYNC TRUE
60102 +#define DEV_STOP_RECV_SYNC FALSE
60103 +#define DEV_ENABLE_RECV_ASYNC TRUE
60104 +#define DEV_ENABLE_RECV_SYNC FALSE
60105 +A_STATUS DevStopRecv(AR6K_DEVICE *pDev, A_BOOL ASyncMode);
60106 +A_STATUS DevEnableRecv(AR6K_DEVICE *pDev, A_BOOL ASyncMode);
60107 +
60108 +static INLINE A_STATUS DevSendPacket(AR6K_DEVICE *pDev, HTC_PACKET *pPacket, A_UINT32 SendLength) {
60109 + A_UINT32 paddedLength;
60110 + A_BOOL sync = (pPacket->Completion == NULL) ? TRUE : FALSE;
60111 + A_STATUS status;
60112 +
60113 + /* adjust the length to be a multiple of block size if appropriate */
60114 + paddedLength = (SendLength + (pDev->BlockMask)) &
60115 + (~(pDev->BlockMask));
60116 +#if 0 // BufferLength may not be set in , fix this...
60117 + if (paddedLength > pPacket->BufferLength) {
60118 + AR_DEBUG_ASSERT(FALSE);
60119 + if (pPacket->Completion != NULL) {
60120 + COMPLETE_HTC_PACKET(pPacket,A_EINVAL);
60121 + }
60122 + return A_EINVAL;
60123 + }
60124 +#endif
60125 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,
60126 + ("DevSendPacket, Padded Length: %d Mbox:0x%X (mode:%s)\n",
60127 + paddedLength,
60128 + pDev->MailboxAddress,
60129 + sync ? "SYNC" : "ASYNC"));
60130 +
60131 + status = HIFReadWrite(pDev->HIFDevice,
60132 + pDev->MailboxAddress,
60133 + pPacket->pBuffer,
60134 + paddedLength, /* the padded length */
60135 + sync ? HIF_WR_SYNC_BLOCK_INC : HIF_WR_ASYNC_BLOCK_INC,
60136 + sync ? NULL : pPacket); /* pass the packet as the context to the HIF request */
60137 +
60138 + if (sync) {
60139 + pPacket->Status = status;
60140 + }
60141 +
60142 + return status;
60143 +}
60144 +
60145 +static INLINE A_STATUS DevRecvPacket(AR6K_DEVICE *pDev, HTC_PACKET *pPacket, A_UINT32 RecvLength) {
60146 + A_UINT32 paddedLength;
60147 + A_STATUS status;
60148 + A_BOOL sync = (pPacket->Completion == NULL) ? TRUE : FALSE;
60149 +
60150 + /* adjust the length to be a multiple of block size if appropriate */
60151 + paddedLength = (RecvLength + (pDev->BlockMask)) &
60152 + (~(pDev->BlockMask));
60153 + if (paddedLength > pPacket->BufferLength) {
60154 + AR_DEBUG_ASSERT(FALSE);
60155 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
60156 + ("DevRecvPacket, Not enough space for padlen:%d recvlen:%d bufferlen:%d \n",
60157 + paddedLength,RecvLength,pPacket->BufferLength));
60158 + if (pPacket->Completion != NULL) {
60159 + COMPLETE_HTC_PACKET(pPacket,A_EINVAL);
60160 + }
60161 + return A_EINVAL;
60162 + }
60163 +
60164 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,
60165 + ("DevRecvPacket, Padded Length: %d Mbox:0x%X (mode:%s)\n",
60166 + paddedLength,
60167 + pDev->MailboxAddress,
60168 + sync ? "SYNC" : "ASYNC"));
60169 +
60170 + status = HIFReadWrite(pDev->HIFDevice,
60171 + pDev->MailboxAddress,
60172 + pPacket->pBuffer,
60173 + paddedLength,
60174 + sync ? HIF_RD_SYNC_BLOCK_INC : HIF_RD_ASYNC_BLOCK_INC,
60175 + sync ? NULL : pPacket); /* pass the packet as the context to the HIF request */
60176 +
60177 + if (sync) {
60178 + pPacket->Status = status;
60179 + }
60180 +
60181 + return status;
60182 +}
60183 +
60184 +#ifdef MBOXHW_UNIT_TEST
60185 +A_STATUS DoMboxHWTest(AR6K_DEVICE *pDev);
60186 +#endif
60187 +
60188 +#endif /*AR6K_H_*/
60189 Index: linux-2.6.28/drivers/ar6000/htc/htc.c
60190 ===================================================================
60191 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
60192 +++ linux-2.6.28/drivers/ar6000/htc/htc.c 2009-01-02 00:01:56.000000000 +0100
60193 @@ -0,0 +1,507 @@
60194 +/*
60195 + *
60196 + * Copyright (c) 2007 Atheros Communications Inc.
60197 + * All rights reserved.
60198 + *
60199 + *
60200 + * This program is free software; you can redistribute it and/or modify
60201 + * it under the terms of the GNU General Public License version 2 as
60202 + * published by the Free Software Foundation;
60203 + *
60204 + * Software distributed under the License is distributed on an "AS
60205 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
60206 + * implied. See the License for the specific language governing
60207 + * rights and limitations under the License.
60208 + *
60209 + *
60210 + *
60211 + */
60212 +
60213 +#include "htc_internal.h"
60214 +
60215 +
60216 +static HTC_INIT_INFO HTCInitInfo = {NULL,NULL,NULL};
60217 +static A_BOOL HTCInitialized = FALSE;
60218 +
60219 +static A_STATUS HTCTargetInsertedHandler(void *hif_handle);
60220 +static A_STATUS HTCTargetRemovedHandler(void *handle, A_STATUS status);
60221 +static void HTCReportFailure(void *Context);
60222 +
60223 +/* Initializes the HTC layer */
60224 +A_STATUS HTCInit(HTC_INIT_INFO *pInitInfo)
60225 +{
60226 + HTC_CALLBACKS htcCallbacks;
60227 +
60228 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Enter\n"));
60229 + if (HTCInitialized) {
60230 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Exit\n"));
60231 + return A_OK;
60232 + }
60233 +
60234 + A_MEMCPY(&HTCInitInfo,pInitInfo,sizeof(HTC_INIT_INFO));
60235 +
60236 + A_MEMZERO(&htcCallbacks, sizeof(HTC_CALLBACKS));
60237 +
60238 + /* setup HIF layer callbacks */
60239 + htcCallbacks.deviceInsertedHandler = HTCTargetInsertedHandler;
60240 + htcCallbacks.deviceRemovedHandler = HTCTargetRemovedHandler;
60241 + /* the device layer handles these */
60242 + htcCallbacks.rwCompletionHandler = DevRWCompletionHandler;
60243 + htcCallbacks.dsrHandler = DevDsrHandler;
60244 + HIFInit(&htcCallbacks);
60245 + HTCInitialized = TRUE;
60246 +
60247 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Exit\n"));
60248 + return A_OK;
60249 +}
60250 +
60251 +void HTCFreeControlBuffer(HTC_TARGET *target, HTC_PACKET *pPacket, HTC_PACKET_QUEUE *pList)
60252 +{
60253 + LOCK_HTC(target);
60254 + HTC_PACKET_ENQUEUE(pList,pPacket);
60255 + UNLOCK_HTC(target);
60256 +}
60257 +
60258 +HTC_PACKET *HTCAllocControlBuffer(HTC_TARGET *target, HTC_PACKET_QUEUE *pList)
60259 +{
60260 + HTC_PACKET *pPacket;
60261 +
60262 + LOCK_HTC(target);
60263 + pPacket = HTC_PACKET_DEQUEUE(pList);
60264 + UNLOCK_HTC(target);
60265 +
60266 + return pPacket;
60267 +}
60268 +
60269 +/* cleanup the HTC instance */
60270 +static void HTCCleanup(HTC_TARGET *target)
60271 +{
60272 + if (A_IS_MUTEX_VALID(&target->HTCLock)) {
60273 + A_MUTEX_DELETE(&target->HTCLock);
60274 + }
60275 +
60276 + if (A_IS_MUTEX_VALID(&target->HTCRxLock)) {
60277 + A_MUTEX_DELETE(&target->HTCRxLock);
60278 + }
60279 +
60280 + if (A_IS_MUTEX_VALID(&target->HTCTxLock)) {
60281 + A_MUTEX_DELETE(&target->HTCTxLock);
60282 + }
60283 + /* free our instance */
60284 + A_FREE(target);
60285 +}
60286 +
60287 +/* registered target arrival callback from the HIF layer */
60288 +static A_STATUS HTCTargetInsertedHandler(void *hif_handle)
60289 +{
60290 + HTC_TARGET *target = NULL;
60291 + A_STATUS status;
60292 + int i;
60293 +
60294 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("htcTargetInserted - Enter\n"));
60295 +
60296 + do {
60297 +
60298 + /* allocate target memory */
60299 + if ((target = (HTC_TARGET *)A_MALLOC(sizeof(HTC_TARGET))) == NULL) {
60300 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Unable to allocate memory\n"));
60301 + status = A_ERROR;
60302 + break;
60303 + }
60304 +
60305 + A_MEMZERO(target, sizeof(HTC_TARGET));
60306 + A_MUTEX_INIT(&target->HTCLock);
60307 + A_MUTEX_INIT(&target->HTCRxLock);
60308 + A_MUTEX_INIT(&target->HTCTxLock);
60309 + INIT_HTC_PACKET_QUEUE(&target->ControlBufferTXFreeList);
60310 + INIT_HTC_PACKET_QUEUE(&target->ControlBufferRXFreeList);
60311 +
60312 + /* give device layer the hif device handle */
60313 + target->Device.HIFDevice = hif_handle;
60314 + /* give the device layer our context (for event processing)
60315 + * the device layer will register it's own context with HIF
60316 + * so we need to set this so we can fetch it in the target remove handler */
60317 + target->Device.HTCContext = target;
60318 + /* set device layer target failure callback */
60319 + target->Device.TargetFailureCallback = HTCReportFailure;
60320 + /* set device layer recv message pending callback */
60321 + target->Device.MessagePendingCallback = HTCRecvMessagePendingHandler;
60322 + target->EpWaitingForBuffers = ENDPOINT_MAX;
60323 +
60324 + /* setup device layer */
60325 + status = DevSetup(&target->Device);
60326 +
60327 + if (A_FAILED(status)) {
60328 + break;
60329 + }
60330 +
60331 + /* carve up buffers/packets for control messages */
60332 + for (i = 0; i < NUM_CONTROL_RX_BUFFERS; i++) {
60333 + HTC_PACKET *pControlPacket;
60334 + pControlPacket = &target->HTCControlBuffers[i].HtcPacket;
60335 + SET_HTC_PACKET_INFO_RX_REFILL(pControlPacket,
60336 + target,
60337 + target->HTCControlBuffers[i].Buffer,
60338 + HTC_CONTROL_BUFFER_SIZE,
60339 + ENDPOINT_0);
60340 + HTC_FREE_CONTROL_RX(target,pControlPacket);
60341 + }
60342 +
60343 + for (;i < NUM_CONTROL_BUFFERS;i++) {
60344 + HTC_PACKET *pControlPacket;
60345 + pControlPacket = &target->HTCControlBuffers[i].HtcPacket;
60346 + INIT_HTC_PACKET_INFO(pControlPacket,
60347 + target->HTCControlBuffers[i].Buffer,
60348 + HTC_CONTROL_BUFFER_SIZE);
60349 + HTC_FREE_CONTROL_TX(target,pControlPacket);
60350 + }
60351 +
60352 + } while (FALSE);
60353 +
60354 + if (A_SUCCESS(status)) {
60355 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, (" calling AddInstance callback \n"));
60356 + /* announce ourselves */
60357 + HTCInitInfo.AddInstance((HTC_HANDLE)target);
60358 + } else {
60359 + if (target != NULL) {
60360 + HTCCleanup(target);
60361 + }
60362 + }
60363 +
60364 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("htcTargetInserted - Exit\n"));
60365 +
60366 + return status;
60367 +}
60368 +
60369 +/* registered removal callback from the HIF layer */
60370 +static A_STATUS HTCTargetRemovedHandler(void *handle, A_STATUS status)
60371 +{
60372 + HTC_TARGET *target;
60373 +
60374 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+HTCTargetRemovedHandler handle:0x%X \n",(A_UINT32)handle));
60375 +
60376 + if (NULL == handle) {
60377 + /* this could be NULL in the event that target initialization failed */
60378 + return A_OK;
60379 + }
60380 +
60381 + target = ((AR6K_DEVICE *)handle)->HTCContext;
60382 +
60383 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, (" removing target:0x%X instance:0x%X ... \n",
60384 + (A_UINT32)target, (A_UINT32)target->pInstanceContext));
60385 +
60386 + if (target->pInstanceContext != NULL) {
60387 + /* let upper layer know, it needs to call HTCStop() */
60388 + HTCInitInfo.DeleteInstance(target->pInstanceContext);
60389 + }
60390 +
60391 + HIFShutDownDevice(target->Device.HIFDevice);
60392 +
60393 + HTCCleanup(target);
60394 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-HTCTargetRemovedHandler \n"));
60395 + return A_OK;
60396 +}
60397 +
60398 +/* get the low level HIF device for the caller , the caller may wish to do low level
60399 + * HIF requests */
60400 +void *HTCGetHifDevice(HTC_HANDLE HTCHandle)
60401 +{
60402 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
60403 + return target->Device.HIFDevice;
60404 +}
60405 +
60406 +/* set the instance block for this HTC handle, so that on removal, the blob can be
60407 + * returned to the caller */
60408 +void HTCSetInstance(HTC_HANDLE HTCHandle, void *Instance)
60409 +{
60410 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
60411 +
60412 + target->pInstanceContext = Instance;
60413 +}
60414 +
60415 +/* wait for the target to arrive (sends HTC Ready message)
60416 + * this operation is fully synchronous and the message is polled for */
60417 +A_STATUS HTCWaitTarget(HTC_HANDLE HTCHandle)
60418 +{
60419 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
60420 + A_STATUS status;
60421 + HTC_PACKET *pPacket = NULL;
60422 + HTC_READY_MSG *pRdyMsg;
60423 + HTC_SERVICE_CONNECT_REQ connect;
60424 + HTC_SERVICE_CONNECT_RESP resp;
60425 +
60426 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCWaitTarget - Enter (target:0x%X) \n", (A_UINT32)target));
60427 +
60428 + do {
60429 +
60430 +#ifdef MBOXHW_UNIT_TEST
60431 +
60432 + status = DoMboxHWTest(&target->Device);
60433 +
60434 + if (status != A_OK) {
60435 + break;
60436 + }
60437 +
60438 +#endif
60439 +
60440 + /* we should be getting 1 control message that the target is ready */
60441 + status = HTCWaitforControlMessage(target, &pPacket);
60442 +
60443 + if (A_FAILED(status)) {
60444 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, (" Target Not Available!!\n"));
60445 + break;
60446 + }
60447 +
60448 + /* we controlled the buffer creation so it has to be properly aligned */
60449 + pRdyMsg = (HTC_READY_MSG *)pPacket->pBuffer;
60450 +
60451 + if ((pRdyMsg->MessageID != HTC_MSG_READY_ID) ||
60452 + (pPacket->ActualLength < sizeof(HTC_READY_MSG))) {
60453 + /* this message is not valid */
60454 + AR_DEBUG_ASSERT(FALSE);
60455 + status = A_EPROTO;
60456 + break;
60457 + }
60458 +
60459 + if (pRdyMsg->CreditCount == 0 || pRdyMsg->CreditSize == 0) {
60460 + /* this message is not valid */
60461 + AR_DEBUG_ASSERT(FALSE);
60462 + status = A_EPROTO;
60463 + break;
60464 + }
60465 +
60466 + target->TargetCredits = pRdyMsg->CreditCount;
60467 + target->TargetCreditSize = pRdyMsg->CreditSize;
60468 +
60469 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, (" Target Ready: credits: %d credit size: %d\n",
60470 + target->TargetCredits, target->TargetCreditSize));
60471 +
60472 + /* setup our pseudo HTC control endpoint connection */
60473 + A_MEMZERO(&connect,sizeof(connect));
60474 + A_MEMZERO(&resp,sizeof(resp));
60475 + connect.EpCallbacks.pContext = target;
60476 + connect.EpCallbacks.EpTxComplete = HTCControlTxComplete;
60477 + connect.EpCallbacks.EpRecv = HTCControlRecv;
60478 + connect.EpCallbacks.EpRecvRefill = NULL; /* not needed */
60479 + connect.EpCallbacks.EpSendFull = NULL; /* not nedded */
60480 + connect.MaxSendQueueDepth = NUM_CONTROL_BUFFERS;
60481 + connect.ServiceID = HTC_CTRL_RSVD_SVC;
60482 +
60483 + /* connect fake service */
60484 + status = HTCConnectService((HTC_HANDLE)target,
60485 + &connect,
60486 + &resp);
60487 +
60488 + if (!A_FAILED(status)) {
60489 + break;
60490 + }
60491 +
60492 + } while (FALSE);
60493 +
60494 + if (pPacket != NULL) {
60495 + HTC_FREE_CONTROL_RX(target,pPacket);
60496 + }
60497 +
60498 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCWaitTarget - Exit\n"));
60499 +
60500 + return status;
60501 +}
60502 +
60503 +
60504 +
60505 +/* Start HTC, enable interrupts and let the target know host has finished setup */
60506 +A_STATUS HTCStart(HTC_HANDLE HTCHandle)
60507 +{
60508 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
60509 + HTC_PACKET *pPacket;
60510 + A_STATUS status;
60511 +
60512 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCStart Enter\n"));
60513 +
60514 + /* now that we are starting, push control receive buffers into the
60515 + * HTC control endpoint */
60516 +
60517 + while (1) {
60518 + pPacket = HTC_ALLOC_CONTROL_RX(target);
60519 + if (NULL == pPacket) {
60520 + break;
60521 + }
60522 + HTCAddReceivePkt((HTC_HANDLE)target,pPacket);
60523 + }
60524 +
60525 + do {
60526 +
60527 + AR_DEBUG_ASSERT(target->InitCredits != NULL);
60528 + AR_DEBUG_ASSERT(target->EpCreditDistributionListHead != NULL);
60529 + AR_DEBUG_ASSERT(target->EpCreditDistributionListHead->pNext != NULL);
60530 +
60531 + /* call init credits callback to do the distribution ,
60532 + * NOTE: the first entry in the distribution list is ENDPOINT_0, so
60533 + * we pass the start of the list after this one. */
60534 + target->InitCredits(target->pCredDistContext,
60535 + target->EpCreditDistributionListHead->pNext,
60536 + target->TargetCredits);
60537 +
60538 + if (AR_DEBUG_LVL_CHECK(ATH_DEBUG_TRC)) {
60539 + DumpCreditDistStates(target);
60540 + }
60541 +
60542 + /* the caller is done connecting to services, so we can indicate to the
60543 + * target that the setup phase is complete */
60544 + status = HTCSendSetupComplete(target);
60545 +
60546 + if (A_FAILED(status)) {
60547 + break;
60548 + }
60549 +
60550 + /* unmask interrupts */
60551 + status = DevUnmaskInterrupts(&target->Device);
60552 +
60553 + if (A_FAILED(status)) {
60554 + HTCStop(target);
60555 + }
60556 +
60557 + } while (FALSE);
60558 +
60559 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCStart Exit\n"));
60560 + return status;
60561 +}
60562 +
60563 +
60564 +/* stop HTC communications, i.e. stop interrupt reception, and flush all queued buffers */
60565 +void HTCStop(HTC_HANDLE HTCHandle)
60566 +{
60567 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
60568 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+HTCStop \n"));
60569 +
60570 + /* mark that we are shutting down .. */
60571 + target->HTCStateFlags |= HTC_STATE_STOPPING;
60572 +
60573 + /* Masking interrupts is a synchronous operation, when this function returns
60574 + * all pending HIF I/O has completed, we can safely flush the queues */
60575 + DevMaskInterrupts(&target->Device);
60576 +
60577 + /* flush all send packets */
60578 + HTCFlushSendPkts(target);
60579 + /* flush all recv buffers */
60580 + HTCFlushRecvBuffers(target);
60581 +
60582 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-HTCStop \n"));
60583 +}
60584 +
60585 +/* undo what was done in HTCInit() */
60586 +void HTCShutDown(void)
60587 +{
60588 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+HTCShutDown: \n"));
60589 + HTCInitialized = FALSE;
60590 + /* undo HTCInit */
60591 + HIFShutDownDevice(NULL);
60592 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-HTCShutDown: \n"));
60593 +}
60594 +
60595 +void HTCDumpCreditStates(HTC_HANDLE HTCHandle)
60596 +{
60597 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
60598 +
60599 + LOCK_HTC_TX(target);
60600 +
60601 + DumpCreditDistStates(target);
60602 +
60603 + UNLOCK_HTC_TX(target);
60604 +}
60605 +
60606 +/* report a target failure from the device, this is a callback from the device layer
60607 + * which uses a mechanism to report errors from the target (i.e. special interrupts) */
60608 +static void HTCReportFailure(void *Context)
60609 +{
60610 + HTC_TARGET *target = (HTC_TARGET *)Context;
60611 +
60612 + target->TargetFailure = TRUE;
60613 +
60614 + if ((target->pInstanceContext != NULL) && (HTCInitInfo.TargetFailure != NULL)) {
60615 + /* let upper layer know, it needs to call HTCStop() */
60616 + HTCInitInfo.TargetFailure(target->pInstanceContext, A_ERROR);
60617 + }
60618 +}
60619 +
60620 +void DebugDumpBytes(A_UCHAR *buffer, A_UINT16 length, char *pDescription)
60621 +{
60622 + A_CHAR stream[60];
60623 + A_UINT32 i;
60624 + A_UINT16 offset, count;
60625 +
60626 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, ("<---------Dumping %d Bytes : %s ------>\n", length, pDescription));
60627 +
60628 + count = 0;
60629 + offset = 0;
60630 + for(i = 0; i < length; i++) {
60631 + sprintf(stream + offset, "%2.2X ", buffer[i]);
60632 + count ++;
60633 + offset += 3;
60634 +
60635 + if(count == 16) {
60636 + count = 0;
60637 + offset = 0;
60638 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, ("[H]: %s\n", stream));
60639 + A_MEMZERO(stream, 60);
60640 + }
60641 + }
60642 +
60643 + if(offset != 0) {
60644 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, ("[H]: %s\n", stream));
60645 + }
60646 +
60647 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, ("<------------------------------------------------->\n"));
60648 +}
60649 +
60650 +A_BOOL HTCGetEndpointStatistics(HTC_HANDLE HTCHandle,
60651 + HTC_ENDPOINT_ID Endpoint,
60652 + HTC_ENDPOINT_STAT_ACTION Action,
60653 + HTC_ENDPOINT_STATS *pStats)
60654 +{
60655 +
60656 +#ifdef HTC_EP_STAT_PROFILING
60657 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
60658 + A_BOOL clearStats = FALSE;
60659 + A_BOOL sample = FALSE;
60660 +
60661 + switch (Action) {
60662 + case HTC_EP_STAT_SAMPLE :
60663 + sample = TRUE;
60664 + break;
60665 + case HTC_EP_STAT_SAMPLE_AND_CLEAR :
60666 + sample = TRUE;
60667 + clearStats = TRUE;
60668 + break;
60669 + case HTC_EP_STAT_CLEAR :
60670 + clearStats = TRUE;
60671 + break;
60672 + default:
60673 + break;
60674 + }
60675 +
60676 + A_ASSERT(Endpoint < ENDPOINT_MAX);
60677 +
60678 + /* lock out TX and RX while we sample and/or clear */
60679 + LOCK_HTC_TX(target);
60680 + LOCK_HTC_RX(target);
60681 +
60682 + if (sample) {
60683 + A_ASSERT(pStats != NULL);
60684 + /* return the stats to the caller */
60685 + A_MEMCPY(pStats, &target->EndPoint[Endpoint].EndPointStats, sizeof(HTC_ENDPOINT_STATS));
60686 + }
60687 +
60688 + if (clearStats) {
60689 + /* reset stats */
60690 + A_MEMZERO(&target->EndPoint[Endpoint].EndPointStats, sizeof(HTC_ENDPOINT_STATS));
60691 + }
60692 +
60693 + UNLOCK_HTC_RX(target);
60694 + UNLOCK_HTC_TX(target);
60695 +
60696 + return TRUE;
60697 +#else
60698 + return FALSE;
60699 +#endif
60700 +}
60701 Index: linux-2.6.28/drivers/ar6000/htc/htc_debug.h
60702 ===================================================================
60703 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
60704 +++ linux-2.6.28/drivers/ar6000/htc/htc_debug.h 2009-01-02 00:01:56.000000000 +0100
60705 @@ -0,0 +1,65 @@
60706 +#ifndef HTC_DEBUG_H_
60707 +#define HTC_DEBUG_H_
60708 +/*
60709 + *
60710 + * Copyright (c) 2004-2007 Atheros Communications Inc.
60711 + * All rights reserved.
60712 + *
60713 + *
60714 + * This program is free software; you can redistribute it and/or modify
60715 + * it under the terms of the GNU General Public License version 2 as
60716 + * published by the Free Software Foundation;
60717 + *
60718 + * Software distributed under the License is distributed on an "AS
60719 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
60720 + * implied. See the License for the specific language governing
60721 + * rights and limitations under the License.
60722 + *
60723 + *
60724 + *
60725 + */
60726 +
60727 +/* ------- Debug related stuff ------- */
60728 +enum {
60729 + ATH_DEBUG_SEND = 0x0001,
60730 + ATH_DEBUG_RECV = 0x0002,
60731 + ATH_DEBUG_SYNC = 0x0004,
60732 + ATH_DEBUG_DUMP = 0x0008,
60733 + ATH_DEBUG_IRQ = 0x0010,
60734 + ATH_DEBUG_TRC = 0x0020,
60735 + ATH_DEBUG_WARN = 0x0040,
60736 + ATH_DEBUG_ERR = 0x0080,
60737 + ATH_DEBUG_ANY = 0xFFFF,
60738 +};
60739 +
60740 +#ifdef DEBUG
60741 +
60742 +// TODO FIX usage of A_PRINTF!
60743 +#define AR_DEBUG_LVL_CHECK(lvl) (debughtc & (lvl))
60744 +#define AR_DEBUG_PRINTBUF(buffer, length, desc) do { \
60745 + if (debughtc & ATH_DEBUG_DUMP) { \
60746 + DebugDumpBytes(buffer, length,desc); \
60747 + } \
60748 +} while(0)
60749 +#define PRINTX_ARG(arg...) arg
60750 +#define AR_DEBUG_PRINTF(flags, args) do { \
60751 + if (debughtc & (flags)) { \
60752 + A_PRINTF(KERN_ALERT PRINTX_ARG args); \
60753 + } \
60754 +} while (0)
60755 +#define AR_DEBUG_ASSERT(test) do { \
60756 + if (!(test)) { \
60757 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("Debug Assert Caught, File %s, Line: %d, Test:%s \n",__FILE__, __LINE__,#test)); \
60758 + } \
60759 +} while(0)
60760 +extern int debughtc;
60761 +#else
60762 +#define AR_DEBUG_PRINTF(flags, args)
60763 +#define AR_DEBUG_PRINTBUF(buffer, length, desc)
60764 +#define AR_DEBUG_ASSERT(test)
60765 +#define AR_DEBUG_LVL_CHECK(lvl) 0
60766 +#endif
60767 +
60768 +void DebugDumpBytes(A_UCHAR *buffer, A_UINT16 length, char *pDescription);
60769 +
60770 +#endif /*HTC_DEBUG_H_*/
60771 Index: linux-2.6.28/drivers/ar6000/htc/htc_internal.h
60772 ===================================================================
60773 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
60774 +++ linux-2.6.28/drivers/ar6000/htc/htc_internal.h 2009-01-02 00:01:56.000000000 +0100
60775 @@ -0,0 +1,168 @@
60776 +/*
60777 + *
60778 + * Copyright (c) 2007 Atheros Communications Inc.
60779 + * All rights reserved.
60780 + *
60781 + *
60782 + * This program is free software; you can redistribute it and/or modify
60783 + * it under the terms of the GNU General Public License version 2 as
60784 + * published by the Free Software Foundation;
60785 + *
60786 + * Software distributed under the License is distributed on an "AS
60787 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
60788 + * implied. See the License for the specific language governing
60789 + * rights and limitations under the License.
60790 + *
60791 + *
60792 + *
60793 + */
60794 +
60795 +#ifndef _HTC_INTERNAL_H_
60796 +#define _HTC_INTERNAL_H_
60797 +
60798 +/* for debugging, uncomment this to capture the last frame header, on frame header
60799 + * processing errors, the last frame header is dump for comparison */
60800 +//#define HTC_CAPTURE_LAST_FRAME
60801 +
60802 +//#define HTC_EP_STAT_PROFILING
60803 +
60804 +#ifdef __cplusplus
60805 +extern "C" {
60806 +#endif /* __cplusplus */
60807 +
60808 +/* Header files */
60809 +#include "a_config.h"
60810 +#include "athdefs.h"
60811 +#include "a_types.h"
60812 +#include "a_osapi.h"
60813 +#include "a_debug.h"
60814 +#include "htc.h"
60815 +#include "htc_api.h"
60816 +#include "bmi_msg.h"
60817 +#include "hif.h"
60818 +#include "ar6k.h"
60819 +
60820 +/* HTC operational parameters */
60821 +#define HTC_TARGET_RESPONSE_TIMEOUT 2000 /* in ms */
60822 +#define HTC_TARGET_DEBUG_INTR_MASK 0x01
60823 +#define HTC_TARGET_CREDIT_INTR_MASK 0xF0
60824 +
60825 +typedef struct _HTC_ENDPOINT {
60826 + HTC_SERVICE_ID ServiceID; /* service ID this endpoint is bound to
60827 + non-zero value means this endpoint is in use */
60828 + HTC_PACKET_QUEUE TxQueue; /* HTC frame buffer TX queue */
60829 + HTC_PACKET_QUEUE RxBuffers; /* HTC frame buffer RX list */
60830 + HTC_ENDPOINT_CREDIT_DIST CreditDist; /* credit distribution structure (exposed to driver layer) */
60831 + HTC_EP_CALLBACKS EpCallBacks; /* callbacks associated with this endpoint */
60832 + int MaxTxQueueDepth; /* max depth of the TX queue before we need to
60833 + call driver's full handler */
60834 + int CurrentTxQueueDepth; /* current TX queue depth */
60835 + int MaxMsgLength; /* max length of endpoint message */
60836 +#ifdef HTC_EP_STAT_PROFILING
60837 + HTC_ENDPOINT_STATS EndPointStats; /* endpoint statistics */
60838 +#endif
60839 +} HTC_ENDPOINT;
60840 +
60841 +#ifdef HTC_EP_STAT_PROFILING
60842 +#define INC_HTC_EP_STAT(p,stat,count) (p)->EndPointStats.stat += (count);
60843 +#else
60844 +#define INC_HTC_EP_STAT(p,stat,count)
60845 +#endif
60846 +
60847 +#define HTC_SERVICE_TX_PACKET_TAG HTC_TX_PACKET_TAG_INTERNAL
60848 +
60849 +#define NUM_CONTROL_BUFFERS 8
60850 +#define NUM_CONTROL_TX_BUFFERS 2
60851 +#define NUM_CONTROL_RX_BUFFERS (NUM_CONTROL_BUFFERS - NUM_CONTROL_TX_BUFFERS)
60852 +
60853 +#define HTC_CONTROL_BUFFER_SIZE (HTC_MAX_CONTROL_MESSAGE_LENGTH + HTC_HDR_LENGTH)
60854 +
60855 +typedef struct HTC_CONTROL_BUFFER {
60856 + HTC_PACKET HtcPacket;
60857 + A_UINT8 Buffer[HTC_CONTROL_BUFFER_SIZE];
60858 +} HTC_CONTROL_BUFFER;
60859 +
60860 +/* our HTC target state */
60861 +typedef struct _HTC_TARGET {
60862 + HTC_ENDPOINT EndPoint[ENDPOINT_MAX];
60863 + HTC_CONTROL_BUFFER HTCControlBuffers[NUM_CONTROL_BUFFERS];
60864 + HTC_ENDPOINT_CREDIT_DIST *EpCreditDistributionListHead;
60865 + HTC_PACKET_QUEUE ControlBufferTXFreeList;
60866 + HTC_PACKET_QUEUE ControlBufferRXFreeList;
60867 + HTC_CREDIT_DIST_CALLBACK DistributeCredits;
60868 + HTC_CREDIT_INIT_CALLBACK InitCredits;
60869 + void *pCredDistContext;
60870 + int TargetCredits;
60871 + int TargetCreditSize;
60872 + A_MUTEX_T HTCLock;
60873 + A_MUTEX_T HTCRxLock;
60874 + A_MUTEX_T HTCTxLock;
60875 + AR6K_DEVICE Device; /* AR6K - specific state */
60876 + A_UINT32 HTCStateFlags;
60877 + HTC_ENDPOINT_ID EpWaitingForBuffers;
60878 + A_BOOL TargetFailure;
60879 + void *pInstanceContext;
60880 +#define HTC_STATE_WAIT_BUFFERS (1 << 0)
60881 +#define HTC_STATE_STOPPING (1 << 1)
60882 +#ifdef HTC_CAPTURE_LAST_FRAME
60883 + HTC_FRAME_HDR LastFrameHdr; /* useful for debugging */
60884 + A_UINT8 LastTrailer[256];
60885 + A_UINT8 LastTrailerLength;
60886 +#endif
60887 +} HTC_TARGET;
60888 +
60889 +#define HTC_STOPPING(t) ((t)->HTCStateFlags & HTC_STATE_STOPPING)
60890 +#define LOCK_HTC(t) A_MUTEX_LOCK(&(t)->HTCLock);
60891 +#define UNLOCK_HTC(t) A_MUTEX_UNLOCK(&(t)->HTCLock);
60892 +#define LOCK_HTC_RX(t) A_MUTEX_LOCK(&(t)->HTCRxLock);
60893 +#define UNLOCK_HTC_RX(t) A_MUTEX_UNLOCK(&(t)->HTCRxLock);
60894 +#define LOCK_HTC_TX(t) A_MUTEX_LOCK(&(t)->HTCTxLock);
60895 +#define UNLOCK_HTC_TX(t) A_MUTEX_UNLOCK(&(t)->HTCTxLock);
60896 +
60897 +#define GET_HTC_TARGET_FROM_HANDLE(hnd) ((HTC_TARGET *)(hnd))
60898 +#define HTC_RECYCLE_RX_PKT(target,p) \
60899 +{ \
60900 + HTC_PACKET_RESET_RX(pPacket); \
60901 + HTCAddReceivePkt((HTC_HANDLE)(target),(p)); \
60902 +}
60903 +
60904 +/* internal HTC functions */
60905 +void HTCControlTxComplete(void *Context, HTC_PACKET *pPacket);
60906 +void HTCControlRecv(void *Context, HTC_PACKET *pPacket);
60907 +A_STATUS HTCWaitforControlMessage(HTC_TARGET *target, HTC_PACKET **ppControlPacket);
60908 +HTC_PACKET *HTCAllocControlBuffer(HTC_TARGET *target, HTC_PACKET_QUEUE *pList);
60909 +void HTCFreeControlBuffer(HTC_TARGET *target, HTC_PACKET *pPacket, HTC_PACKET_QUEUE *pList);
60910 +A_STATUS HTCIssueSend(HTC_TARGET *target, HTC_PACKET *pPacket, A_UINT8 Flags);
60911 +A_STATUS HTCIssueRecv(HTC_TARGET *target, HTC_PACKET *pPacket);
60912 +void HTCRecvCompleteHandler(void *Context, HTC_PACKET *pPacket);
60913 +A_STATUS HTCRecvMessagePendingHandler(void *Context, A_UINT32 LookAhead, A_BOOL *pAsyncProc);
60914 +void HTCProcessCreditRpt(HTC_TARGET *target, HTC_CREDIT_REPORT *pRpt, int NumEntries, HTC_ENDPOINT_ID FromEndpoint);
60915 +A_STATUS HTCSendSetupComplete(HTC_TARGET *target);
60916 +void HTCFlushRecvBuffers(HTC_TARGET *target);
60917 +void HTCFlushSendPkts(HTC_TARGET *target);
60918 +void DumpCreditDist(HTC_ENDPOINT_CREDIT_DIST *pEPDist);
60919 +void DumpCreditDistStates(HTC_TARGET *target);
60920 +void DebugDumpBytes(A_UCHAR *buffer, A_UINT16 length, char *pDescription);
60921 +
60922 +static INLINE HTC_PACKET *HTC_ALLOC_CONTROL_TX(HTC_TARGET *target) {
60923 + HTC_PACKET *pPacket = HTCAllocControlBuffer(target,&target->ControlBufferTXFreeList);
60924 + if (pPacket != NULL) {
60925 + /* set payload pointer area with some headroom */
60926 + pPacket->pBuffer = pPacket->pBufferStart + HTC_HDR_LENGTH;
60927 + }
60928 + return pPacket;
60929 +}
60930 +
60931 +#define HTC_FREE_CONTROL_TX(t,p) HTCFreeControlBuffer((t),(p),&(t)->ControlBufferTXFreeList)
60932 +#define HTC_ALLOC_CONTROL_RX(t) HTCAllocControlBuffer((t),&(t)->ControlBufferRXFreeList)
60933 +#define HTC_FREE_CONTROL_RX(t,p) \
60934 +{ \
60935 + HTC_PACKET_RESET_RX(p); \
60936 + HTCFreeControlBuffer((t),(p),&(t)->ControlBufferRXFreeList); \
60937 +}
60938 +
60939 +#ifdef __cplusplus
60940 +}
60941 +#endif
60942 +
60943 +#endif /* _HTC_INTERNAL_H_ */
60944 Index: linux-2.6.28/drivers/ar6000/htc/htc_recv.c
60945 ===================================================================
60946 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
60947 +++ linux-2.6.28/drivers/ar6000/htc/htc_recv.c 2009-01-02 00:01:56.000000000 +0100
60948 @@ -0,0 +1,703 @@
60949 +/*
60950 + *
60951 + * Copyright (c) 2007 Atheros Communications Inc.
60952 + * All rights reserved.
60953 + *
60954 + *
60955 + * This program is free software; you can redistribute it and/or modify
60956 + * it under the terms of the GNU General Public License version 2 as
60957 + * published by the Free Software Foundation;
60958 + *
60959 + * Software distributed under the License is distributed on an "AS
60960 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
60961 + * implied. See the License for the specific language governing
60962 + * rights and limitations under the License.
60963 + *
60964 + *
60965 + *
60966 + */
60967 +
60968 +#include "htc_internal.h"
60969 +
60970 +#define HTCIssueRecv(t, p) \
60971 + DevRecvPacket(&(t)->Device, \
60972 + (p), \
60973 + (p)->ActualLength)
60974 +
60975 +#define DO_RCV_COMPLETION(t,p,e) \
60976 +{ \
60977 + if ((p)->ActualLength > 0) { \
60978 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, (" completing packet 0x%X (%d bytes) on ep : %d \n", \
60979 + (A_UINT32)(p), (p)->ActualLength, (p)->Endpoint)); \
60980 + (e)->EpCallBacks.EpRecv((e)->EpCallBacks.pContext, \
60981 + (p)); \
60982 + } else { \
60983 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, (" recycling empty packet \n")); \
60984 + HTC_RECYCLE_RX_PKT((t), (p)); \
60985 + } \
60986 +}
60987 +
60988 +#ifdef HTC_EP_STAT_PROFILING
60989 +#define HTC_RX_STAT_PROFILE(t,ep,lookAhead) \
60990 +{ \
60991 + LOCK_HTC_RX((t)); \
60992 + INC_HTC_EP_STAT((ep), RxReceived, 1); \
60993 + if ((lookAhead) != 0) { \
60994 + INC_HTC_EP_STAT((ep), RxLookAheads, 1); \
60995 + } \
60996 + UNLOCK_HTC_RX((t)); \
60997 +}
60998 +#else
60999 +#define HTC_RX_STAT_PROFILE(t,ep,lookAhead)
61000 +#endif
61001 +
61002 +static INLINE A_STATUS HTCProcessTrailer(HTC_TARGET *target,
61003 + A_UINT8 *pBuffer,
61004 + int Length,
61005 + A_UINT32 *pNextLookAhead,
61006 + HTC_ENDPOINT_ID FromEndpoint)
61007 +{
61008 + HTC_RECORD_HDR *pRecord;
61009 + A_UINT8 *pRecordBuf;
61010 + HTC_LOOKAHEAD_REPORT *pLookAhead;
61011 + A_UINT8 *pOrigBuffer;
61012 + int origLength;
61013 + A_STATUS status;
61014 +
61015 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, ("+HTCProcessTrailer (length:%d) \n", Length));
61016 +
61017 + if (AR_DEBUG_LVL_CHECK(ATH_DEBUG_RECV)) {
61018 + AR_DEBUG_PRINTBUF(pBuffer,Length,"Recv Trailer");
61019 + }
61020 +
61021 + pOrigBuffer = pBuffer;
61022 + origLength = Length;
61023 + status = A_OK;
61024 +
61025 + while (Length > 0) {
61026 +
61027 + if (Length < sizeof(HTC_RECORD_HDR)) {
61028 + status = A_EPROTO;
61029 + break;
61030 + }
61031 + /* these are byte aligned structs */
61032 + pRecord = (HTC_RECORD_HDR *)pBuffer;
61033 + Length -= sizeof(HTC_RECORD_HDR);
61034 + pBuffer += sizeof(HTC_RECORD_HDR);
61035 +
61036 + if (pRecord->Length > Length) {
61037 + /* no room left in buffer for record */
61038 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61039 + (" invalid record length: %d (id:%d) buffer has: %d bytes left \n",
61040 + pRecord->Length, pRecord->RecordID, Length));
61041 + status = A_EPROTO;
61042 + break;
61043 + }
61044 + /* start of record follows the header */
61045 + pRecordBuf = pBuffer;
61046 +
61047 + switch (pRecord->RecordID) {
61048 + case HTC_RECORD_CREDITS:
61049 + AR_DEBUG_ASSERT(pRecord->Length >= sizeof(HTC_CREDIT_REPORT));
61050 + HTCProcessCreditRpt(target,
61051 + (HTC_CREDIT_REPORT *)pRecordBuf,
61052 + pRecord->Length / (sizeof(HTC_CREDIT_REPORT)),
61053 + FromEndpoint);
61054 + break;
61055 + case HTC_RECORD_LOOKAHEAD:
61056 + AR_DEBUG_ASSERT(pRecord->Length >= sizeof(HTC_LOOKAHEAD_REPORT));
61057 + pLookAhead = (HTC_LOOKAHEAD_REPORT *)pRecordBuf;
61058 + if ((pLookAhead->PreValid == ((~pLookAhead->PostValid) & 0xFF)) &&
61059 + (pNextLookAhead != NULL)) {
61060 +
61061 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,
61062 + (" LookAhead Report Found (pre valid:0x%X, post valid:0x%X) \n",
61063 + pLookAhead->PreValid,
61064 + pLookAhead->PostValid));
61065 +
61066 + /* look ahead bytes are valid, copy them over */
61067 + ((A_UINT8 *)pNextLookAhead)[0] = pLookAhead->LookAhead[0];
61068 + ((A_UINT8 *)pNextLookAhead)[1] = pLookAhead->LookAhead[1];
61069 + ((A_UINT8 *)pNextLookAhead)[2] = pLookAhead->LookAhead[2];
61070 + ((A_UINT8 *)pNextLookAhead)[3] = pLookAhead->LookAhead[3];
61071 +
61072 + if (AR_DEBUG_LVL_CHECK(ATH_DEBUG_RECV)) {
61073 + DebugDumpBytes((A_UINT8 *)pNextLookAhead,4,"Next Look Ahead");
61074 + }
61075 + }
61076 + break;
61077 + default:
61078 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, (" unhandled record: id:%d length:%d \n",
61079 + pRecord->RecordID, pRecord->Length));
61080 + break;
61081 + }
61082 +
61083 + if (A_FAILED(status)) {
61084 + break;
61085 + }
61086 +
61087 + /* advance buffer past this record for next time around */
61088 + pBuffer += pRecord->Length;
61089 + Length -= pRecord->Length;
61090 + }
61091 +
61092 + if (A_FAILED(status)) {
61093 + DebugDumpBytes(pOrigBuffer,origLength,"BAD Recv Trailer");
61094 + }
61095 +
61096 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, ("-HTCProcessTrailer \n"));
61097 + return status;
61098 +
61099 +}
61100 +
61101 +/* process a received message (i.e. strip off header, process any trailer data)
61102 + * note : locks must be released when this function is called */
61103 +static A_STATUS HTCProcessRecvHeader(HTC_TARGET *target, HTC_PACKET *pPacket, A_UINT32 *pNextLookAhead)
61104 +{
61105 + A_UINT8 temp;
61106 + A_UINT8 *pBuf;
61107 + A_STATUS status = A_OK;
61108 + A_UINT16 payloadLen;
61109 + A_UINT32 lookAhead;
61110 +
61111 + pBuf = pPacket->pBuffer;
61112 +
61113 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, ("+HTCProcessRecvHeader \n"));
61114 +
61115 + if (AR_DEBUG_LVL_CHECK(ATH_DEBUG_RECV)) {
61116 + AR_DEBUG_PRINTBUF(pBuf,pPacket->ActualLength,"HTC Recv PKT");
61117 + }
61118 +
61119 + do {
61120 + /* note, we cannot assume the alignment of pBuffer, so we use the safe macros to
61121 + * retrieve 16 bit fields */
61122 + payloadLen = A_GET_UINT16_FIELD(pBuf, HTC_FRAME_HDR, PayloadLen);
61123 +
61124 + ((A_UINT8 *)&lookAhead)[0] = pBuf[0];
61125 + ((A_UINT8 *)&lookAhead)[1] = pBuf[1];
61126 + ((A_UINT8 *)&lookAhead)[2] = pBuf[2];
61127 + ((A_UINT8 *)&lookAhead)[3] = pBuf[3];
61128 +
61129 + if (lookAhead != pPacket->HTCReserved) {
61130 + /* somehow the lookahead that gave us the full read length did not
61131 + * reflect the actual header in the pending message */
61132 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61133 + ("HTCProcessRecvHeader, lookahead mismatch! \n"));
61134 + DebugDumpBytes((A_UINT8 *)&pPacket->HTCReserved,4,"Expected Message LookAhead");
61135 + DebugDumpBytes(pBuf,sizeof(HTC_FRAME_HDR),"Current Frame Header");
61136 +#ifdef HTC_CAPTURE_LAST_FRAME
61137 + DebugDumpBytes((A_UINT8 *)&target->LastFrameHdr,sizeof(HTC_FRAME_HDR),"Last Frame Header");
61138 + if (target->LastTrailerLength != 0) {
61139 + DebugDumpBytes(target->LastTrailer,
61140 + target->LastTrailerLength,
61141 + "Last trailer");
61142 + }
61143 +#endif
61144 + status = A_EPROTO;
61145 + break;
61146 + }
61147 +
61148 + /* get flags */
61149 + temp = A_GET_UINT8_FIELD(pBuf, HTC_FRAME_HDR, Flags);
61150 +
61151 + if (temp & HTC_FLAGS_RECV_TRAILER) {
61152 + /* this packet has a trailer */
61153 +
61154 + /* extract the trailer length in control byte 0 */
61155 + temp = A_GET_UINT8_FIELD(pBuf, HTC_FRAME_HDR, ControlBytes[0]);
61156 +
61157 + if ((temp < sizeof(HTC_RECORD_HDR)) || (temp > payloadLen)) {
61158 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61159 + ("HTCProcessRecvHeader, invalid header (payloadlength should be :%d, CB[0] is:%d) \n",
61160 + payloadLen, temp));
61161 + status = A_EPROTO;
61162 + break;
61163 + }
61164 +
61165 + /* process trailer data that follows HDR + application payload */
61166 + status = HTCProcessTrailer(target,
61167 + (pBuf + HTC_HDR_LENGTH + payloadLen - temp),
61168 + temp,
61169 + pNextLookAhead,
61170 + pPacket->Endpoint);
61171 +
61172 + if (A_FAILED(status)) {
61173 + break;
61174 + }
61175 +
61176 +#ifdef HTC_CAPTURE_LAST_FRAME
61177 + A_MEMCPY(target->LastTrailer, (pBuf + HTC_HDR_LENGTH + payloadLen - temp), temp);
61178 + target->LastTrailerLength = temp;
61179 +#endif
61180 + /* trim length by trailer bytes */
61181 + pPacket->ActualLength -= temp;
61182 + }
61183 +#ifdef HTC_CAPTURE_LAST_FRAME
61184 + else {
61185 + target->LastTrailerLength = 0;
61186 + }
61187 +#endif
61188 +
61189 + /* if we get to this point, the packet is good */
61190 + /* remove header and adjust length */
61191 + pPacket->pBuffer += HTC_HDR_LENGTH;
61192 + pPacket->ActualLength -= HTC_HDR_LENGTH;
61193 +
61194 + } while (FALSE);
61195 +
61196 + if (A_FAILED(status)) {
61197 + /* dump the whole packet */
61198 + DebugDumpBytes(pBuf,pPacket->ActualLength,"BAD HTC Recv PKT");
61199 + } else {
61200 +#ifdef HTC_CAPTURE_LAST_FRAME
61201 + A_MEMCPY(&target->LastFrameHdr,pBuf,sizeof(HTC_FRAME_HDR));
61202 +#endif
61203 + if (AR_DEBUG_LVL_CHECK(ATH_DEBUG_RECV)) {
61204 + if (pPacket->ActualLength > 0) {
61205 + AR_DEBUG_PRINTBUF(pPacket->pBuffer,pPacket->ActualLength,"HTC - Application Msg");
61206 + }
61207 + }
61208 + }
61209 +
61210 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, ("-HTCProcessRecvHeader \n"));
61211 + return status;
61212 +}
61213 +
61214 +/* asynchronous completion handler for recv packet fetching, when the device layer
61215 + * completes a read request, it will call this completion handler */
61216 +void HTCRecvCompleteHandler(void *Context, HTC_PACKET *pPacket)
61217 +{
61218 + HTC_TARGET *target = (HTC_TARGET *)Context;
61219 + HTC_ENDPOINT *pEndpoint;
61220 + A_UINT32 nextLookAhead = 0;
61221 + A_STATUS status;
61222 +
61223 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, ("+HTCRecvCompleteHandler (status:%d, ep:%d) \n",
61224 + pPacket->Status, pPacket->Endpoint));
61225 +
61226 + AR_DEBUG_ASSERT(pPacket->Endpoint < ENDPOINT_MAX);
61227 + pEndpoint = &target->EndPoint[pPacket->Endpoint];
61228 + pPacket->Completion = NULL;
61229 +
61230 + /* get completion status */
61231 + status = pPacket->Status;
61232 +
61233 + do {
61234 + if (A_FAILED(status)) {
61235 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("HTCRecvCompleteHandler: request failed (status:%d, ep:%d) \n",
61236 + pPacket->Status, pPacket->Endpoint));
61237 + break;
61238 + }
61239 + /* process the header for any trailer data */
61240 + status = HTCProcessRecvHeader(target,pPacket,&nextLookAhead);
61241 +
61242 + if (A_FAILED(status)) {
61243 + break;
61244 + }
61245 + /* was there a lookahead for the next packet? */
61246 + if (nextLookAhead != 0) {
61247 + A_STATUS nextStatus;
61248 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,
61249 + ("HTCRecvCompleteHandler - next look ahead was non-zero : 0x%X \n",
61250 + nextLookAhead));
61251 + /* we have another packet, get the next packet fetch started (pipelined) before
61252 + * we call into the endpoint's callback, this will start another async request */
61253 + nextStatus = HTCRecvMessagePendingHandler(target,nextLookAhead,NULL);
61254 + if (A_EPROTO == nextStatus) {
61255 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61256 + ("Next look ahead from recv header was INVALID\n"));
61257 + DebugDumpBytes((A_UINT8 *)&nextLookAhead,
61258 + 4,
61259 + "BAD lookahead from lookahead report");
61260 + }
61261 + } else {
61262 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,
61263 + ("HTCRecvCompleteHandler - rechecking for more messages...\n"));
61264 + /* if we did not get anything on the look-ahead,
61265 + * call device layer to asynchronously re-check for messages. If we can keep the async
61266 + * processing going we get better performance. If there is a pending message we will keep processing
61267 + * messages asynchronously which should pipeline things nicely */
61268 + DevCheckPendingRecvMsgsAsync(&target->Device);
61269 + }
61270 +
61271 + HTC_RX_STAT_PROFILE(target,pEndpoint,nextLookAhead);
61272 + DO_RCV_COMPLETION(target,pPacket,pEndpoint);
61273 +
61274 + } while (FALSE);
61275 +
61276 + if (A_FAILED(status)) {
61277 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61278 + ("HTCRecvCompleteHandler , message fetch failed (status = %d) \n",
61279 + status));
61280 + /* recyle this packet */
61281 + HTC_RECYCLE_RX_PKT(target, pPacket);
61282 + }
61283 +
61284 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, ("-HTCRecvCompleteHandler\n"));
61285 +}
61286 +
61287 +/* synchronously wait for a control message from the target,
61288 + * This function is used at initialization time ONLY. At init messages
61289 + * on ENDPOINT 0 are expected. */
61290 +A_STATUS HTCWaitforControlMessage(HTC_TARGET *target, HTC_PACKET **ppControlPacket)
61291 +{
61292 + A_STATUS status;
61293 + A_UINT32 lookAhead;
61294 + HTC_PACKET *pPacket = NULL;
61295 + HTC_FRAME_HDR *pHdr;
61296 +
61297 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,("+HTCWaitforControlMessage \n"));
61298 +
61299 + do {
61300 +
61301 + *ppControlPacket = NULL;
61302 +
61303 + /* call the polling function to see if we have a message */
61304 + status = DevPollMboxMsgRecv(&target->Device,
61305 + &lookAhead,
61306 + HTC_TARGET_RESPONSE_TIMEOUT);
61307 +
61308 + if (A_FAILED(status)) {
61309 + break;
61310 + }
61311 +
61312 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,
61313 + ("HTCWaitforControlMessage : lookAhead : 0x%X \n", lookAhead));
61314 +
61315 + /* check the lookahead */
61316 + pHdr = (HTC_FRAME_HDR *)&lookAhead;
61317 +
61318 + if (pHdr->EndpointID != ENDPOINT_0) {
61319 + /* unexpected endpoint number, should be zero */
61320 + AR_DEBUG_ASSERT(FALSE);
61321 + status = A_EPROTO;
61322 + break;
61323 + }
61324 +
61325 + if (A_FAILED(status)) {
61326 + /* bad message */
61327 + AR_DEBUG_ASSERT(FALSE);
61328 + status = A_EPROTO;
61329 + break;
61330 + }
61331 +
61332 + pPacket = HTC_ALLOC_CONTROL_RX(target);
61333 +
61334 + if (pPacket == NULL) {
61335 + AR_DEBUG_ASSERT(FALSE);
61336 + status = A_NO_MEMORY;
61337 + break;
61338 + }
61339 +
61340 + pPacket->HTCReserved = lookAhead;
61341 + pPacket->ActualLength = pHdr->PayloadLen + HTC_HDR_LENGTH;
61342 +
61343 + if (pPacket->ActualLength > pPacket->BufferLength) {
61344 + AR_DEBUG_ASSERT(FALSE);
61345 + status = A_EPROTO;
61346 + break;
61347 + }
61348 +
61349 + /* we want synchronous operation */
61350 + pPacket->Completion = NULL;
61351 +
61352 + /* get the message from the device, this will block */
61353 + status = HTCIssueRecv(target, pPacket);
61354 +
61355 + if (A_FAILED(status)) {
61356 + break;
61357 + }
61358 +
61359 + /* process receive header */
61360 + status = HTCProcessRecvHeader(target,pPacket,NULL);
61361 +
61362 + pPacket->Status = status;
61363 +
61364 + if (A_FAILED(status)) {
61365 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61366 + ("HTCWaitforControlMessage, HTCProcessRecvHeader failed (status = %d) \n",
61367 + status));
61368 + break;
61369 + }
61370 +
61371 + /* give the caller this control message packet, they are responsible to free */
61372 + *ppControlPacket = pPacket;
61373 +
61374 + } while (FALSE);
61375 +
61376 + if (A_FAILED(status)) {
61377 + if (pPacket != NULL) {
61378 + /* cleanup buffer on error */
61379 + HTC_FREE_CONTROL_RX(target,pPacket);
61380 + }
61381 + }
61382 +
61383 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,("-HTCWaitforControlMessage \n"));
61384 +
61385 + return status;
61386 +}
61387 +
61388 +/* callback when device layer or lookahead report parsing detects a pending message */
61389 +A_STATUS HTCRecvMessagePendingHandler(void *Context, A_UINT32 LookAhead, A_BOOL *pAsyncProc)
61390 +{
61391 + HTC_TARGET *target = (HTC_TARGET *)Context;
61392 + A_STATUS status = A_OK;
61393 + HTC_PACKET *pPacket = NULL;
61394 + HTC_FRAME_HDR *pHdr;
61395 + HTC_ENDPOINT *pEndpoint;
61396 + A_BOOL asyncProc = FALSE;
61397 +
61398 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,("+HTCRecvMessagePendingHandler LookAhead:0x%X \n",LookAhead));
61399 +
61400 + if (IS_DEV_IRQ_PROCESSING_ASYNC_ALLOWED(&target->Device)) {
61401 + /* We use async mode to get the packets if the device layer supports it.
61402 + * The device layer interfaces with HIF in which HIF may have restrictions on
61403 + * how interrupts are processed */
61404 + asyncProc = TRUE;
61405 + }
61406 +
61407 + if (pAsyncProc != NULL) {
61408 + /* indicate to caller how we decided to process this */
61409 + *pAsyncProc = asyncProc;
61410 + }
61411 +
61412 + while (TRUE) {
61413 +
61414 + pHdr = (HTC_FRAME_HDR *)&LookAhead;
61415 +
61416 + if (pHdr->EndpointID >= ENDPOINT_MAX) {
61417 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("Invalid Endpoint in look-ahead: %d \n",pHdr->EndpointID));
61418 + /* invalid endpoint */
61419 + status = A_EPROTO;
61420 + break;
61421 + }
61422 +
61423 + if (pHdr->PayloadLen > HTC_MAX_PAYLOAD_LENGTH) {
61424 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("Payload length %d exceeds max HTC : %d !\n",
61425 + pHdr->PayloadLen, HTC_MAX_PAYLOAD_LENGTH));
61426 + status = A_EPROTO;
61427 + break;
61428 + }
61429 +
61430 + pEndpoint = &target->EndPoint[pHdr->EndpointID];
61431 +
61432 + if (0 == pEndpoint->ServiceID) {
61433 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("Endpoint %d is not connected !\n",pHdr->EndpointID));
61434 + /* endpoint isn't even connected */
61435 + status = A_EPROTO;
61436 + break;
61437 + }
61438 +
61439 + /* lock RX to get a buffer */
61440 + LOCK_HTC_RX(target);
61441 +
61442 + /* get a packet from the endpoint recv queue */
61443 + pPacket = HTC_PACKET_DEQUEUE(&pEndpoint->RxBuffers);
61444 +
61445 + if (NULL == pPacket) {
61446 + /* check for refill handler */
61447 + if (pEndpoint->EpCallBacks.EpRecvRefill != NULL) {
61448 + UNLOCK_HTC_RX(target);
61449 + /* call the re-fill handler */
61450 + pEndpoint->EpCallBacks.EpRecvRefill(pEndpoint->EpCallBacks.pContext,
61451 + pHdr->EndpointID);
61452 + LOCK_HTC_RX(target);
61453 + /* check if we have more buffers */
61454 + pPacket = HTC_PACKET_DEQUEUE(&pEndpoint->RxBuffers);
61455 + /* fall through */
61456 + }
61457 + }
61458 +
61459 + if (NULL == pPacket) {
61460 + /* this is not an error, we simply need to mark that we are waiting for buffers.*/
61461 + target->HTCStateFlags |= HTC_STATE_WAIT_BUFFERS;
61462 + target->EpWaitingForBuffers = pHdr->EndpointID;
61463 + status = A_NO_MEMORY;
61464 + }
61465 +
61466 + UNLOCK_HTC_RX(target);
61467 +
61468 + if (A_FAILED(status)) {
61469 + /* no buffers */
61470 + break;
61471 + }
61472 +
61473 + AR_DEBUG_ASSERT(pPacket->Endpoint == pHdr->EndpointID);
61474 +
61475 + /* make sure this message can fit in the endpoint buffer */
61476 + if ((pHdr->PayloadLen + HTC_HDR_LENGTH) > pPacket->BufferLength) {
61477 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61478 + ("Payload Length Error : header reports payload of: %d, endpoint buffer size: %d \n",
61479 + pHdr->PayloadLen, pPacket->BufferLength));
61480 + status = A_EPROTO;
61481 + break;
61482 + }
61483 +
61484 + pPacket->HTCReserved = LookAhead; /* set expected look ahead */
61485 + /* set the amount of data to fetch */
61486 + pPacket->ActualLength = pHdr->PayloadLen + HTC_HDR_LENGTH;
61487 +
61488 + if (asyncProc) {
61489 + /* we use async mode to get the packet if the device layer supports it
61490 + * set our callback and context */
61491 + pPacket->Completion = HTCRecvCompleteHandler;
61492 + pPacket->pContext = target;
61493 + } else {
61494 + /* fully synchronous */
61495 + pPacket->Completion = NULL;
61496 + }
61497 +
61498 + /* go fetch the packet */
61499 + status = HTCIssueRecv(target, pPacket);
61500 +
61501 + if (A_FAILED(status)) {
61502 + break;
61503 + }
61504 +
61505 + if (asyncProc) {
61506 + /* we did this asynchronously so we can get out of the loop, the asynch processing
61507 + * creates a chain of requests to continue processing pending messages in the
61508 + * context of callbacks */
61509 + break;
61510 + }
61511 +
61512 + /* in the sync case, we process the packet, check lookaheads and then repeat */
61513 +
61514 + LookAhead = 0;
61515 + status = HTCProcessRecvHeader(target,pPacket,&LookAhead);
61516 +
61517 + if (A_FAILED(status)) {
61518 + break;
61519 + }
61520 +
61521 + HTC_RX_STAT_PROFILE(target,pEndpoint,LookAhead);
61522 + DO_RCV_COMPLETION(target,pPacket,pEndpoint);
61523 +
61524 + pPacket = NULL;
61525 +
61526 + if (0 == LookAhead) {
61527 + break;
61528 + }
61529 +
61530 + }
61531 +
61532 + if (A_NO_MEMORY == status) {
61533 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61534 + (" Endpoint :%d has no buffers, blocking receiver to prevent overrun.. \n",
61535 + pHdr->EndpointID));
61536 + /* try to stop receive at the device layer */
61537 + DevStopRecv(&target->Device, asyncProc ? DEV_STOP_RECV_ASYNC : DEV_STOP_RECV_SYNC);
61538 + status = A_OK;
61539 + } else if (A_FAILED(status)) {
61540 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61541 + ("Failed to get pending message : LookAhead Value: 0x%X (status = %d) \n",
61542 + LookAhead, status));
61543 + if (pPacket != NULL) {
61544 + /* clean up packet on error */
61545 + HTC_RECYCLE_RX_PKT(target, pPacket);
61546 + }
61547 + }
61548 +
61549 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,("-HTCRecvMessagePendingHandler \n"));
61550 +
61551 + return status;
61552 +}
61553 +
61554 +/* Makes a buffer available to the HTC module */
61555 +A_STATUS HTCAddReceivePkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket)
61556 +{
61557 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
61558 + HTC_ENDPOINT *pEndpoint;
61559 + A_BOOL unblockRecv = FALSE;
61560 + A_STATUS status = A_OK;
61561 +
61562 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,
61563 + ("+- HTCAddReceivePkt: endPointId: %d, buffer: 0x%X, length: %d\n",
61564 + pPacket->Endpoint, (A_UINT32)pPacket->pBuffer, pPacket->BufferLength));
61565 +
61566 + do {
61567 +
61568 + if (HTC_STOPPING(target)) {
61569 + status = A_ECANCELED;
61570 + break;
61571 + }
61572 +
61573 + AR_DEBUG_ASSERT(pPacket->Endpoint < ENDPOINT_MAX);
61574 +
61575 + pEndpoint = &target->EndPoint[pPacket->Endpoint];
61576 +
61577 + LOCK_HTC_RX(target);
61578 +
61579 + /* store receive packet */
61580 + HTC_PACKET_ENQUEUE(&pEndpoint->RxBuffers, pPacket);
61581 +
61582 + /* check if we are blocked waiting for a new buffer */
61583 + if (target->HTCStateFlags & HTC_STATE_WAIT_BUFFERS) {
61584 + if (target->EpWaitingForBuffers == pPacket->Endpoint) {
61585 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV,(" receiver was blocked on ep:%d, unblocking.. \n",
61586 + target->EpWaitingForBuffers));
61587 + target->HTCStateFlags &= ~HTC_STATE_WAIT_BUFFERS;
61588 + target->EpWaitingForBuffers = ENDPOINT_MAX;
61589 + unblockRecv = TRUE;
61590 + }
61591 + }
61592 +
61593 + UNLOCK_HTC_RX(target);
61594 +
61595 + if (unblockRecv && !HTC_STOPPING(target)) {
61596 + /* TODO : implement a buffer threshold count? */
61597 + DevEnableRecv(&target->Device,DEV_ENABLE_RECV_SYNC);
61598 + }
61599 +
61600 + } while (FALSE);
61601 +
61602 + return status;
61603 +}
61604 +
61605 +static void HTCFlushEndpointRX(HTC_TARGET *target, HTC_ENDPOINT *pEndpoint)
61606 +{
61607 + HTC_PACKET *pPacket;
61608 +
61609 + LOCK_HTC_RX(target);
61610 +
61611 + while (1) {
61612 + pPacket = HTC_PACKET_DEQUEUE(&pEndpoint->RxBuffers);
61613 + if (NULL == pPacket) {
61614 + break;
61615 + }
61616 + UNLOCK_HTC_RX(target);
61617 + pPacket->Status = A_ECANCELED;
61618 + pPacket->ActualLength = 0;
61619 + AR_DEBUG_PRINTF(ATH_DEBUG_RECV, (" Flushing RX packet:0x%X, length:%d, ep:%d \n",
61620 + (A_UINT32)pPacket, pPacket->BufferLength, pPacket->Endpoint));
61621 + /* give the packet back */
61622 + pEndpoint->EpCallBacks.EpRecv(pEndpoint->EpCallBacks.pContext,
61623 + pPacket);
61624 + LOCK_HTC_RX(target);
61625 + }
61626 +
61627 + UNLOCK_HTC_RX(target);
61628 +
61629 +
61630 +}
61631 +
61632 +void HTCFlushRecvBuffers(HTC_TARGET *target)
61633 +{
61634 + HTC_ENDPOINT *pEndpoint;
61635 + int i;
61636 +
61637 + /* NOTE: no need to flush endpoint 0, these buffers were
61638 + * allocated as part of the HTC struct */
61639 + for (i = ENDPOINT_1; i < ENDPOINT_MAX; i++) {
61640 + pEndpoint = &target->EndPoint[i];
61641 + if (pEndpoint->ServiceID == 0) {
61642 + /* not in use.. */
61643 + continue;
61644 + }
61645 + HTCFlushEndpointRX(target,pEndpoint);
61646 + }
61647 +
61648 +
61649 +}
61650 +
61651 +
61652 Index: linux-2.6.28/drivers/ar6000/htc/htc_send.c
61653 ===================================================================
61654 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
61655 +++ linux-2.6.28/drivers/ar6000/htc/htc_send.c 2009-01-02 00:01:56.000000000 +0100
61656 @@ -0,0 +1,543 @@
61657 +/*
61658 + *
61659 + * Copyright (c) 2007 Atheros Communications Inc.
61660 + * All rights reserved.
61661 + *
61662 + *
61663 + * This program is free software; you can redistribute it and/or modify
61664 + * it under the terms of the GNU General Public License version 2 as
61665 + * published by the Free Software Foundation;
61666 + *
61667 + * Software distributed under the License is distributed on an "AS
61668 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
61669 + * implied. See the License for the specific language governing
61670 + * rights and limitations under the License.
61671 + *
61672 + *
61673 + *
61674 + */
61675 +
61676 +#include "htc_internal.h"
61677 +
61678 +#define DO_EP_TX_COMPLETION(ep,p) \
61679 +{ \
61680 + (p)->Completion = NULL; \
61681 + (ep)->EpCallBacks.EpTxComplete((ep)->EpCallBacks.pContext,(p)); \
61682 +}
61683 +
61684 +
61685 +/* call the distribute credits callback with the distribution */
61686 +#define DO_DISTRIBUTION(t,reason,description,pList) \
61687 +{ \
61688 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, \
61689 + (" calling distribute function (%s) (dfn:0x%X, ctxt:0x%X, dist:0x%X) \n", \
61690 + (description), \
61691 + (A_UINT32)(t)->DistributeCredits, \
61692 + (A_UINT32)(t)->pCredDistContext, \
61693 + (A_UINT32)pList)); \
61694 + (t)->DistributeCredits((t)->pCredDistContext, \
61695 + (pList), \
61696 + (reason)); \
61697 +}
61698 +
61699 +/* our internal send packet completion handler when packets are submited to the AR6K device
61700 + * layer */
61701 +static void HTCSendPktCompletionHandler(void *Context, HTC_PACKET *pPacket)
61702 +{
61703 + HTC_TARGET *target = (HTC_TARGET *)Context;
61704 + HTC_ENDPOINT *pEndpoint = &target->EndPoint[pPacket->Endpoint];
61705 +
61706 +
61707 + if (A_FAILED(pPacket->Status)) {
61708 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
61709 + ("HTCSendPktCompletionHandler: request failed (status:%d, ep:%d) \n",
61710 + pPacket->Status, pPacket->Endpoint));
61711 + }
61712 + /* first, fixup the head room we allocated */
61713 + pPacket->pBuffer += HTC_HDR_LENGTH;
61714 + /* do completion */
61715 + DO_EP_TX_COMPLETION(pEndpoint,pPacket);
61716 +}
61717 +
61718 +A_STATUS HTCIssueSend(HTC_TARGET *target, HTC_PACKET *pPacket, A_UINT8 SendFlags)
61719 +{
61720 + A_STATUS status;
61721 + A_UINT8 *pHdrBuf;
61722 + A_BOOL sync = FALSE;
61723 +
61724 + /* caller always provides headrooom */
61725 + pPacket->pBuffer -= HTC_HDR_LENGTH;
61726 + pHdrBuf = pPacket->pBuffer;
61727 + /* setup frame header */
61728 + A_SET_UINT16_FIELD(pHdrBuf,HTC_FRAME_HDR,PayloadLen,(A_UINT16)pPacket->ActualLength);
61729 + A_SET_UINT8_FIELD(pHdrBuf,HTC_FRAME_HDR,Flags,SendFlags);
61730 + A_SET_UINT8_FIELD(pHdrBuf,HTC_FRAME_HDR,EndpointID, (A_UINT8)pPacket->Endpoint);
61731 +
61732 + if (pPacket->Completion == NULL) {
61733 + /* mark that this request was synchronously issued */
61734 + sync = TRUE;
61735 + }
61736 +
61737 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,
61738 + ("+-HTCIssueSend: transmit length : %d (%s) \n",
61739 + pPacket->ActualLength + HTC_HDR_LENGTH,
61740 + sync ? "SYNC" : "ASYNC" ));
61741 +
61742 + /* send message to device */
61743 + status = DevSendPacket(&target->Device,
61744 + pPacket,
61745 + pPacket->ActualLength + HTC_HDR_LENGTH);
61746 +
61747 + if (sync) {
61748 + /* use local sync variable. If this was issued asynchronously, pPacket is no longer
61749 + * safe to access. */
61750 + pPacket->pBuffer += HTC_HDR_LENGTH;
61751 + }
61752 +
61753 + /* if this request was asynchronous, the packet completion routine will be invoked by
61754 + * the device layer when the HIF layer completes the request */
61755 +
61756 + return status;
61757 +}
61758 +
61759 +/* try to send the current packet or a packet at the head of the TX queue,
61760 + * if there are no credits, the packet remains in the queue.
61761 + * this function always succeeds and returns a flag if the TX queue for
61762 + * the endpoint has hit the set limit */
61763 +static A_BOOL HTCTrySend(HTC_TARGET *target,
61764 + HTC_ENDPOINT *pEndpoint,
61765 + HTC_PACKET *pPacketToSend)
61766 +{
61767 + HTC_PACKET *pPacket;
61768 + int creditsRequired;
61769 + int remainder;
61770 + A_UINT8 sendFlags;
61771 + A_BOOL epFull = FALSE;
61772 +
61773 + LOCK_HTC_TX(target);
61774 +
61775 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,("+HTCTrySend (pPkt:0x%X)\n",(A_UINT32)pPacketToSend));
61776 +
61777 + if (pPacketToSend != NULL) {
61778 + /* caller supplied us a packet to queue to the tail of the HTC TX queue before
61779 + * we check the tx queue */
61780 + HTC_PACKET_ENQUEUE(&pEndpoint->TxQueue,pPacketToSend);
61781 + pEndpoint->CurrentTxQueueDepth++;
61782 + }
61783 +
61784 + /* now drain the TX queue for transmission as long as we have enough
61785 + * credits */
61786 +
61787 + while (1) {
61788 +
61789 + if (HTC_QUEUE_EMPTY(&pEndpoint->TxQueue)) {
61790 + /* nothing in the queue */
61791 + break;
61792 + }
61793 +
61794 + sendFlags = 0;
61795 +
61796 + /* get packet at head, but don't remove it */
61797 + pPacket = HTC_GET_PKT_AT_HEAD(&pEndpoint->TxQueue);
61798 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,(" Got head packet:0x%X , Queue Depth: %d\n",
61799 + (A_UINT32)pPacket, pEndpoint->CurrentTxQueueDepth));
61800 +
61801 + /* figure out how many credits this message requires */
61802 + creditsRequired = (pPacket->ActualLength + HTC_HDR_LENGTH) / target->TargetCreditSize;
61803 + remainder = (pPacket->ActualLength + HTC_HDR_LENGTH) % target->TargetCreditSize;
61804 +
61805 + if (remainder) {
61806 + creditsRequired++;
61807 + }
61808 +
61809 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,(" Creds Required:%d Got:%d\n",
61810 + creditsRequired, pEndpoint->CreditDist.TxCredits));
61811 +
61812 + if (pEndpoint->CreditDist.TxCredits < creditsRequired) {
61813 +
61814 + /* not enough credits */
61815 +
61816 + if (pPacket->Endpoint == ENDPOINT_0) {
61817 + /* leave it in the queue */
61818 + break;
61819 + }
61820 + /* invoke the registered distribution function only if this is not
61821 + * endpoint 0, we let the driver layer provide more credits if it can.
61822 + * We pass the credit distribution list starting at the endpoint in question
61823 + * */
61824 +
61825 + /* set how many credits we need */
61826 + pEndpoint->CreditDist.TxCreditsSeek =
61827 + creditsRequired - pEndpoint->CreditDist.TxCredits;
61828 + DO_DISTRIBUTION(target,
61829 + HTC_CREDIT_DIST_SEEK_CREDITS,
61830 + "Seek Credits",
61831 + &pEndpoint->CreditDist);
61832 +
61833 + pEndpoint->CreditDist.TxCreditsSeek = 0;
61834 +
61835 + if (pEndpoint->CreditDist.TxCredits < creditsRequired) {
61836 + /* still not enough credits to send, leave packet in the queue */
61837 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,
61838 + (" Not enough credits for ep %d leaving packet in queue..\n",
61839 + pPacket->Endpoint));
61840 + break;
61841 + }
61842 +
61843 + }
61844 +
61845 + pEndpoint->CreditDist.TxCredits -= creditsRequired;
61846 + INC_HTC_EP_STAT(pEndpoint, TxCreditsConsummed, creditsRequired);
61847 +
61848 + /* check if we need credits */
61849 + if (pEndpoint->CreditDist.TxCredits < pEndpoint->CreditDist.TxCreditsPerMaxMsg) {
61850 + sendFlags |= HTC_FLAGS_NEED_CREDIT_UPDATE;
61851 + INC_HTC_EP_STAT(pEndpoint, TxCreditLowIndications, 1);
61852 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,(" Host Needs Credits \n"));
61853 + }
61854 +
61855 + /* now we can fully dequeue */
61856 + pPacket = HTC_PACKET_DEQUEUE(&pEndpoint->TxQueue);
61857 + pEndpoint->CurrentTxQueueDepth--;
61858 +
61859 + INC_HTC_EP_STAT(pEndpoint, TxIssued, 1);
61860 +
61861 + UNLOCK_HTC_TX(target);
61862 +
61863 + HTCIssueSend(target, pPacket, sendFlags);
61864 +
61865 + LOCK_HTC_TX(target);
61866 +
61867 + /* go back and check for more messages */
61868 + }
61869 +
61870 + if (pEndpoint->CurrentTxQueueDepth >= pEndpoint->MaxTxQueueDepth) {
61871 + /* let caller know that this endpoint has reached the maximum depth */
61872 + epFull = TRUE;
61873 + }
61874 +
61875 + UNLOCK_HTC_TX(target);
61876 +
61877 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,("-HTCTrySend: \n"));
61878 + return epFull;
61879 +}
61880 +
61881 +/* HTC API - HTCSendPkt */
61882 +A_STATUS HTCSendPkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket)
61883 +{
61884 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
61885 + HTC_ENDPOINT *pEndpoint;
61886 + HTC_ENDPOINT_ID ep;
61887 + A_STATUS status = A_OK;
61888 +
61889 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND,
61890 + ("+HTCSendPkt: Enter endPointId: %d, buffer: 0x%X, length: %d \n",
61891 + pPacket->Endpoint, (A_UINT32)pPacket->pBuffer, pPacket->ActualLength));
61892 +
61893 + ep = pPacket->Endpoint;
61894 + AR_DEBUG_ASSERT(ep < ENDPOINT_MAX);
61895 + pEndpoint = &target->EndPoint[ep];
61896 +
61897 + do {
61898 +
61899 + if (HTC_STOPPING(target)) {
61900 + status = A_ECANCELED;
61901 + pPacket->Status = status;
61902 + DO_EP_TX_COMPLETION(pEndpoint,pPacket);
61903 + break;
61904 + }
61905 + /* everything sent through this interface is asynchronous */
61906 + /* fill in HTC completion routines */
61907 + pPacket->Completion = HTCSendPktCompletionHandler;
61908 + pPacket->pContext = target;
61909 +
61910 + if (HTCTrySend(target, pEndpoint, pPacket)) {
61911 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, (" Endpoint %d, TX queue is full, Depth:%d, Max:%d \n",
61912 + ep, pEndpoint->CurrentTxQueueDepth, pEndpoint->MaxTxQueueDepth));
61913 + /* queue is now full, let caller know */
61914 + if (pEndpoint->EpCallBacks.EpSendFull != NULL) {
61915 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, (" Calling driver's send full callback.... \n"));
61916 + pEndpoint->EpCallBacks.EpSendFull(pEndpoint->EpCallBacks.pContext,
61917 + ep);
61918 + }
61919 + }
61920 +
61921 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("-HTCSendPkt \n"));
61922 + } while (FALSE);
61923 +
61924 + return status;
61925 +}
61926 +
61927 +
61928 +/* check TX queues to drain because of credit distribution update */
61929 +static INLINE void HTCCheckEndpointTxQueues(HTC_TARGET *target)
61930 +{
61931 + HTC_ENDPOINT *pEndpoint;
61932 + HTC_ENDPOINT_CREDIT_DIST *pDistItem;
61933 +
61934 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("+HTCCheckEndpointTxQueues \n"));
61935 + pDistItem = target->EpCreditDistributionListHead;
61936 +
61937 + /* run through the credit distribution list to see
61938 + * if there are packets queued
61939 + * NOTE: no locks need to be taken since the distribution list
61940 + * is not dynamic (cannot be re-ordered) and we are not modifying any state */
61941 + while (pDistItem != NULL) {
61942 + pEndpoint = (HTC_ENDPOINT *)pDistItem->pHTCReserved;
61943 +
61944 + if (pEndpoint->CurrentTxQueueDepth > 0) {
61945 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, (" Ep %d has %d credits and %d Packets in TX Queue \n",
61946 + pDistItem->Endpoint, pEndpoint->CreditDist.TxCredits, pEndpoint->CurrentTxQueueDepth));
61947 + /* try to start the stalled queue, this list is ordered by priority.
61948 + * Highest priority queue get's processed first, if there are credits available the
61949 + * highest priority queue will get a chance to reclaim credits from lower priority
61950 + * ones */
61951 + HTCTrySend(target, pEndpoint, NULL);
61952 + }
61953 +
61954 + pDistItem = pDistItem->pNext;
61955 + }
61956 +
61957 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("-HTCCheckEndpointTxQueues \n"));
61958 +}
61959 +
61960 +/* process credit reports and call distribution function */
61961 +void HTCProcessCreditRpt(HTC_TARGET *target, HTC_CREDIT_REPORT *pRpt, int NumEntries, HTC_ENDPOINT_ID FromEndpoint)
61962 +{
61963 + int i;
61964 + HTC_ENDPOINT *pEndpoint;
61965 + int totalCredits = 0;
61966 + A_BOOL doDist = FALSE;
61967 +
61968 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("+HTCProcessCreditRpt, Credit Report Entries:%d \n", NumEntries));
61969 +
61970 + /* lock out TX while we update credits */
61971 + LOCK_HTC_TX(target);
61972 +
61973 + for (i = 0; i < NumEntries; i++, pRpt++) {
61974 + if (pRpt->EndpointID >= ENDPOINT_MAX) {
61975 + AR_DEBUG_ASSERT(FALSE);
61976 + break;
61977 + }
61978 +
61979 + pEndpoint = &target->EndPoint[pRpt->EndpointID];
61980 +
61981 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, (" Endpoint %d got %d credits \n",
61982 + pRpt->EndpointID, pRpt->Credits));
61983 +
61984 +
61985 +#ifdef HTC_EP_STAT_PROFILING
61986 +
61987 + INC_HTC_EP_STAT(pEndpoint, TxCreditRpts, 1);
61988 + INC_HTC_EP_STAT(pEndpoint, TxCreditsReturned, pRpt->Credits);
61989 +
61990 + if (FromEndpoint == pRpt->EndpointID) {
61991 + /* this credit report arrived on the same endpoint indicating it arrived in an RX
61992 + * packet */
61993 + INC_HTC_EP_STAT(pEndpoint, TxCreditsFromRx, pRpt->Credits);
61994 + INC_HTC_EP_STAT(pEndpoint, TxCreditRptsFromRx, 1);
61995 + } else if (FromEndpoint == ENDPOINT_0) {
61996 + /* this credit arrived on endpoint 0 as a NULL message */
61997 + INC_HTC_EP_STAT(pEndpoint, TxCreditsFromEp0, pRpt->Credits);
61998 + INC_HTC_EP_STAT(pEndpoint, TxCreditRptsFromEp0, 1);
61999 + } else {
62000 + /* arrived on another endpoint */
62001 + INC_HTC_EP_STAT(pEndpoint, TxCreditsFromOther, pRpt->Credits);
62002 + INC_HTC_EP_STAT(pEndpoint, TxCreditRptsFromOther, 1);
62003 + }
62004 +
62005 +#endif
62006 +
62007 + if (ENDPOINT_0 == pRpt->EndpointID) {
62008 + /* always give endpoint 0 credits back */
62009 + pEndpoint->CreditDist.TxCredits += pRpt->Credits;
62010 + } else {
62011 + /* for all other endpoints, update credits to distribute, the distribution function
62012 + * will handle giving out credits back to the endpoints */
62013 + pEndpoint->CreditDist.TxCreditsToDist += pRpt->Credits;
62014 + /* flag that we have to do the distribution */
62015 + doDist = TRUE;
62016 + }
62017 +
62018 + totalCredits += pRpt->Credits;
62019 + }
62020 +
62021 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, (" Report indicated %d credits to distribute \n", totalCredits));
62022 +
62023 + if (doDist) {
62024 + /* this was a credit return based on a completed send operations
62025 + * note, this is done with the lock held */
62026 + DO_DISTRIBUTION(target,
62027 + HTC_CREDIT_DIST_SEND_COMPLETE,
62028 + "Send Complete",
62029 + target->EpCreditDistributionListHead->pNext);
62030 + }
62031 +
62032 + UNLOCK_HTC_TX(target);
62033 +
62034 + if (totalCredits) {
62035 + HTCCheckEndpointTxQueues(target);
62036 + }
62037 +
62038 + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, ("-HTCProcessCreditRpt \n"));
62039 +}
62040 +
62041 +/* flush endpoint TX queue */
62042 +static void HTCFlushEndpointTX(HTC_TARGET *target, HTC_ENDPOINT *pEndpoint, HTC_TX_TAG Tag)
62043 +{
62044 + HTC_PACKET *pPacket;
62045 + HTC_PACKET_QUEUE discardQueue;
62046 +
62047 + /* initialize the discard queue */
62048 + INIT_HTC_PACKET_QUEUE(&discardQueue);
62049 +
62050 + LOCK_HTC_TX(target);
62051 +
62052 + /* interate from the front of the TX queue and flush out packets */
62053 + ITERATE_OVER_LIST_ALLOW_REMOVE(&pEndpoint->TxQueue, pPacket, HTC_PACKET, ListLink) {
62054 +
62055 + /* check for removal */
62056 + if ((HTC_TX_PACKET_TAG_ALL == Tag) || (Tag == pPacket->PktInfo.AsTx.Tag)) {
62057 + /* remove from queue */
62058 + HTC_PACKET_REMOVE(pPacket);
62059 + /* add it to the discard pile */
62060 + HTC_PACKET_ENQUEUE(&discardQueue, pPacket);
62061 + pEndpoint->CurrentTxQueueDepth--;
62062 + }
62063 +
62064 + } ITERATE_END;
62065 +
62066 + UNLOCK_HTC_TX(target);
62067 +
62068 + /* empty the discard queue */
62069 + while (1) {
62070 + pPacket = HTC_PACKET_DEQUEUE(&discardQueue);
62071 + if (NULL == pPacket) {
62072 + break;
62073 + }
62074 + pPacket->Status = A_ECANCELED;
62075 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, (" Flushing TX packet:0x%X, length:%d, ep:%d tag:0x%X \n",
62076 + (A_UINT32)pPacket, pPacket->ActualLength, pPacket->Endpoint, pPacket->PktInfo.AsTx.Tag));
62077 + DO_EP_TX_COMPLETION(pEndpoint,pPacket);
62078 + }
62079 +
62080 +}
62081 +
62082 +void DumpCreditDist(HTC_ENDPOINT_CREDIT_DIST *pEPDist)
62083 +{
62084 +#ifdef DEBUG
62085 + HTC_ENDPOINT *pEndpoint = (HTC_ENDPOINT *)pEPDist->pHTCReserved;
62086 +#endif
62087 +
62088 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, ("--- EP : %d ServiceID: 0x%X --------------\n",
62089 + pEPDist->Endpoint, pEPDist->ServiceID));
62090 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" this:0x%X next:0x%X prev:0x%X\n",
62091 + (A_UINT32)pEPDist, (A_UINT32)pEPDist->pNext, (A_UINT32)pEPDist->pPrev));
62092 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" DistFlags : 0x%X \n", pEPDist->DistFlags));
62093 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxCreditsNorm : %d \n", pEPDist->TxCreditsNorm));
62094 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxCreditsMin : %d \n", pEPDist->TxCreditsMin));
62095 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxCredits : %d \n", pEPDist->TxCredits));
62096 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxCreditsAssigned : %d \n", pEPDist->TxCreditsAssigned));
62097 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxCreditsSeek : %d \n", pEPDist->TxCreditsSeek));
62098 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxCreditSize : %d \n", pEPDist->TxCreditSize));
62099 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxCreditsPerMaxMsg : %d \n", pEPDist->TxCreditsPerMaxMsg));
62100 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxCreditsToDist : %d \n", pEPDist->TxCreditsToDist));
62101 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, (" TxQueueDepth : %d \n", pEndpoint->CurrentTxQueueDepth));
62102 + AR_DEBUG_PRINTF(ATH_DEBUG_ANY, ("----------------------------------------------------\n"));
62103 +}
62104 +
62105 +void DumpCreditDistStates(HTC_TARGET *target)
62106 +{
62107 + HTC_ENDPOINT_CREDIT_DIST *pEPList = target->EpCreditDistributionListHead;
62108 +
62109 + while (pEPList != NULL) {
62110 + DumpCreditDist(pEPList);
62111 + pEPList = pEPList->pNext;
62112 + }
62113 +
62114 + if (target->DistributeCredits != NULL) {
62115 + DO_DISTRIBUTION(target,
62116 + HTC_DUMP_CREDIT_STATE,
62117 + "Dump State",
62118 + NULL);
62119 + }
62120 +}
62121 +
62122 +/* flush all send packets from all endpoint queues */
62123 +void HTCFlushSendPkts(HTC_TARGET *target)
62124 +{
62125 + HTC_ENDPOINT *pEndpoint;
62126 + int i;
62127 +
62128 + DumpCreditDistStates(target);
62129 +
62130 + for (i = ENDPOINT_0; i < ENDPOINT_MAX; i++) {
62131 + pEndpoint = &target->EndPoint[i];
62132 + if (pEndpoint->ServiceID == 0) {
62133 + /* not in use.. */
62134 + continue;
62135 + }
62136 + HTCFlushEndpointTX(target,pEndpoint,HTC_TX_PACKET_TAG_ALL);
62137 + }
62138 +
62139 +
62140 +}
62141 +
62142 +/* HTC API to flush an endpoint's TX queue*/
62143 +void HTCFlushEndpoint(HTC_HANDLE HTCHandle, HTC_ENDPOINT_ID Endpoint, HTC_TX_TAG Tag)
62144 +{
62145 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
62146 + HTC_ENDPOINT *pEndpoint = &target->EndPoint[Endpoint];
62147 +
62148 + if (pEndpoint->ServiceID == 0) {
62149 + AR_DEBUG_ASSERT(FALSE);
62150 + /* not in use.. */
62151 + return;
62152 + }
62153 +
62154 + HTCFlushEndpointTX(target, pEndpoint, Tag);
62155 +}
62156 +
62157 +/* HTC API to indicate activity to the credit distribution function */
62158 +void HTCIndicateActivityChange(HTC_HANDLE HTCHandle,
62159 + HTC_ENDPOINT_ID Endpoint,
62160 + A_BOOL Active)
62161 +{
62162 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
62163 + HTC_ENDPOINT *pEndpoint = &target->EndPoint[Endpoint];
62164 + A_BOOL doDist = FALSE;
62165 +
62166 + if (pEndpoint->ServiceID == 0) {
62167 + AR_DEBUG_ASSERT(FALSE);
62168 + /* not in use.. */
62169 + return;
62170 + }
62171 +
62172 + LOCK_HTC_TX(target);
62173 +
62174 + if (Active) {
62175 + if (!(pEndpoint->CreditDist.DistFlags & HTC_EP_ACTIVE)) {
62176 + /* mark active now */
62177 + pEndpoint->CreditDist.DistFlags |= HTC_EP_ACTIVE;
62178 + doDist = TRUE;
62179 + }
62180 + } else {
62181 + if (pEndpoint->CreditDist.DistFlags & HTC_EP_ACTIVE) {
62182 + /* mark inactive now */
62183 + pEndpoint->CreditDist.DistFlags &= ~HTC_EP_ACTIVE;
62184 + doDist = TRUE;
62185 + }
62186 + }
62187 +
62188 + if (doDist) {
62189 + /* do distribution again based on activity change
62190 + * note, this is done with the lock held */
62191 + DO_DISTRIBUTION(target,
62192 + HTC_CREDIT_DIST_ACTIVITY_CHANGE,
62193 + "Activity Change",
62194 + target->EpCreditDistributionListHead->pNext);
62195 + }
62196 +
62197 + UNLOCK_HTC_TX(target);
62198 +
62199 +}
62200 Index: linux-2.6.28/drivers/ar6000/htc/htc_services.c
62201 ===================================================================
62202 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
62203 +++ linux-2.6.28/drivers/ar6000/htc/htc_services.c 2009-01-02 00:01:56.000000000 +0100
62204 @@ -0,0 +1,403 @@
62205 +/*
62206 + *
62207 + * Copyright (c) 2007 Atheros Communications Inc.
62208 + * All rights reserved.
62209 + *
62210 + *
62211 + * This program is free software; you can redistribute it and/or modify
62212 + * it under the terms of the GNU General Public License version 2 as
62213 + * published by the Free Software Foundation;
62214 + *
62215 + * Software distributed under the License is distributed on an "AS
62216 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
62217 + * implied. See the License for the specific language governing
62218 + * rights and limitations under the License.
62219 + *
62220 + *
62221 + *
62222 + */
62223 +
62224 +#include "htc_internal.h"
62225 +
62226 +void HTCControlTxComplete(void *Context, HTC_PACKET *pPacket)
62227 +{
62228 + /* not implemented
62229 + * we do not send control TX frames during normal runtime, only during setup */
62230 + AR_DEBUG_ASSERT(FALSE);
62231 +}
62232 +
62233 + /* callback when a control message arrives on this endpoint */
62234 +void HTCControlRecv(void *Context, HTC_PACKET *pPacket)
62235 +{
62236 + AR_DEBUG_ASSERT(pPacket->Endpoint == ENDPOINT_0);
62237 +
62238 + /* the only control messages we are expecting are NULL messages (credit resports), which should
62239 + * never get here */
62240 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
62241 + ("HTCControlRecv, got message with length:%d \n",
62242 + pPacket->ActualLength + HTC_HDR_LENGTH));
62243 +
62244 + /* dump header and message */
62245 + DebugDumpBytes(pPacket->pBuffer - HTC_HDR_LENGTH,
62246 + pPacket->ActualLength + HTC_HDR_LENGTH,
62247 + "Unexpected ENDPOINT 0 Message");
62248 +
62249 + HTC_RECYCLE_RX_PKT((HTC_TARGET*)Context,pPacket);
62250 +}
62251 +
62252 +A_STATUS HTCSendSetupComplete(HTC_TARGET *target)
62253 +{
62254 + HTC_PACKET *pSendPacket = NULL;
62255 + A_STATUS status;
62256 + HTC_SETUP_COMPLETE_MSG *pSetupComplete;
62257 +
62258 + do {
62259 + /* allocate a packet to send to the target */
62260 + pSendPacket = HTC_ALLOC_CONTROL_TX(target);
62261 +
62262 + if (NULL == pSendPacket) {
62263 + status = A_NO_MEMORY;
62264 + break;
62265 + }
62266 +
62267 + /* assemble setup complete message */
62268 + pSetupComplete = (HTC_SETUP_COMPLETE_MSG *)pSendPacket->pBuffer;
62269 + A_MEMZERO(pSetupComplete,sizeof(HTC_SETUP_COMPLETE_MSG));
62270 + pSetupComplete->MessageID = HTC_MSG_SETUP_COMPLETE_ID;
62271 +
62272 + SET_HTC_PACKET_INFO_TX(pSendPacket,
62273 + NULL,
62274 + (A_UINT8 *)pSetupComplete,
62275 + sizeof(HTC_SETUP_COMPLETE_MSG),
62276 + ENDPOINT_0,
62277 + HTC_SERVICE_TX_PACKET_TAG);
62278 +
62279 + /* we want synchronous operation */
62280 + pSendPacket->Completion = NULL;
62281 + /* send the message */
62282 + status = HTCIssueSend(target,pSendPacket,0);
62283 +
62284 + } while (FALSE);
62285 +
62286 + if (pSendPacket != NULL) {
62287 + HTC_FREE_CONTROL_TX(target,pSendPacket);
62288 + }
62289 +
62290 + return status;
62291 +}
62292 +
62293 +
62294 +A_STATUS HTCConnectService(HTC_HANDLE HTCHandle,
62295 + HTC_SERVICE_CONNECT_REQ *pConnectReq,
62296 + HTC_SERVICE_CONNECT_RESP *pConnectResp)
62297 +{
62298 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
62299 + A_STATUS status = A_OK;
62300 + HTC_PACKET *pRecvPacket = NULL;
62301 + HTC_PACKET *pSendPacket = NULL;
62302 + HTC_CONNECT_SERVICE_RESPONSE_MSG *pResponseMsg;
62303 + HTC_CONNECT_SERVICE_MSG *pConnectMsg;
62304 + HTC_ENDPOINT_ID assignedEndpoint = ENDPOINT_MAX;
62305 + HTC_ENDPOINT *pEndpoint;
62306 + int maxMsgSize = 0;
62307 +
62308 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("+HTCConnectService, target:0x%X SvcID:0x%X \n",
62309 + (A_UINT32)target, pConnectReq->ServiceID));
62310 +
62311 + do {
62312 +
62313 + AR_DEBUG_ASSERT(pConnectReq->ServiceID != 0);
62314 +
62315 + if (HTC_CTRL_RSVD_SVC == pConnectReq->ServiceID) {
62316 + /* special case for pseudo control service */
62317 + assignedEndpoint = ENDPOINT_0;
62318 + maxMsgSize = HTC_MAX_CONTROL_MESSAGE_LENGTH;
62319 + } else {
62320 + /* allocate a packet to send to the target */
62321 + pSendPacket = HTC_ALLOC_CONTROL_TX(target);
62322 +
62323 + if (NULL == pSendPacket) {
62324 + AR_DEBUG_ASSERT(FALSE);
62325 + status = A_NO_MEMORY;
62326 + break;
62327 + }
62328 + /* assemble connect service message */
62329 + pConnectMsg = (HTC_CONNECT_SERVICE_MSG *)pSendPacket->pBuffer;
62330 + AR_DEBUG_ASSERT(pConnectMsg != NULL);
62331 + A_MEMZERO(pConnectMsg,sizeof(HTC_CONNECT_SERVICE_MSG));
62332 + pConnectMsg->MessageID = HTC_MSG_CONNECT_SERVICE_ID;
62333 + pConnectMsg->ServiceID = pConnectReq->ServiceID;
62334 + pConnectMsg->ConnectionFlags = pConnectReq->ConnectionFlags;
62335 + /* check caller if it wants to transfer meta data */
62336 + if ((pConnectReq->pMetaData != NULL) &&
62337 + (pConnectReq->MetaDataLength <= HTC_SERVICE_META_DATA_MAX_LENGTH)) {
62338 + /* copy meta data into message buffer (after header ) */
62339 + A_MEMCPY((A_UINT8 *)pConnectMsg + sizeof(HTC_CONNECT_SERVICE_MSG),
62340 + pConnectReq->pMetaData,
62341 + pConnectReq->MetaDataLength);
62342 + pConnectMsg->ServiceMetaLength = pConnectReq->MetaDataLength;
62343 + }
62344 +
62345 + SET_HTC_PACKET_INFO_TX(pSendPacket,
62346 + NULL,
62347 + (A_UINT8 *)pConnectMsg,
62348 + sizeof(HTC_CONNECT_SERVICE_MSG) + pConnectMsg->ServiceMetaLength,
62349 + ENDPOINT_0,
62350 + HTC_SERVICE_TX_PACKET_TAG);
62351 +
62352 + /* we want synchronous operation */
62353 + pSendPacket->Completion = NULL;
62354 +
62355 + status = HTCIssueSend(target,pSendPacket,0);
62356 +
62357 + if (A_FAILED(status)) {
62358 + break;
62359 + }
62360 +
62361 + /* wait for response */
62362 + status = HTCWaitforControlMessage(target, &pRecvPacket);
62363 +
62364 + if (A_FAILED(status)) {
62365 + break;
62366 + }
62367 + /* we controlled the buffer creation so it has to be properly aligned */
62368 + pResponseMsg = (HTC_CONNECT_SERVICE_RESPONSE_MSG *)pRecvPacket->pBuffer;
62369 +
62370 + if ((pResponseMsg->MessageID != HTC_MSG_CONNECT_SERVICE_RESPONSE_ID) ||
62371 + (pRecvPacket->ActualLength < sizeof(HTC_CONNECT_SERVICE_RESPONSE_MSG))) {
62372 + /* this message is not valid */
62373 + AR_DEBUG_ASSERT(FALSE);
62374 + status = A_EPROTO;
62375 + break;
62376 + }
62377 +
62378 + pConnectResp->ConnectRespCode = pResponseMsg->Status;
62379 + /* check response status */
62380 + if (pResponseMsg->Status != HTC_SERVICE_SUCCESS) {
62381 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
62382 + (" Target failed service 0x%X connect request (status:%d)\n",
62383 + pResponseMsg->ServiceID, pResponseMsg->Status));
62384 + status = A_EPROTO;
62385 + break;
62386 + }
62387 +
62388 + assignedEndpoint = pResponseMsg->EndpointID;
62389 + maxMsgSize = pResponseMsg->MaxMsgSize;
62390 +
62391 + if ((pConnectResp->pMetaData != NULL) &&
62392 + (pResponseMsg->ServiceMetaLength > 0) &&
62393 + (pResponseMsg->ServiceMetaLength <= HTC_SERVICE_META_DATA_MAX_LENGTH)) {
62394 + /* caller supplied a buffer and the target responded with data */
62395 + int copyLength = min((int)pConnectResp->BufferLength, (int)pResponseMsg->ServiceMetaLength);
62396 + /* copy the meta data */
62397 + A_MEMCPY(pConnectResp->pMetaData,
62398 + ((A_UINT8 *)pResponseMsg) + sizeof(HTC_CONNECT_SERVICE_RESPONSE_MSG),
62399 + copyLength);
62400 + pConnectResp->ActualLength = copyLength;
62401 + }
62402 +
62403 + }
62404 +
62405 + /* the rest of these are parameter checks so set the error status */
62406 + status = A_EPROTO;
62407 +
62408 + if (assignedEndpoint >= ENDPOINT_MAX) {
62409 + AR_DEBUG_ASSERT(FALSE);
62410 + break;
62411 + }
62412 +
62413 + if (0 == maxMsgSize) {
62414 + AR_DEBUG_ASSERT(FALSE);
62415 + break;
62416 + }
62417 +
62418 + pEndpoint = &target->EndPoint[assignedEndpoint];
62419 +
62420 + if (pEndpoint->ServiceID != 0) {
62421 + /* endpoint already in use! */
62422 + AR_DEBUG_ASSERT(FALSE);
62423 + break;
62424 + }
62425 +
62426 + /* return assigned endpoint to caller */
62427 + pConnectResp->Endpoint = assignedEndpoint;
62428 + pConnectResp->MaxMsgLength = maxMsgSize;
62429 +
62430 + /* setup the endpoint */
62431 + pEndpoint->ServiceID = pConnectReq->ServiceID; /* this marks the endpoint in use */
62432 + pEndpoint->MaxTxQueueDepth = pConnectReq->MaxSendQueueDepth;
62433 + pEndpoint->MaxMsgLength = maxMsgSize;
62434 + /* copy all the callbacks */
62435 + pEndpoint->EpCallBacks = pConnectReq->EpCallbacks;
62436 + INIT_HTC_PACKET_QUEUE(&pEndpoint->RxBuffers);
62437 + INIT_HTC_PACKET_QUEUE(&pEndpoint->TxQueue);
62438 + /* set the credit distribution info for this endpoint, this information is
62439 + * passed back to the credit distribution callback function */
62440 + pEndpoint->CreditDist.ServiceID = pConnectReq->ServiceID;
62441 + pEndpoint->CreditDist.pHTCReserved = pEndpoint;
62442 + pEndpoint->CreditDist.Endpoint = assignedEndpoint;
62443 + pEndpoint->CreditDist.TxCreditSize = target->TargetCreditSize;
62444 + pEndpoint->CreditDist.TxCreditsPerMaxMsg = maxMsgSize / target->TargetCreditSize;
62445 +
62446 + if (0 == pEndpoint->CreditDist.TxCreditsPerMaxMsg) {
62447 + pEndpoint->CreditDist.TxCreditsPerMaxMsg = 1;
62448 + }
62449 +
62450 + status = A_OK;
62451 +
62452 + } while (FALSE);
62453 +
62454 + if (pSendPacket != NULL) {
62455 + HTC_FREE_CONTROL_TX(target,pSendPacket);
62456 + }
62457 +
62458 + if (pRecvPacket != NULL) {
62459 + HTC_FREE_CONTROL_RX(target,pRecvPacket);
62460 + }
62461 +
62462 + AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("-HTCConnectService \n"));
62463 +
62464 + return status;
62465 +}
62466 +
62467 +static void AddToEndpointDistList(HTC_TARGET *target, HTC_ENDPOINT_CREDIT_DIST *pEpDist)
62468 +{
62469 + HTC_ENDPOINT_CREDIT_DIST *pCurEntry,*pLastEntry;
62470 +
62471 + if (NULL == target->EpCreditDistributionListHead) {
62472 + target->EpCreditDistributionListHead = pEpDist;
62473 + pEpDist->pNext = NULL;
62474 + pEpDist->pPrev = NULL;
62475 + return;
62476 + }
62477 +
62478 + /* queue to the end of the list, this does not have to be very
62479 + * fast since this list is built at startup time */
62480 + pCurEntry = target->EpCreditDistributionListHead;
62481 +
62482 + while (pCurEntry) {
62483 + pLastEntry = pCurEntry;
62484 + pCurEntry = pCurEntry->pNext;
62485 + }
62486 +
62487 + pLastEntry->pNext = pEpDist;
62488 + pEpDist->pPrev = pLastEntry;
62489 + pEpDist->pNext = NULL;
62490 +}
62491 +
62492 +
62493 +
62494 +/* default credit init callback */
62495 +static void HTCDefaultCreditInit(void *Context,
62496 + HTC_ENDPOINT_CREDIT_DIST *pEPList,
62497 + int TotalCredits)
62498 +{
62499 + HTC_ENDPOINT_CREDIT_DIST *pCurEpDist;
62500 + int totalEps = 0;
62501 + int creditsPerEndpoint;
62502 +
62503 + pCurEpDist = pEPList;
62504 + /* first run through the list and figure out how many endpoints we are dealing with */
62505 + while (pCurEpDist != NULL) {
62506 + pCurEpDist = pCurEpDist->pNext;
62507 + totalEps++;
62508 + }
62509 +
62510 + /* even distribution */
62511 + creditsPerEndpoint = TotalCredits/totalEps;
62512 +
62513 + pCurEpDist = pEPList;
62514 + /* run through the list and set minimum and normal credits and
62515 + * provide the endpoint with some credits to start */
62516 + while (pCurEpDist != NULL) {
62517 +
62518 + if (creditsPerEndpoint < pCurEpDist->TxCreditsPerMaxMsg) {
62519 + /* too many endpoints and not enough credits */
62520 + AR_DEBUG_ASSERT(FALSE);
62521 + break;
62522 + }
62523 + /* our minimum is set for at least 1 max message */
62524 + pCurEpDist->TxCreditsMin = pCurEpDist->TxCreditsPerMaxMsg;
62525 + /* this value is ignored by our credit alg, since we do
62526 + * not dynamically adjust credits, this is the policy of
62527 + * the "default" credit distribution, something simple and easy */
62528 + pCurEpDist->TxCreditsNorm = 0xFFFF;
62529 + /* give the endpoint minimum credits */
62530 + pCurEpDist->TxCredits = creditsPerEndpoint;
62531 + pCurEpDist->TxCreditsAssigned = creditsPerEndpoint;
62532 + pCurEpDist = pCurEpDist->pNext;
62533 + }
62534 +
62535 +}
62536 +
62537 +/* default credit distribution callback, NOTE, this callback holds the TX lock */
62538 +void HTCDefaultCreditDist(void *Context,
62539 + HTC_ENDPOINT_CREDIT_DIST *pEPDistList,
62540 + HTC_CREDIT_DIST_REASON Reason)
62541 +{
62542 + HTC_ENDPOINT_CREDIT_DIST *pCurEpDist;
62543 +
62544 + if (Reason == HTC_CREDIT_DIST_SEND_COMPLETE) {
62545 + pCurEpDist = pEPDistList;
62546 + /* simple distribution */
62547 + while (pCurEpDist != NULL) {
62548 + if (pCurEpDist->TxCreditsToDist > 0) {
62549 + /* just give the endpoint back the credits */
62550 + pCurEpDist->TxCredits += pCurEpDist->TxCreditsToDist;
62551 + pCurEpDist->TxCreditsToDist = 0;
62552 + }
62553 + pCurEpDist = pCurEpDist->pNext;
62554 + }
62555 + }
62556 +
62557 + /* note we do not need to handle the other reason codes as this is a very
62558 + * simple distribution scheme, no need to seek for more credits or handle inactivity */
62559 +}
62560 +
62561 +void HTCSetCreditDistribution(HTC_HANDLE HTCHandle,
62562 + void *pCreditDistContext,
62563 + HTC_CREDIT_DIST_CALLBACK CreditDistFunc,
62564 + HTC_CREDIT_INIT_CALLBACK CreditInitFunc,
62565 + HTC_SERVICE_ID ServicePriorityOrder[],
62566 + int ListLength)
62567 +{
62568 + HTC_TARGET *target = GET_HTC_TARGET_FROM_HANDLE(HTCHandle);
62569 + int i;
62570 + int ep;
62571 +
62572 + if (CreditInitFunc != NULL) {
62573 + /* caller has supplied their own distribution functions */
62574 + target->InitCredits = CreditInitFunc;
62575 + AR_DEBUG_ASSERT(CreditDistFunc != NULL);
62576 + target->DistributeCredits = CreditDistFunc;
62577 + target->pCredDistContext = pCreditDistContext;
62578 + } else {
62579 + /* caller wants HTC to do distribution */
62580 + /* if caller wants service to handle distributions then
62581 + * it must set both of these to NULL! */
62582 + AR_DEBUG_ASSERT(CreditDistFunc == NULL);
62583 + target->InitCredits = HTCDefaultCreditInit;
62584 + target->DistributeCredits = HTCDefaultCreditDist;
62585 + target->pCredDistContext = target;
62586 + }
62587 +
62588 + /* always add HTC control endpoint first, we only expose the list after the
62589 + * first one, this is added for TX queue checking */
62590 + AddToEndpointDistList(target, &target->EndPoint[ENDPOINT_0].CreditDist);
62591 +
62592 + /* build the list of credit distribution structures in priority order
62593 + * supplied by the caller, these will follow endpoint 0 */
62594 + for (i = 0; i < ListLength; i++) {
62595 + /* match services with endpoints and add the endpoints to the distribution list
62596 + * in FIFO order */
62597 + for (ep = ENDPOINT_1; ep < ENDPOINT_MAX; ep++) {
62598 + if (target->EndPoint[ep].ServiceID == ServicePriorityOrder[i]) {
62599 + /* queue this one to the list */
62600 + AddToEndpointDistList(target, &target->EndPoint[ep].CreditDist);
62601 + break;
62602 + }
62603 + }
62604 + AR_DEBUG_ASSERT(ep < ENDPOINT_MAX);
62605 + }
62606 +
62607 +}
62608 Index: linux-2.6.28/drivers/ar6000/include/a_config.h
62609 ===================================================================
62610 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
62611 +++ linux-2.6.28/drivers/ar6000/include/a_config.h 2009-01-02 00:01:56.000000000 +0100
62612 @@ -0,0 +1,27 @@
62613 +#ifndef _A_CONFIG_H_
62614 +#define _A_CONFIG_H_
62615 +/*
62616 + * Copyright (c) 2004-2005 Atheros Communications Inc.
62617 + * All rights reserved.
62618 + *
62619 + *
62620 + * This program is free software; you can redistribute it and/or modify
62621 + * it under the terms of the GNU General Public License version 2 as
62622 + * published by the Free Software Foundation;
62623 + *
62624 + * Software distributed under the License is distributed on an "AS
62625 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
62626 + * implied. See the License for the specific language governing
62627 + * rights and limitations under the License.
62628 + *
62629 + *
62630 + *
62631 + */
62632 +
62633 +/*
62634 + * This file contains software configuration options that enables
62635 + * specific software "features"
62636 + */
62637 +#include "../ar6000/config_linux.h"
62638 +
62639 +#endif
62640 Index: linux-2.6.28/drivers/ar6000/include/a_debug.h
62641 ===================================================================
62642 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
62643 +++ linux-2.6.28/drivers/ar6000/include/a_debug.h 2009-01-02 00:01:56.000000000 +0100
62644 @@ -0,0 +1,41 @@
62645 +#ifndef _A_DEBUG_H_
62646 +#define _A_DEBUG_H_
62647 +/*
62648 + * Copyright (c) 2004-2006 Atheros Communications Inc.
62649 + * All rights reserved.
62650 + *
62651 + * Copyright (c) 2004-2007 Atheros Communications Inc.
62652 + * All rights reserved.
62653 + *
62654 + *
62655 + * This program is free software; you can redistribute it and/or modify
62656 + * it under the terms of the GNU General Public License version 2 as
62657 + * published by the Free Software Foundation;
62658 + *
62659 + * Software distributed under the License is distributed on an "AS
62660 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
62661 + * implied. See the License for the specific language governing
62662 + * rights and limitations under the License.
62663 + *
62664 + *
62665 + *
62666 + */
62667 +
62668 +#include <a_types.h>
62669 +#include <a_osapi.h>
62670 +
62671 +#define DBG_INFO 0x00000001
62672 +#define DBG_ERROR 0x00000002
62673 +#define DBG_WARNING 0x00000004
62674 +#define DBG_SDIO 0x00000008
62675 +#define DBG_HIF 0x00000010
62676 +#define DBG_HTC 0x00000020
62677 +#define DBG_WMI 0x00000040
62678 +#define DBG_WMI2 0x00000080
62679 +#define DBG_DRIVER 0x00000100
62680 +
62681 +#define DBG_DEFAULTS (DBG_ERROR|DBG_WARNING)
62682 +
62683 +#include "../ar6000/debug_linux.h"
62684 +
62685 +#endif
62686 Index: linux-2.6.28/drivers/ar6000/include/a_drv_api.h
62687 ===================================================================
62688 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
62689 +++ linux-2.6.28/drivers/ar6000/include/a_drv_api.h 2009-01-02 00:01:56.000000000 +0100
62690 @@ -0,0 +1,185 @@
62691 +#ifndef _A_DRV_API_H_
62692 +#define _A_DRV_API_H_
62693 +/*
62694 + * Copyright (c) 2004-2006 Atheros Communications Inc.
62695 + * All rights reserved.
62696 + *
62697 + *
62698 + * This program is free software; you can redistribute it and/or modify
62699 + * it under the terms of the GNU General Public License version 2 as
62700 + * published by the Free Software Foundation;
62701 + *
62702 + * Software distributed under the License is distributed on an "AS
62703 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
62704 + * implied. See the License for the specific language governing
62705 + * rights and limitations under the License.
62706 + *
62707 + *
62708 + *
62709 + */
62710 +
62711 +#ifdef __cplusplus
62712 +extern "C" {
62713 +#endif
62714 +
62715 +/****************************************************************************/
62716 +/****************************************************************************/
62717 +/** **/
62718 +/** WMI related hooks **/
62719 +/** **/
62720 +/****************************************************************************/
62721 +/****************************************************************************/
62722 +
62723 +#include <ar6000_api.h>
62724 +
62725 +#define A_WMI_CHANNELLIST_RX(devt, numChan, chanList) \
62726 + ar6000_channelList_rx((devt), (numChan), (chanList))
62727 +
62728 +#define A_WMI_SET_NUMDATAENDPTS(devt, num) \
62729 + ar6000_set_numdataendpts((devt), (num))
62730 +
62731 +#define A_WMI_CONTROL_TX(devt, osbuf, streamID) \
62732 + ar6000_control_tx((devt), (osbuf), (streamID))
62733 +
62734 +#define A_WMI_TARGETSTATS_EVENT(devt, pStats) \
62735 + ar6000_targetStats_event((devt), (pStats))
62736 +
62737 +#define A_WMI_SCANCOMPLETE_EVENT(devt, status) \
62738 + ar6000_scanComplete_event((devt), (status))
62739 +
62740 +#ifdef CONFIG_HOST_DSET_SUPPORT
62741 +
62742 +#define A_WMI_DSET_DATA_REQ(devt, access_cookie, offset, length, targ_buf, targ_reply_fn, targ_reply_arg) \
62743 + ar6000_dset_data_req((devt), (access_cookie), (offset), (length), (targ_buf), (targ_reply_fn), (targ_reply_arg))
62744 +
62745 +#define A_WMI_DSET_CLOSE(devt, access_cookie) \
62746 + ar6000_dset_close((devt), (access_cookie))
62747 +
62748 +#endif
62749 +
62750 +#define A_WMI_DSET_OPEN_REQ(devt, id, targ_handle, targ_reply_fn, targ_reply_arg) \
62751 + ar6000_dset_open_req((devt), (id), (targ_handle), (targ_reply_fn), (targ_reply_arg))
62752 +
62753 +#define A_WMI_CONNECT_EVENT(devt, channel, bssid, listenInterval, beaconInterval, networkType, beaconIeLen, assocReqLen, assocRespLen, assocInfo) \
62754 + ar6000_connect_event((devt), (channel), (bssid), (listenInterval), (beaconInterval), (networkType), (beaconIeLen), (assocReqLen), (assocRespLen), (assocInfo))
62755 +
62756 +#define A_WMI_REGDOMAIN_EVENT(devt, regCode) \
62757 + ar6000_regDomain_event((devt), (regCode))
62758 +
62759 +#define A_WMI_NEIGHBORREPORT_EVENT(devt, numAps, info) \
62760 + ar6000_neighborReport_event((devt), (numAps), (info))
62761 +
62762 +#define A_WMI_DISCONNECT_EVENT(devt, reason, bssid, assocRespLen, assocInfo, protocolReasonStatus) \
62763 + ar6000_disconnect_event((devt), (reason), (bssid), (assocRespLen), (assocInfo), (protocolReasonStatus))
62764 +
62765 +#define A_WMI_TKIP_MICERR_EVENT(devt, keyid, ismcast) \
62766 + ar6000_tkip_micerr_event((devt), (keyid), (ismcast))
62767 +
62768 +#define A_WMI_BITRATE_RX(devt, rateKbps) \
62769 + ar6000_bitrate_rx((devt), (rateKbps))
62770 +
62771 +#define A_WMI_TXPWR_RX(devt, txPwr) \
62772 + ar6000_txPwr_rx((devt), (txPwr))
62773 +
62774 +#define A_WMI_READY_EVENT(devt, datap, phyCap) \
62775 + ar6000_ready_event((devt), (datap), (phyCap))
62776 +
62777 +#define A_WMI_DBGLOG_INIT_DONE(ar) \
62778 + ar6000_dbglog_init_done(ar);
62779 +
62780 +#define A_WMI_RSSI_THRESHOLD_EVENT(devt, newThreshold, rssi) \
62781 + ar6000_rssiThreshold_event((devt), (newThreshold), (rssi))
62782 +
62783 +#define A_WMI_REPORT_ERROR_EVENT(devt, errorVal) \
62784 + ar6000_reportError_event((devt), (errorVal))
62785 +
62786 +#define A_WMI_ROAM_TABLE_EVENT(devt, pTbl) \
62787 + ar6000_roam_tbl_event((devt), (pTbl))
62788 +
62789 +#define A_WMI_ROAM_DATA_EVENT(devt, p) \
62790 + ar6000_roam_data_event((devt), (p))
62791 +
62792 +#define A_WMI_WOW_LIST_EVENT(devt, num_filters, wow_filters) \
62793 + ar6000_wow_list_event((devt), (num_filters), (wow_filters))
62794 +
62795 +#define A_WMI_CAC_EVENT(devt, ac, cac_indication, statusCode, tspecSuggestion) \
62796 + ar6000_cac_event((devt), (ac), (cac_indication), (statusCode), (tspecSuggestion))
62797 +
62798 +#define A_WMI_IPTOS_TO_USERPRIORITY(pkt) \
62799 + ar6000_iptos_to_userPriority((pkt))
62800 +
62801 +#define A_WMI_PMKID_LIST_EVENT(devt, num_pmkid, pmkid_list) \
62802 + ar6000_pmkid_list_event((devt), (num_pmkid), (pmkid_list))
62803 +
62804 +#ifdef CONFIG_HOST_GPIO_SUPPORT
62805 +
62806 +#define A_WMI_GPIO_INTR_RX(intr_mask, input_values) \
62807 + ar6000_gpio_intr_rx((intr_mask), (input_values))
62808 +
62809 +#define A_WMI_GPIO_DATA_RX(reg_id, value) \
62810 + ar6000_gpio_data_rx((reg_id), (value))
62811 +
62812 +#define A_WMI_GPIO_ACK_RX() \
62813 + ar6000_gpio_ack_rx()
62814 +
62815 +#endif
62816 +
62817 +#ifdef SEND_EVENT_TO_APP
62818 +
62819 +#define A_WMI_SEND_EVENT_TO_APP(ar, eventId, datap, len) \
62820 + ar6000_send_event_to_app((ar), (eventId), (datap), (len))
62821 +
62822 +#else
62823 +
62824 +#define A_WMI_SEND_EVENT_TO_APP(ar, eventId, datap, len)
62825 +
62826 +#endif
62827 +
62828 +#ifdef CONFIG_HOST_TCMD_SUPPORT
62829 +#define A_WMI_TCMD_RX_REPORT_EVENT(devt, results, len) \
62830 + ar6000_tcmd_rx_report_event((devt), (results), (len))
62831 +#endif
62832 +
62833 +#define A_WMI_HBCHALLENGERESP_EVENT(devt, cookie, source) \
62834 + ar6000_hbChallengeResp_event((devt), (cookie), (source))
62835 +
62836 +#define A_WMI_TX_RETRY_ERR_EVENT(devt) \
62837 + ar6000_tx_retry_err_event((devt))
62838 +
62839 +#define A_WMI_SNR_THRESHOLD_EVENT_RX(devt, newThreshold, snr) \
62840 + ar6000_snrThresholdEvent_rx((devt), (newThreshold), (snr))
62841 +
62842 +#define A_WMI_LQ_THRESHOLD_EVENT_RX(devt, range, lqVal) \
62843 + ar6000_lqThresholdEvent_rx((devt), (range), (lqVal))
62844 +
62845 +#define A_WMI_RATEMASK_RX(devt, ratemask) \
62846 + ar6000_ratemask_rx((devt), (ratemask))
62847 +
62848 +#define A_WMI_KEEPALIVE_RX(devt, configured) \
62849 + ar6000_keepalive_rx((devt), (configured))
62850 +
62851 +#define A_WMI_BSSINFO_EVENT_RX(ar, datp, len) \
62852 + ar6000_bssInfo_event_rx((ar), (datap), (len))
62853 +
62854 +#define A_WMI_DBGLOG_EVENT(ar, dropped, buffer, length) \
62855 + ar6000_dbglog_event((ar), (dropped), (buffer), (length));
62856 +
62857 +#define A_WMI_STREAM_TX_ACTIVE(devt,trafficClass) \
62858 + ar6000_indicate_tx_activity((devt),(trafficClass), TRUE)
62859 +
62860 +#define A_WMI_STREAM_TX_INACTIVE(devt,trafficClass) \
62861 + ar6000_indicate_tx_activity((devt),(trafficClass), FALSE)
62862 +
62863 +/****************************************************************************/
62864 +/****************************************************************************/
62865 +/** **/
62866 +/** HTC related hooks **/
62867 +/** **/
62868 +/****************************************************************************/
62869 +/****************************************************************************/
62870 +
62871 +#ifdef __cplusplus
62872 +}
62873 +#endif
62874 +
62875 +#endif
62876 Index: linux-2.6.28/drivers/ar6000/include/a_drv.h
62877 ===================================================================
62878 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
62879 +++ linux-2.6.28/drivers/ar6000/include/a_drv.h 2009-01-02 00:01:56.000000000 +0100
62880 @@ -0,0 +1,28 @@
62881 +#ifndef _A_DRV_H_
62882 +#define _A_DRV_H_
62883 +/*
62884 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/a_drv.h#1 $
62885 + *
62886 + * This file contains the definitions of the basic atheros data types.
62887 + * It is used to map the data types in atheros files to a platform specific
62888 + * type.
62889 + *
62890 + * Copyright 2003-2005 Atheros Communications, Inc., All Rights Reserved.
62891 + *
62892 + *
62893 + * This program is free software; you can redistribute it and/or modify
62894 + * it under the terms of the GNU General Public License version 2 as
62895 + * published by the Free Software Foundation;
62896 + *
62897 + * Software distributed under the License is distributed on an "AS
62898 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
62899 + * implied. See the License for the specific language governing
62900 + * rights and limitations under the License.
62901 + *
62902 + *
62903 + *
62904 + */
62905 +
62906 +#include "../ar6000/athdrv_linux.h"
62907 +
62908 +#endif /* _ADRV_H_ */
62909 Index: linux-2.6.28/drivers/ar6000/include/a_osapi.h
62910 ===================================================================
62911 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
62912 +++ linux-2.6.28/drivers/ar6000/include/a_osapi.h 2009-01-02 00:01:56.000000000 +0100
62913 @@ -0,0 +1,28 @@
62914 +#ifndef _A_OSAPI_H_
62915 +#define _A_OSAPI_H_
62916 +/*
62917 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/a_osapi.h#1 $
62918 + *
62919 + * This file contains the definitions of the basic atheros data types.
62920 + * It is used to map the data types in atheros files to a platform specific
62921 + * type.
62922 + *
62923 + * Copyright 2003-2005 Atheros Communications, Inc., All Rights Reserved.
62924 + *
62925 + *
62926 + * This program is free software; you can redistribute it and/or modify
62927 + * it under the terms of the GNU General Public License version 2 as
62928 + * published by the Free Software Foundation;
62929 + *
62930 + * Software distributed under the License is distributed on an "AS
62931 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
62932 + * implied. See the License for the specific language governing
62933 + * rights and limitations under the License.
62934 + *
62935 + *
62936 + *
62937 + */
62938 +
62939 +#include "../ar6000/osapi_linux.h"
62940 +
62941 +#endif /* _OSAPI_H_ */
62942 Index: linux-2.6.28/drivers/ar6000/include/ar6000_api.h
62943 ===================================================================
62944 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
62945 +++ linux-2.6.28/drivers/ar6000/include/ar6000_api.h 2009-01-02 00:01:56.000000000 +0100
62946 @@ -0,0 +1,29 @@
62947 +#ifndef _AR6000_API_H_
62948 +#define _AR6000_API_H_
62949 +/*
62950 + * Copyright (c) 2004-2005 Atheros Communications Inc.
62951 + * All rights reserved.
62952 + *
62953 + * This file contains the API to access the OS dependent atheros host driver
62954 + * by the WMI or WLAN generic modules.
62955 + *
62956 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/ar6000_api.h#1 $
62957 + *
62958 + *
62959 + * This program is free software; you can redistribute it and/or modify
62960 + * it under the terms of the GNU General Public License version 2 as
62961 + * published by the Free Software Foundation;
62962 + *
62963 + * Software distributed under the License is distributed on an "AS
62964 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
62965 + * implied. See the License for the specific language governing
62966 + * rights and limitations under the License.
62967 + *
62968 + *
62969 + *
62970 + */
62971 +
62972 +#include "../ar6000/ar6xapi_linux.h"
62973 +
62974 +#endif /* _AR6000_API_H */
62975 +
62976 Index: linux-2.6.28/drivers/ar6000/include/ar6000_diag.h
62977 ===================================================================
62978 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
62979 +++ linux-2.6.28/drivers/ar6000/include/ar6000_diag.h 2009-01-02 00:01:56.000000000 +0100
62980 @@ -0,0 +1,38 @@
62981 +/*
62982 + *
62983 + * Copyright (c) 2004-2007 Atheros Communications Inc.
62984 + * All rights reserved.
62985 + *
62986 + *
62987 + * This program is free software; you can redistribute it and/or modify
62988 + * it under the terms of the GNU General Public License version 2 as
62989 + * published by the Free Software Foundation;
62990 + *
62991 + * Software distributed under the License is distributed on an "AS
62992 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
62993 + * implied. See the License for the specific language governing
62994 + * rights and limitations under the License.
62995 + *
62996 + *
62997 + *
62998 + */
62999 +
63000 +#ifndef AR6000_DIAG_H_
63001 +#define AR6000_DIAG_H_
63002 +
63003 +
63004 +A_STATUS
63005 +ar6000_ReadRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
63006 +
63007 +A_STATUS
63008 +ar6000_WriteRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
63009 +
63010 +A_STATUS
63011 +ar6000_ReadDataDiag(HIF_DEVICE *hifDevice, A_UINT32 address,
63012 + A_UCHAR *data, A_UINT32 length);
63013 +
63014 +A_STATUS
63015 +ar6000_WriteDataDiag(HIF_DEVICE *hifDevice, A_UINT32 address,
63016 + A_UCHAR *data, A_UINT32 length);
63017 +
63018 +#endif /*AR6000_DIAG_H_*/
63019 Index: linux-2.6.28/drivers/ar6000/include/AR6001_regdump.h
63020 ===================================================================
63021 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63022 +++ linux-2.6.28/drivers/ar6000/include/AR6001_regdump.h 2009-01-02 00:01:56.000000000 +0100
63023 @@ -0,0 +1,100 @@
63024 +/*
63025 + * Copyright (c) 2006 Atheros Communications Inc.
63026 + * All rights reserved.
63027 + *
63028 + * $ATH_LICENSE_HOSTSDK0_C$
63029 + *
63030 + */
63031 +
63032 +#ifndef __AR6000_REGDUMP_H__
63033 +#define __AR6000_REGDUMP_H__
63034 +
63035 +#if !defined(__ASSEMBLER__)
63036 +/*
63037 + * Target CPU state at the time of failure is reflected
63038 + * in a register dump, which the Host can fetch through
63039 + * the diagnostic window.
63040 + */
63041 +
63042 +struct MIPS_exception_frame_s {
63043 + A_UINT32 pc; /* Program Counter */
63044 + A_UINT32 at; /* MIPS General Purpose registers */
63045 + A_UINT32 v0;
63046 + A_UINT32 v1;
63047 + A_UINT32 a0;
63048 + A_UINT32 a1;
63049 + A_UINT32 a2;
63050 + A_UINT32 a3;
63051 + A_UINT32 t0;
63052 + A_UINT32 t1;
63053 + A_UINT32 t2;
63054 + A_UINT32 t3;
63055 + A_UINT32 t4;
63056 + A_UINT32 t5;
63057 + A_UINT32 t6;
63058 + A_UINT32 t7;
63059 + A_UINT32 s0;
63060 + A_UINT32 s1;
63061 + A_UINT32 s2;
63062 + A_UINT32 s3;
63063 + A_UINT32 s4;
63064 + A_UINT32 s5;
63065 + A_UINT32 s6;
63066 + A_UINT32 s7;
63067 + A_UINT32 t8;
63068 + A_UINT32 t9;
63069 + A_UINT32 k0;
63070 + A_UINT32 k1;
63071 + A_UINT32 gp;
63072 + A_UINT32 sp;
63073 + A_UINT32 s8;
63074 + A_UINT32 ra;
63075 + A_UINT32 cause; /* Selected coprocessor regs */
63076 + A_UINT32 status;
63077 +};
63078 +typedef struct MIPS_exception_frame_s CPU_exception_frame_t;
63079 +
63080 +#endif
63081 +
63082 +/*
63083 + * Offsets into MIPS_exception_frame structure, for use in assembler code
63084 + * MUST MATCH C STRUCTURE ABOVE
63085 + */
63086 +#define RD_pc 0
63087 +#define RD_at 1
63088 +#define RD_v0 2
63089 +#define RD_v1 3
63090 +#define RD_a0 4
63091 +#define RD_a1 5
63092 +#define RD_a2 6
63093 +#define RD_a3 7
63094 +#define RD_t0 8
63095 +#define RD_t1 9
63096 +#define RD_t2 10
63097 +#define RD_t3 11
63098 +#define RD_t4 12
63099 +#define RD_t5 13
63100 +#define RD_t6 14
63101 +#define RD_t7 15
63102 +#define RD_s0 16
63103 +#define RD_s1 17
63104 +#define RD_s2 18
63105 +#define RD_s3 19
63106 +#define RD_s4 20
63107 +#define RD_s5 21
63108 +#define RD_s6 22
63109 +#define RD_s7 23
63110 +#define RD_t8 24
63111 +#define RD_t9 25
63112 +#define RD_k0 26
63113 +#define RD_k1 27
63114 +#define RD_gp 28
63115 +#define RD_sp 29
63116 +#define RD_s8 30
63117 +#define RD_ra 31
63118 +#define RD_cause 32
63119 +#define RD_status 33
63120 +
63121 +#define RD_SIZE (34*4) /* Space for this number of words */
63122 +
63123 +#endif /* __AR6000_REGDUMP_H__ */
63124 Index: linux-2.6.28/drivers/ar6000/include/AR6Khwreg.h
63125 ===================================================================
63126 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63127 +++ linux-2.6.28/drivers/ar6000/include/AR6Khwreg.h 2009-01-02 00:01:56.000000000 +0100
63128 @@ -0,0 +1,147 @@
63129 +/*
63130 + * Copyright (c) 2004-2007 Atheros Communications Inc.
63131 + * All rights reserved.
63132 + *
63133 + * $ATH_LICENSE_HOSTSDK0_C$
63134 + *
63135 + * This file contains the definitions for AR6001 registers
63136 + * that may be directly manipulated by Host software.
63137 + */
63138 +
63139 +#ifndef __AR6KHWREG_H__
63140 +#define __AR6KHWREG_H__
63141 +
63142 +#ifdef __cplusplus
63143 +extern "C" {
63144 +#endif
63145 +
63146 +/* Host registers */
63147 +#define HOST_INT_STATUS_ADDRESS 0x00000400
63148 +#define CPU_INT_STATUS_ADDRESS 0x00000401
63149 +#define ERROR_INT_STATUS_ADDRESS 0x00000402
63150 +#define INT_STATUS_ENABLE_ADDRESS 0x00000418
63151 +#define CPU_INT_STATUS_ENABLE_ADDRESS 0x00000419
63152 +#define COUNT_ADDRESS 0x00000420
63153 +#define COUNT_DEC_ADDRESS 0x00000440
63154 +#define WINDOW_DATA_ADDRESS 0x00000474
63155 +#define WINDOW_WRITE_ADDR_ADDRESS 0x00000478
63156 +#define WINDOW_READ_ADDR_ADDRESS 0x0000047c
63157 +
63158 +/* Target addresses */
63159 +#define RESET_CONTROL_ADDRESS 0x0c000000
63160 +#define MC_REMAP_VALID_ADDRESS 0x0c004080
63161 +#define MC_REMAP_SIZE_ADDRESS 0x0c004100
63162 +#define MC_REMAP_COMPARE_ADDRESS 0x0c004180
63163 +#define MC_REMAP_TARGET_ADDRESS 0x0c004200
63164 +#define LOCAL_COUNT_ADDRESS 0x0c014080
63165 +#define LOCAL_SCRATCH_ADDRESS 0x0c0140c0
63166 +
63167 +
63168 +#define INT_STATUS_ENABLE_ERROR_MSB 7
63169 +#define INT_STATUS_ENABLE_ERROR_LSB 7
63170 +#define INT_STATUS_ENABLE_ERROR_MASK 0x00000080
63171 +#define INT_STATUS_ENABLE_ERROR_GET(x) (((x) & INT_STATUS_ENABLE_ERROR_MASK) >> INT_STATUS_ENABLE_ERROR_LSB)
63172 +#define INT_STATUS_ENABLE_ERROR_SET(x) (((x) << INT_STATUS_ENABLE_ERROR_LSB) & INT_STATUS_ENABLE_ERROR_MASK)
63173 +
63174 +#define INT_STATUS_ENABLE_CPU_MSB 6
63175 +#define INT_STATUS_ENABLE_CPU_LSB 6
63176 +#define INT_STATUS_ENABLE_CPU_MASK 0x00000040
63177 +#define INT_STATUS_ENABLE_CPU_GET(x) (((x) & INT_STATUS_ENABLE_CPU_MASK) >> INT_STATUS_ENABLE_CPU_LSB)
63178 +#define INT_STATUS_ENABLE_CPU_SET(x) (((x) << INT_STATUS_ENABLE_CPU_LSB) & INT_STATUS_ENABLE_CPU_MASK)
63179 +
63180 +#define INT_STATUS_ENABLE_COUNTER_MSB 4
63181 +#define INT_STATUS_ENABLE_COUNTER_LSB 4
63182 +#define INT_STATUS_ENABLE_COUNTER_MASK 0x00000010
63183 +#define INT_STATUS_ENABLE_COUNTER_GET(x) (((x) & INT_STATUS_ENABLE_COUNTER_MASK) >> INT_STATUS_ENABLE_COUNTER_LSB)
63184 +#define INT_STATUS_ENABLE_COUNTER_SET(x) (((x) << INT_STATUS_ENABLE_COUNTER_LSB) & INT_STATUS_ENABLE_COUNTER_MASK)
63185 +
63186 +#define INT_STATUS_ENABLE_MBOX_DATA_MSB 3
63187 +#define INT_STATUS_ENABLE_MBOX_DATA_LSB 0
63188 +#define INT_STATUS_ENABLE_MBOX_DATA_MASK 0x0000000f
63189 +#define INT_STATUS_ENABLE_MBOX_DATA_GET(x) (((x) & INT_STATUS_ENABLE_MBOX_DATA_MASK) >> INT_STATUS_ENABLE_MBOX_DATA_LSB)
63190 +#define INT_STATUS_ENABLE_MBOX_DATA_SET(x) (((x) << INT_STATUS_ENABLE_MBOX_DATA_LSB) & INT_STATUS_ENABLE_MBOX_DATA_MASK)
63191 +
63192 +#define ERROR_STATUS_ENABLE_RX_UNDERFLOW_MSB 1
63193 +#define ERROR_STATUS_ENABLE_RX_UNDERFLOW_LSB 1
63194 +#define ERROR_STATUS_ENABLE_RX_UNDERFLOW_MASK 0x00000002
63195 +#define ERROR_STATUS_ENABLE_RX_UNDERFLOW_GET(x) (((x) & ERROR_STATUS_ENABLE_RX_UNDERFLOW_MASK) >> ERROR_STATUS_ENABLE_RX_UNDERFLOW_LSB)
63196 +#define ERROR_STATUS_ENABLE_RX_UNDERFLOW_SET(x) (((x) << ERROR_STATUS_ENABLE_RX_UNDERFLOW_LSB) & ERROR_STATUS_ENABLE_RX_UNDERFLOW_MASK)
63197 +
63198 +#define ERROR_STATUS_ENABLE_TX_OVERFLOW_MSB 0
63199 +#define ERROR_STATUS_ENABLE_TX_OVERFLOW_LSB 0
63200 +#define ERROR_STATUS_ENABLE_TX_OVERFLOW_MASK 0x00000001
63201 +#define ERROR_STATUS_ENABLE_TX_OVERFLOW_GET(x) (((x) & ERROR_STATUS_ENABLE_TX_OVERFLOW_MASK) >> ERROR_STATUS_ENABLE_TX_OVERFLOW_LSB)
63202 +#define ERROR_STATUS_ENABLE_TX_OVERFLOW_SET(x) (((x) << ERROR_STATUS_ENABLE_TX_OVERFLOW_LSB) & ERROR_STATUS_ENABLE_TX_OVERFLOW_MASK)
63203 +
63204 +
63205 +#define CPU_INT_STATUS_ENABLE_BIT_MSB 7
63206 +#define CPU_INT_STATUS_ENABLE_BIT_LSB 0
63207 +#define CPU_INT_STATUS_ENABLE_BIT_MASK 0x000000ff
63208 +#define CPU_INT_STATUS_ENABLE_BIT_GET(x) (((x) & CPU_INT_STATUS_ENABLE_BIT_MASK) >> CPU_INT_STATUS_ENABLE_BIT_LSB)
63209 +#define CPU_INT_STATUS_ENABLE_BIT_SET(x) (((x) << CPU_INT_STATUS_ENABLE_BIT_LSB) & CPU_INT_STATUS_ENABLE_BIT_MASK)
63210 +
63211 +#define COUNTER_INT_STATUS_ENABLE_BIT_MSB 7
63212 +#define COUNTER_INT_STATUS_ENABLE_BIT_LSB 0
63213 +#define COUNTER_INT_STATUS_ENABLE_BIT_MASK 0x000000ff
63214 +#define COUNTER_INT_STATUS_ENABLE_BIT_GET(x) (((x) & COUNTER_INT_STATUS_ENABLE_BIT_MASK) >> COUNTER_INT_STATUS_ENABLE_BIT_LSB)
63215 +#define COUNTER_INT_STATUS_ENABLE_BIT_SET(x) (((x) << COUNTER_INT_STATUS_ENABLE_BIT_LSB) & COUNTER_INT_STATUS_ENABLE_BIT_MASK)
63216 +
63217 +#define ERROR_INT_STATUS_WAKEUP_MSB 2
63218 +#define ERROR_INT_STATUS_WAKEUP_LSB 2
63219 +#define ERROR_INT_STATUS_WAKEUP_MASK 0x00000004
63220 +#define ERROR_INT_STATUS_WAKEUP_GET(x) (((x) & ERROR_INT_STATUS_WAKEUP_MASK) >> ERROR_INT_STATUS_WAKEUP_LSB)
63221 +#define ERROR_INT_STATUS_WAKEUP_SET(x) (((x) << ERROR_INT_STATUS_WAKEUP_LSB) & ERROR_INT_STATUS_WAKEUP_MASK)
63222 +
63223 +#define ERROR_INT_STATUS_RX_UNDERFLOW_MSB 1
63224 +#define ERROR_INT_STATUS_RX_UNDERFLOW_LSB 1
63225 +#define ERROR_INT_STATUS_RX_UNDERFLOW_MASK 0x00000002
63226 +#define ERROR_INT_STATUS_RX_UNDERFLOW_GET(x) (((x) & ERROR_INT_STATUS_RX_UNDERFLOW_MASK) >> ERROR_INT_STATUS_RX_UNDERFLOW_LSB)
63227 +#define ERROR_INT_STATUS_RX_UNDERFLOW_SET(x) (((x) << ERROR_INT_STATUS_RX_UNDERFLOW_LSB) & ERROR_INT_STATUS_RX_UNDERFLOW_MASK)
63228 +
63229 +#define ERROR_INT_STATUS_TX_OVERFLOW_MSB 0
63230 +#define ERROR_INT_STATUS_TX_OVERFLOW_LSB 0
63231 +#define ERROR_INT_STATUS_TX_OVERFLOW_MASK 0x00000001
63232 +#define ERROR_INT_STATUS_TX_OVERFLOW_GET(x) (((x) & ERROR_INT_STATUS_TX_OVERFLOW_MASK) >> ERROR_INT_STATUS_TX_OVERFLOW_LSB)
63233 +#define ERROR_INT_STATUS_TX_OVERFLOW_SET(x) (((x) << ERROR_INT_STATUS_TX_OVERFLOW_LSB) & ERROR_INT_STATUS_TX_OVERFLOW_MASK)
63234 +
63235 +#define HOST_INT_STATUS_ERROR_MSB 7
63236 +#define HOST_INT_STATUS_ERROR_LSB 7
63237 +#define HOST_INT_STATUS_ERROR_MASK 0x00000080
63238 +#define HOST_INT_STATUS_ERROR_GET(x) (((x) & HOST_INT_STATUS_ERROR_MASK) >> HOST_INT_STATUS_ERROR_LSB)
63239 +#define HOST_INT_STATUS_ERROR_SET(x) (((x) << HOST_INT_STATUS_ERROR_LSB) & HOST_INT_STATUS_ERROR_MASK)
63240 +
63241 +#define HOST_INT_STATUS_CPU_MSB 6
63242 +#define HOST_INT_STATUS_CPU_LSB 6
63243 +#define HOST_INT_STATUS_CPU_MASK 0x00000040
63244 +#define HOST_INT_STATUS_CPU_GET(x) (((x) & HOST_INT_STATUS_CPU_MASK) >> HOST_INT_STATUS_CPU_LSB)
63245 +#define HOST_INT_STATUS_CPU_SET(x) (((x) << HOST_INT_STATUS_CPU_LSB) & HOST_INT_STATUS_CPU_MASK)
63246 +
63247 +#define HOST_INT_STATUS_COUNTER_MSB 4
63248 +#define HOST_INT_STATUS_COUNTER_LSB 4
63249 +#define HOST_INT_STATUS_COUNTER_MASK 0x00000010
63250 +#define HOST_INT_STATUS_COUNTER_GET(x) (((x) & HOST_INT_STATUS_COUNTER_MASK) >> HOST_INT_STATUS_COUNTER_LSB)
63251 +#define HOST_INT_STATUS_COUNTER_SET(x) (((x) << HOST_INT_STATUS_COUNTER_LSB) & HOST_INT_STATUS_COUNTER_MASK)
63252 +
63253 +#define RESET_CONTROL_WARM_RST_MSB 7
63254 +#define RESET_CONTROL_WARM_RST_LSB 7
63255 +#define RESET_CONTROL_WARM_RST_MASK 0x00000080
63256 +#define RESET_CONTROL_WARM_RST_GET(x) (((x) & RESET_CONTROL_WARM_RST_MASK) >> RESET_CONTROL_WARM_RST_LSB)
63257 +#define RESET_CONTROL_WARM_RST_SET(x) (((x) << RESET_CONTROL_WARM_RST_LSB) & RESET_CONTROL_WARM_RST_MASK)
63258 +
63259 +#define RESET_CONTROL_COLD_RST_MSB 8
63260 +#define RESET_CONTROL_COLD_RST_LSB 8
63261 +#define RESET_CONTROL_COLD_RST_MASK 0x00000100
63262 +#define RESET_CONTROL_COLD_RST_GET(x) (((x) & RESET_CONTROL_COLD_RST_MASK) >> RESET_CONTROL_COLD_RST_LSB)
63263 +#define RESET_CONTROL_COLD_RST_SET(x) (((x) << RESET_CONTROL_COLD_RST_LSB) & RESET_CONTROL_COLD_RST_MASK)
63264 +
63265 +#define RESET_CAUSE_LAST_MSB 2
63266 +#define RESET_CAUSE_LAST_LSB 0
63267 +#define RESET_CAUSE_LAST_MASK 0x00000007
63268 +#define RESET_CAUSE_LAST_GET(x) (((x) & RESET_CAUSE_LAST_MASK) >> RESET_CAUSE_LAST_LSB)
63269 +#define RESET_CAUSE_LAST_SET(x) (((x) << RESET_CAUSE_LAST_LSB) & RESET_CAUSE_LAST_MASK)
63270 +
63271 +#ifdef __cplusplus
63272 +}
63273 +#endif
63274 +
63275 +#endif /* __AR6KHWREG_H__ */
63276 Index: linux-2.6.28/drivers/ar6000/include/AR6K_version.h
63277 ===================================================================
63278 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63279 +++ linux-2.6.28/drivers/ar6000/include/AR6K_version.h 2009-01-02 00:01:56.000000000 +0100
63280 @@ -0,0 +1,36 @@
63281 +#define __VER_MAJOR_ 2
63282 +#define __VER_MINOR_ 0
63283 +#define __VER_PATCH_ 0
63284 +
63285 +
63286 +/*
63287 + * Copyright (c) 2004-2007 Atheros Communications Inc.
63288 + * All rights reserved.
63289 + *
63290 + * $ATH_LICENSE_HOSTSDK0_C$
63291 + *
63292 + * The makear6ksdk script (used for release builds) modifies the following line.
63293 + */
63294 +#define __BUILD_NUMBER_ 18
63295 +
63296 +
63297 +/* Format of the version number. */
63298 +#define VER_MAJOR_BIT_OFFSET 28
63299 +#define VER_MINOR_BIT_OFFSET 24
63300 +#define VER_PATCH_BIT_OFFSET 16
63301 +#define VER_BUILD_NUM_BIT_OFFSET 0
63302 +
63303 +
63304 +/*
63305 + * The version has the following format:
63306 + * Bits 28-31: Major version
63307 + * Bits 24-27: Minor version
63308 + * Bits 16-23: Patch version
63309 + * Bits 0-15: Build number (automatically generated during build process )
63310 + * E.g. Build 1.1.3.7 would be represented as 0x11030007.
63311 + *
63312 + * DO NOT split the following macro into multiple lines as this may confuse the build scripts.
63313 + */
63314 +#define AR6K_SW_VERSION ( ( __VER_MAJOR_ << VER_MAJOR_BIT_OFFSET ) + ( __VER_MINOR_ << VER_MINOR_BIT_OFFSET ) + ( __VER_PATCH_ << VER_PATCH_BIT_OFFSET ) + ( __BUILD_NUMBER_ << VER_BUILD_NUM_BIT_OFFSET ) )
63315 +
63316 +
63317 Index: linux-2.6.28/drivers/ar6000/include/AR6K_version.h.NEW
63318 ===================================================================
63319 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63320 +++ linux-2.6.28/drivers/ar6000/include/AR6K_version.h.NEW 2009-01-02 00:01:56.000000000 +0100
63321 @@ -0,0 +1,36 @@
63322 +#define __VER_MAJOR_ 2
63323 +#define __VER_MINOR_ 0
63324 +#define __VER_PATCH_ 0
63325 +
63326 +
63327 +/*
63328 + * Copyright (c) 2004-2007 Atheros Communications Inc.
63329 + * All rights reserved.
63330 + *
63331 + * $ATH_LICENSE_HOSTSDK0_C$
63332 + *
63333 + * The makear6ksdk script (used for release builds) modifies the following line.
63334 + */
63335 +#define __BUILD_NUMBER_ 18
63336 +
63337 +
63338 +/* Format of the version number. */
63339 +#define VER_MAJOR_BIT_OFFSET 28
63340 +#define VER_MINOR_BIT_OFFSET 24
63341 +#define VER_PATCH_BIT_OFFSET 16
63342 +#define VER_BUILD_NUM_BIT_OFFSET 0
63343 +
63344 +
63345 +/*
63346 + * The version has the following format:
63347 + * Bits 28-31: Major version
63348 + * Bits 24-27: Minor version
63349 + * Bits 16-23: Patch version
63350 + * Bits 0-15: Build number (automatically generated during build process )
63351 + * E.g. Build 1.1.3.7 would be represented as 0x11030007.
63352 + *
63353 + * DO NOT split the following macro into multiple lines as this may confuse the build scripts.
63354 + */
63355 +#define AR6K_SW_VERSION ( ( __VER_MAJOR_ << VER_MAJOR_BIT_OFFSET ) + ( __VER_MINOR_ << VER_MINOR_BIT_OFFSET ) + ( __VER_PATCH_ << VER_PATCH_BIT_OFFSET ) + ( __BUILD_NUMBER_ << VER_BUILD_NUM_BIT_OFFSET ) )
63356 +
63357 +
63358 Index: linux-2.6.28/drivers/ar6000/include/athdefs.h
63359 ===================================================================
63360 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63361 +++ linux-2.6.28/drivers/ar6000/include/athdefs.h 2009-01-02 00:01:56.000000000 +0100
63362 @@ -0,0 +1,85 @@
63363 +#ifndef __ATHDEFS_H__
63364 +#define __ATHDEFS_H__
63365 +
63366 +/*
63367 + * Copyright (c) 2004-2007 Atheros Communications Inc.
63368 + * All rights reserved.
63369 + *
63370 + * $ATH_LICENSE_HOSTSDK0_C$
63371 + *
63372 + * This file contains definitions that may be used across both
63373 + * Host and Target software. Nothing here is module-dependent
63374 + * or platform-dependent.
63375 + */
63376 +
63377 +/*
63378 + * Generic error codes that can be used by hw, sta, ap, sim, dk
63379 + * and any other environments. Since these are enums, feel free to
63380 + * add any more codes that you need.
63381 + */
63382 +
63383 +typedef enum {
63384 + A_ERROR = -1, /* Generic error return */
63385 + A_OK = 0, /* success */
63386 + /* Following values start at 1 */
63387 + A_DEVICE_NOT_FOUND, /* not able to find PCI device */
63388 + A_NO_MEMORY, /* not able to allocate memory, not available */
63389 + A_MEMORY_NOT_AVAIL, /* memory region is not free for mapping */
63390 + A_NO_FREE_DESC, /* no free descriptors available */
63391 + A_BAD_ADDRESS, /* address does not match descriptor */
63392 + A_WIN_DRIVER_ERROR, /* used in NT_HW version, if problem at init */
63393 + A_REGS_NOT_MAPPED, /* registers not correctly mapped */
63394 + A_EPERM, /* Not superuser */
63395 + A_EACCES, /* Access denied */
63396 + A_ENOENT, /* No such entry, search failed, etc. */
63397 + A_EEXIST, /* The object already exists (can't create) */
63398 + A_EFAULT, /* Bad address fault */
63399 + A_EBUSY, /* Object is busy */
63400 + A_EINVAL, /* Invalid parameter */
63401 + A_EMSGSIZE, /* Inappropriate message buffer length */
63402 + A_ECANCELED, /* Operation canceled */
63403 + A_ENOTSUP, /* Operation not supported */
63404 + A_ECOMM, /* Communication error on send */
63405 + A_EPROTO, /* Protocol error */
63406 + A_ENODEV, /* No such device */
63407 + A_EDEVNOTUP, /* device is not UP */
63408 + A_NO_RESOURCE, /* No resources for requested operation */
63409 + A_HARDWARE, /* Hardware failure */
63410 + A_PENDING, /* Asynchronous routine; will send up results la
63411 +ter (typically in callback) */
63412 + A_EBADCHANNEL, /* The channel cannot be used */
63413 + A_DECRYPT_ERROR, /* Decryption error */
63414 + A_PHY_ERROR, /* RX PHY error */
63415 + A_CONSUMED /* Object was consumed */
63416 +} A_STATUS;
63417 +
63418 +#define A_SUCCESS(x) (x == A_OK)
63419 +#define A_FAILED(x) (!A_SUCCESS(x))
63420 +
63421 +#ifndef TRUE
63422 +#define TRUE 1
63423 +#endif
63424 +
63425 +#ifndef FALSE
63426 +#define FALSE 0
63427 +#endif
63428 +
63429 +/*
63430 + * The following definition is WLAN specific definition
63431 + */
63432 +typedef enum {
63433 + MODE_11A = 0, /* 11a Mode */
63434 + MODE_11G = 1, /* 11g + 11b Mode */
63435 + MODE_11B = 2, /* 11b Mode */
63436 + MODE_11GONLY = 3, /* 11g only Mode */
63437 + MODE_UNKNOWN = 4,
63438 + MODE_MAX = 4
63439 +} WLAN_PHY_MODE;
63440 +
63441 +typedef enum {
63442 + WLAN_11A_CAPABILITY = 1,
63443 + WLAN_11G_CAPABILITY = 2,
63444 + WLAN_11AG_CAPABILITY = 3,
63445 +}WLAN_CAPABILITY;
63446 +
63447 +#endif /* __ATHDEFS_H__ */
63448 Index: linux-2.6.28/drivers/ar6000/include/athdrv.h
63449 ===================================================================
63450 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63451 +++ linux-2.6.28/drivers/ar6000/include/athdrv.h 2009-01-02 00:01:56.000000000 +0100
63452 @@ -0,0 +1,32 @@
63453 +/*
63454 + * Copyright (c) 2004-2006 Atheros Communications Inc.
63455 + * All rights reserved.
63456 + *
63457 + *
63458 + *
63459 + * This program is free software; you can redistribute it and/or modify
63460 + * it under the terms of the GNU General Public License version 2 as
63461 + * published by the Free Software Foundation;
63462 + *
63463 + * Software distributed under the License is distributed on an "AS
63464 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
63465 + * implied. See the License for the specific language governing
63466 + * rights and limitations under the License.
63467 + *
63468 + *
63469 + *
63470 + */
63471 +
63472 +#ifndef _ATHDRV_H_
63473 +#define _ATHDRV_H_
63474 +
63475 +#ifdef __cplusplus
63476 +extern "C" {
63477 +#endif
63478 +
63479 +
63480 +#ifdef __cplusplus
63481 +}
63482 +#endif
63483 +
63484 +#endif /* _ATHDRV_H_ */
63485 Index: linux-2.6.28/drivers/ar6000/include/athendpack.h
63486 ===================================================================
63487 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63488 +++ linux-2.6.28/drivers/ar6000/include/athendpack.h 2009-01-02 00:01:56.000000000 +0100
63489 @@ -0,0 +1,41 @@
63490 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
63491 + * @file: athendpack.h
63492 + *
63493 + * @abstract: end compiler-specific structure packing
63494 + *
63495 + * Copyright (c) 2004-2007 Atheros Communications Inc.
63496 + * All rights reserved.
63497 + *
63498 + *
63499 + * This program is free software; you can redistribute it and/or modify
63500 + * it under the terms of the GNU General Public License version 2 as
63501 + * published by the Free Software Foundation;
63502 + *
63503 + * Software distributed under the License is distributed on an "AS
63504 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
63505 + * implied. See the License for the specific language governing
63506 + * rights and limitations under the License.
63507 + *
63508 + *
63509 + *
63510 + */
63511 +#ifdef VXWORKS
63512 +#endif /* VXWORKS */
63513 +
63514 +#ifdef LINUX
63515 +#endif /* LINUX */
63516 +
63517 +#ifdef QNX
63518 +#endif /* QNX */
63519 +
63520 +#ifdef INTEGRITY
63521 +#include "integrity/athendpack_integrity.h"
63522 +#endif /* INTEGRITY */
63523 +
63524 +#ifdef NUCLEUS
63525 +#endif /* NUCLEUS */
63526 +
63527 +#ifdef UNDER_CE
63528 +#include "../os/wince/include/athendpack_wince.h"
63529 +#endif /* WINCE */
63530 +
63531 Index: linux-2.6.28/drivers/ar6000/include/athstartpack.h
63532 ===================================================================
63533 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63534 +++ linux-2.6.28/drivers/ar6000/include/athstartpack.h 2009-01-02 00:01:56.000000000 +0100
63535 @@ -0,0 +1,42 @@
63536 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
63537 + * @file: athstartpack.h
63538 + *
63539 + * @abstract: start compiler-specific structure packing
63540 + *
63541 + * Copyright (c) 2004-2007 Atheros Communications Inc.
63542 + * All rights reserved.
63543 + *
63544 + *
63545 + * This program is free software; you can redistribute it and/or modify
63546 + * it under the terms of the GNU General Public License version 2 as
63547 + * published by the Free Software Foundation;
63548 + *
63549 + * Software distributed under the License is distributed on an "AS
63550 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
63551 + * implied. See the License for the specific language governing
63552 + * rights and limitations under the License.
63553 + *
63554 + *
63555 + *
63556 + */
63557 +
63558 +#ifdef VXWORKS
63559 +#endif /* VXWORKS */
63560 +
63561 +#ifdef LINUX
63562 +#endif /* LINUX */
63563 +
63564 +#ifdef QNX
63565 +#endif /* QNX */
63566 +
63567 +#ifdef INTEGRITY
63568 +#include "integrity/athstartpack_integrity.h"
63569 +#endif /* INTEGRITY */
63570 +
63571 +#ifdef NUCLEUS
63572 +#endif /* NUCLEUS */
63573 +
63574 +#ifdef UNDER_CE
63575 +#include "../os/wince/include/athstartpack_wince.h"
63576 +#endif /* WINCE */
63577 +
63578 Index: linux-2.6.28/drivers/ar6000/include/a_types.h
63579 ===================================================================
63580 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63581 +++ linux-2.6.28/drivers/ar6000/include/a_types.h 2009-01-02 00:01:56.000000000 +0100
63582 @@ -0,0 +1,28 @@
63583 +#ifndef _A_TYPES_H_
63584 +#define _A_TYPES_H_
63585 +/*
63586 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/a_types.h#1 $
63587 + *
63588 + * This file contains the definitions of the basic atheros data types.
63589 + * It is used to map the data types in atheros files to a platform specific
63590 + * type.
63591 + *
63592 + * Copyright 2003-2005 Atheros Communications, Inc., All Rights Reserved.
63593 + *
63594 + *
63595 + * This program is free software; you can redistribute it and/or modify
63596 + * it under the terms of the GNU General Public License version 2 as
63597 + * published by the Free Software Foundation;
63598 + *
63599 + * Software distributed under the License is distributed on an "AS
63600 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
63601 + * implied. See the License for the specific language governing
63602 + * rights and limitations under the License.
63603 + *
63604 + *
63605 + *
63606 + */
63607 +
63608 +#include "../ar6000/athtypes_linux.h"
63609 +
63610 +#endif /* _ATHTYPES_H_ */
63611 Index: linux-2.6.28/drivers/ar6000/include/bmi.h
63612 ===================================================================
63613 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63614 +++ linux-2.6.28/drivers/ar6000/include/bmi.h 2009-01-02 00:01:56.000000000 +0100
63615 @@ -0,0 +1,100 @@
63616 +#ifndef _BMI_H_
63617 +#define _BMI_H_
63618 +/*
63619 + * Copyright (c) 2004-2005 Atheros Communications Inc.
63620 + * All rights reserved.
63621 + *
63622 + *
63623 + * This program is free software; you can redistribute it and/or modify
63624 + * it under the terms of the GNU General Public License version 2 as
63625 + * published by the Free Software Foundation;
63626 + *
63627 + * Software distributed under the License is distributed on an "AS
63628 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
63629 + * implied. See the License for the specific language governing
63630 + * rights and limitations under the License.
63631 + *
63632 + *
63633 + *
63634 + * BMI declarations and prototypes
63635 + */
63636 +
63637 +#ifdef __cplusplus
63638 +extern "C" {
63639 +#endif /* __cplusplus */
63640 +
63641 +/* Header files */
63642 +#include "a_config.h"
63643 +#include "athdefs.h"
63644 +#include "a_types.h"
63645 +#include "hif.h"
63646 +#include "a_osapi.h"
63647 +#include "bmi_msg.h"
63648 +
63649 +void
63650 +BMIInit(void);
63651 +
63652 +A_STATUS
63653 +BMIDone(HIF_DEVICE *device);
63654 +
63655 +A_STATUS
63656 +BMIGetTargetInfo(HIF_DEVICE *device, struct bmi_target_info *targ_info);
63657 +
63658 +A_STATUS
63659 +BMIReadMemory(HIF_DEVICE *device,
63660 + A_UINT32 address,
63661 + A_UCHAR *buffer,
63662 + A_UINT32 length);
63663 +
63664 +A_STATUS
63665 +BMIWriteMemory(HIF_DEVICE *device,
63666 + A_UINT32 address,
63667 + A_UCHAR *buffer,
63668 + A_UINT32 length);
63669 +
63670 +A_STATUS
63671 +BMIExecute(HIF_DEVICE *device,
63672 + A_UINT32 address,
63673 + A_UINT32 *param);
63674 +
63675 +A_STATUS
63676 +BMISetAppStart(HIF_DEVICE *device,
63677 + A_UINT32 address);
63678 +
63679 +A_STATUS
63680 +BMIReadSOCRegister(HIF_DEVICE *device,
63681 + A_UINT32 address,
63682 + A_UINT32 *param);
63683 +
63684 +A_STATUS
63685 +BMIWriteSOCRegister(HIF_DEVICE *device,
63686 + A_UINT32 address,
63687 + A_UINT32 param);
63688 +
63689 +A_STATUS
63690 +BMIrompatchInstall(HIF_DEVICE *device,
63691 + A_UINT32 ROM_addr,
63692 + A_UINT32 RAM_addr,
63693 + A_UINT32 nbytes,
63694 + A_UINT32 do_activate,
63695 + A_UINT32 *patch_id);
63696 +
63697 +A_STATUS
63698 +BMIrompatchUninstall(HIF_DEVICE *device,
63699 + A_UINT32 rompatch_id);
63700 +
63701 +A_STATUS
63702 +BMIrompatchActivate(HIF_DEVICE *device,
63703 + A_UINT32 rompatch_count,
63704 + A_UINT32 *rompatch_list);
63705 +
63706 +A_STATUS
63707 +BMIrompatchDeactivate(HIF_DEVICE *device,
63708 + A_UINT32 rompatch_count,
63709 + A_UINT32 *rompatch_list);
63710 +
63711 +#ifdef __cplusplus
63712 +}
63713 +#endif
63714 +
63715 +#endif /* _BMI_H_ */
63716 Index: linux-2.6.28/drivers/ar6000/include/bmi_msg.h
63717 ===================================================================
63718 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63719 +++ linux-2.6.28/drivers/ar6000/include/bmi_msg.h 2009-01-02 00:01:56.000000000 +0100
63720 @@ -0,0 +1,199 @@
63721 +#ifndef __BMI_MSG_H__
63722 +#define __BMI_MSG_H__
63723 +/*
63724 + *
63725 + * Copyright (c) 2004-2007 Atheros Communications Inc.
63726 + * All rights reserved.
63727 + *
63728 + *
63729 + * This program is free software; you can redistribute it and/or modify
63730 + * it under the terms of the GNU General Public License version 2 as
63731 + * published by the Free Software Foundation;
63732 + *
63733 + * Software distributed under the License is distributed on an "AS
63734 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
63735 + * implied. See the License for the specific language governing
63736 + * rights and limitations under the License.
63737 + *
63738 + *
63739 + *
63740 + */
63741 +
63742 +/*
63743 + * Bootloader Messaging Interface (BMI)
63744 + *
63745 + * BMI is a very simple messaging interface used during initialization
63746 + * to read memory, write memory, execute code, and to define an
63747 + * application entry PC.
63748 + *
63749 + * It is used to download an application to AR6K, to provide
63750 + * patches to code that is already resident on AR6K, and generally
63751 + * to examine and modify state. The Host has an opportunity to use
63752 + * BMI only once during bootup. Once the Host issues a BMI_DONE
63753 + * command, this opportunity ends.
63754 + *
63755 + * The Host writes BMI requests to mailbox0, and reads BMI responses
63756 + * from mailbox0. BMI requests all begin with a command
63757 + * (see below for specific commands), and are followed by
63758 + * command-specific data.
63759 + *
63760 + * Flow control:
63761 + * The Host can only issue a command once the Target gives it a
63762 + * "BMI Command Credit", using AR6K Counter #4. As soon as the
63763 + * Target has completed a command, it issues another BMI Command
63764 + * Credit (so the Host can issue the next command).
63765 + *
63766 + * BMI handles all required Target-side cache flushing.
63767 + */
63768 +
63769 +
63770 +/* Maximum data size used for BMI transfers */
63771 +#define BMI_DATASZ_MAX 32
63772 +
63773 +/* BMI Commands */
63774 +
63775 +#define BMI_NO_COMMAND 0
63776 +
63777 +#define BMI_DONE 1
63778 + /*
63779 + * Semantics: Host is done using BMI
63780 + * Request format:
63781 + * A_UINT32 command (BMI_DONE)
63782 + * Response format: none
63783 + */
63784 +
63785 +#define BMI_READ_MEMORY 2
63786 + /*
63787 + * Semantics: Host reads AR6K memory
63788 + * Request format:
63789 + * A_UINT32 command (BMI_READ_MEMORY)
63790 + * A_UINT32 address
63791 + * A_UINT32 length, at most BMI_DATASZ_MAX
63792 + * Response format:
63793 + * A_UINT8 data[length]
63794 + */
63795 +
63796 +#define BMI_WRITE_MEMORY 3
63797 + /*
63798 + * Semantics: Host writes AR6K memory
63799 + * Request format:
63800 + * A_UINT32 command (BMI_WRITE_MEMORY)
63801 + * A_UINT32 address
63802 + * A_UINT32 length, at most BMI_DATASZ_MAX
63803 + * A_UINT8 data[length]
63804 + * Response format: none
63805 + */
63806 +
63807 +#define BMI_EXECUTE 4
63808 + /*
63809 + * Semantics: Causes AR6K to execute code
63810 + * Request format:
63811 + * A_UINT32 command (BMI_EXECUTE)
63812 + * A_UINT32 address
63813 + * A_UINT32 parameter
63814 + * Response format:
63815 + * A_UINT32 return value
63816 + */
63817 +
63818 +#define BMI_SET_APP_START 5
63819 + /*
63820 + * Semantics: Set Target application starting address
63821 + * Request format:
63822 + * A_UINT32 command (BMI_SET_APP_START)
63823 + * A_UINT32 address
63824 + * Response format: none
63825 + */
63826 +
63827 +#define BMI_READ_SOC_REGISTER 6
63828 + /*
63829 + * Semantics: Read a 32-bit Target SOC register.
63830 + * Request format:
63831 + * A_UINT32 command (BMI_READ_REGISTER)
63832 + * A_UINT32 address
63833 + * Response format:
63834 + * A_UINT32 value
63835 + */
63836 +
63837 +#define BMI_WRITE_SOC_REGISTER 7
63838 + /*
63839 + * Semantics: Write a 32-bit Target SOC register.
63840 + * Request format:
63841 + * A_UINT32 command (BMI_WRITE_REGISTER)
63842 + * A_UINT32 address
63843 + * A_UINT32 value
63844 + *
63845 + * Response format: none
63846 + */
63847 +
63848 +#define BMI_GET_TARGET_ID 8
63849 +#define BMI_GET_TARGET_INFO 8
63850 + /*
63851 + * Semantics: Fetch the 4-byte Target information
63852 + * Request format:
63853 + * A_UINT32 command (BMI_GET_TARGET_ID/INFO)
63854 + * Response format1 (old firmware):
63855 + * A_UINT32 TargetVersionID
63856 + * Response format2 (newer firmware):
63857 + * A_UINT32 TARGET_VERSION_SENTINAL
63858 + * struct bmi_target_info;
63859 + */
63860 +
63861 +struct bmi_target_info {
63862 + A_UINT32 target_info_byte_count; /* size of this structure */
63863 + A_UINT32 target_ver; /* Target Version ID */
63864 + A_UINT32 target_type; /* Target type */
63865 +};
63866 +#define TARGET_VERSION_SENTINAL 0xffffffff
63867 +#define TARGET_TYPE_AR6001 1
63868 +#define TARGET_TYPE_AR6002 2
63869 +
63870 +
63871 +#define BMI_ROMPATCH_INSTALL 9
63872 + /*
63873 + * Semantics: Install a ROM Patch.
63874 + * Request format:
63875 + * A_UINT32 command (BMI_ROMPATCH_INSTALL)
63876 + * A_UINT32 Target ROM Address
63877 + * A_UINT32 Target RAM Address
63878 + * A_UINT32 Size, in bytes
63879 + * A_UINT32 Activate? 1-->activate;
63880 + * 0-->install but do not activate
63881 + * Response format:
63882 + * A_UINT32 PatchID
63883 + */
63884 +
63885 +#define BMI_ROMPATCH_UNINSTALL 10
63886 + /*
63887 + * Semantics: Uninstall a previously-installed ROM Patch,
63888 + * automatically deactivating, if necessary.
63889 + * Request format:
63890 + * A_UINT32 command (BMI_ROMPATCH_UNINSTALL)
63891 + * A_UINT32 PatchID
63892 + *
63893 + * Response format: none
63894 + */
63895 +
63896 +#define BMI_ROMPATCH_ACTIVATE 11
63897 + /*
63898 + * Semantics: Activate a list of previously-installed ROM Patches.
63899 + * Request format:
63900 + * A_UINT32 command (BMI_ROMPATCH_ACTIVATE)
63901 + * A_UINT32 rompatch_count
63902 + * A_UINT32 PatchID[rompatch_count]
63903 + *
63904 + * Response format: none
63905 + */
63906 +
63907 +#define BMI_ROMPATCH_DEACTIVATE 12
63908 + /*
63909 + * Semantics: Deactivate a list of active ROM Patches.
63910 + * Request format:
63911 + * A_UINT32 command (BMI_ROMPATCH_DEACTIVATE)
63912 + * A_UINT32 rompatch_count
63913 + * A_UINT32 PatchID[rompatch_count]
63914 + *
63915 + * Response format: none
63916 + */
63917 +
63918 +
63919 +#endif /* __BMI_MSG_H__ */
63920 Index: linux-2.6.28/drivers/ar6000/include/common_drv.h
63921 ===================================================================
63922 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63923 +++ linux-2.6.28/drivers/ar6000/include/common_drv.h 2009-01-02 00:01:56.000000000 +0100
63924 @@ -0,0 +1,61 @@
63925 +/*
63926 + *
63927 + * Copyright (c) 2004-2007 Atheros Communications Inc.
63928 + * All rights reserved.
63929 + *
63930 + *
63931 + * This program is free software; you can redistribute it and/or modify
63932 + * it under the terms of the GNU General Public License version 2 as
63933 + * published by the Free Software Foundation;
63934 + *
63935 + * Software distributed under the License is distributed on an "AS
63936 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
63937 + * implied. See the License for the specific language governing
63938 + * rights and limitations under the License.
63939 + *
63940 + *
63941 + *
63942 + */
63943 +
63944 +
63945 +#ifndef COMMON_DRV_H_
63946 +#define COMMON_DRV_H_
63947 +
63948 +#include "hif.h"
63949 +#include "htc_packet.h"
63950 +
63951 +
63952 +
63953 +/* structure that is the state information for the default credit distribution callback
63954 + * drivers should instantiate (zero-init as well) this structure in their driver instance
63955 + * and pass it as a context to the HTC credit distribution functions */
63956 +typedef struct _COMMON_CREDIT_STATE_INFO {
63957 + int TotalAvailableCredits; /* total credits in the system at startup */
63958 + int CurrentFreeCredits; /* credits available in the pool that have not been
63959 + given out to endpoints */
63960 + HTC_ENDPOINT_CREDIT_DIST *pLowestPriEpDist; /* pointer to the lowest priority endpoint dist struct */
63961 +} COMMON_CREDIT_STATE_INFO;
63962 +
63963 +
63964 +/* HTC TX packet tagging definitions */
63965 +#define AR6K_CONTROL_PKT_TAG HTC_TX_PACKET_TAG_USER_DEFINED
63966 +#define AR6K_DATA_PKT_TAG (AR6K_CONTROL_PKT_TAG + 1)
63967 +
63968 +#ifdef __cplusplus
63969 +extern "C" {
63970 +#endif
63971 +
63972 +/* OS-independent APIs */
63973 +A_STATUS ar6000_setup_credit_dist(HTC_HANDLE HTCHandle, COMMON_CREDIT_STATE_INFO *pCredInfo);
63974 +A_STATUS ar6000_ReadRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
63975 +A_STATUS ar6000_WriteRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
63976 +A_STATUS ar6000_ReadDataDiag(HIF_DEVICE *hifDevice, A_UINT32 address, A_UCHAR *data, A_UINT32 length);
63977 +A_STATUS ar6000_reset_device(HIF_DEVICE *hifDevice, A_UINT32 TargetType);
63978 +void ar6000_dump_target_assert_info(HIF_DEVICE *hifDevice, A_UINT32 TargetType);
63979 +A_STATUS ar6000_reset_device_skipflash(HIF_DEVICE *hifDevice);
63980 +
63981 +#ifdef __cplusplus
63982 +}
63983 +#endif
63984 +
63985 +#endif /*COMMON_DRV_H_*/
63986 Index: linux-2.6.28/drivers/ar6000/include/dbglog_api.h
63987 ===================================================================
63988 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
63989 +++ linux-2.6.28/drivers/ar6000/include/dbglog_api.h 2009-01-02 00:01:56.000000000 +0100
63990 @@ -0,0 +1,46 @@
63991 +#ifndef _DBGLOG_API_H_
63992 +#define _DBGLOG_API_H_
63993 +/*
63994 + * Copyright (c) 2004-2006 Atheros Communications Inc.
63995 + * All rights reserved.
63996 + *
63997 + *
63998 + * This program is free software; you can redistribute it and/or modify
63999 + * it under the terms of the GNU General Public License version 2 as
64000 + * published by the Free Software Foundation;
64001 + *
64002 + * Software distributed under the License is distributed on an "AS
64003 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
64004 + * implied. See the License for the specific language governing
64005 + * rights and limitations under the License.
64006 + *
64007 + *
64008 + *
64009 + * This file contains host side debug primitives.
64010 + */
64011 +
64012 +#ifdef __cplusplus
64013 +extern "C" {
64014 +#endif
64015 +
64016 +#include "dbglog.h"
64017 +
64018 +#define DBGLOG_HOST_LOG_BUFFER_SIZE DBGLOG_LOG_BUFFER_SIZE
64019 +
64020 +#define DBGLOG_GET_DBGID(arg) \
64021 + ((arg & DBGLOG_DBGID_MASK) >> DBGLOG_DBGID_OFFSET)
64022 +
64023 +#define DBGLOG_GET_MODULEID(arg) \
64024 + ((arg & DBGLOG_MODULEID_MASK) >> DBGLOG_MODULEID_OFFSET)
64025 +
64026 +#define DBGLOG_GET_NUMARGS(arg) \
64027 + ((arg & DBGLOG_NUM_ARGS_MASK) >> DBGLOG_NUM_ARGS_OFFSET)
64028 +
64029 +#define DBGLOG_GET_TIMESTAMP(arg) \
64030 + ((arg & DBGLOG_TIMESTAMP_MASK) >> DBGLOG_TIMESTAMP_OFFSET)
64031 +
64032 +#ifdef __cplusplus
64033 +}
64034 +#endif
64035 +
64036 +#endif /* _DBGLOG_API_H_ */
64037 Index: linux-2.6.28/drivers/ar6000/include/dbglog.h
64038 ===================================================================
64039 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64040 +++ linux-2.6.28/drivers/ar6000/include/dbglog.h 2009-01-02 00:01:56.000000000 +0100
64041 @@ -0,0 +1,107 @@
64042 +/*
64043 + * Copyright (c) 2004-2007 Atheros Communications Inc.
64044 + * All rights reserved.
64045 + *
64046 + * $ATH_LICENSE_HOSTSDK0_C$
64047 + *
64048 + * This file contains the definitions and data structures associated with
64049 + * the log based debug mechanism.
64050 + *
64051 + */
64052 +
64053 +#ifndef _DBGLOG_H_
64054 +#define _DBGLOG_H_
64055 +
64056 +#ifdef __cplusplus
64057 +extern "C" {
64058 +#endif
64059 +
64060 +#define DBGLOG_TIMESTAMP_OFFSET 0
64061 +#define DBGLOG_TIMESTAMP_MASK 0x0000FFFF /* Bit 0-15. Contains bit
64062 + 8-23 of the LF0 timer */
64063 +#define DBGLOG_DBGID_OFFSET 16
64064 +#define DBGLOG_DBGID_MASK 0x03FF0000 /* Bit 16-25 */
64065 +#define DBGLOG_DBGID_NUM_MAX 256 /* Upper limit is width of mask */
64066 +
64067 +#define DBGLOG_MODULEID_OFFSET 26
64068 +#define DBGLOG_MODULEID_MASK 0x3C000000 /* Bit 26-29 */
64069 +#define DBGLOG_MODULEID_NUM_MAX 16 /* Upper limit is width of mask */
64070 +
64071 +/*
64072 + * Please ensure that the definition of any new module intrduced is captured
64073 + * between the DBGLOG_MODULEID_START and DBGLOG_MODULEID_END defines. The
64074 + * structure is required for the parser to correctly pick up the values for
64075 + * different modules.
64076 + */
64077 +#define DBGLOG_MODULEID_START
64078 +#define DBGLOG_MODULEID_INF 0
64079 +#define DBGLOG_MODULEID_WMI 1
64080 +#define DBGLOG_MODULEID_CSERV 2
64081 +#define DBGLOG_MODULEID_PM 3
64082 +#define DBGLOG_MODULEID_TXRX_MGMTBUF 4
64083 +#define DBGLOG_MODULEID_TXRX_TXBUF 5
64084 +#define DBGLOG_MODULEID_TXRX_RXBUF 6
64085 +#define DBGLOG_MODULEID_WOW 7
64086 +#define DBGLOG_MODULEID_WHAL 8
64087 +#define DBGLOG_MODULEID_END
64088 +
64089 +#define DBGLOG_NUM_ARGS_OFFSET 30
64090 +#define DBGLOG_NUM_ARGS_MASK 0xC0000000 /* Bit 30-31 */
64091 +#define DBGLOG_NUM_ARGS_MAX 2 /* Upper limit is width of mask */
64092 +
64093 +#define DBGLOG_MODULE_LOG_ENABLE_OFFSET 0
64094 +#define DBGLOG_MODULE_LOG_ENABLE_MASK 0x0000FFFF
64095 +
64096 +#define DBGLOG_REPORTING_ENABLED_OFFSET 16
64097 +#define DBGLOG_REPORTING_ENABLED_MASK 0x00010000
64098 +
64099 +#define DBGLOG_TIMESTAMP_RESOLUTION_OFFSET 17
64100 +#define DBGLOG_TIMESTAMP_RESOLUTION_MASK 0x000E0000
64101 +
64102 +#define DBGLOG_REPORT_SIZE_OFFSET 20
64103 +#define DBGLOG_REPORT_SIZE_MASK 0x3FF00000
64104 +
64105 +#define DBGLOG_LOG_BUFFER_SIZE 1500
64106 +#define DBGLOG_DBGID_DEFINITION_LEN_MAX 64
64107 +
64108 +struct dbglog_buf_s {
64109 + struct dbglog_buf_s *next;
64110 + A_INT8 *buffer;
64111 + A_UINT32 bufsize;
64112 + A_UINT32 length;
64113 + A_UINT32 count;
64114 + A_UINT32 free;
64115 +};
64116 +
64117 +struct dbglog_hdr_s {
64118 + struct dbglog_buf_s *dbuf;
64119 + A_UINT32 dropped;
64120 +};
64121 +
64122 +struct dbglog_config_s {
64123 + A_UINT32 cfgvalid; /* Mask with valid config bits */
64124 + union {
64125 + /* TODO: Take care of endianness */
64126 + struct {
64127 + A_UINT32 mmask:16; /* Mask of modules with logging on */
64128 + A_UINT32 rep:1; /* Reporting enabled or not */
64129 + A_UINT32 tsr:3; /* Time stamp resolution. Def: 1 ms */
64130 + A_UINT32 size:10; /* Report size in number of messages */
64131 + A_UINT32 reserved:2;
64132 + } dbglog_config;
64133 +
64134 + A_UINT32 value;
64135 + } u;
64136 +};
64137 +
64138 +#define cfgmmask u.dbglog_config.mmask
64139 +#define cfgrep u.dbglog_config.rep
64140 +#define cfgtsr u.dbglog_config.tsr
64141 +#define cfgsize u.dbglog_config.size
64142 +#define cfgvalue u.value
64143 +
64144 +#ifdef __cplusplus
64145 +}
64146 +#endif
64147 +
64148 +#endif /* _DBGLOG_H_ */
64149 Index: linux-2.6.28/drivers/ar6000/include/dbglog_id.h
64150 ===================================================================
64151 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64152 +++ linux-2.6.28/drivers/ar6000/include/dbglog_id.h 2009-01-02 00:01:56.000000000 +0100
64153 @@ -0,0 +1,307 @@
64154 +/*
64155 + *
64156 + * Copyright (c) 2004-2007 Atheros Communications Inc.
64157 + * All rights reserved.
64158 + *
64159 + * $ATH_LICENSE_HOSTSDK0_C$
64160 + *
64161 + * This file contains the definitions of the debug identifiers for different
64162 + * modules.
64163 + *
64164 + */
64165 +
64166 +#ifndef _DBGLOG_ID_H_
64167 +#define _DBGLOG_ID_H_
64168 +
64169 +#ifdef __cplusplus
64170 +extern "C" {
64171 +#endif
64172 +
64173 +/*
64174 + * The nomenclature for the debug identifiers is MODULE_DESCRIPTION.
64175 + * Please ensure that the definition of any new debugid introduced is captured
64176 + * between the <MODULE>_DBGID_DEFINITION_START and
64177 + * <MODULE>_DBGID_DEFINITION_END defines. The structure is required for the
64178 + * parser to correctly pick up the values for different debug identifiers.
64179 + */
64180 +
64181 +/* INF debug identifier definitions */
64182 +#define INF_DBGID_DEFINITION_START
64183 +#define INF_ASSERTION_FAILED 1
64184 +#define INF_TARGET_ID 2
64185 +#define INF_DBGID_DEFINITION_END
64186 +
64187 +/* WMI debug identifier definitions */
64188 +#define WMI_DBGID_DEFINITION_START
64189 +#define WMI_CMD_RX_XTND_PKT_TOO_SHORT 1
64190 +#define WMI_EXTENDED_CMD_NOT_HANDLED 2
64191 +#define WMI_CMD_RX_PKT_TOO_SHORT 3
64192 +#define WMI_CALLING_WMI_EXTENSION_FN 4
64193 +#define WMI_CMD_NOT_HANDLED 5
64194 +#define WMI_IN_SYNC 6
64195 +#define WMI_TARGET_WMI_SYNC_CMD 7
64196 +#define WMI_SET_SNR_THRESHOLD_PARAMS 8
64197 +#define WMI_SET_RSSI_THRESHOLD_PARAMS 9
64198 +#define WMI_SET_LQ_TRESHOLD_PARAMS 10
64199 +#define WMI_TARGET_CREATE_PSTREAM_CMD 11
64200 +#define WMI_WI_DTM_INUSE 12
64201 +#define WMI_TARGET_DELETE_PSTREAM_CMD 13
64202 +#define WMI_TARGET_IMPLICIT_DELETE_PSTREAM_CMD 14
64203 +#define WMI_TARGET_GET_BIT_RATE_CMD 15
64204 +#define WMI_GET_RATE_MASK_CMD_FIX_RATE_MASK_IS 16
64205 +#define WMI_TARGET_GET_AVAILABLE_CHANNELS_CMD 17
64206 +#define WMI_TARGET_GET_TX_PWR_CMD 18
64207 +#define WMI_FREE_EVBUF_WMIBUF 19
64208 +#define WMI_FREE_EVBUF_DATABUF 20
64209 +#define WMI_FREE_EVBUF_BADFLAG 21
64210 +#define WMI_HTC_RX_ERROR_DATA_PACKET 22
64211 +#define WMI_HTC_RX_SYNC_PAUSING_FOR_MBOX 23
64212 +#define WMI_INCORRECT_WMI_DATA_HDR_DROPPING_PKT 24
64213 +#define WMI_SENDING_READY_EVENT 25
64214 +#define WMI_SETPOWER_MDOE_TO_MAXPERF 26
64215 +#define WMI_SETPOWER_MDOE_TO_REC 27
64216 +#define WMI_BSSINFO_EVENT_FROM 28
64217 +#define WMI_TARGET_GET_STATS_CMD 29
64218 +#define WMI_SENDING_SCAN_COMPLETE_EVENT 30
64219 +#define WMI_SENDING_RSSI_INDB_THRESHOLD_EVENT 31
64220 +#define WMI_SENDING_RSSI_INDBM_THRESHOLD_EVENT 32
64221 +#define WMI_SENDING_LINK_QUALITY_THRESHOLD_EVENT 33
64222 +#define WMI_SENDING_ERROR_REPORT_EVENT 34
64223 +#define WMI_SENDING_CAC_EVENT 35
64224 +#define WMI_TARGET_GET_ROAM_TABLE_CMD 36
64225 +#define WMI_TARGET_GET_ROAM_DATA_CMD 37
64226 +#define WMI_SENDING_GPIO_INTR_EVENT 38
64227 +#define WMI_SENDING_GPIO_ACK_EVENT 39
64228 +#define WMI_SENDING_GPIO_DATA_EVENT 40
64229 +#define WMI_CMD_RX 41
64230 +#define WMI_CMD_RX_XTND 42
64231 +#define WMI_EVENT_SEND 43
64232 +#define WMI_EVENT_SEND_XTND 44
64233 +#define WMI_DBGID_DEFINITION_END
64234 +
64235 +/* CSERV debug identifier definitions */
64236 +#define CSERV_DBGID_DEFINITION_START
64237 +#define CSERV_BEGIN_SCAN1 1
64238 +#define CSERV_BEGIN_SCAN2 2
64239 +#define CSERV_END_SCAN1 3
64240 +#define CSERV_END_SCAN2 4
64241 +#define CSERV_CHAN_SCAN_START 5
64242 +#define CSERV_CHAN_SCAN_STOP 6
64243 +#define CSERV_CHANNEL_OPPPORTUNITY 7
64244 +#define CSERV_NC_TIMEOUT 8
64245 +#define CSERV_BACK_HOME 10
64246 +#define CSERV_CHMGR_CH_CALLBACK1 11
64247 +#define CSERV_CHMGR_CH_CALLBACK2 12
64248 +#define CSERV_CHMGR_CH_CALLBACK3 13
64249 +#define CSERV_SET_SCAN_PARAMS1 14
64250 +#define CSERV_SET_SCAN_PARAMS2 15
64251 +#define CSERV_SET_SCAN_PARAMS3 16
64252 +#define CSERV_SET_SCAN_PARAMS4 17
64253 +#define CSERV_ABORT_SCAN 18
64254 +#define CSERV_NEWSTATE 19
64255 +#define CSERV_MINCHMGR_OP_END 20
64256 +#define CSERV_CHMGR_OP_END 21
64257 +#define CSERV_DISCONNECT_TIMEOUT 22
64258 +#define CSERV_ROAM_TIMEOUT 23
64259 +#define CSERV_FORCE_SCAN1 24
64260 +#define CSERV_FORCE_SCAN2 25
64261 +#define CSERV_FORCE_SCAN3 26
64262 +#define CSERV_UTIL_TIMEOUT 27
64263 +#define CSERV_RSSIPOLLER 28
64264 +#define CSERV_RETRY_CONNECT_TIMEOUT 29
64265 +#define CSERV_RSSIINDBMPOLLER 30
64266 +#define CSERV_BGSCAN_ENABLE 31
64267 +#define CSERV_BGSCAN_DISABLE 32
64268 +#define CSERV_WLAN_START_SCAN_CMD1 33
64269 +#define CSERV_WLAN_START_SCAN_CMD2 34
64270 +#define CSERV_WLAN_START_SCAN_CMD3 35
64271 +#define CSERV_START_SCAN_CMD 36
64272 +#define CSERV_START_FORCE_SCAN 37
64273 +#define CSERV_NEXT_CHAN 38
64274 +#define CSERV_SET_REGCODE 39
64275 +#define CSERV_START_ADHOC 40
64276 +#define CSERV_ADHOC_AT_HOME 41
64277 +#define CSERV_OPT_AT_HOME 42
64278 +#define CSERV_WLAN_CONNECT_CMD 43
64279 +#define CSERV_WLAN_RECONNECT_CMD 44
64280 +#define CSERV_WLAN_DISCONNECT_CMD 45
64281 +#define CSERV_BSS_CHANGE_CHANNEL 46
64282 +#define CSERV_BEACON_RX 47
64283 +#define CSERV_KEEPALIVE_CHECK 48
64284 +#define CSERV_RC_BEGIN_SCAN 49
64285 +#define CSERV_RC_SCAN_START 50
64286 +#define CSERV_RC_SCAN_STOP 51
64287 +#define CSERV_RC_NEXT 52
64288 +#define CSERV_RC_SCAN_END 53
64289 +#define CSERV_PROBE_CALLBACK 54
64290 +#define CSERV_ROAM1 55
64291 +#define CSERV_ROAM2 56
64292 +#define CSERV_ROAM3 57
64293 +#define CSERV_CONNECT_EVENT 58
64294 +#define CSERV_DISCONNECT_EVENT 59
64295 +#define CSERV_BMISS_HANDLER1 60
64296 +#define CSERV_BMISS_HANDLER2 61
64297 +#define CSERV_BMISS_HANDLER3 62
64298 +#define CSERV_LOWRSSI_HANDLER 63
64299 +#define CSERV_WLAN_SET_PMKID_CMD 64
64300 +#define CSERV_RECONNECT_REQUEST 65
64301 +#define CSERV_KEYSPLUMBED_EVENT 66
64302 +#define CSERV_NEW_REG 67
64303 +#define CSERV_SET_RSSI_THOLD 68
64304 +#define CSERV_RSSITHRESHOLDCHECK 69
64305 +#define CSERV_RSSIINDBMTHRESHOLDCHECK 70
64306 +#define CSERV_WLAN_SET_OPT_CMD1 71
64307 +#define CSERV_WLAN_SET_OPT_CMD2 72
64308 +#define CSERV_WLAN_SET_OPT_CMD3 73
64309 +#define CSERV_WLAN_SET_OPT_CMD4 74
64310 +#define CSERV_SCAN_CONNECT_STOP 75
64311 +#define CSERV_BMISS_HANDLER4 76
64312 +#define CSERV_INITIALIZE_TIMER 77
64313 +#define CSERV_ARM_TIMER 78
64314 +#define CSERV_DISARM_TIMER 79
64315 +#define CSERV_UNINITIALIZE_TIMER 80
64316 +#define CSERV_DISCONNECT_EVENT2 81
64317 +#define CSERV_SCAN_CONNECT_START 82
64318 +#define CSERV_BSSINFO_MEMORY_ALLOC_FAILED 83
64319 +#define CSERV_SET_SCAN_PARAMS5 84
64320 +#define CSERV_DBGID_DEFINITION_END
64321 +
64322 +/* TXRX debug identifier definitions */
64323 +#define TXRX_TXBUF_DBGID_DEFINITION_START
64324 +#define TXRX_TXBUF_ALLOCATE_BUF 1
64325 +#define TXRX_TXBUF_QUEUE_BUF_TO_MBOX 2
64326 +#define TXRX_TXBUF_QUEUE_BUF_TO_TXQ 3
64327 +#define TXRX_TXBUF_TXQ_DEPTH 4
64328 +#define TXRX_TXBUF_IBSS_QUEUE_TO_SFQ 5
64329 +#define TXRX_TXBUF_IBSS_QUEUE_TO_TXQ_FRM_SFQ 6
64330 +#define TXRX_TXBUF_INITIALIZE_TIMER 7
64331 +#define TXRX_TXBUF_ARM_TIMER 8
64332 +#define TXRX_TXBUF_DISARM_TIMER 9
64333 +#define TXRX_TXBUF_UNINITIALIZE_TIMER 10
64334 +#define TXRX_TXBUF_DBGID_DEFINITION_END
64335 +
64336 +#define TXRX_RXBUF_DBGID_DEFINITION_START
64337 +#define TXRX_RXBUF_ALLOCATE_BUF 1
64338 +#define TXRX_RXBUF_QUEUE_TO_HOST 2
64339 +#define TXRX_RXBUF_QUEUE_TO_WLAN 3
64340 +#define TXRX_RXBUF_ZERO_LEN_BUF 4
64341 +#define TXRX_RXBUF_QUEUE_TO_HOST_LASTBUF_IN_RXCHAIN 5
64342 +#define TXRX_RXBUF_LASTBUF_IN_RXCHAIN_ZEROBUF 6
64343 +#define TXRX_RXBUF_QUEUE_EMPTY_QUEUE_TO_WLAN 7
64344 +#define TXRX_RXBUF_SEND_TO_RECV_MGMT 8
64345 +#define TXRX_RXBUF_SEND_TO_IEEE_LAYER 9
64346 +#define TXRX_RXBUF_DBGID_DEFINITION_END
64347 +
64348 +#define TXRX_MGMTBUF_DBGID_DEFINITION_START
64349 +#define TXRX_MGMTBUF_ALLOCATE_BUF 1
64350 +#define TXRX_MGMTBUF_ALLOCATE_SM_BUF 2
64351 +#define TXRX_MGMTBUF_ALLOCATE_RMBUF 3
64352 +#define TXRX_MGMTBUF_GET_BUF 4
64353 +#define TXRX_MGMTBUF_GET_SM_BUF 5
64354 +#define TXRX_MGMTBUF_QUEUE_BUF_TO_TXQ 6
64355 +#define TXRX_MGMTBUF_REAPED_BUF 7
64356 +#define TXRX_MGMTBUF_REAPED_SM_BUF 8
64357 +#define TXRX_MGMTBUF_WAIT_FOR_TXQ_DRAIN 9
64358 +#define TXRX_MGMTBUF_WAIT_FOR_TXQ_SFQ_DRAIN 10
64359 +#define TXRX_MGMTBUF_ENQUEUE_INTO_SFQ 11
64360 +#define TXRX_MGMTBUF_DEQUEUE_FROM_SFQ 12
64361 +#define TXRX_MGMTBUF_PAUSE_TXQ 13
64362 +#define TXRX_MGMTBUF_RESUME_TXQ 14
64363 +#define TXRX_MGMTBUF_WAIT_FORTXQ_DRAIN_TIMEOUT 15
64364 +#define TXRX_MGMTBUF_DRAINQ 16
64365 +#define TXRX_MGMTBUF_INDICATE_Q_DRAINED 17
64366 +#define TXRX_MGMTBUF_DBGID_DEFINITION_END
64367 +
64368 +/* PM (Power Module) debug identifier definitions */
64369 +#define PM_DBGID_DEFINITION_START
64370 +#define PM_INIT 1
64371 +#define PM_ENABLE 2
64372 +#define PM_SET_STATE 3
64373 +#define PM_SET_POWERMODE 4
64374 +#define PM_CONN_NOTIFY 5
64375 +#define PM_REF_COUNT_NEGATIVE 6
64376 +#define PM_APSD_ENABLE 7
64377 +#define PM_UPDATE_APSD_STATE 8
64378 +#define PM_CHAN_OP_REQ 9
64379 +#define PM_SET_MY_BEACON_POLICY 10
64380 +#define PM_SET_ALL_BEACON_POLICY 11
64381 +#define PM_SET_PM_PARAMS1 12
64382 +#define PM_SET_PM_PARAMS2 13
64383 +#define PM_ADHOC_SET_PM_CAPS_FAIL 14
64384 +#define PM_ADHOC_UNKNOWN_IBSS_ATTRIB_ID 15
64385 +#define PM_DBGID_DEFINITION_END
64386 +
64387 +/* Wake on Wireless debug identifier definitions */
64388 +#define WOW_DBGID_DEFINITION_START
64389 +#define WOW_INIT 1
64390 +#define WOW_GET_CONFIG_DSET 2
64391 +#define WOW_NO_CONFIG_DSET 3
64392 +#define WOW_INVALID_CONFIG_DSET 4
64393 +#define WOW_USE_DEFAULT_CONFIG 5
64394 +#define WOW_SETUP_GPIO 6
64395 +#define WOW_INIT_DONE 7
64396 +#define WOW_SET_GPIO_PIN 8
64397 +#define WOW_CLEAR_GPIO_PIN 9
64398 +#define WOW_SET_WOW_MODE_CMD 10
64399 +#define WOW_SET_HOST_MODE_CMD 11
64400 +#define WOW_ADD_WOW_PATTERN_CMD 12
64401 +#define WOW_NEW_WOW_PATTERN_AT_INDEX 13
64402 +#define WOW_DEL_WOW_PATTERN_CMD 14
64403 +#define WOW_LIST_CONTAINS_PATTERNS 15
64404 +#define WOW_GET_WOW_LIST_CMD 16
64405 +#define WOW_INVALID_FILTER_ID 17
64406 +#define WOW_INVALID_FILTER_LISTID 18
64407 +#define WOW_NO_VALID_FILTER_AT_ID 19
64408 +#define WOW_NO_VALID_LIST_AT_ID 20
64409 +#define WOW_NUM_PATTERNS_EXCEEDED 21
64410 +#define WOW_NUM_LISTS_EXCEEDED 22
64411 +#define WOW_GET_WOW_STATS 23
64412 +#define WOW_CLEAR_WOW_STATS 24
64413 +#define WOW_WAKEUP_HOST 25
64414 +#define WOW_EVENT_WAKEUP_HOST 26
64415 +#define WOW_EVENT_DISCARD 27
64416 +#define WOW_PATTERN_MATCH 28
64417 +#define WOW_PATTERN_NOT_MATCH 29
64418 +#define WOW_PATTERN_NOT_MATCH_OFFSET 30
64419 +#define WOW_DISABLED_HOST_ASLEEP 31
64420 +#define WOW_ENABLED_HOST_ASLEEP_NO_PATTERNS 32
64421 +#define WOW_ENABLED_HOST_ASLEEP_NO_MATCH_FOUND 33
64422 +#define WOW_DBGID_DEFINITION_END
64423 +
64424 +/* WHAL debug identifier definitions */
64425 +#define WHAL_DBGID_DEFINITION_START
64426 +#define WHAL_ERROR_ANI_CONTROL 1
64427 +#define WHAL_ERROR_CHIP_TEST1 2
64428 +#define WHAL_ERROR_CHIP_TEST2 3
64429 +#define WHAL_ERROR_EEPROM_CHECKSUM 4
64430 +#define WHAL_ERROR_EEPROM_MACADDR 5
64431 +#define WHAL_ERROR_INTERRUPT_HIU 6
64432 +#define WHAL_ERROR_KEYCACHE_RESET 7
64433 +#define WHAL_ERROR_KEYCACHE_SET 8
64434 +#define WHAL_ERROR_KEYCACHE_TYPE 9
64435 +#define WHAL_ERROR_KEYCACHE_TKIPENTRY 10
64436 +#define WHAL_ERROR_KEYCACHE_WEPLENGTH 11
64437 +#define WHAL_ERROR_PHY_INVALID_CHANNEL 12
64438 +#define WHAL_ERROR_POWER_AWAKE 13
64439 +#define WHAL_ERROR_POWER_SET 14
64440 +#define WHAL_ERROR_RECV_STOPDMA 15
64441 +#define WHAL_ERROR_RECV_STOPPCU 16
64442 +#define WHAL_ERROR_RESET_CHANNF1 17
64443 +#define WHAL_ERROR_RESET_CHANNF2 18
64444 +#define WHAL_ERROR_RESET_PM 19
64445 +#define WHAL_ERROR_RESET_OFFSETCAL 20
64446 +#define WHAL_ERROR_RESET_RFGRANT 21
64447 +#define WHAL_ERROR_RESET_RXFRAME 22
64448 +#define WHAL_ERROR_RESET_STOPDMA 23
64449 +#define WHAL_ERROR_RESET_RECOVER 24
64450 +#define WHAL_ERROR_XMIT_COMPUTE 25
64451 +#define WHAL_ERROR_XMIT_NOQUEUE 26
64452 +#define WHAL_ERROR_XMIT_ACTIVEQUEUE 27
64453 +#define WHAL_ERROR_XMIT_BADTYPE 28
64454 +#define WHAL_DBGID_DEFINITION_END
64455 +
64456 +#ifdef __cplusplus
64457 +}
64458 +#endif
64459 +
64460 +#endif /* _DBGLOG_ID_H_ */
64461 Index: linux-2.6.28/drivers/ar6000/include/dl_list.h
64462 ===================================================================
64463 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64464 +++ linux-2.6.28/drivers/ar6000/include/dl_list.h 2009-01-02 00:01:56.000000000 +0100
64465 @@ -0,0 +1,114 @@
64466 +/*
64467 + *
64468 + * Double-link list definitions (adapted from Atheros SDIO stack)
64469 + *
64470 + * Copyright (c) 2007 Atheros Communications Inc.
64471 + * All rights reserved.
64472 + *
64473 + *
64474 + * This program is free software; you can redistribute it and/or modify
64475 + * it under the terms of the GNU General Public License version 2 as
64476 + * published by the Free Software Foundation;
64477 + *
64478 + * Software distributed under the License is distributed on an "AS
64479 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
64480 + * implied. See the License for the specific language governing
64481 + * rights and limitations under the License.
64482 + *
64483 + *
64484 + *
64485 + */
64486 +#ifndef __DL_LIST_H___
64487 +#define __DL_LIST_H___
64488 +
64489 +#define A_CONTAINING_STRUCT(address, struct_type, field_name)\
64490 + ((struct_type *)((A_UINT32)(address) - (A_UINT32)(&((struct_type *)0)->field_name)))
64491 +
64492 +/* list functions */
64493 +/* pointers for the list */
64494 +typedef struct _DL_LIST {
64495 + struct _DL_LIST *pPrev;
64496 + struct _DL_LIST *pNext;
64497 +}DL_LIST, *PDL_LIST;
64498 +/*
64499 + * DL_LIST_INIT , initialize doubly linked list
64500 +*/
64501 +#define DL_LIST_INIT(pList)\
64502 + {(pList)->pPrev = pList; (pList)->pNext = pList;}
64503 +
64504 +#define DL_LIST_IS_EMPTY(pList) (((pList)->pPrev == (pList)) && ((pList)->pNext == (pList)))
64505 +#define DL_LIST_GET_ITEM_AT_HEAD(pList) (pList)->pNext
64506 +#define DL_LIST_GET_ITEM_AT_TAIL(pList) (pList)->pPrev
64507 +/*
64508 + * ITERATE_OVER_LIST pStart is the list, pTemp is a temp list member
64509 + * NOT: do not use this function if the items in the list are deleted inside the
64510 + * iteration loop
64511 +*/
64512 +#define ITERATE_OVER_LIST(pStart, pTemp) \
64513 + for((pTemp) =(pStart)->pNext; pTemp != (pStart); (pTemp) = (pTemp)->pNext)
64514 +
64515 +
64516 +/* safe iterate macro that allows the item to be removed from the list
64517 + * the iteration continues to the next item in the list
64518 + */
64519 +#define ITERATE_OVER_LIST_ALLOW_REMOVE(pStart,pItem,st,offset) \
64520 +{ \
64521 + PDL_LIST pTemp; \
64522 + pTemp = (pStart)->pNext; \
64523 + while (pTemp != (pStart)) { \
64524 + (pItem) = A_CONTAINING_STRUCT(pTemp,st,offset); \
64525 + pTemp = pTemp->pNext; \
64526 +
64527 +#define ITERATE_END }}
64528 +
64529 +/*
64530 + * DL_ListInsertTail - insert pAdd to the end of the list
64531 +*/
64532 +static INLINE PDL_LIST DL_ListInsertTail(PDL_LIST pList, PDL_LIST pAdd) {
64533 + /* insert at tail */
64534 + pAdd->pPrev = pList->pPrev;
64535 + pAdd->pNext = pList;
64536 + pList->pPrev->pNext = pAdd;
64537 + pList->pPrev = pAdd;
64538 + return pAdd;
64539 +}
64540 +
64541 +/*
64542 + * DL_ListInsertHead - insert pAdd into the head of the list
64543 +*/
64544 +static INLINE PDL_LIST DL_ListInsertHead(PDL_LIST pList, PDL_LIST pAdd) {
64545 + /* insert at head */
64546 + pAdd->pPrev = pList;
64547 + pAdd->pNext = pList->pNext;
64548 + pList->pNext->pPrev = pAdd;
64549 + pList->pNext = pAdd;
64550 + return pAdd;
64551 +}
64552 +
64553 +#define DL_ListAdd(pList,pItem) DL_ListInsertHead((pList),(pItem))
64554 +/*
64555 + * DL_ListRemove - remove pDel from list
64556 +*/
64557 +static INLINE PDL_LIST DL_ListRemove(PDL_LIST pDel) {
64558 + pDel->pNext->pPrev = pDel->pPrev;
64559 + pDel->pPrev->pNext = pDel->pNext;
64560 + /* point back to itself just to be safe, incase remove is called again */
64561 + pDel->pNext = pDel;
64562 + pDel->pPrev = pDel;
64563 + return pDel;
64564 +}
64565 +
64566 +/*
64567 + * DL_ListRemoveItemFromHead - get a list item from the head
64568 +*/
64569 +static INLINE PDL_LIST DL_ListRemoveItemFromHead(PDL_LIST pList) {
64570 + PDL_LIST pItem = NULL;
64571 + if (pList->pNext != pList) {
64572 + pItem = pList->pNext;
64573 + /* remove the first item from head */
64574 + DL_ListRemove(pItem);
64575 + }
64576 + return pItem;
64577 +}
64578 +
64579 +#endif /* __DL_LIST_H___ */
64580 Index: linux-2.6.28/drivers/ar6000/include/dset_api.h
64581 ===================================================================
64582 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64583 +++ linux-2.6.28/drivers/ar6000/include/dset_api.h 2009-01-02 00:01:56.000000000 +0100
64584 @@ -0,0 +1,63 @@
64585 +/*
64586 + * Copyright (c) 2004-2006 Atheros Communications Inc.
64587 + * All rights reserved.
64588 + *
64589 + *
64590 + * This program is free software; you can redistribute it and/or modify
64591 + * it under the terms of the GNU General Public License version 2 as
64592 + * published by the Free Software Foundation;
64593 + *
64594 + * Software distributed under the License is distributed on an "AS
64595 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
64596 + * implied. See the License for the specific language governing
64597 + * rights and limitations under the License.
64598 + *
64599 + *
64600 + *
64601 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/dset_api.h#1 $
64602 + *
64603 + * Host-side DataSet API.
64604 + *
64605 + */
64606 +
64607 +#ifndef _DSET_API_H_
64608 +#define _DSET_API_H_
64609 +
64610 +#ifdef __cplusplus
64611 +extern "C" {
64612 +#endif /* __cplusplus */
64613 +
64614 +/*
64615 + * Host-side DataSet support is optional, and is not
64616 + * currently required for correct operation. To disable
64617 + * Host-side DataSet support, set this to 0.
64618 + */
64619 +#ifndef CONFIG_HOST_DSET_SUPPORT
64620 +#define CONFIG_HOST_DSET_SUPPORT 1
64621 +#endif
64622 +
64623 +/* Called to send a DataSet Open Reply back to the Target. */
64624 +A_STATUS wmi_dset_open_reply(struct wmi_t *wmip,
64625 + A_UINT32 status,
64626 + A_UINT32 access_cookie,
64627 + A_UINT32 size,
64628 + A_UINT32 version,
64629 + A_UINT32 targ_handle,
64630 + A_UINT32 targ_reply_fn,
64631 + A_UINT32 targ_reply_arg);
64632 +
64633 +/* Called to send a DataSet Data Reply back to the Target. */
64634 +A_STATUS wmi_dset_data_reply(struct wmi_t *wmip,
64635 + A_UINT32 status,
64636 + A_UINT8 *host_buf,
64637 + A_UINT32 length,
64638 + A_UINT32 targ_buf,
64639 + A_UINT32 targ_reply_fn,
64640 + A_UINT32 targ_reply_arg);
64641 +
64642 +#ifdef __cplusplus
64643 +}
64644 +#endif /* __cplusplus */
64645 +
64646 +
64647 +#endif /* _DSET_API_H_ */
64648 Index: linux-2.6.28/drivers/ar6000/include/dsetid.h
64649 ===================================================================
64650 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64651 +++ linux-2.6.28/drivers/ar6000/include/dsetid.h 2009-01-02 00:01:56.000000000 +0100
64652 @@ -0,0 +1,110 @@
64653 +/*
64654 + * Copyright (c) 2004-2007 Atheros Communications Inc.
64655 + * All rights reserved.
64656 + *
64657 + * $ATH_LICENSE_HOSTSDK0_C$
64658 + *
64659 + */
64660 +
64661 +#ifndef __DSETID_H__
64662 +#define __DSETID_H__
64663 +
64664 +/* Well-known DataSet IDs */
64665 +#define DSETID_UNUSED 0x00000000
64666 +#define DSETID_BOARD_DATA 0x00000001 /* Cal and board data */
64667 +#define DSETID_REGDB 0x00000002 /* Regulatory Database */
64668 +#define DSETID_POWER_CONTROL 0x00000003 /* TX Pwr Lim & Ant Gain */
64669 +#define DSETID_USER_CONFIG 0x00000004 /* User Configuration */
64670 +
64671 +#define DSETID_ANALOG_CONTROL_DATA_START 0x00000005
64672 +#define DSETID_ANALOG_CONTROL_DATA_END 0x00000025
64673 +/*
64674 + * Get DSETID for various reference clock speeds.
64675 + * For each speed there are three DataSets that correspond
64676 + * to the three columns of bank6 data (addr, 11a, 11b/g).
64677 + * This macro returns the dsetid of the first of those
64678 + * three DataSets.
64679 + */
64680 +#define ANALOG_CONTROL_DATA_DSETID(refclk) \
64681 + (DSETID_ANALOG_CONTROL_DATA_START + 3*refclk)
64682 +
64683 +/*
64684 + * There are TWO STARTUP_PATCH DataSets.
64685 + * DSETID_STARTUP_PATCH is historical, and was applied before BMI on
64686 + * earlier systems. On AR6002, it is applied after BMI, just like
64687 + * DSETID_STARTUP_PATCH2.
64688 + */
64689 +#define DSETID_STARTUP_PATCH 0x00000026
64690 +#define DSETID_GPIO_CONFIG_PATCH 0x00000027
64691 +#define DSETID_WLANREGS 0x00000028 /* override wlan regs */
64692 +#define DSETID_STARTUP_PATCH2 0x00000029
64693 +
64694 +#define DSETID_WOW_CONFIG 0x00000090 /* WoW Configuration */
64695 +
64696 +/* Add WHAL_INI_DATA_ID to DSETID_INI_DATA for a specific WHAL INI table. */
64697 +#define DSETID_INI_DATA 0x00000100
64698 +/* Reserved for WHAL INI Tables: 0x100..0x11f */
64699 +#define DSETID_INI_DATA_END 0x0000011f
64700 +
64701 +#define DSETID_VENDOR_START 0x00010000 /* Vendor-defined DataSets */
64702 +
64703 +#define DSETID_INDEX_END 0xfffffffe /* Reserved to indicate the
64704 + end of a memory-based
64705 + DataSet Index */
64706 +#define DSETID_INDEX_FREE 0xffffffff /* An unused index entry */
64707 +
64708 +/*
64709 + * PATCH DataSet format:
64710 + * A list of patches, terminated by a patch with
64711 + * address=PATCH_END.
64712 + *
64713 + * This allows for patches to be stored in flash.
64714 + */
64715 +struct patch_s {
64716 + A_UINT32 *address;
64717 + A_UINT32 data;
64718 +};
64719 +
64720 +/*
64721 + * Skip some patches. Can be used to erase a single patch in a
64722 + * patch DataSet without having to re-write the DataSet. May
64723 + * also be used to embed information for use by subsequent
64724 + * patch code. The "data" in a PATCH_SKIP tells how many
64725 + * bytes of length "patch_s" to skip.
64726 + */
64727 +#define PATCH_SKIP ((A_UINT32 *)0x00000000)
64728 +
64729 +/*
64730 + * Execute code at the address specified by "data".
64731 + * The address of the patch structure is passed as
64732 + * the one parameter.
64733 + */
64734 +#define PATCH_CODE_ABS ((A_UINT32 *)0x00000001)
64735 +
64736 +/*
64737 + * Same as PATCH_CODE_ABS, but treat "data" as an
64738 + * offset from the start of the patch word.
64739 + */
64740 +#define PATCH_CODE_REL ((A_UINT32 *)0x00000002)
64741 +
64742 +/* Mark the end of this patch DataSet. */
64743 +#define PATCH_END ((A_UINT32 *)0xffffffff)
64744 +
64745 +/*
64746 + * A DataSet which contains a Binary Patch to some other DataSet
64747 + * uses the original dsetid with the DSETID_BPATCH_FLAG bit set.
64748 + * Such a BPatch DataSet consists of BPatch metadata followed by
64749 + * the bdiff bytes. BPatch metadata consists of a single 32-bit
64750 + * word that contains the size of the BPatched final image.
64751 + *
64752 + * To create a suitable bdiff DataSet, use bdiff in host/tools/bdiff
64753 + * to create "diffs":
64754 + * bdiff -q -O -nooldmd5 -nonewmd5 -d ORIGfile NEWfile diffs
64755 + * Then add BPatch metadata to the start of "diffs".
64756 + *
64757 + * NB: There are some implementation-induced restrictions
64758 + * on which DataSets can be BPatched.
64759 + */
64760 +#define DSETID_BPATCH_FLAG 0x80000000
64761 +
64762 +#endif /* __DSETID_H__ */
64763 Index: linux-2.6.28/drivers/ar6000/include/dset_internal.h
64764 ===================================================================
64765 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64766 +++ linux-2.6.28/drivers/ar6000/include/dset_internal.h 2009-01-02 00:01:56.000000000 +0100
64767 @@ -0,0 +1,39 @@
64768 +/*
64769 + * Copyright (c) 2007 Atheros Communications Inc.
64770 + * All rights reserved.
64771 + *
64772 + * $ATH_LICENSE_HOSTSDK0_C$
64773 + *
64774 + */
64775 +
64776 +#ifndef __DSET_INTERNAL_H__
64777 +#define __DSET_INTERNAL_H__
64778 +
64779 +/*
64780 + * Internal dset definitions, common for DataSet layer.
64781 + */
64782 +
64783 +#define DSET_TYPE_STANDARD 0
64784 +#define DSET_TYPE_BPATCHED 1
64785 +#define DSET_TYPE_COMPRESSED 2
64786 +
64787 +/* Dataset descriptor */
64788 +
64789 +typedef struct dset_descriptor_s {
64790 + struct dset_descriptor_s *next; /* List link. NULL only at the last
64791 + descriptor */
64792 + A_UINT16 id; /* Dset ID */
64793 + A_UINT16 size; /* Dset size. */
64794 + void *DataPtr; /* Pointer to raw data for standard
64795 + DataSet or pointer to original
64796 + dset_descriptor for patched
64797 + DataSet */
64798 + A_UINT32 data_type; /* DSET_TYPE_*, above */
64799 +
64800 + void *AuxPtr; /* Additional data that might
64801 + needed for data_type. For
64802 + example, pointer to patch
64803 + Dataset descriptor for BPatch. */
64804 +} dset_descriptor_t;
64805 +
64806 +#endif /* __DSET_INTERNAL_H__ */
64807 Index: linux-2.6.28/drivers/ar6000/include/gpio_api.h
64808 ===================================================================
64809 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64810 +++ linux-2.6.28/drivers/ar6000/include/gpio_api.h 2009-01-02 00:01:56.000000000 +0100
64811 @@ -0,0 +1,57 @@
64812 +#ifndef _GPIO_API_H_
64813 +#define _GPIO_API_H_
64814 +/*
64815 + * Copyright 2005 Atheros Communications, Inc., All Rights Reserved.
64816 + *
64817 + *
64818 + * This program is free software; you can redistribute it and/or modify
64819 + * it under the terms of the GNU General Public License version 2 as
64820 + * published by the Free Software Foundation;
64821 + *
64822 + * Software distributed under the License is distributed on an "AS
64823 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
64824 + * implied. See the License for the specific language governing
64825 + * rights and limitations under the License.
64826 + *
64827 + *
64828 + *
64829 + */
64830 +
64831 +/*
64832 + * Host-side General Purpose I/O API.
64833 + *
64834 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/gpio_api.h#1 $
64835 + */
64836 +
64837 +/*
64838 + * Send a command to the Target in order to change output on GPIO pins.
64839 + */
64840 +A_STATUS wmi_gpio_output_set(struct wmi_t *wmip,
64841 + A_UINT32 set_mask,
64842 + A_UINT32 clear_mask,
64843 + A_UINT32 enable_mask,
64844 + A_UINT32 disable_mask);
64845 +
64846 +/*
64847 + * Send a command to the Target requesting input state of GPIO pins.
64848 + */
64849 +A_STATUS wmi_gpio_input_get(struct wmi_t *wmip);
64850 +
64851 +/*
64852 + * Send a command to the Target to change the value of a GPIO register.
64853 + */
64854 +A_STATUS wmi_gpio_register_set(struct wmi_t *wmip,
64855 + A_UINT32 gpioreg_id,
64856 + A_UINT32 value);
64857 +
64858 +/*
64859 + * Send a command to the Target to fetch the value of a GPIO register.
64860 + */
64861 +A_STATUS wmi_gpio_register_get(struct wmi_t *wmip, A_UINT32 gpioreg_id);
64862 +
64863 +/*
64864 + * Send a command to the Target, acknowledging some GPIO interrupts.
64865 + */
64866 +A_STATUS wmi_gpio_intr_ack(struct wmi_t *wmip, A_UINT32 ack_mask);
64867 +
64868 +#endif /* _GPIO_API_H_ */
64869 Index: linux-2.6.28/drivers/ar6000/include/gpio.h
64870 ===================================================================
64871 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64872 +++ linux-2.6.28/drivers/ar6000/include/gpio.h 2009-01-02 00:01:56.000000000 +0100
64873 @@ -0,0 +1,34 @@
64874 +/*
64875 + * Copyright (c) 2005 Atheros Communications Inc.
64876 + * All rights reserved.
64877 + *
64878 + * $ATH_LICENSE_HOSTSDK0_C$
64879 + *
64880 + */
64881 +
64882 +#if defined(AR6001)
64883 +#define GPIO_PIN_COUNT 18
64884 +#else
64885 +#define GPIO_PIN_COUNT 18
64886 +#endif
64887 +
64888 +/*
64889 + * Possible values for WMIX_GPIO_SET_REGISTER_CMDID.
64890 + * NB: These match hardware order, so that addresses can
64891 + * easily be computed.
64892 + */
64893 +#define GPIO_ID_OUT 0x00000000
64894 +#define GPIO_ID_OUT_W1TS 0x00000001
64895 +#define GPIO_ID_OUT_W1TC 0x00000002
64896 +#define GPIO_ID_ENABLE 0x00000003
64897 +#define GPIO_ID_ENABLE_W1TS 0x00000004
64898 +#define GPIO_ID_ENABLE_W1TC 0x00000005
64899 +#define GPIO_ID_IN 0x00000006
64900 +#define GPIO_ID_STATUS 0x00000007
64901 +#define GPIO_ID_STATUS_W1TS 0x00000008
64902 +#define GPIO_ID_STATUS_W1TC 0x00000009
64903 +#define GPIO_ID_PIN0 0x0000000a
64904 +#define GPIO_ID_PIN(n) (GPIO_ID_PIN0+(n))
64905 +
64906 +#define GPIO_LAST_REGISTER_ID GPIO_ID_PIN(17)
64907 +#define GPIO_ID_NONE 0xffffffff
64908 Index: linux-2.6.28/drivers/ar6000/include/hif.h
64909 ===================================================================
64910 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
64911 +++ linux-2.6.28/drivers/ar6000/include/hif.h 2009-01-02 00:01:56.000000000 +0100
64912 @@ -0,0 +1,296 @@
64913 +/*
64914 + * Copyright (c) 2004-2007 Atheros Communications Inc.
64915 + * All rights reserved.
64916 + *
64917 + *
64918 + * This program is free software; you can redistribute it and/or modify
64919 + * it under the terms of the GNU General Public License version 2 as
64920 + * published by the Free Software Foundation;
64921 + *
64922 + * Software distributed under the License is distributed on an "AS
64923 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
64924 + * implied. See the License for the specific language governing
64925 + * rights and limitations under the License.
64926 + *
64927 + *
64928 + *
64929 + * HIF specific declarations and prototypes
64930 + */
64931 +
64932 +#ifndef _HIF_H_
64933 +#define _HIF_H_
64934 +
64935 +#ifdef __cplusplus
64936 +extern "C" {
64937 +#endif /* __cplusplus */
64938 +
64939 +/* Header files */
64940 +#include "a_config.h"
64941 +#include "athdefs.h"
64942 +#include "a_types.h"
64943 +#include "a_osapi.h"
64944 +
64945 +typedef struct htc_callbacks HTC_CALLBACKS;
64946 +typedef struct hif_device HIF_DEVICE;
64947 +
64948 +/*
64949 + * direction - Direction of transfer (HIF_READ/HIF_WRITE).
64950 + */
64951 +#define HIF_READ 0x00000001
64952 +#define HIF_WRITE 0x00000002
64953 +#define HIF_DIR_MASK (HIF_READ | HIF_WRITE)
64954 +
64955 +/*
64956 + * type - An interface may support different kind of read/write commands.
64957 + * The command type is divided into a basic and an extended command
64958 + * and can be specified using HIF_BASIC_IO/HIF_EXTENDED_IO.
64959 + */
64960 +#define HIF_BASIC_IO 0x00000004
64961 +#define HIF_EXTENDED_IO 0x00000008
64962 +#define HIF_TYPE_MASK (HIF_BASIC_IO | HIF_EXTENDED_IO)
64963 +
64964 +/*
64965 + * emode - This indicates the whether the command is to be executed in a
64966 + * blocking or non-blocking fashion (HIF_SYNCHRONOUS/
64967 + * HIF_ASYNCHRONOUS). The read/write data paths in HTC have been
64968 + * implemented using the asynchronous mode allowing the the bus
64969 + * driver to indicate the completion of operation through the
64970 + * registered callback routine. The requirement primarily comes
64971 + * from the contexts these operations get called from (a driver's
64972 + * transmit context or the ISR context in case of receive).
64973 + * Support for both of these modes is essential.
64974 + */
64975 +#define HIF_SYNCHRONOUS 0x00000010
64976 +#define HIF_ASYNCHRONOUS 0x00000020
64977 +#define HIF_EMODE_MASK (HIF_SYNCHRONOUS | HIF_ASYNCHRONOUS)
64978 +
64979 +/*
64980 + * dmode - An interface may support different kinds of commands based on
64981 + * the tradeoff between the amount of data it can carry and the
64982 + * setup time. Byte and Block modes are supported (HIF_BYTE_BASIS/
64983 + * HIF_BLOCK_BASIS). In case of latter, the data is rounded off
64984 + * to the nearest block size by padding. The size of the block is
64985 + * configurable at compile time using the HIF_BLOCK_SIZE and is
64986 + * negotiated with the target during initialization after the
64987 + * dragon interrupts are enabled.
64988 + */
64989 +#define HIF_BYTE_BASIS 0x00000040
64990 +#define HIF_BLOCK_BASIS 0x00000080
64991 +#define HIF_DMODE_MASK (HIF_BYTE_BASIS | HIF_BLOCK_BASIS)
64992 +
64993 +/*
64994 + * amode - This indicates if the address has to be incremented on dragon
64995 + * after every read/write operation (HIF?FIXED_ADDRESS/
64996 + * HIF_INCREMENTAL_ADDRESS).
64997 + */
64998 +#define HIF_FIXED_ADDRESS 0x00000100
64999 +#define HIF_INCREMENTAL_ADDRESS 0x00000200
65000 +#define HIF_AMODE_MASK (HIF_FIXED_ADDRESS | HIF_INCREMENTAL_ADDRESS)
65001 +
65002 +#define HIF_WR_ASYNC_BYTE_FIX \
65003 + (HIF_WRITE | HIF_ASYNCHRONOUS | HIF_EXTENDED_IO | HIF_BYTE_BASIS | HIF_FIXED_ADDRESS)
65004 +#define HIF_WR_ASYNC_BYTE_INC \
65005 + (HIF_WRITE | HIF_ASYNCHRONOUS | HIF_EXTENDED_IO | HIF_BYTE_BASIS | HIF_INCREMENTAL_ADDRESS)
65006 +#define HIF_WR_ASYNC_BLOCK_INC \
65007 + (HIF_WRITE | HIF_ASYNCHRONOUS | HIF_EXTENDED_IO | HIF_BLOCK_BASIS | HIF_INCREMENTAL_ADDRESS)
65008 +#define HIF_WR_SYNC_BYTE_FIX \
65009 + (HIF_WRITE | HIF_SYNCHRONOUS | HIF_EXTENDED_IO | HIF_BYTE_BASIS | HIF_FIXED_ADDRESS)
65010 +#define HIF_WR_SYNC_BYTE_INC \
65011 + (HIF_WRITE | HIF_SYNCHRONOUS | HIF_EXTENDED_IO | HIF_BYTE_BASIS | HIF_INCREMENTAL_ADDRESS)
65012 +#define HIF_WR_SYNC_BLOCK_INC \
65013 + (HIF_WRITE | HIF_SYNCHRONOUS | HIF_EXTENDED_IO | HIF_BLOCK_BASIS | HIF_INCREMENTAL_ADDRESS)
65014 +#define HIF_RD_SYNC_BYTE_INC \
65015 + (HIF_READ | HIF_SYNCHRONOUS | HIF_EXTENDED_IO | HIF_BYTE_BASIS | HIF_INCREMENTAL_ADDRESS)
65016 +#define HIF_RD_SYNC_BYTE_FIX \
65017 + (HIF_READ | HIF_SYNCHRONOUS | HIF_EXTENDED_IO | HIF_BYTE_BASIS | HIF_FIXED_ADDRESS)
65018 +#define HIF_RD_ASYNC_BYTE_FIX \
65019 + (HIF_READ | HIF_ASYNCHRONOUS | HIF_EXTENDED_IO | HIF_BYTE_BASIS | HIF_FIXED_ADDRESS)
65020 +#define HIF_RD_ASYNC_BLOCK_FIX \
65021 + (HIF_READ | HIF_ASYNCHRONOUS | HIF_EXTENDED_IO | HIF_BLOCK_BASIS | HIF_FIXED_ADDRESS)
65022 +#define HIF_RD_ASYNC_BYTE_INC \
65023 + (HIF_READ | HIF_ASYNCHRONOUS | HIF_EXTENDED_IO | HIF_BYTE_BASIS | HIF_INCREMENTAL_ADDRESS)
65024 +#define HIF_RD_ASYNC_BLOCK_INC \
65025 + (HIF_READ | HIF_ASYNCHRONOUS | HIF_EXTENDED_IO | HIF_BLOCK_BASIS | HIF_INCREMENTAL_ADDRESS)
65026 +#define HIF_RD_SYNC_BLOCK_INC \
65027 + (HIF_READ | HIF_SYNCHRONOUS | HIF_EXTENDED_IO | HIF_BLOCK_BASIS | HIF_INCREMENTAL_ADDRESS)
65028 +
65029 +
65030 +typedef enum {
65031 + HIF_DEVICE_POWER_STATE = 0,
65032 + HIF_DEVICE_GET_MBOX_BLOCK_SIZE,
65033 + HIF_DEVICE_GET_MBOX_ADDR,
65034 + HIF_DEVICE_GET_PENDING_EVENTS_FUNC,
65035 + HIF_DEVICE_GET_IRQ_PROC_MODE,
65036 + HIF_DEVICE_GET_RECV_EVENT_MASK_UNMASK_FUNC,
65037 +} HIF_DEVICE_CONFIG_OPCODE;
65038 +
65039 +/*
65040 + * HIF CONFIGURE definitions:
65041 + *
65042 + * HIF_DEVICE_GET_MBOX_BLOCK_SIZE
65043 + * input : none
65044 + * output : array of 4 A_UINT32s
65045 + * notes: block size is returned for each mailbox (4)
65046 + *
65047 + * HIF_DEVICE_GET_MBOX_ADDR
65048 + * input : none
65049 + * output : array of 4 A_UINT32
65050 + * notes: address is returned for each mailbox (4) in the array
65051 + *
65052 + * HIF_DEVICE_GET_PENDING_EVENTS_FUNC
65053 + * input : none
65054 + * output: HIF_PENDING_EVENTS_FUNC function pointer
65055 + * notes: this is optional for the HIF layer, if the request is
65056 + * not handled then it indicates that the upper layer can use
65057 + * the standard device methods to get pending events (IRQs, mailbox messages etc..)
65058 + * otherwise it can call the function pointer to check pending events.
65059 + *
65060 + * HIF_DEVICE_GET_IRQ_PROC_MODE
65061 + * input : none
65062 + * output : HIF_DEVICE_IRQ_PROCESSING_MODE (interrupt processing mode)
65063 + * note: the hif layer interfaces with the underlying OS-specific bus driver. The HIF
65064 + * layer can report whether IRQ processing is requires synchronous behavior or
65065 + * can be processed using asynchronous bus requests (typically faster).
65066 + *
65067 + * HIF_DEVICE_GET_RECV_EVENT_MASK_UNMASK_FUNC
65068 + * input :
65069 + * output : HIF_MASK_UNMASK_RECV_EVENT function pointer
65070 + * notes: this is optional for the HIF layer. The HIF layer may require a special mechanism
65071 + * to mask receive message events. The upper layer can call this pointer when it needs
65072 + * to mask/unmask receive events (in case it runs out of buffers).
65073 + *
65074 + *
65075 + */
65076 +
65077 +typedef enum {
65078 + HIF_DEVICE_IRQ_SYNC_ONLY, /* for HIF implementations that require the DSR to process all
65079 + interrupts before returning */
65080 + HIF_DEVICE_IRQ_ASYNC_SYNC, /* for HIF implementations that allow DSR to process interrupts
65081 + using ASYNC I/O (that is HIFAckInterrupt can be called at a
65082 + later time */
65083 +} HIF_DEVICE_IRQ_PROCESSING_MODE;
65084 +
65085 +#define HIF_MAX_DEVICES 1
65086 +
65087 +struct htc_callbacks {
65088 + A_UCHAR *name;
65089 + A_UINT32 id;
65090 + A_STATUS (* deviceInsertedHandler)(void *hif_handle);
65091 + A_STATUS (* deviceRemovedHandler)(void *htc_handle, A_STATUS status);
65092 + A_STATUS (* deviceSuspendHandler)(void *htc_handle);
65093 + A_STATUS (* deviceResumeHandler)(void *htc_handle);
65094 + A_STATUS (* deviceWakeupHandler)(void *htc_handle);
65095 + A_STATUS (* rwCompletionHandler)(void *context, A_STATUS status);
65096 + A_STATUS (* dsrHandler)(void *htc_handle);
65097 +};
65098 +
65099 +
65100 +#define HIF_OTHER_EVENTS (1 << 0) /* other interrupts (non-Recv) are pending, host
65101 + needs to read the register table to figure out what */
65102 +#define HIF_RECV_MSG_AVAIL (1 << 1) /* pending recv packet */
65103 +
65104 +typedef struct _HIF_PENDING_EVENTS_INFO {
65105 + A_UINT32 Events;
65106 + A_UINT32 LookAhead;
65107 +} HIF_PENDING_EVENTS_INFO;
65108 +
65109 + /* function to get pending events , some HIF modules use special mechanisms
65110 + * to detect packet available and other interrupts */
65111 +typedef A_STATUS ( *HIF_PENDING_EVENTS_FUNC)(HIF_DEVICE *device,
65112 + HIF_PENDING_EVENTS_INFO *pEvents,
65113 + void *AsyncContext);
65114 +
65115 +#define HIF_MASK_RECV TRUE
65116 +#define HIF_UNMASK_RECV FALSE
65117 + /* function to mask recv events */
65118 +typedef A_STATUS ( *HIF_MASK_UNMASK_RECV_EVENT)(HIF_DEVICE *device,
65119 + A_BOOL Mask,
65120 + void *AsyncContext);
65121 +
65122 +
65123 +/*
65124 + * This API is used by the HTC layer to initialize the HIF layer and to
65125 + * register different callback routines. Support for following events has
65126 + * been captured - DSR, Read/Write completion, Device insertion/removal,
65127 + * Device suspension/resumption/wakeup. In addition to this, the API is
65128 + * also used to register the name and the revision of the chip. The latter
65129 + * can be used to verify the revision of the chip read from the device
65130 + * before reporting it to HTC.
65131 + */
65132 +int HIFInit(HTC_CALLBACKS *callbacks);
65133 +
65134 +/*
65135 + * This API is used to provide the read/write interface over the specific bus
65136 + * interface.
65137 + * address - Starting address in the dragon's address space. For mailbox
65138 + * writes, it refers to the start of the mbox boundary. It should
65139 + * be ensured that the last byte falls on the mailbox's EOM. For
65140 + * mailbox reads, it refers to the end of the mbox boundary.
65141 + * buffer - Pointer to the buffer containg the data to be transmitted or
65142 + * received.
65143 + * length - Amount of data to be transmitted or received.
65144 + * request - Characterizes the attributes of the command.
65145 + */
65146 +A_STATUS
65147 +HIFReadWrite(HIF_DEVICE *device,
65148 + A_UINT32 address,
65149 + A_UCHAR *buffer,
65150 + A_UINT32 length,
65151 + A_UINT32 request,
65152 + void *context);
65153 +
65154 +/*
65155 + * This can be initiated from the unload driver context ie when the HTCShutdown
65156 + * routine is called.
65157 + */
65158 +void HIFShutDownDevice(HIF_DEVICE *device);
65159 +
65160 +/*
65161 + * This should translate to an acknowledgment to the bus driver indicating that
65162 + * the previous interrupt request has been serviced and the all the relevant
65163 + * sources have been cleared. HTC is ready to process more interrupts.
65164 + * This should prevent the bus driver from raising an interrupt unless the
65165 + * previous one has been serviced and acknowledged using the previous API.
65166 + */
65167 +void HIFAckInterrupt(HIF_DEVICE *device);
65168 +
65169 +void HIFMaskInterrupt(HIF_DEVICE *device);
65170 +
65171 +void HIFUnMaskInterrupt(HIF_DEVICE *device);
65172 +
65173 +/*
65174 + * This set of functions are to be used by the bus driver to notify
65175 + * the HIF module about various events.
65176 + * These are not implemented if the bus driver provides an alternative
65177 + * way for this notification though callbacks for instance.
65178 + */
65179 +int HIFInsertEventNotify(void);
65180 +
65181 +int HIFRemoveEventNotify(void);
65182 +
65183 +int HIFIRQEventNotify(void);
65184 +
65185 +int HIFRWCompleteEventNotify(void);
65186 +
65187 +/*
65188 + * This function associates a opaque handle with the HIF layer
65189 + * to be used in communication with upper layer i.e. HTC.
65190 + * This would normaly be a pointer to htc_target data structure.
65191 + */
65192 +void HIFSetHandle(void *hif_handle, void *handle);
65193 +
65194 +A_STATUS
65195 +HIFConfigureDevice(HIF_DEVICE *device, HIF_DEVICE_CONFIG_OPCODE opcode,
65196 + void *config, A_UINT32 configLen);
65197 +
65198 +
65199 +struct device;
65200 +struct device*
65201 +HIFGetOSDevice(HIF_DEVICE *device);
65202 +
65203 +
65204 +#ifdef __cplusplus
65205 +}
65206 +#endif
65207 +
65208 +#endif /* _HIF_H_ */
65209 Index: linux-2.6.28/drivers/ar6000/include/host_version.h
65210 ===================================================================
65211 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
65212 +++ linux-2.6.28/drivers/ar6000/include/host_version.h 2009-01-02 00:01:56.000000000 +0100
65213 @@ -0,0 +1,49 @@
65214 +#ifndef _HOST_VERSION_H_
65215 +#define _HOST_VERSION_H_
65216 +/*
65217 + * Copyright (c) 2004-2005 Atheros Communications Inc.
65218 + * All rights reserved.
65219 + *
65220 + * This file contains version information for the sample host driver for the
65221 + * AR6000 chip
65222 + *
65223 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/host_version.h#2 $
65224 + *
65225 + *
65226 + * This program is free software; you can redistribute it and/or modify
65227 + * it under the terms of the GNU General Public License version 2 as
65228 + * published by the Free Software Foundation;
65229 + *
65230 + * Software distributed under the License is distributed on an "AS
65231 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
65232 + * implied. See the License for the specific language governing
65233 + * rights and limitations under the License.
65234 + *
65235 + *
65236 + *
65237 + */
65238 +
65239 +#ifdef __cplusplus
65240 +extern "C" {
65241 +#endif
65242 +
65243 +#include <AR6K_version.h>
65244 +
65245 +/*
65246 + * The version number is made up of major, minor, patch and build
65247 + * numbers. These are 16 bit numbers. The build and release script will
65248 + * set the build number using a Perforce counter. Here the build number is
65249 + * set to 9999 so that builds done without the build-release script are easily
65250 + * identifiable.
65251 + */
65252 +
65253 +#define ATH_SW_VER_MAJOR __VER_MAJOR_
65254 +#define ATH_SW_VER_MINOR __VER_MINOR_
65255 +#define ATH_SW_VER_PATCH __VER_PATCH_
65256 +#define ATH_SW_VER_BUILD 9999
65257 +
65258 +#ifdef __cplusplus
65259 +}
65260 +#endif
65261 +
65262 +#endif /* _HOST_VERSION_H_ */
65263 Index: linux-2.6.28/drivers/ar6000/include/htc_api.h
65264 ===================================================================
65265 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
65266 +++ linux-2.6.28/drivers/ar6000/include/htc_api.h 2009-01-02 00:01:56.000000000 +0100
65267 @@ -0,0 +1,436 @@
65268 +/*
65269 + *
65270 + * Copyright (c) 2007 Atheros Communications Inc.
65271 + * All rights reserved.
65272 + *
65273 + *
65274 + * This program is free software; you can redistribute it and/or modify
65275 + * it under the terms of the GNU General Public License version 2 as
65276 + * published by the Free Software Foundation;
65277 + *
65278 + * Software distributed under the License is distributed on an "AS
65279 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
65280 + * implied. See the License for the specific language governing
65281 + * rights and limitations under the License.
65282 + *
65283 + *
65284 + *
65285 + */
65286 +
65287 +#ifndef _HTC_API_H_
65288 +#define _HTC_API_H_
65289 +
65290 +#include <htc.h>
65291 +#include <htc_services.h>
65292 +#include "htc_packet.h"
65293 +
65294 +#ifdef __cplusplus
65295 +extern "C" {
65296 +#endif /* __cplusplus */
65297 +
65298 +/* TODO.. for BMI */
65299 +#define ENDPOINT1 0
65300 +// TODO -remove me, but we have to fix BMI first
65301 +#define HTC_MAILBOX_NUM_MAX 4
65302 +
65303 +
65304 +/* ------ Endpoint IDS ------ */
65305 +typedef enum
65306 +{
65307 + ENDPOINT_UNUSED = -1,
65308 + ENDPOINT_0 = 0,
65309 + ENDPOINT_1 = 1,
65310 + ENDPOINT_2 = 2,
65311 + ENDPOINT_3,
65312 + ENDPOINT_4,
65313 + ENDPOINT_5,
65314 + ENDPOINT_6,
65315 + ENDPOINT_7,
65316 + ENDPOINT_8,
65317 + ENDPOINT_MAX,
65318 +} HTC_ENDPOINT_ID;
65319 +
65320 +/* this is the amount of header room required by users of HTC */
65321 +#define HTC_HEADER_LEN HTC_HDR_LENGTH
65322 +
65323 +typedef void *HTC_HANDLE;
65324 +
65325 +typedef A_UINT16 HTC_SERVICE_ID;
65326 +
65327 +typedef struct _HTC_INIT_INFO {
65328 + void (*AddInstance)(HTC_HANDLE);
65329 + void (*DeleteInstance)(void *Instance);
65330 + void (*TargetFailure)(void *Instance, A_STATUS Status);
65331 +} HTC_INIT_INFO;
65332 +
65333 +/* per service connection send completion */
65334 +typedef void (*HTC_EP_SEND_PKT_COMPLETE)(void *,HTC_PACKET *);
65335 +/* per service connection pkt received */
65336 +typedef void (*HTC_EP_RECV_PKT)(void *,HTC_PACKET *);
65337 +
65338 +/* Optional per service connection receive buffer re-fill callback,
65339 + * On some OSes (like Linux) packets are allocated from a global pool and indicated up
65340 + * to the network stack. The driver never gets the packets back from the OS. For these OSes
65341 + * a refill callback can be used to allocate and re-queue buffers into HTC.
65342 + *
65343 + * On other OSes, the network stack can call into the driver's OS-specifc "return_packet" handler and
65344 + * the driver can re-queue these buffers into HTC. In this regard a refill callback is
65345 + * unnecessary */
65346 +typedef void (*HTC_EP_RECV_REFILL)(void *, HTC_ENDPOINT_ID Endpoint);
65347 +
65348 +/* Optional per service connection callback when a send queue is full. This can occur if the
65349 + * host continues queueing up TX packets faster than credits can arrive
65350 + * To prevent the host (on some Oses like Linux) from continuously queueing packets
65351 + * and consuming resources, this callback is provided so that that the host
65352 + * can disable TX in the subsystem (i.e. network stack)
65353 + * Other OSes require a "per-packet" indication_RAW_STREAM_NUM_MAX for each completed TX packet, this
65354 + * closed loop mechanism will prevent the network stack from overunning the NIC */
65355 +typedef void (*HTC_EP_SEND_QUEUE_FULL)(void *, HTC_ENDPOINT_ID Endpoint);
65356 +
65357 +typedef struct _HTC_EP_CALLBACKS {
65358 + void *pContext; /* context for each callback */
65359 + HTC_EP_SEND_PKT_COMPLETE EpTxComplete; /* tx completion callback for connected endpoint */
65360 + HTC_EP_RECV_PKT EpRecv; /* receive callback for connected endpoint */
65361 + HTC_EP_RECV_REFILL EpRecvRefill; /* OPTIONAL receive re-fill callback for connected endpoint */
65362 + HTC_EP_SEND_QUEUE_FULL EpSendFull; /* OPTIONAL send full callback */
65363 +} HTC_EP_CALLBACKS;
65364 +
65365 +/* service connection information */
65366 +typedef struct _HTC_SERVICE_CONNECT_REQ {
65367 + HTC_SERVICE_ID ServiceID; /* service ID to connect to */
65368 + A_UINT16 ConnectionFlags; /* connection flags, see htc protocol definition */
65369 + A_UINT8 *pMetaData; /* ptr to optional service-specific meta-data */
65370 + A_UINT8 MetaDataLength; /* optional meta data length */
65371 + HTC_EP_CALLBACKS EpCallbacks; /* endpoint callbacks */
65372 + int MaxSendQueueDepth; /* maximum depth of any send queue */
65373 +} HTC_SERVICE_CONNECT_REQ;
65374 +
65375 +/* service connection response information */
65376 +typedef struct _HTC_SERVICE_CONNECT_RESP {
65377 + A_UINT8 *pMetaData; /* caller supplied buffer to optional meta-data */
65378 + A_UINT8 BufferLength; /* length of caller supplied buffer */
65379 + A_UINT8 ActualLength; /* actual length of meta data */
65380 + HTC_ENDPOINT_ID Endpoint; /* endpoint to communicate over */
65381 + int MaxMsgLength; /* max length of all messages over this endpoint */
65382 + A_UINT8 ConnectRespCode; /* connect response code from target */
65383 +} HTC_SERVICE_CONNECT_RESP;
65384 +
65385 +/* endpoint distribution structure */
65386 +typedef struct _HTC_ENDPOINT_CREDIT_DIST {
65387 + struct _HTC_ENDPOINT_CREDIT_DIST *pNext;
65388 + struct _HTC_ENDPOINT_CREDIT_DIST *pPrev;
65389 + HTC_SERVICE_ID ServiceID; /* Service ID (set by HTC) */
65390 + HTC_ENDPOINT_ID Endpoint; /* endpoint for this distribution struct (set by HTC) */
65391 + A_UINT32 DistFlags; /* distribution flags, distribution function can
65392 + set default activity using SET_EP_ACTIVE() macro */
65393 + int TxCreditsNorm; /* credits for normal operation, anything above this
65394 + indicates the endpoint is over-subscribed, this field
65395 + is only relevant to the credit distribution function */
65396 + int TxCreditsMin; /* floor for credit distribution, this field is
65397 + only relevant to the credit distribution function */
65398 + int TxCreditsAssigned; /* number of credits assigned to this EP, this field
65399 + is only relevant to the credit dist function */
65400 + int TxCredits; /* current credits available, this field is used by
65401 + HTC to determine whether a message can be sent or
65402 + must be queued */
65403 + int TxCreditsToDist; /* pending credits to distribute on this endpoint, this
65404 + is set by HTC when credit reports arrive.
65405 + The credit distribution functions sets this to zero
65406 + when it distributes the credits */
65407 + int TxCreditsSeek; /* this is the number of credits that the current pending TX
65408 + packet needs to transmit. This is set by HTC when
65409 + and endpoint needs credits in order to transmit */
65410 + int TxCreditSize; /* size in bytes of each credit (set by HTC) */
65411 + int TxCreditsPerMaxMsg; /* credits required for a maximum sized messages (set by HTC) */
65412 + void *pHTCReserved; /* reserved for HTC use */
65413 +} HTC_ENDPOINT_CREDIT_DIST;
65414 +
65415 +#define HTC_EP_ACTIVE (1 << 31)
65416 +
65417 +/* macro to check if an endpoint has gone active, useful for credit
65418 + * distributions */
65419 +#define IS_EP_ACTIVE(epDist) ((epDist)->DistFlags & HTC_EP_ACTIVE)
65420 +#define SET_EP_ACTIVE(epDist) (epDist)->DistFlags |= HTC_EP_ACTIVE
65421 +
65422 + /* credit distibution code that is passed into the distrbution function,
65423 + * there are mandatory and optional codes that must be handled */
65424 +typedef enum _HTC_CREDIT_DIST_REASON {
65425 + HTC_CREDIT_DIST_SEND_COMPLETE = 0, /* credits available as a result of completed
65426 + send operations (MANDATORY) resulting in credit reports */
65427 + HTC_CREDIT_DIST_ACTIVITY_CHANGE = 1, /* a change in endpoint activity occured (OPTIONAL) */
65428 + HTC_CREDIT_DIST_SEEK_CREDITS, /* an endpoint needs to "seek" credits (OPTIONAL) */
65429 + HTC_DUMP_CREDIT_STATE /* for debugging, dump any state information that is kept by
65430 + the distribution function */
65431 +} HTC_CREDIT_DIST_REASON;
65432 +
65433 +typedef void (*HTC_CREDIT_DIST_CALLBACK)(void *Context,
65434 + HTC_ENDPOINT_CREDIT_DIST *pEPList,
65435 + HTC_CREDIT_DIST_REASON Reason);
65436 +
65437 +typedef void (*HTC_CREDIT_INIT_CALLBACK)(void *Context,
65438 + HTC_ENDPOINT_CREDIT_DIST *pEPList,
65439 + int TotalCredits);
65440 +
65441 + /* endpoint statistics action */
65442 +typedef enum _HTC_ENDPOINT_STAT_ACTION {
65443 + HTC_EP_STAT_SAMPLE = 0, /* only read statistics */
65444 + HTC_EP_STAT_SAMPLE_AND_CLEAR = 1, /* sample and immediately clear statistics */
65445 + HTC_EP_STAT_CLEAR /* clear only */
65446 +} HTC_ENDPOINT_STAT_ACTION;
65447 +
65448 + /* endpoint statistics */
65449 +typedef struct _HTC_ENDPOINT_STATS {
65450 + A_UINT32 TxCreditLowIndications; /* number of times the host set the credit-low flag in a send message on
65451 + this endpoint */
65452 + A_UINT32 TxIssued; /* running count of TX packets issued */
65453 + A_UINT32 TxCreditRpts; /* running count of total credit reports received for this endpoint */
65454 + A_UINT32 TxCreditRptsFromRx;
65455 + A_UINT32 TxCreditRptsFromOther;
65456 + A_UINT32 TxCreditRptsFromEp0;
65457 + A_UINT32 TxCreditsFromRx; /* count of credits received via Rx packets on this endpoint */
65458 + A_UINT32 TxCreditsFromOther; /* count of credits received via another endpoint */
65459 + A_UINT32 TxCreditsFromEp0; /* count of credits received via another endpoint */
65460 + A_UINT32 TxCreditsConsummed; /* count of consummed credits */
65461 + A_UINT32 TxCreditsReturned; /* count of credits returned */
65462 + A_UINT32 RxReceived; /* count of RX packets received */
65463 + A_UINT32 RxLookAheads; /* count of lookahead records
65464 + found in messages received on this endpoint */
65465 +} HTC_ENDPOINT_STATS;
65466 +
65467 +/* ------ Function Prototypes ------ */
65468 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65469 + @desc: Initialize HTC
65470 + @function name: HTCInit
65471 + @input: pInfo - initialization information
65472 + @output:
65473 + @return: A_OK on success
65474 + @notes: The caller initializes global HTC state and registers various instance
65475 + notification callbacks (see HTC_INIT_INFO).
65476 +
65477 + @example:
65478 + @see also: HTCShutdown
65479 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65480 +A_STATUS HTCInit(HTC_INIT_INFO *pInfo);
65481 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65482 + @desc: Get the underlying HIF device handle
65483 + @function name: HTCGetHifDevice
65484 + @input: HTCHandle - handle passed into the AddInstance callback
65485 + @output:
65486 + @return: opaque HIF device handle usable in HIF API calls.
65487 + @notes:
65488 + @example:
65489 + @see also:
65490 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65491 +void *HTCGetHifDevice(HTC_HANDLE HTCHandle);
65492 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65493 + @desc: Set the associated instance for the HTC handle
65494 + @function name: HTCSetInstance
65495 + @input: HTCHandle - handle passed into the AddInstance callback
65496 + Instance - caller supplied instance object
65497 + @output:
65498 + @return:
65499 + @notes: Caller must set the instance information for the HTC handle in order to receive
65500 + notifications for instance deletion (DeleteInstance callback is called) and for target
65501 + failure notification.
65502 + @example:
65503 + @see also:
65504 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65505 +void HTCSetInstance(HTC_HANDLE HTCHandle, void *Instance);
65506 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65507 + @desc: Set credit distribution parameters
65508 + @function name: HTCSetCreditDistribution
65509 + @input: HTCHandle - HTC handle
65510 + pCreditDistCont - caller supplied context to pass into distribution functions
65511 + CreditDistFunc - Distribution function callback
65512 + CreditDistInit - Credit Distribution initialization callback
65513 + ServicePriorityOrder - Array containing list of service IDs, lowest index is highest
65514 + priority
65515 + ListLength - number of elements in ServicePriorityOrder
65516 + @output:
65517 + @return:
65518 + @notes: The user can set a custom credit distribution function to handle special requirements
65519 + for each endpoint. A default credit distribution routine can be used by setting
65520 + CreditInitFunc to NULL. The default credit distribution is only provided for simple
65521 + "fair" credit distribution without regard to any prioritization.
65522 +
65523 + @example:
65524 + @see also:
65525 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65526 +void HTCSetCreditDistribution(HTC_HANDLE HTCHandle,
65527 + void *pCreditDistContext,
65528 + HTC_CREDIT_DIST_CALLBACK CreditDistFunc,
65529 + HTC_CREDIT_INIT_CALLBACK CreditInitFunc,
65530 + HTC_SERVICE_ID ServicePriorityOrder[],
65531 + int ListLength);
65532 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65533 + @desc: Wait for the target to indicate the HTC layer is ready
65534 + @function name: HTCWaitTarget
65535 + @input: HTCHandle - HTC handle
65536 + @output:
65537 + @return:
65538 + @notes: This API blocks until the target responds with an HTC ready message.
65539 + The caller should not connect services until the target has indicated it is
65540 + ready.
65541 + @example:
65542 + @see also: HTCConnectService
65543 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65544 +A_STATUS HTCWaitTarget(HTC_HANDLE HTCHandle);
65545 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65546 + @desc: Start target service communications
65547 + @function name: HTCStart
65548 + @input: HTCHandle - HTC handle
65549 + @output:
65550 + @return:
65551 + @notes: This API indicates to the target that the service connection phase is complete
65552 + and the target can freely start all connected services. This API should only be
65553 + called AFTER all service connections have been made. TCStart will issue a
65554 + SETUP_COMPLETE message to the target to indicate that all service connections
65555 + have been made and the target can start communicating over the endpoints.
65556 + @example:
65557 + @see also: HTCConnectService
65558 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65559 +A_STATUS HTCStart(HTC_HANDLE HTCHandle);
65560 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65561 + @desc: Add receive packet to HTC
65562 + @function name: HTCAddReceivePkt
65563 + @input: HTCHandle - HTC handle
65564 + pPacket - HTC receive packet to add
65565 + @output:
65566 + @return: A_OK on success
65567 + @notes: user must supply HTC packets for capturing incomming HTC frames. The caller
65568 + must initialize each HTC packet using the SET_HTC_PACKET_INFO_RX_REFILL()
65569 + macro.
65570 + @example:
65571 + @see also:
65572 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65573 +A_STATUS HTCAddReceivePkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket);
65574 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65575 + @desc: Connect to an HTC service
65576 + @function name: HTCConnectService
65577 + @input: HTCHandle - HTC handle
65578 + pReq - connection details
65579 + @output: pResp - connection response
65580 + @return:
65581 + @notes: Service connections must be performed before HTCStart. User provides callback handlers
65582 + for various endpoint events.
65583 + @example:
65584 + @see also: HTCStart
65585 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65586 +A_STATUS HTCConnectService(HTC_HANDLE HTCHandle,
65587 + HTC_SERVICE_CONNECT_REQ *pReq,
65588 + HTC_SERVICE_CONNECT_RESP *pResp);
65589 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65590 + @desc: Send an HTC packet
65591 + @function name: HTCSendPkt
65592 + @input: HTCHandle - HTC handle
65593 + pPacket - packet to send
65594 + @output:
65595 + @return: A_OK
65596 + @notes: Caller must initialize packet using SET_HTC_PACKET_INFO_TX() macro.
65597 + This interface is fully asynchronous. On error, HTC SendPkt will
65598 + call the registered Endpoint callback to cleanup the packet.
65599 + @example:
65600 + @see also: HTCFlushEndpoint
65601 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65602 +A_STATUS HTCSendPkt(HTC_HANDLE HTCHandle, HTC_PACKET *pPacket);
65603 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65604 + @desc: Stop HTC service communications
65605 + @function name: HTCStop
65606 + @input: HTCHandle - HTC handle
65607 + @output:
65608 + @return:
65609 + @notes: HTC communications is halted. All receive and pending TX packets will
65610 + be flushed.
65611 + @example:
65612 + @see also:
65613 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65614 +void HTCStop(HTC_HANDLE HTCHandle);
65615 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65616 + @desc: Shutdown HTC
65617 + @function name: HTCShutdown
65618 + @input:
65619 + @output:
65620 + @return:
65621 + @notes: This cleans up all resources allocated by HTCInit().
65622 + @example:
65623 + @see also: HTCInit
65624 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65625 +void HTCShutDown(void);
65626 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65627 + @desc: Flush pending TX packets
65628 + @function name: HTCFlushEndpoint
65629 + @input: HTCHandle - HTC handle
65630 + Endpoint - Endpoint to flush
65631 + Tag - flush tag
65632 + @output:
65633 + @return:
65634 + @notes: The Tag parameter is used to selectively flush packets with matching tags.
65635 + The value of 0 forces all packets to be flush regardless of tag.
65636 + @example:
65637 + @see also: HTCSendPkt
65638 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65639 +void HTCFlushEndpoint(HTC_HANDLE HTCHandle, HTC_ENDPOINT_ID Endpoint, HTC_TX_TAG Tag);
65640 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65641 + @desc: Dump credit distribution state
65642 + @function name: HTCDumpCreditStates
65643 + @input: HTCHandle - HTC handle
65644 + @output:
65645 + @return:
65646 + @notes: This dumps all credit distribution information to the debugger
65647 + @example:
65648 + @see also:
65649 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65650 +void HTCDumpCreditStates(HTC_HANDLE HTCHandle);
65651 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65652 + @desc: Indicate a traffic activity change on an endpoint
65653 + @function name: HTCIndicateActivityChange
65654 + @input: HTCHandle - HTC handle
65655 + Endpoint - endpoint in which activity has changed
65656 + Active - TRUE if active, FALSE if it has become inactive
65657 + @output:
65658 + @return:
65659 + @notes: This triggers the registered credit distribution function to
65660 + re-adjust credits for active/inactive endpoints.
65661 + @example:
65662 + @see also:
65663 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65664 +void HTCIndicateActivityChange(HTC_HANDLE HTCHandle,
65665 + HTC_ENDPOINT_ID Endpoint,
65666 + A_BOOL Active);
65667 +
65668 +/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
65669 + @desc: Get endpoint statistics
65670 + @function name: HTCGetEndpointStatistics
65671 + @input: HTCHandle - HTC handle
65672 + Endpoint - Endpoint identifier
65673 + Action - action to take with statistics
65674 + @output:
65675 + pStats - statistics that were sampled (can be NULL if Action is HTC_EP_STAT_CLEAR)
65676 +
65677 + @return: TRUE if statistics profiling is enabled, otherwise FALSE.
65678 +
65679 + @notes: Statistics is a compile-time option and this function may return FALSE
65680 + if HTC is not compiled with profiling.
65681 +
65682 + The caller can specify the statistic "action" to take when sampling
65683 + the statistics. This includes:
65684 +
65685 + HTC_EP_STAT_SAMPLE: The pStats structure is filled with the current values.
65686 + HTC_EP_STAT_SAMPLE_AND_CLEAR: The structure is filled and the current statistics
65687 + are cleared.
65688 + HTC_EP_STAT_CLEA : the statistics are cleared, the called can pass a NULL value for
65689 + pStats
65690 +
65691 + @example:
65692 + @see also:
65693 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
65694 +A_BOOL HTCGetEndpointStatistics(HTC_HANDLE HTCHandle,
65695 + HTC_ENDPOINT_ID Endpoint,
65696 + HTC_ENDPOINT_STAT_ACTION Action,
65697 + HTC_ENDPOINT_STATS *pStats);
65698 +
65699 +#ifdef __cplusplus
65700 +}
65701 +#endif
65702 +
65703 +#endif /* _HTC_API_H_ */
65704 Index: linux-2.6.28/drivers/ar6000/include/htc.h
65705 ===================================================================
65706 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
65707 +++ linux-2.6.28/drivers/ar6000/include/htc.h 2009-01-02 00:01:56.000000000 +0100
65708 @@ -0,0 +1,190 @@
65709 +/*
65710 + * Copyright (c) 2007 Atheros Communications Inc.
65711 + * All rights reserved.
65712 + *
65713 + * $ATH_LICENSE_HOSTSDK0_C$
65714 + *
65715 + */
65716 +
65717 +
65718 +#ifndef __HTC_H__
65719 +#define __HTC_H__
65720 +
65721 +#ifndef ATH_TARGET
65722 +#include "athstartpack.h"
65723 +#endif
65724 +
65725 +#define A_OFFSETOF(type,field) (int)(&(((type *)NULL)->field))
65726 +
65727 +#define ASSEMBLE_UNALIGNED_UINT16(p,highbyte,lowbyte) \
65728 + (((A_UINT16)(((A_UINT8 *)(p))[(highbyte)])) << 8 | (A_UINT16)(((A_UINT8 *)(p))[(lowbyte)]))
65729 +
65730 +/* alignment independent macros (little-endian) to fetch UINT16s or UINT8s from a
65731 + * structure using only the type and field name.
65732 + * Use these macros if there is the potential for unaligned buffer accesses. */
65733 +#define A_GET_UINT16_FIELD(p,type,field) \
65734 + ASSEMBLE_UNALIGNED_UINT16(p,\
65735 + A_OFFSETOF(type,field) + 1, \
65736 + A_OFFSETOF(type,field))
65737 +
65738 +#define A_SET_UINT16_FIELD(p,type,field,value) \
65739 +{ \
65740 + ((A_UINT8 *)(p))[A_OFFSETOF(type,field)] = (A_UINT8)(value); \
65741 + ((A_UINT8 *)(p))[A_OFFSETOF(type,field) + 1] = (A_UINT8)((value) >> 8); \
65742 +}
65743 +
65744 +#define A_GET_UINT8_FIELD(p,type,field) \
65745 + ((A_UINT8 *)(p))[A_OFFSETOF(type,field)]
65746 +
65747 +#define A_SET_UINT8_FIELD(p,type,field,value) \
65748 + ((A_UINT8 *)(p))[A_OFFSETOF(type,field)] = (value)
65749 +
65750 +/****** DANGER DANGER ***************
65751 + *
65752 + * The frame header length and message formats defined herein were
65753 + * selected to accommodate optimal alignment for target processing. This reduces code
65754 + * size and improves performance.
65755 + *
65756 + * Any changes to the header length may alter the alignment and cause exceptions
65757 + * on the target. When adding to the message structures insure that fields are
65758 + * properly aligned.
65759 + *
65760 + */
65761 +
65762 +/* HTC frame header */
65763 +typedef PREPACK struct _HTC_FRAME_HDR{
65764 + /* do not remove or re-arrange these fields, these are minimally required
65765 + * to take advantage of 4-byte lookaheads in some hardware implementations */
65766 + A_UINT8 EndpointID;
65767 + A_UINT8 Flags;
65768 + A_UINT16 PayloadLen; /* length of data (including trailer) that follows the header */
65769 +
65770 + /***** end of 4-byte lookahead ****/
65771 +
65772 + A_UINT8 ControlBytes[2];
65773 +
65774 + /* message payload starts after the header */
65775 +
65776 +} POSTPACK HTC_FRAME_HDR;
65777 +
65778 +/* frame header flags */
65779 +#define HTC_FLAGS_NEED_CREDIT_UPDATE (1 << 0)
65780 +#define HTC_FLAGS_RECV_TRAILER (1 << 1)
65781 +
65782 +
65783 +#define HTC_HDR_LENGTH (sizeof(HTC_FRAME_HDR))
65784 +#define HTC_MAX_TRAILER_LENGTH 255
65785 +#define HTC_MAX_PAYLOAD_LENGTH (2048 - sizeof(HTC_FRAME_HDR))
65786 +
65787 +/* HTC control message IDs */
65788 +typedef enum {
65789 + HTC_MSG_READY_ID = 1,
65790 + HTC_MSG_CONNECT_SERVICE_ID = 2,
65791 + HTC_MSG_CONNECT_SERVICE_RESPONSE_ID = 3,
65792 + HTC_MSG_SETUP_COMPLETE_ID = 4,
65793 +} HTC_MSG_IDS;
65794 +
65795 +#define HTC_MAX_CONTROL_MESSAGE_LENGTH 256
65796 +
65797 +/* base message ID header */
65798 +typedef PREPACK struct {
65799 + A_UINT16 MessageID;
65800 +} POSTPACK HTC_UNKNOWN_MSG;
65801 +
65802 +/* HTC ready message
65803 + * direction : target-to-host */
65804 +typedef PREPACK struct {
65805 + A_UINT16 MessageID; /* ID */
65806 + A_UINT16 CreditCount; /* number of credits the target can offer */
65807 + A_UINT16 CreditSize; /* size of each credit */
65808 + A_UINT8 MaxEndpoints; /* maximum number of endpoints the target has resources for */
65809 + A_UINT8 _Pad1;
65810 +} POSTPACK HTC_READY_MSG;
65811 +
65812 +#define HTC_SERVICE_META_DATA_MAX_LENGTH 128
65813 +
65814 +/* connect service
65815 + * direction : host-to-target */
65816 +typedef PREPACK struct {
65817 + A_UINT16 MessageID;
65818 + A_UINT16 ServiceID; /* service ID of the service to connect to */
65819 + A_UINT16 ConnectionFlags; /* connection flags */
65820 +
65821 +#define HTC_CONNECT_FLAGS_REDUCE_CREDIT_DRIBBLE (1 << 2) /* reduce credit dribbling when
65822 + the host needs credits */
65823 +#define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_MASK (0x3)
65824 +#define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_ONE_FOURTH 0x0
65825 +#define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_ONE_HALF 0x1
65826 +#define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_THREE_FOURTHS 0x2
65827 +#define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_UNITY 0x3
65828 +
65829 + A_UINT8 ServiceMetaLength; /* length of meta data that follows */
65830 + A_UINT8 _Pad1;
65831 +
65832 + /* service-specific meta data starts after the header */
65833 +
65834 +} POSTPACK HTC_CONNECT_SERVICE_MSG;
65835 +
65836 +/* connect response
65837 + * direction : target-to-host */
65838 +typedef PREPACK struct {
65839 + A_UINT16 MessageID;
65840 + A_UINT16 ServiceID; /* service ID that the connection request was made */
65841 + A_UINT8 Status; /* service connection status */
65842 + A_UINT8 EndpointID; /* assigned endpoint ID */
65843 + A_UINT16 MaxMsgSize; /* maximum expected message size on this endpoint */
65844 + A_UINT8 ServiceMetaLength; /* length of meta data that follows */
65845 + A_UINT8 _Pad1;
65846 +
65847 + /* service-specific meta data starts after the header */
65848 +
65849 +} POSTPACK HTC_CONNECT_SERVICE_RESPONSE_MSG;
65850 +
65851 +typedef PREPACK struct {
65852 + A_UINT16 MessageID;
65853 + /* currently, no other fields */
65854 +} POSTPACK HTC_SETUP_COMPLETE_MSG;
65855 +
65856 +
65857 +/* connect response status codes */
65858 +#define HTC_SERVICE_SUCCESS 0 /* success */
65859 +#define HTC_SERVICE_NOT_FOUND 1 /* service could not be found */
65860 +#define HTC_SERVICE_FAILED 2 /* specific service failed the connect */
65861 +#define HTC_SERVICE_NO_RESOURCES 3 /* no resources (i.e. no more endpoints) */
65862 +#define HTC_SERVICE_NO_MORE_EP 4 /* specific service is not allowing any more
65863 + endpoints */
65864 +
65865 +/* report record IDs */
65866 +typedef enum {
65867 + HTC_RECORD_NULL = 0,
65868 + HTC_RECORD_CREDITS = 1,
65869 + HTC_RECORD_LOOKAHEAD = 2,
65870 +} HTC_RPT_IDS;
65871 +
65872 +typedef PREPACK struct {
65873 + A_UINT8 RecordID; /* Record ID */
65874 + A_UINT8 Length; /* Length of record */
65875 +} POSTPACK HTC_RECORD_HDR;
65876 +
65877 +typedef PREPACK struct {
65878 + A_UINT8 EndpointID; /* Endpoint that owns these credits */
65879 + A_UINT8 Credits; /* credits to report since last report */
65880 +} POSTPACK HTC_CREDIT_REPORT;
65881 +
65882 +typedef PREPACK struct {
65883 + A_UINT8 PreValid; /* pre valid guard */
65884 + A_UINT8 LookAhead[4]; /* 4 byte lookahead */
65885 + A_UINT8 PostValid; /* post valid guard */
65886 +
65887 + /* NOTE: the LookAhead array is guarded by a PreValid and Post Valid guard bytes.
65888 + * The PreValid bytes must equal the inverse of the PostValid byte */
65889 +
65890 +} POSTPACK HTC_LOOKAHEAD_REPORT;
65891 +
65892 +#ifndef ATH_TARGET
65893 +#include "athendpack.h"
65894 +#endif
65895 +
65896 +
65897 +#endif /* __HTC_H__ */
65898 +
65899 Index: linux-2.6.28/drivers/ar6000/include/htc_packet.h
65900 ===================================================================
65901 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
65902 +++ linux-2.6.28/drivers/ar6000/include/htc_packet.h 2009-01-02 00:01:56.000000000 +0100
65903 @@ -0,0 +1,138 @@
65904 +/*
65905 + *
65906 + * Copyright (c) 2007 Atheros Communications Inc.
65907 + * All rights reserved.
65908 + *
65909 + *
65910 + * This program is free software; you can redistribute it and/or modify
65911 + * it under the terms of the GNU General Public License version 2 as
65912 + * published by the Free Software Foundation;
65913 + *
65914 + * Software distributed under the License is distributed on an "AS
65915 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
65916 + * implied. See the License for the specific language governing
65917 + * rights and limitations under the License.
65918 + *
65919 + *
65920 + *
65921 + */
65922 +
65923 +#ifndef HTC_PACKET_H_
65924 +#define HTC_PACKET_H_
65925 +
65926 +
65927 +#include "dl_list.h"
65928 +
65929 +struct _HTC_PACKET;
65930 +
65931 +typedef void (* HTC_PACKET_COMPLETION)(void *,struct _HTC_PACKET *);
65932 +
65933 +typedef A_UINT16 HTC_TX_TAG;
65934 +
65935 +typedef struct _HTC_TX_PACKET_INFO {
65936 + HTC_TX_TAG Tag; /* tag used to selective flush packets */
65937 +} HTC_TX_PACKET_INFO;
65938 +
65939 +#define HTC_TX_PACKET_TAG_ALL 0 /* a tag of zero is reserved and used to flush ALL packets */
65940 +#define HTC_TX_PACKET_TAG_INTERNAL 1 /* internal tags start here */
65941 +#define HTC_TX_PACKET_TAG_USER_DEFINED (HTC_TX_PACKET_TAG_INTERNAL + 9) /* user-defined tags start here */
65942 +
65943 +typedef struct _HTC_RX_PACKET_INFO {
65944 + A_UINT32 Unused; /* for future use and to make compilers happy */
65945 +} HTC_RX_PACKET_INFO;
65946 +
65947 +/* wrapper around endpoint-specific packets */
65948 +typedef struct _HTC_PACKET {
65949 + DL_LIST ListLink; /* double link */
65950 + void *pPktContext; /* caller's per packet specific context */
65951 +
65952 + A_UINT8 *pBufferStart; /* the true buffer start , the caller can
65953 + store the real buffer start here. In
65954 + receive callbacks, the HTC layer sets pBuffer
65955 + to the start of the payload past the header. This
65956 + field allows the caller to reset pBuffer when it
65957 + recycles receive packets back to HTC */
65958 + /*
65959 + * Pointer to the start of the buffer. In the transmit
65960 + * direction this points to the start of the payload. In the
65961 + * receive direction, however, the buffer when queued up
65962 + * points to the start of the HTC header but when returned
65963 + * to the caller points to the start of the payload
65964 + */
65965 + A_UINT8 *pBuffer; /* payload start (RX/TX) */
65966 + A_UINT32 BufferLength; /* length of buffer */
65967 + A_UINT32 ActualLength; /* actual length of payload */
65968 + int Endpoint; /* endpoint that this packet was sent/recv'd from */
65969 + A_STATUS Status; /* completion status */
65970 + union {
65971 + HTC_TX_PACKET_INFO AsTx; /* Tx Packet specific info */
65972 + HTC_RX_PACKET_INFO AsRx; /* Rx Packet specific info */
65973 + } PktInfo;
65974 +
65975 + /* the following fields are for internal HTC use */
65976 + HTC_PACKET_COMPLETION Completion; /* completion */
65977 + void *pContext; /* HTC private completion context */
65978 + A_UINT32 HTCReserved; /* reserved */
65979 +} HTC_PACKET;
65980 +
65981 +
65982 +
65983 +#define COMPLETE_HTC_PACKET(p,status) \
65984 +{ \
65985 + (p)->Status = (status); \
65986 + (p)->Completion((p)->pContext,(p)); \
65987 +}
65988 +
65989 +#define INIT_HTC_PACKET_INFO(p,b,len) \
65990 +{ \
65991 + (p)->pBufferStart = (b); \
65992 + (p)->BufferLength = (len); \
65993 +}
65994 +
65995 +/* macro to set an initial RX packet for refilling HTC */
65996 +#define SET_HTC_PACKET_INFO_RX_REFILL(p,c,b,len,ep) \
65997 +{ \
65998 + (p)->pPktContext = (c); \
65999 + (p)->pBuffer = (b); \
66000 + (p)->pBufferStart = (b); \
66001 + (p)->BufferLength = (len); \
66002 + (p)->Endpoint = (ep); \
66003 +}
66004 +
66005 +/* fast macro to recycle an RX packet that will be re-queued to HTC */
66006 +#define HTC_PACKET_RESET_RX(p) \
66007 + (p)->pBuffer = (p)->pBufferStart
66008 +
66009 +/* macro to set packet parameters for TX */
66010 +#define SET_HTC_PACKET_INFO_TX(p,c,b,len,ep,tag) \
66011 +{ \
66012 + (p)->pPktContext = (c); \
66013 + (p)->pBuffer = (b); \
66014 + (p)->ActualLength = (len); \
66015 + (p)->Endpoint = (ep); \
66016 + (p)->PktInfo.AsTx.Tag = (tag); \
66017 +}
66018 +
66019 +/* HTC Packet Queueing Macros */
66020 +typedef DL_LIST HTC_PACKET_QUEUE;
66021 +/* initialize queue */
66022 +#define INIT_HTC_PACKET_QUEUE(pQ) DL_LIST_INIT((pQ))
66023 +/* enqueue HTC packet to the tail of the queue */
66024 +#define HTC_PACKET_ENQUEUE(pQ,p) DL_ListInsertTail((pQ),&(p)->ListLink)
66025 +/* test if a queue is empty */
66026 +#define HTC_QUEUE_EMPTY(pQ) DL_LIST_IS_EMPTY((pQ))
66027 +/* get packet at head without removing it */
66028 +#define HTC_GET_PKT_AT_HEAD(pQ) A_CONTAINING_STRUCT((DL_LIST_GET_ITEM_AT_HEAD(pQ)),HTC_PACKET,ListLink);
66029 +/* remove a packet from the current list it is linked to */
66030 +#define HTC_PACKET_REMOVE(p) DL_ListRemove(&(p)->ListLink)
66031 +
66032 +/* dequeue an HTC packet from the head of the queue */
66033 +static INLINE HTC_PACKET *HTC_PACKET_DEQUEUE(HTC_PACKET_QUEUE *queue) {
66034 + DL_LIST *pItem = DL_ListRemoveItemFromHead(queue);
66035 + if (pItem != NULL) {
66036 + return A_CONTAINING_STRUCT(pItem, HTC_PACKET, ListLink);
66037 + }
66038 + return NULL;
66039 +}
66040 +
66041 +#endif /*HTC_PACKET_H_*/
66042 Index: linux-2.6.28/drivers/ar6000/include/htc_services.h
66043 ===================================================================
66044 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66045 +++ linux-2.6.28/drivers/ar6000/include/htc_services.h 2009-01-02 00:01:56.000000000 +0100
66046 @@ -0,0 +1,37 @@
66047 +/*
66048 + * Copyright (c) 2007 Atheros Communications Inc.
66049 + * All rights reserved.
66050 + *
66051 + * $ATH_LICENSE_HOSTSDK0_C$
66052 + *
66053 + */
66054 +
66055 +#ifndef __HTC_SERVICES_H__
66056 +#define __HTC_SERVICES_H__
66057 +
66058 +/* Current service IDs */
66059 +
66060 +typedef enum {
66061 + RSVD_SERVICE_GROUP = 0,
66062 + WMI_SERVICE_GROUP = 1,
66063 +
66064 + HTC_TEST_GROUP = 254,
66065 + HTC_SERVICE_GROUP_LAST = 255
66066 +}HTC_SERVICE_GROUP_IDS;
66067 +
66068 +#define MAKE_SERVICE_ID(group,index) \
66069 + (int)(((int)group << 8) | (int)(index))
66070 +
66071 +/* NOTE: service ID of 0x0000 is reserved and should never be used */
66072 +#define HTC_CTRL_RSVD_SVC MAKE_SERVICE_ID(RSVD_SERVICE_GROUP,1)
66073 +#define WMI_CONTROL_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,0)
66074 +#define WMI_DATA_BE_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,1)
66075 +#define WMI_DATA_BK_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,2)
66076 +#define WMI_DATA_VI_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,3)
66077 +#define WMI_DATA_VO_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,4)
66078 +#define WMI_MAX_SERVICES 5
66079 +
66080 +/* raw stream service (i.e. flash, tcmd, calibration apps) */
66081 +#define HTC_RAW_STREAMS_SVC MAKE_SERVICE_ID(HTC_TEST_GROUP,0)
66082 +
66083 +#endif /*HTC_SERVICES_H_*/
66084 Index: linux-2.6.28/drivers/ar6000/include/ieee80211.h
66085 ===================================================================
66086 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66087 +++ linux-2.6.28/drivers/ar6000/include/ieee80211.h 2009-01-02 00:01:56.000000000 +0100
66088 @@ -0,0 +1,342 @@
66089 +/*-
66090 + * Copyright (c) 2001 Atsushi Onoe
66091 + * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting
66092 + * Copyright (c) 2006 Atheros Communications, Inc.
66093 + *
66094 + * Wireless Network driver for Atheros AR6001
66095 + * All rights reserved.
66096 + *
66097 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
66098 + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
66099 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
66100 + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
66101 + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
66102 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
66103 + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
66104 + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
66105 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
66106 + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
66107 + *
66108 + */
66109 +#ifndef _NET80211_IEEE80211_H_
66110 +#define _NET80211_IEEE80211_H_
66111 +
66112 +#include "athstartpack.h"
66113 +
66114 +/*
66115 + * 802.11 protocol definitions.
66116 + */
66117 +
66118 +#define IEEE80211_ADDR_LEN 6 /* size of 802.11 address */
66119 +/* is 802.11 address multicast/broadcast? */
66120 +#define IEEE80211_IS_MULTICAST(_a) (*(_a) & 0x01)
66121 +#define IEEE80211_ADDR_EQ(addr1, addr2) \
66122 + (A_MEMCMP(addr1, addr2, IEEE80211_ADDR_LEN) == 0)
66123 +
66124 +#define IEEE80211_KEYBUF_SIZE 16
66125 +#define IEEE80211_MICBUF_SIZE (8+8) /* space for both tx and rx */
66126 +
66127 +/*
66128 + * NB: these values are ordered carefully; there are lots of
66129 + * of implications in any reordering. In particular beware
66130 + * that 4 is not used to avoid conflicting with IEEE80211_F_PRIVACY.
66131 + */
66132 +#define IEEE80211_CIPHER_WEP 0
66133 +#define IEEE80211_CIPHER_TKIP 1
66134 +#define IEEE80211_CIPHER_AES_OCB 2
66135 +#define IEEE80211_CIPHER_AES_CCM 3
66136 +#define IEEE80211_CIPHER_CKIP 5
66137 +#define IEEE80211_CIPHER_CCKM_KRK 6
66138 +#define IEEE80211_CIPHER_NONE 7 /* pseudo value */
66139 +
66140 +#define IEEE80211_CIPHER_MAX (IEEE80211_CIPHER_NONE+1)
66141 +
66142 +#define IEEE80211_IS_VALID_WEP_CIPHER_LEN(len) \
66143 + (((len) == 5) || ((len) == 13) || ((len) == 16))
66144 +
66145 +
66146 +
66147 +/*
66148 + * generic definitions for IEEE 802.11 frames
66149 + */
66150 +PREPACK struct ieee80211_frame {
66151 + A_UINT8 i_fc[2];
66152 + A_UINT8 i_dur[2];
66153 + A_UINT8 i_addr1[IEEE80211_ADDR_LEN];
66154 + A_UINT8 i_addr2[IEEE80211_ADDR_LEN];
66155 + A_UINT8 i_addr3[IEEE80211_ADDR_LEN];
66156 + A_UINT8 i_seq[2];
66157 + /* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
66158 + /* see below */
66159 +} POSTPACK;
66160 +
66161 +#define IEEE80211_FC0_VERSION_MASK 0x03
66162 +#define IEEE80211_FC0_VERSION_SHIFT 0
66163 +#define IEEE80211_FC0_VERSION_0 0x00
66164 +#define IEEE80211_FC0_TYPE_MASK 0x0c
66165 +#define IEEE80211_FC0_TYPE_SHIFT 2
66166 +#define IEEE80211_FC0_TYPE_MGT 0x00
66167 +#define IEEE80211_FC0_TYPE_CTL 0x04
66168 +#define IEEE80211_FC0_TYPE_DATA 0x08
66169 +
66170 +#define IEEE80211_FC0_SUBTYPE_MASK 0xf0
66171 +#define IEEE80211_FC0_SUBTYPE_SHIFT 4
66172 +/* for TYPE_MGT */
66173 +#define IEEE80211_FC0_SUBTYPE_ASSOC_REQ 0x00
66174 +#define IEEE80211_FC0_SUBTYPE_ASSOC_RESP 0x10
66175 +#define IEEE80211_FC0_SUBTYPE_REASSOC_REQ 0x20
66176 +#define IEEE80211_FC0_SUBTYPE_REASSOC_RESP 0x30
66177 +#define IEEE80211_FC0_SUBTYPE_PROBE_REQ 0x40
66178 +#define IEEE80211_FC0_SUBTYPE_PROBE_RESP 0x50
66179 +#define IEEE80211_FC0_SUBTYPE_BEACON 0x80
66180 +#define IEEE80211_FC0_SUBTYPE_ATIM 0x90
66181 +#define IEEE80211_FC0_SUBTYPE_DISASSOC 0xa0
66182 +#define IEEE80211_FC0_SUBTYPE_AUTH 0xb0
66183 +#define IEEE80211_FC0_SUBTYPE_DEAUTH 0xc0
66184 +/* for TYPE_CTL */
66185 +#define IEEE80211_FC0_SUBTYPE_PS_POLL 0xa0
66186 +#define IEEE80211_FC0_SUBTYPE_RTS 0xb0
66187 +#define IEEE80211_FC0_SUBTYPE_CTS 0xc0
66188 +#define IEEE80211_FC0_SUBTYPE_ACK 0xd0
66189 +#define IEEE80211_FC0_SUBTYPE_CF_END 0xe0
66190 +#define IEEE80211_FC0_SUBTYPE_CF_END_ACK 0xf0
66191 +/* for TYPE_DATA (bit combination) */
66192 +#define IEEE80211_FC0_SUBTYPE_DATA 0x00
66193 +#define IEEE80211_FC0_SUBTYPE_CF_ACK 0x10
66194 +#define IEEE80211_FC0_SUBTYPE_CF_POLL 0x20
66195 +#define IEEE80211_FC0_SUBTYPE_CF_ACPL 0x30
66196 +#define IEEE80211_FC0_SUBTYPE_NODATA 0x40
66197 +#define IEEE80211_FC0_SUBTYPE_CFACK 0x50
66198 +#define IEEE80211_FC0_SUBTYPE_CFPOLL 0x60
66199 +#define IEEE80211_FC0_SUBTYPE_CF_ACK_CF_ACK 0x70
66200 +#define IEEE80211_FC0_SUBTYPE_QOS 0x80
66201 +#define IEEE80211_FC0_SUBTYPE_QOS_NULL 0xc0
66202 +
66203 +#define IEEE80211_FC1_DIR_MASK 0x03
66204 +#define IEEE80211_FC1_DIR_NODS 0x00 /* STA->STA */
66205 +#define IEEE80211_FC1_DIR_TODS 0x01 /* STA->AP */
66206 +#define IEEE80211_FC1_DIR_FROMDS 0x02 /* AP ->STA */
66207 +#define IEEE80211_FC1_DIR_DSTODS 0x03 /* AP ->AP */
66208 +
66209 +#define IEEE80211_FC1_MORE_FRAG 0x04
66210 +#define IEEE80211_FC1_RETRY 0x08
66211 +#define IEEE80211_FC1_PWR_MGT 0x10
66212 +#define IEEE80211_FC1_MORE_DATA 0x20
66213 +#define IEEE80211_FC1_WEP 0x40
66214 +#define IEEE80211_FC1_ORDER 0x80
66215 +
66216 +#define IEEE80211_SEQ_FRAG_MASK 0x000f
66217 +#define IEEE80211_SEQ_FRAG_SHIFT 0
66218 +#define IEEE80211_SEQ_SEQ_MASK 0xfff0
66219 +#define IEEE80211_SEQ_SEQ_SHIFT 4
66220 +
66221 +#define IEEE80211_NWID_LEN 32
66222 +
66223 +/*
66224 + * 802.11 rate set.
66225 + */
66226 +#define IEEE80211_RATE_SIZE 8 /* 802.11 standard */
66227 +#define IEEE80211_RATE_MAXSIZE 15 /* max rates we'll handle */
66228 +
66229 +#define WMM_NUM_AC 4 /* 4 AC categories */
66230 +
66231 +#define WMM_PARAM_ACI_M 0x60 /* Mask for ACI field */
66232 +#define WMM_PARAM_ACI_S 5 /* Shift for ACI field */
66233 +#define WMM_PARAM_ACM_M 0x10 /* Mask for ACM bit */
66234 +#define WMM_PARAM_ACM_S 4 /* Shift for ACM bit */
66235 +#define WMM_PARAM_AIFSN_M 0x0f /* Mask for aifsn field */
66236 +#define WMM_PARAM_LOGCWMIN_M 0x0f /* Mask for CwMin field (in log) */
66237 +#define WMM_PARAM_LOGCWMAX_M 0xf0 /* Mask for CwMax field (in log) */
66238 +#define WMM_PARAM_LOGCWMAX_S 4 /* Shift for CwMax field */
66239 +
66240 +#define WMM_AC_TO_TID(_ac) ( \
66241 + ((_ac) == WMM_AC_VO) ? 6 : \
66242 + ((_ac) == WMM_AC_VI) ? 5 : \
66243 + ((_ac) == WMM_AC_BK) ? 1 : \
66244 + 0)
66245 +
66246 +#define TID_TO_WMM_AC(_tid) ( \
66247 + ((_tid) < 1) ? WMM_AC_BE : \
66248 + ((_tid) < 3) ? WMM_AC_BK : \
66249 + ((_tid) < 6) ? WMM_AC_VI : \
66250 + WMM_AC_VO)
66251 +/*
66252 + * Management information element payloads.
66253 + */
66254 +
66255 +enum {
66256 + IEEE80211_ELEMID_SSID = 0,
66257 + IEEE80211_ELEMID_RATES = 1,
66258 + IEEE80211_ELEMID_FHPARMS = 2,
66259 + IEEE80211_ELEMID_DSPARMS = 3,
66260 + IEEE80211_ELEMID_CFPARMS = 4,
66261 + IEEE80211_ELEMID_TIM = 5,
66262 + IEEE80211_ELEMID_IBSSPARMS = 6,
66263 + IEEE80211_ELEMID_COUNTRY = 7,
66264 + IEEE80211_ELEMID_CHALLENGE = 16,
66265 + /* 17-31 reserved for challenge text extension */
66266 + IEEE80211_ELEMID_PWRCNSTR = 32,
66267 + IEEE80211_ELEMID_PWRCAP = 33,
66268 + IEEE80211_ELEMID_TPCREQ = 34,
66269 + IEEE80211_ELEMID_TPCREP = 35,
66270 + IEEE80211_ELEMID_SUPPCHAN = 36,
66271 + IEEE80211_ELEMID_CHANSWITCH = 37,
66272 + IEEE80211_ELEMID_MEASREQ = 38,
66273 + IEEE80211_ELEMID_MEASREP = 39,
66274 + IEEE80211_ELEMID_QUIET = 40,
66275 + IEEE80211_ELEMID_IBSSDFS = 41,
66276 + IEEE80211_ELEMID_ERP = 42,
66277 + IEEE80211_ELEMID_RSN = 48,
66278 + IEEE80211_ELEMID_XRATES = 50,
66279 + IEEE80211_ELEMID_TPC = 150,
66280 + IEEE80211_ELEMID_CCKM = 156,
66281 + IEEE80211_ELEMID_VENDOR = 221, /* vendor private */
66282 +};
66283 +
66284 +#define ATH_OUI 0x7f0300 /* Atheros OUI */
66285 +#define ATH_OUI_TYPE 0x01
66286 +#define ATH_OUI_SUBTYPE 0x01
66287 +#define ATH_OUI_VERSION 0x00
66288 +
66289 +#define WPA_OUI 0xf25000
66290 +#define WPA_OUI_TYPE 0x01
66291 +#define WPA_VERSION 1 /* current supported version */
66292 +
66293 +#define WPA_CSE_NULL 0x00
66294 +#define WPA_CSE_WEP40 0x01
66295 +#define WPA_CSE_TKIP 0x02
66296 +#define WPA_CSE_CCMP 0x04
66297 +#define WPA_CSE_WEP104 0x05
66298 +
66299 +#define WPA_ASE_NONE 0x00
66300 +#define WPA_ASE_8021X_UNSPEC 0x01
66301 +#define WPA_ASE_8021X_PSK 0x02
66302 +
66303 +#define RSN_OUI 0xac0f00
66304 +#define RSN_VERSION 1 /* current supported version */
66305 +
66306 +#define RSN_CSE_NULL 0x00
66307 +#define RSN_CSE_WEP40 0x01
66308 +#define RSN_CSE_TKIP 0x02
66309 +#define RSN_CSE_WRAP 0x03
66310 +#define RSN_CSE_CCMP 0x04
66311 +#define RSN_CSE_WEP104 0x05
66312 +
66313 +#define RSN_ASE_NONE 0x00
66314 +#define RSN_ASE_8021X_UNSPEC 0x01
66315 +#define RSN_ASE_8021X_PSK 0x02
66316 +
66317 +#define RSN_CAP_PREAUTH 0x01
66318 +
66319 +#define WMM_OUI 0xf25000
66320 +#define WMM_OUI_TYPE 0x02
66321 +#define WMM_INFO_OUI_SUBTYPE 0x00
66322 +#define WMM_PARAM_OUI_SUBTYPE 0x01
66323 +#define WMM_VERSION 1
66324 +
66325 +/* WMM stream classes */
66326 +#define WMM_NUM_AC 4
66327 +#define WMM_AC_BE 0 /* best effort */
66328 +#define WMM_AC_BK 1 /* background */
66329 +#define WMM_AC_VI 2 /* video */
66330 +#define WMM_AC_VO 3 /* voice */
66331 +
66332 +/* TSPEC related */
66333 +#define ACTION_CATEGORY_CODE_TSPEC 17
66334 +#define ACTION_CODE_TSPEC_ADDTS 0
66335 +#define ACTION_CODE_TSPEC_ADDTS_RESP 1
66336 +#define ACTION_CODE_TSPEC_DELTS 2
66337 +
66338 +typedef enum {
66339 + TSPEC_STATUS_CODE_ADMISSION_ACCEPTED = 0,
66340 + TSPEC_STATUS_CODE_ADDTS_INVALID_PARAMS = 0x1,
66341 + TSPEC_STATUS_CODE_ADDTS_REQUEST_REFUSED = 0x3,
66342 + TSPEC_STATUS_CODE_UNSPECIFIED_QOS_RELATED_FAILURE = 0xC8,
66343 + TSPEC_STATUS_CODE_REQUESTED_REFUSED_POLICY_CONFIGURATION = 0xC9,
66344 + TSPEC_STATUS_CODE_INSUFFCIENT_BANDWIDTH = 0xCA,
66345 + TSPEC_STATUS_CODE_INVALID_PARAMS = 0xCB,
66346 + TSPEC_STATUS_CODE_DELTS_SENT = 0x30,
66347 + TSPEC_STATUS_CODE_DELTS_RECV = 0x31,
66348 +} TSPEC_STATUS_CODE;
66349 +
66350 +/*
66351 + * WMM/802.11e Tspec Element
66352 + */
66353 +typedef PREPACK struct wmm_tspec_ie_t {
66354 + A_UINT8 elementId;
66355 + A_UINT8 len;
66356 + A_UINT8 oui[3];
66357 + A_UINT8 ouiType;
66358 + A_UINT8 ouiSubType;
66359 + A_UINT8 version;
66360 + A_UINT16 tsInfo_info;
66361 + A_UINT8 tsInfo_reserved;
66362 + A_UINT16 nominalMSDU;
66363 + A_UINT16 maxMSDU;
66364 + A_UINT32 minServiceInt;
66365 + A_UINT32 maxServiceInt;
66366 + A_UINT32 inactivityInt;
66367 + A_UINT32 suspensionInt;
66368 + A_UINT32 serviceStartTime;
66369 + A_UINT32 minDataRate;
66370 + A_UINT32 meanDataRate;
66371 + A_UINT32 peakDataRate;
66372 + A_UINT32 maxBurstSize;
66373 + A_UINT32 delayBound;
66374 + A_UINT32 minPhyRate;
66375 + A_UINT16 sba;
66376 + A_UINT16 mediumTime;
66377 +} POSTPACK WMM_TSPEC_IE;
66378 +
66379 +
66380 +/*
66381 + * BEACON management packets
66382 + *
66383 + * octet timestamp[8]
66384 + * octet beacon interval[2]
66385 + * octet capability information[2]
66386 + * information element
66387 + * octet elemid
66388 + * octet length
66389 + * octet information[length]
66390 + */
66391 +
66392 +#define IEEE80211_BEACON_INTERVAL(beacon) \
66393 + ((beacon)[8] | ((beacon)[9] << 8))
66394 +#define IEEE80211_BEACON_CAPABILITY(beacon) \
66395 + ((beacon)[10] | ((beacon)[11] << 8))
66396 +
66397 +#define IEEE80211_CAPINFO_ESS 0x0001
66398 +#define IEEE80211_CAPINFO_IBSS 0x0002
66399 +#define IEEE80211_CAPINFO_CF_POLLABLE 0x0004
66400 +#define IEEE80211_CAPINFO_CF_POLLREQ 0x0008
66401 +#define IEEE80211_CAPINFO_PRIVACY 0x0010
66402 +#define IEEE80211_CAPINFO_SHORT_PREAMBLE 0x0020
66403 +#define IEEE80211_CAPINFO_PBCC 0x0040
66404 +#define IEEE80211_CAPINFO_CHNL_AGILITY 0x0080
66405 +/* bits 8-9 are reserved */
66406 +#define IEEE80211_CAPINFO_SHORT_SLOTTIME 0x0400
66407 +#define IEEE80211_CAPINFO_APSD 0x0800
66408 +/* bit 12 is reserved */
66409 +#define IEEE80211_CAPINFO_DSSSOFDM 0x2000
66410 +/* bits 14-15 are reserved */
66411 +
66412 +/*
66413 + * Authentication Modes
66414 + */
66415 +
66416 +enum ieee80211_authmode {
66417 + IEEE80211_AUTH_NONE = 0,
66418 + IEEE80211_AUTH_OPEN = 1,
66419 + IEEE80211_AUTH_SHARED = 2,
66420 + IEEE80211_AUTH_8021X = 3,
66421 + IEEE80211_AUTH_AUTO = 4, /* auto-select/accept */
66422 + /* NB: these are used only for ioctls */
66423 + IEEE80211_AUTH_WPA = 5, /* WPA/RSN w/ 802.1x */
66424 + IEEE80211_AUTH_WPA_PSK = 6, /* WPA/RSN w/ PSK */
66425 + IEEE80211_AUTH_WPA_CCKM = 7, /* WPA/RSN IE w/ CCKM */
66426 +};
66427 +
66428 +#include "athendpack.h"
66429 +
66430 +#endif /* _NET80211_IEEE80211_H_ */
66431 Index: linux-2.6.28/drivers/ar6000/include/ieee80211_ioctl.h
66432 ===================================================================
66433 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66434 +++ linux-2.6.28/drivers/ar6000/include/ieee80211_ioctl.h 2009-01-02 00:01:56.000000000 +0100
66435 @@ -0,0 +1,163 @@
66436 +/*
66437 + * Copyright (c) 2004-2005 Atheros Communications Inc.
66438 + * All rights reserved.
66439 + *
66440 + *
66441 + * This program is free software; you can redistribute it and/or modify
66442 + * it under the terms of the GNU General Public License version 2 as
66443 + * published by the Free Software Foundation;
66444 + *
66445 + * Software distributed under the License is distributed on an "AS
66446 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
66447 + * implied. See the License for the specific language governing
66448 + * rights and limitations under the License.
66449 + *
66450 + *
66451 + *
66452 + *
66453 + * $Id: //depot/sw/releases/olca2.0-GPL/host/os/linux/include/ieee80211_ioctl.h#1 $
66454 + */
66455 +
66456 +#ifndef _IEEE80211_IOCTL_H_
66457 +#define _IEEE80211_IOCTL_H_
66458 +
66459 +#ifdef __cplusplus
66460 +extern "C" {
66461 +#endif
66462 +
66463 +/*
66464 + * Extracted from the MADWIFI net80211/ieee80211_ioctl.h
66465 + */
66466 +
66467 +/*
66468 + * WPA/RSN get/set key request. Specify the key/cipher
66469 + * type and whether the key is to be used for sending and/or
66470 + * receiving. The key index should be set only when working
66471 + * with global keys (use IEEE80211_KEYIX_NONE for ``no index'').
66472 + * Otherwise a unicast/pairwise key is specified by the bssid
66473 + * (on a station) or mac address (on an ap). They key length
66474 + * must include any MIC key data; otherwise it should be no
66475 + more than IEEE80211_KEYBUF_SIZE.
66476 + */
66477 +struct ieee80211req_key {
66478 + u_int8_t ik_type; /* key/cipher type */
66479 + u_int8_t ik_pad;
66480 + u_int16_t ik_keyix; /* key index */
66481 + u_int8_t ik_keylen; /* key length in bytes */
66482 + u_int8_t ik_flags;
66483 +#define IEEE80211_KEY_XMIT 0x01
66484 +#define IEEE80211_KEY_RECV 0x02
66485 +#define IEEE80211_KEY_DEFAULT 0x80 /* default xmit key */
66486 + u_int8_t ik_macaddr[IEEE80211_ADDR_LEN];
66487 + u_int64_t ik_keyrsc; /* key receive sequence counter */
66488 + u_int64_t ik_keytsc; /* key transmit sequence counter */
66489 + u_int8_t ik_keydata[IEEE80211_KEYBUF_SIZE+IEEE80211_MICBUF_SIZE];
66490 +};
66491 +/*
66492 + * Delete a key either by index or address. Set the index
66493 + * to IEEE80211_KEYIX_NONE when deleting a unicast key.
66494 + */
66495 +struct ieee80211req_del_key {
66496 + u_int8_t idk_keyix; /* key index */
66497 + u_int8_t idk_macaddr[IEEE80211_ADDR_LEN];
66498 +};
66499 +/*
66500 + * MLME state manipulation request. IEEE80211_MLME_ASSOC
66501 + * only makes sense when operating as a station. The other
66502 + * requests can be used when operating as a station or an
66503 + * ap (to effect a station).
66504 + */
66505 +struct ieee80211req_mlme {
66506 + u_int8_t im_op; /* operation to perform */
66507 +#define IEEE80211_MLME_ASSOC 1 /* associate station */
66508 +#define IEEE80211_MLME_DISASSOC 2 /* disassociate station */
66509 +#define IEEE80211_MLME_DEAUTH 3 /* deauthenticate station */
66510 +#define IEEE80211_MLME_AUTHORIZE 4 /* authorize station */
66511 +#define IEEE80211_MLME_UNAUTHORIZE 5 /* unauthorize station */
66512 + u_int16_t im_reason; /* 802.11 reason code */
66513 + u_int8_t im_macaddr[IEEE80211_ADDR_LEN];
66514 +};
66515 +
66516 +struct ieee80211req_addpmkid {
66517 + u_int8_t pi_bssid[IEEE80211_ADDR_LEN];
66518 + u_int8_t pi_enable;
66519 + u_int8_t pi_pmkid[16];
66520 +};
66521 +
66522 +#define AUTH_ALG_OPEN_SYSTEM 0x01
66523 +#define AUTH_ALG_SHARED_KEY 0x02
66524 +#define AUTH_ALG_LEAP 0x04
66525 +
66526 +struct ieee80211req_authalg {
66527 + u_int8_t auth_alg;
66528 +};
66529 +
66530 +/*
66531 + * Request to add an IE to a Management Frame
66532 + */
66533 +enum{
66534 + IEEE80211_APPIE_FRAME_BEACON = 0,
66535 + IEEE80211_APPIE_FRAME_PROBE_REQ = 1,
66536 + IEEE80211_APPIE_FRAME_PROBE_RESP = 2,
66537 + IEEE80211_APPIE_FRAME_ASSOC_REQ = 3,
66538 + IEEE80211_APPIE_FRAME_ASSOC_RESP = 4,
66539 + IEEE80211_APPIE_NUM_OF_FRAME = 5
66540 +};
66541 +
66542 +/*
66543 + * The Maximum length of the IE that can be added to a Management frame
66544 + */
66545 +#define IEEE80211_APPIE_FRAME_MAX_LEN 78
66546 +
66547 +struct ieee80211req_getset_appiebuf {
66548 + u_int32_t app_frmtype; /* management frame type for which buffer is added */
66549 + u_int32_t app_buflen; /*application supplied buffer length */
66550 + u_int8_t app_buf[];
66551 +};
66552 +
66553 +/*
66554 + * The following definitions are used by an application to set filter
66555 + * for receiving management frames
66556 + */
66557 +enum {
66558 + IEEE80211_FILTER_TYPE_BEACON = 0x1,
66559 + IEEE80211_FILTER_TYPE_PROBE_REQ = 0x2,
66560 + IEEE80211_FILTER_TYPE_PROBE_RESP = 0x4,
66561 + IEEE80211_FILTER_TYPE_ASSOC_REQ = 0x8,
66562 + IEEE80211_FILTER_TYPE_ASSOC_RESP = 0x10,
66563 + IEEE80211_FILTER_TYPE_AUTH = 0x20,
66564 + IEEE80211_FILTER_TYPE_DEAUTH = 0x40,
66565 + IEEE80211_FILTER_TYPE_DISASSOC = 0x80,
66566 + IEEE80211_FILTER_TYPE_ALL = 0xFF /* used to check the valid filter bits */
66567 +};
66568 +
66569 +struct ieee80211req_set_filter {
66570 + u_int32_t app_filterype; /* management frame filter type */
66571 +};
66572 +
66573 +enum {
66574 + IEEE80211_PARAM_AUTHMODE = 3, /* Authentication Mode */
66575 + IEEE80211_PARAM_MCASTCIPHER = 5,
66576 + IEEE80211_PARAM_MCASTKEYLEN = 6, /* multicast key length */
66577 + IEEE80211_PARAM_UCASTCIPHER = 8,
66578 + IEEE80211_PARAM_UCASTKEYLEN = 9, /* unicast key length */
66579 + IEEE80211_PARAM_WPA = 10, /* WPA mode (0,1,2) */
66580 + IEEE80211_PARAM_ROAMING = 12, /* roaming mode */
66581 + IEEE80211_PARAM_PRIVACY = 13, /* privacy invoked */
66582 + IEEE80211_PARAM_COUNTERMEASURES = 14, /* WPA/TKIP countermeasures */
66583 + IEEE80211_PARAM_DROPUNENCRYPTED = 15, /* discard unencrypted frames */
66584 +};
66585 +
66586 +/*
66587 + * Values for IEEE80211_PARAM_WPA
66588 + */
66589 +#define WPA_MODE_WPA1 1
66590 +#define WPA_MODE_WPA2 2
66591 +#define WPA_MODE_AUTO 3
66592 +#define WPA_MODE_NONE 4
66593 +
66594 +#ifdef __cplusplus
66595 +}
66596 +#endif
66597 +
66598 +#endif /* _IEEE80211_IOCTL_H_ */
66599 Index: linux-2.6.28/drivers/ar6000/include/ieee80211_node.h
66600 ===================================================================
66601 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66602 +++ linux-2.6.28/drivers/ar6000/include/ieee80211_node.h 2009-01-02 00:01:56.000000000 +0100
66603 @@ -0,0 +1,77 @@
66604 +/*-
66605 + * Copyright (c) 2001 Atsushi Onoe
66606 + * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting
66607 + * Copyright (c) 2006 Atheros Communications, Inc.
66608 + *
66609 + * Wireless Network driver for Atheros AR6001
66610 + * All rights reserved.
66611 + *
66612 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
66613 + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
66614 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
66615 + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
66616 + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
66617 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
66618 + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
66619 + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
66620 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
66621 + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
66622 + *
66623 + */
66624 +#ifndef _IEEE80211_NODE_H_
66625 +#define _IEEE80211_NODE_H_
66626 +
66627 +/*
66628 + * Node locking definitions.
66629 + */
66630 +#define IEEE80211_NODE_LOCK_INIT(_nt) A_MUTEX_INIT(&(_nt)->nt_nodelock)
66631 +#define IEEE80211_NODE_LOCK_DESTROY(_nt)
66632 +#define IEEE80211_NODE_LOCK(_nt) A_MUTEX_LOCK(&(_nt)->nt_nodelock)
66633 +#define IEEE80211_NODE_UNLOCK(_nt) A_MUTEX_UNLOCK(&(_nt)->nt_nodelock)
66634 +#define IEEE80211_NODE_LOCK_BH(_nt) A_MUTEX_LOCK(&(_nt)->nt_nodelock)
66635 +#define IEEE80211_NODE_UNLOCK_BH(_nt) A_MUTEX_UNLOCK(&(_nt)->nt_nodelock)
66636 +#define IEEE80211_NODE_LOCK_ASSERT(_nt)
66637 +
66638 +/*
66639 + * Node reference counting definitions.
66640 + *
66641 + * ieee80211_node_initref initialize the reference count to 1
66642 + * ieee80211_node_incref add a reference
66643 + * ieee80211_node_decref remove a reference
66644 + * ieee80211_node_dectestref remove a reference and return 1 if this
66645 + * is the last reference, otherwise 0
66646 + * ieee80211_node_refcnt reference count for printing (only)
66647 + */
66648 +#define ieee80211_node_initref(_ni) ((_ni)->ni_refcnt = 1)
66649 +#define ieee80211_node_incref(_ni) ((_ni)->ni_refcnt++)
66650 +#define ieee80211_node_decref(_ni) ((_ni)->ni_refcnt--)
66651 +#define ieee80211_node_dectestref(_ni) (((_ni)->ni_refcnt--) == 0)
66652 +#define ieee80211_node_refcnt(_ni) ((_ni)->ni_refcnt)
66653 +
66654 +#define IEEE80211_NODE_HASHSIZE 32
66655 +/* simple hash is enough for variation of macaddr */
66656 +#define IEEE80211_NODE_HASH(addr) \
66657 + (((const A_UINT8 *)(addr))[IEEE80211_ADDR_LEN - 1] % \
66658 + IEEE80211_NODE_HASHSIZE)
66659 +
66660 +/*
66661 + * Table of ieee80211_node instances. Each ieee80211com
66662 + * has at least one for holding the scan candidates.
66663 + * When operating as an access point or in ibss mode there
66664 + * is a second table for associated stations or neighbors.
66665 + */
66666 +struct ieee80211_node_table {
66667 + void *nt_wmip; /* back reference */
66668 + A_MUTEX_T nt_nodelock; /* on node table */
66669 + struct bss *nt_node_first; /* information of all nodes */
66670 + struct bss *nt_node_last; /* information of all nodes */
66671 + struct bss *nt_hash[IEEE80211_NODE_HASHSIZE];
66672 + const char *nt_name; /* for debugging */
66673 + A_UINT32 nt_scangen; /* gen# for timeout scan */
66674 + A_TIMER nt_inact_timer;
66675 + A_UINT8 isTimerArmed; /* is the node timer armed */
66676 +};
66677 +
66678 +#define WLAN_NODE_INACT_TIMEOUT_MSEC 10000
66679 +
66680 +#endif /* _IEEE80211_NODE_H_ */
66681 Index: linux-2.6.28/drivers/ar6000/include/ini_dset.h
66682 ===================================================================
66683 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66684 +++ linux-2.6.28/drivers/ar6000/include/ini_dset.h 2009-01-02 00:01:56.000000000 +0100
66685 @@ -0,0 +1,40 @@
66686 +/*
66687 + * Copyright (c) 2004-2007 Atheros Communications Inc.
66688 + * All rights reserved.
66689 + *
66690 + * $ATH_LICENSE_HOSTSDK0_C$
66691 + *
66692 + */
66693 +#ifndef _INI_DSET_H_
66694 +#define _INI_DSET_H_
66695 +
66696 +/*
66697 + * Each of these represents a WHAL INI table, which consists
66698 + * of an "address column" followed by 1 or more "value columns".
66699 + *
66700 + * Software uses the base WHAL_INI_DATA_ID+column to access a
66701 + * DataSet that holds a particular column of data.
66702 + */
66703 +typedef enum {
66704 + WHAL_INI_DATA_ID_NULL =0,
66705 + WHAL_INI_DATA_ID_MODE_SPECIFIC =1, /* 2,3 */
66706 + WHAL_INI_DATA_ID_COMMON =4, /* 5 */
66707 + WHAL_INI_DATA_ID_BB_RFGAIN =6, /* 7,8 */
66708 + WHAL_INI_DATA_ID_ANALOG_BANK1 =9, /* 10 */
66709 + WHAL_INI_DATA_ID_ANALOG_BANK2 =11, /* 12 */
66710 + WHAL_INI_DATA_ID_ANALOG_BANK3 =13, /* 14, 15 */
66711 + WHAL_INI_DATA_ID_ANALOG_BANK6 =16, /* 17, 18 */
66712 + WHAL_INI_DATA_ID_ANALOG_BANK7 =19, /* 20 */
66713 + WHAL_INI_DATA_ID_MODE_OVERRIDES =21, /* 22,23 */
66714 + WHAL_INI_DATA_ID_COMMON_OVERRIDES =24, /* 25 */
66715 +
66716 + WHAL_INI_DATA_ID_MAX =25
66717 +} WHAL_INI_DATA_ID;
66718 +
66719 +typedef PREPACK struct {
66720 + A_UINT16 freqIndex; // 1 - A mode 2 - B or G mode 0 - common
66721 + A_UINT16 offset;
66722 + A_UINT32 newValue;
66723 +} POSTPACK INI_DSET_REG_OVERRIDE;
66724 +
66725 +#endif
66726 Index: linux-2.6.28/drivers/ar6000/include/regDb.h
66727 ===================================================================
66728 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66729 +++ linux-2.6.28/drivers/ar6000/include/regDb.h 2009-01-02 00:01:56.000000000 +0100
66730 @@ -0,0 +1,19 @@
66731 +/*
66732 + * Copyright (c) 2005 Atheros Communications, Inc.
66733 + * All rights reserved.
66734 + *
66735 + *
66736 + * $ATH_LICENSE_HOSTSDK0_C$
66737 + *
66738 + * This module contains the header files for regulatory module,
66739 + * which include the DB schema and DB values.
66740 + * $Id:
66741 + */
66742 +
66743 +#ifndef __REG_DB_H__
66744 +#define __REG_DB_H__
66745 +
66746 +#include "./regulatory/reg_dbschema.h"
66747 +#include "./regulatory/reg_dbvalues.h"
66748 +
66749 +#endif /* __REG_DB_H__ */
66750 Index: linux-2.6.28/drivers/ar6000/include/regdump.h
66751 ===================================================================
66752 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66753 +++ linux-2.6.28/drivers/ar6000/include/regdump.h 2009-01-02 00:01:56.000000000 +0100
66754 @@ -0,0 +1,33 @@
66755 +#ifndef __REGDUMP_H__
66756 +#define __REGDUMP_H__
66757 +/*
66758 + * Copyright (c) 2004-2007 Atheros Communications Inc.
66759 + * All rights reserved.
66760 + *
66761 + * $ATH_LICENSE_HOSTSDK0_C$
66762 + *
66763 + */
66764 +#if defined(AR6001)
66765 +#include "AR6001/AR6001_regdump.h"
66766 +#endif
66767 +#if defined(AR6002)
66768 +#include "AR6002/AR6002_regdump.h"
66769 +#endif
66770 +
66771 +#if !defined(__ASSEMBLER__)
66772 +/*
66773 + * Target CPU state at the time of failure is reflected
66774 + * in a register dump, which the Host can fetch through
66775 + * the diagnostic window.
66776 + */
66777 +struct register_dump_s {
66778 + A_UINT32 target_id; /* Target ID */
66779 + A_UINT32 assline; /* Line number (if assertion failure) */
66780 + A_UINT32 pc; /* Program Counter at time of exception */
66781 + A_UINT32 badvaddr; /* Virtual address causing exception */
66782 + CPU_exception_frame_t exc_frame; /* CPU-specific exception info */
66783 +
66784 + /* Could copy top of stack here, too.... */
66785 +};
66786 +#endif /* __ASSEMBLER__ */
66787 +#endif /* __REGDUMP_H__ */
66788 Index: linux-2.6.28/drivers/ar6000/include/targaddrs.h
66789 ===================================================================
66790 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66791 +++ linux-2.6.28/drivers/ar6000/include/targaddrs.h 2009-01-02 00:01:56.000000000 +0100
66792 @@ -0,0 +1,158 @@
66793 +/*
66794 + * Copyright (c) 2004-2007 Atheros Communications Inc.
66795 + * All rights reserved.
66796 + *
66797 + * $ATH_LICENSE_HOSTSDK0_C$
66798 + *
66799 + */
66800 +
66801 +#ifndef __TARGADDRS_H__
66802 +#define __TARGADDRS_H__
66803 +#if defined(AR6001)
66804 +#include "AR6001/addrs.h"
66805 +#endif
66806 +#if defined(AR6002)
66807 +#include "AR6002/addrs.h"
66808 +#endif
66809 +
66810 +/*
66811 + * AR6K option bits, to enable/disable various features.
66812 + * By default, all option bits are 0.
66813 + * These bits can be set in LOCAL_SCRATCH register 0.
66814 + */
66815 +#define AR6K_OPTION_BMI_DISABLE 0x01 /* Disable BMI comm with Host */
66816 +#define AR6K_OPTION_SERIAL_ENABLE 0x02 /* Enable serial port msgs */
66817 +#define AR6K_OPTION_WDT_DISABLE 0x04 /* WatchDog Timer override */
66818 +#define AR6K_OPTION_SLEEP_DISABLE 0x08 /* Disable system sleep */
66819 +#define AR6K_OPTION_STOP_BOOT 0x10 /* Stop boot processes (for ATE) */
66820 +#define AR6K_OPTION_ENABLE_NOANI 0x20 /* Operate without ANI */
66821 +#define AR6K_OPTION_DSET_DISABLE 0x40 /* Ignore DataSets */
66822 +#define AR6K_OPTION_IGNORE_FLASH 0x80 /* Ignore flash during bootup */
66823 +
66824 +/*
66825 + * xxx_HOST_INTEREST_ADDRESS is the address in Target RAM of the
66826 + * host_interest structure. It must match the address of the _host_interest
66827 + * symbol (see linker script).
66828 + *
66829 + * Host Interest is shared between Host and Target in order to coordinate
66830 + * between the two, and is intended to remain constant (with additions only
66831 + * at the end) across software releases.
66832 + */
66833 +#define AR6001_HOST_INTEREST_ADDRESS 0x80000600
66834 +#define AR6002_HOST_INTEREST_ADDRESS 0x00500400
66835 +
66836 +#define HOST_INTEREST_MAX_SIZE 0x100
66837 +
66838 +#if !defined(__ASSEMBLER__)
66839 +struct register_dump_s;
66840 +struct dbglog_hdr_s;
66841 +
66842 +/*
66843 + * These are items that the Host may need to access
66844 + * via BMI or via the Diagnostic Window. The position
66845 + * of items in this structure must remain constant
66846 + * across firmware revisions!
66847 + *
66848 + * Types for each item must be fixed size across
66849 + * target and host platforms.
66850 + *
66851 + * More items may be added at the end.
66852 + */
66853 +struct host_interest_s {
66854 + /*
66855 + * Pointer to application-defined area, if any.
66856 + * Set by Target application during startup.
66857 + */
66858 + A_UINT32 hi_app_host_interest; /* 0x00 */
66859 +
66860 + /* Pointer to register dump area, valid after Target crash. */
66861 + A_UINT32 hi_failure_state; /* 0x04 */
66862 +
66863 + /* Pointer to debug logging header */
66864 + A_UINT32 hi_dbglog_hdr; /* 0x08 */
66865 +
66866 + /* Indicates whether or not flash is present on Target.
66867 + * NB: flash_is_present indicator is here not just
66868 + * because it might be of interest to the Host; but
66869 + * also because it's set early on by Target's startup
66870 + * asm code and we need it to have a special RAM address
66871 + * so that it doesn't get reinitialized with the rest
66872 + * of data.
66873 + */
66874 + A_UINT32 hi_flash_is_present; /* 0x0c */
66875 +
66876 + /*
66877 + * General-purpose flag bits, similar to AR6000_OPTION_* flags.
66878 + * Can be used by application rather than by OS.
66879 + */
66880 + A_UINT32 hi_option_flag; /* 0x10 */
66881 +
66882 + /*
66883 + * Boolean that determines whether or not to
66884 + * display messages on the serial port.
66885 + */
66886 + A_UINT32 hi_serial_enable; /* 0x14 */
66887 +
66888 + /* Start address of Flash DataSet index, if any */
66889 + A_UINT32 hi_dset_list_head; /* 0x18 */
66890 +
66891 + /* Override Target application start address */
66892 + A_UINT32 hi_app_start; /* 0x1c */
66893 +
66894 + /* Clock and voltage tuning */
66895 + A_UINT32 hi_skip_clock_init; /* 0x20 */
66896 + A_UINT32 hi_core_clock_setting; /* 0x24 */
66897 + A_UINT32 hi_cpu_clock_setting; /* 0x28 */
66898 + A_UINT32 hi_system_sleep_setting; /* 0x2c */
66899 + A_UINT32 hi_xtal_control_setting; /* 0x30 */
66900 + A_UINT32 hi_pll_ctrl_setting_24ghz; /* 0x34 */
66901 + A_UINT32 hi_pll_ctrl_setting_5ghz; /* 0x38 */
66902 + A_UINT32 hi_ref_voltage_trim_setting; /* 0x3c */
66903 + A_UINT32 hi_clock_info; /* 0x40 */
66904 +
66905 + /*
66906 + * Flash configuration overrides, used only
66907 + * when firmware is not executing from flash.
66908 + * (When using flash, modify the global variables
66909 + * with equivalent names.)
66910 + */
66911 + A_UINT32 hi_bank0_addr_value; /* 0x44 */
66912 + A_UINT32 hi_bank0_read_value; /* 0x48 */
66913 + A_UINT32 hi_bank0_write_value; /* 0x4c */
66914 + A_UINT32 hi_bank0_config_value; /* 0x50 */
66915 +
66916 + /* Pointer to Board Data */
66917 + A_UINT32 hi_board_data; /* 0x54 */
66918 + A_UINT32 hi_board_data_initialized; /* 0x58 */
66919 +
66920 + A_UINT32 hi_dset_RAM_index_table; /* 0x5c */
66921 +
66922 + A_UINT32 hi_desired_baud_rate; /* 0x60 */
66923 + A_UINT32 hi_dbglog_config; /* 0x64 */
66924 + A_UINT32 hi_end_RAM_reserve_sz; /* 0x68 */
66925 + A_UINT32 hi_mbox_io_block_sz; /* 0x6c */
66926 +
66927 + A_UINT32 hi_num_bpatch_streams; /* 0x70 */
66928 + A_UINT32 hi_mbox_isr_yield_limit; /* 0x74 */
66929 +
66930 + A_UINT32 hi_refclk_hz; /* 0x78 */
66931 +};
66932 +
66933 +/* Bits defined in hi_option_flag */
66934 +#define HI_OPTION_TIMER_WAR 1 /* not really used */
66935 +
66936 +/*
66937 + * Intended for use by Host software, this macro returns the Target RAM
66938 + * address of any item in the host_interest structure.
66939 + * Example: target_addr = AR6001_HOST_INTEREST_ITEM_ADDRESS(hi_board_data);
66940 + */
66941 +#define AR6001_HOST_INTEREST_ITEM_ADDRESS(item) \
66942 + ((A_UINT32)&((((struct host_interest_s *)(AR6001_HOST_INTEREST_ADDRESS))->item)))
66943 +
66944 +#define AR6002_HOST_INTEREST_ITEM_ADDRESS(item) \
66945 + ((A_UINT32)&((((struct host_interest_s *)(AR6002_HOST_INTEREST_ADDRESS))->item)))
66946 +
66947 +
66948 +#endif /* !__ASSEMBLER__ */
66949 +
66950 +#endif /* __TARGADDRS_H__ */
66951 Index: linux-2.6.28/drivers/ar6000/include/testcmd.h
66952 ===================================================================
66953 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
66954 +++ linux-2.6.28/drivers/ar6000/include/testcmd.h 2009-01-02 00:01:56.000000000 +0100
66955 @@ -0,0 +1,144 @@
66956 +/*
66957 + * Copyright (c) 2004-2005 Atheros Communications Inc.
66958 + * All rights reserved.
66959 + *
66960 + *
66961 + * $ATH_LICENSE_HOSTSDK0_C$
66962 + *
66963 + */
66964 +
66965 +#ifndef TESTCMD_H_
66966 +#define TESTCMD_H_
66967 +
66968 +#ifdef __cplusplus
66969 +extern "C" {
66970 +#endif
66971 +
66972 +typedef enum {
66973 + ZEROES_PATTERN = 0,
66974 + ONES_PATTERN,
66975 + REPEATING_10,
66976 + PN7_PATTERN,
66977 + PN9_PATTERN,
66978 + PN15_PATTERN
66979 +}TX_DATA_PATTERN;
66980 +
66981 +/* Continous tx
66982 + mode : TCMD_CONT_TX_OFF - Disabling continous tx
66983 + TCMD_CONT_TX_SINE - Enable continuous unmodulated tx
66984 + TCMD_CONT_TX_FRAME- Enable continuous modulated tx
66985 + freq : Channel freq in Mhz. (e.g 2412 for channel 1 in 11 g)
66986 +dataRate: 0 - 1 Mbps
66987 + 1 - 2 Mbps
66988 + 2 - 5.5 Mbps
66989 + 3 - 11 Mbps
66990 + 4 - 6 Mbps
66991 + 5 - 9 Mbps
66992 + 6 - 12 Mbps
66993 + 7 - 18 Mbps
66994 + 8 - 24 Mbps
66995 + 9 - 36 Mbps
66996 + 10 - 28 Mbps
66997 + 11 - 54 Mbps
66998 + txPwr: Tx power in dBm[5 -11] for unmod Tx, [5-14] for mod Tx
66999 +antenna: 1 - one antenna
67000 + 2 - two antenna
67001 +Note : Enable/disable continuous tx test cmd works only when target is awake.
67002 +*/
67003 +
67004 +typedef enum {
67005 + TCMD_CONT_TX_OFF = 0,
67006 + TCMD_CONT_TX_SINE,
67007 + TCMD_CONT_TX_FRAME,
67008 + TCMD_CONT_TX_TX99,
67009 + TCMD_CONT_TX_TX100
67010 +} TCMD_CONT_TX_MODE;
67011 +
67012 +typedef PREPACK struct {
67013 + A_UINT32 testCmdId;
67014 + A_UINT32 mode;
67015 + A_UINT32 freq;
67016 + A_UINT32 dataRate;
67017 + A_INT32 txPwr;
67018 + A_UINT32 antenna;
67019 + A_UINT32 enANI;
67020 + A_UINT32 scramblerOff;
67021 + A_UINT32 aifsn;
67022 + A_UINT16 pktSz;
67023 + A_UINT16 txPattern;
67024 +} POSTPACK TCMD_CONT_TX;
67025 +
67026 +#define TCMD_TXPATTERN_ZERONE 0x1
67027 +#define TCMD_TXPATTERN_ZERONE_DIS_SCRAMBLE 0x2
67028 +
67029 +/* Continuous Rx
67030 + act: TCMD_CONT_RX_PROMIS - promiscuous mode (accept all incoming frames)
67031 + TCMD_CONT_RX_FILTER - filter mode (accept only frames with dest
67032 + address equal specified
67033 + mac address (set via act =3)
67034 + TCMD_CONT_RX_REPORT off mode (disable cont rx mode and get the
67035 + report from the last cont
67036 + Rx test)
67037 +
67038 + TCMD_CONT_RX_SETMAC - set MacAddr mode (sets the MAC address for the
67039 + target. This Overrides
67040 + the default MAC address.)
67041 +
67042 +*/
67043 +typedef enum {
67044 + TCMD_CONT_RX_PROMIS =0,
67045 + TCMD_CONT_RX_FILTER,
67046 + TCMD_CONT_RX_REPORT,
67047 + TCMD_CONT_RX_SETMAC
67048 +} TCMD_CONT_RX_ACT;
67049 +
67050 +typedef PREPACK struct {
67051 + A_UINT32 testCmdId;
67052 + A_UINT32 act;
67053 + A_UINT32 enANI;
67054 + PREPACK union {
67055 + struct PREPACK TCMD_CONT_RX_PARA {
67056 + A_UINT32 freq;
67057 + A_UINT32 antenna;
67058 + } POSTPACK para;
67059 + struct PREPACK TCMD_CONT_RX_REPORT {
67060 + A_UINT32 totalPkt;
67061 + A_INT32 rssiInDBm;
67062 + } POSTPACK report;
67063 + struct PREPACK TCMD_CONT_RX_MAC {
67064 + A_UCHAR addr[ATH_MAC_LEN];
67065 + } POSTPACK mac;
67066 + } POSTPACK u;
67067 +} POSTPACK TCMD_CONT_RX;
67068 +
67069 +/* Force sleep/wake test cmd
67070 + mode: TCMD_PM_WAKEUP - Wakeup the target
67071 + TCMD_PM_SLEEP - Force the target to sleep.
67072 + */
67073 +typedef enum {
67074 + TCMD_PM_WAKEUP = 1, /* be consistent with target */
67075 + TCMD_PM_SLEEP
67076 +} TCMD_PM_MODE;
67077 +
67078 +typedef PREPACK struct {
67079 + A_UINT32 testCmdId;
67080 + A_UINT32 mode;
67081 +} POSTPACK TCMD_PM;
67082 +
67083 +typedef enum{
67084 + TCMD_CONT_TX_ID,
67085 + TCMD_CONT_RX_ID,
67086 + TCMD_PM_ID
67087 + } TCMD_ID;
67088 +
67089 +typedef PREPACK union {
67090 + TCMD_CONT_TX contTx;
67091 + TCMD_CONT_RX contRx;
67092 + TCMD_PM pm ;
67093 +} POSTPACK TEST_CMD;
67094 +
67095 +#ifdef __cplusplus
67096 +}
67097 +#endif
67098 +
67099 +#endif /* TESTCMD_H_ */
67100 Index: linux-2.6.28/drivers/ar6000/include/wlan_api.h
67101 ===================================================================
67102 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
67103 +++ linux-2.6.28/drivers/ar6000/include/wlan_api.h 2009-01-02 00:01:56.000000000 +0100
67104 @@ -0,0 +1,101 @@
67105 +#ifndef _HOST_WLAN_API_H_
67106 +#define _HOST_WLAN_API_H_
67107 +/*
67108 + * Copyright (c) 2004-2005 Atheros Communications Inc.
67109 + * All rights reserved.
67110 + *
67111 + * This file contains the API for the host wlan module
67112 + *
67113 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/wlan_api.h#1 $
67114 + *
67115 + *
67116 + * This program is free software; you can redistribute it and/or modify
67117 + * it under the terms of the GNU General Public License version 2 as
67118 + * published by the Free Software Foundation;
67119 + *
67120 + * Software distributed under the License is distributed on an "AS
67121 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
67122 + * implied. See the License for the specific language governing
67123 + * rights and limitations under the License.
67124 + *
67125 + *
67126 + *
67127 + */
67128 +
67129 +#ifdef __cplusplus
67130 +extern "C" {
67131 +#endif
67132 +
67133 +struct ieee80211_node_table;
67134 +struct ieee80211_frame;
67135 +
67136 +struct ieee80211_common_ie {
67137 + A_UINT16 ie_chan;
67138 + A_UINT8 *ie_tstamp;
67139 + A_UINT8 *ie_ssid;
67140 + A_UINT8 *ie_rates;
67141 + A_UINT8 *ie_xrates;
67142 + A_UINT8 *ie_country;
67143 + A_UINT8 *ie_wpa;
67144 + A_UINT8 *ie_rsn;
67145 + A_UINT8 *ie_wmm;
67146 + A_UINT8 *ie_ath;
67147 + A_UINT16 ie_capInfo;
67148 + A_UINT16 ie_beaconInt;
67149 + A_UINT8 *ie_tim;
67150 + A_UINT8 *ie_chswitch;
67151 + A_UINT8 ie_erp;
67152 + A_UINT8 *ie_wsc;
67153 +};
67154 +
67155 +typedef struct bss {
67156 + A_UINT8 ni_macaddr[6];
67157 + A_UINT8 ni_snr;
67158 + A_INT16 ni_rssi;
67159 + struct bss *ni_list_next;
67160 + struct bss *ni_list_prev;
67161 + struct bss *ni_hash_next;
67162 + struct bss *ni_hash_prev;
67163 + struct ieee80211_common_ie ni_cie;
67164 + A_UINT8 *ni_buf;
67165 + struct ieee80211_node_table *ni_table;
67166 + A_UINT32 ni_refcnt;
67167 + int ni_scangen;
67168 + A_UINT32 ni_tstamp;
67169 +} bss_t;
67170 +
67171 +typedef void wlan_node_iter_func(void *arg, bss_t *);
67172 +
67173 +bss_t *wlan_node_alloc(struct ieee80211_node_table *nt, int wh_size);
67174 +void wlan_node_free(bss_t *ni);
67175 +void wlan_setup_node(struct ieee80211_node_table *nt, bss_t *ni,
67176 + const A_UINT8 *macaddr);
67177 +bss_t *wlan_find_node(struct ieee80211_node_table *nt, const A_UINT8 *macaddr);
67178 +void wlan_node_reclaim(struct ieee80211_node_table *nt, bss_t *ni);
67179 +void wlan_free_allnodes(struct ieee80211_node_table *nt);
67180 +void wlan_iterate_nodes(struct ieee80211_node_table *nt, wlan_node_iter_func *f,
67181 + void *arg);
67182 +
67183 +void wlan_node_table_init(void *wmip, struct ieee80211_node_table *nt);
67184 +void wlan_node_table_reset(struct ieee80211_node_table *nt);
67185 +void wlan_node_table_cleanup(struct ieee80211_node_table *nt);
67186 +
67187 +A_STATUS wlan_parse_beacon(A_UINT8 *buf, int framelen,
67188 + struct ieee80211_common_ie *cie);
67189 +
67190 +A_UINT16 wlan_ieee2freq(int chan);
67191 +A_UINT32 wlan_freq2ieee(A_UINT16 freq);
67192 +
67193 +
67194 +bss_t *
67195 +wlan_find_Ssidnode (struct ieee80211_node_table *nt, A_UCHAR *pSsid,
67196 + A_UINT32 ssidLength, A_BOOL bIsWPA2);
67197 +
67198 +void
67199 +wlan_node_return (struct ieee80211_node_table *nt, bss_t *ni);
67200 +
67201 +#ifdef __cplusplus
67202 +}
67203 +#endif
67204 +
67205 +#endif /* _HOST_WLAN_API_H_ */
67206 Index: linux-2.6.28/drivers/ar6000/include/wlan_dset.h
67207 ===================================================================
67208 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
67209 +++ linux-2.6.28/drivers/ar6000/include/wlan_dset.h 2009-01-02 00:01:56.000000000 +0100
67210 @@ -0,0 +1,20 @@
67211 +/*
67212 + * Copyright (c) 2007 Atheros Communications, Inc.
67213 + * All rights reserved.
67214 + *
67215 + *
67216 + * $ATH_LICENSE_HOSTSDK0_C$
67217 + *
67218 + */
67219 +
67220 +#ifndef __WLAN_DSET_H__
67221 +#define __WKAN_DSET_H__
67222 +
67223 +typedef PREPACK struct wow_config_dset {
67224 +
67225 + A_UINT8 valid_dset;
67226 + A_UINT8 gpio_enable;
67227 + A_UINT16 gpio_pin;
67228 +} POSTPACK WOW_CONFIG_DSET;
67229 +
67230 +#endif
67231 Index: linux-2.6.28/drivers/ar6000/include/wmi_api.h
67232 ===================================================================
67233 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
67234 +++ linux-2.6.28/drivers/ar6000/include/wmi_api.h 2009-01-02 00:01:56.000000000 +0100
67235 @@ -0,0 +1,260 @@
67236 +#ifndef _WMI_API_H_
67237 +#define _WMI_API_H_
67238 +/*
67239 + * Copyright (c) 2004-2006 Atheros Communications Inc.
67240 + * All rights reserved.
67241 + *
67242 + * This file contains the definitions for the Wireless Module Interface (WMI).
67243 + *
67244 + * $Id: //depot/sw/releases/olca2.0-GPL/host/include/wmi_api.h#2 $
67245 + *
67246 + *
67247 + * This program is free software; you can redistribute it and/or modify
67248 + * it under the terms of the GNU General Public License version 2 as
67249 + * published by the Free Software Foundation;
67250 + *
67251 + * Software distributed under the License is distributed on an "AS
67252 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
67253 + * implied. See the License for the specific language governing
67254 + * rights and limitations under the License.
67255 + *
67256 + *
67257 + *
67258 + */
67259 +
67260 +#ifdef __cplusplus
67261 +extern "C" {
67262 +#endif
67263 +
67264 +/*
67265 + * IP QoS Field definitions according to 802.1p
67266 + */
67267 +#define BEST_EFFORT_PRI 0
67268 +#define BACKGROUND_PRI 1
67269 +#define EXCELLENT_EFFORT_PRI 3
67270 +#define CONTROLLED_LOAD_PRI 4
67271 +#define VIDEO_PRI 5
67272 +#define VOICE_PRI 6
67273 +#define NETWORK_CONTROL_PRI 7
67274 +#define MAX_NUM_PRI 8
67275 +
67276 +#define UNDEFINED_PRI (0xff)
67277 +
67278 +/* simple mapping of IP TOS field to a WMI priority stream
67279 + * this mapping was taken from the original linux driver implementation
67280 + * The operation maps the following
67281 + *
67282 + * */
67283 +#define IP_TOS_TO_WMI_PRI(tos) \
67284 + ((WMI_PRI_STREAM_ID)(((tos) >> 1) & 0x03))
67285 +
67286 +#define WMI_IMPLICIT_PSTREAM_INACTIVITY_INT 5000 /* 5 seconds */
67287 +
67288 +
67289 +struct wmi_t;
67290 +
67291 +void *wmi_init(void *devt);
67292 +
67293 +void wmi_qos_state_init(struct wmi_t *wmip);
67294 +void wmi_shutdown(struct wmi_t *wmip);
67295 +A_UINT16 wmi_get_mapped_qos_queue(struct wmi_t *, A_UINT8);
67296 +A_STATUS wmi_dix_2_dot3(struct wmi_t *wmip, void *osbuf);
67297 +A_STATUS wmi_data_hdr_add(struct wmi_t *wmip, void *osbuf, A_UINT8 msgType);
67298 +A_STATUS wmi_dot3_2_dix(struct wmi_t *wmip, void *osbuf);
67299 +A_STATUS wmi_data_hdr_remove(struct wmi_t *wmip, void *osbuf);
67300 +A_STATUS wmi_syncpoint(struct wmi_t *wmip);
67301 +A_STATUS wmi_syncpoint_reset(struct wmi_t *wmip);
67302 +WMI_PRI_STREAM_ID wmi_get_stream_id(struct wmi_t *wmip, A_UINT8 trafficClass);
67303 +A_UINT8 wmi_implicit_create_pstream(struct wmi_t *wmip, void *osbuf, A_UINT8 dir, A_UINT8 up);
67304 +
67305 +A_STATUS wmi_control_rx(struct wmi_t *wmip, void *osbuf);
67306 +void wmi_iterate_nodes(struct wmi_t *wmip, wlan_node_iter_func *f, void *arg);
67307 +void wmi_free_allnodes(struct wmi_t *wmip);
67308 +bss_t *wmi_find_node(struct wmi_t *wmip, const A_UINT8 *macaddr);
67309 +
67310 +
67311 +typedef enum {
67312 + NO_SYNC_WMIFLAG = 0,
67313 + SYNC_BEFORE_WMIFLAG, /* transmit all queued data before cmd */
67314 + SYNC_AFTER_WMIFLAG, /* any new data waits until cmd execs */
67315 + SYNC_BOTH_WMIFLAG,
67316 + END_WMIFLAG /* end marker */
67317 +} WMI_SYNC_FLAG;
67318 +
67319 +A_STATUS wmi_cmd_send(struct wmi_t *wmip, void *osbuf, WMI_COMMAND_ID cmdId,
67320 + WMI_SYNC_FLAG flag);
67321 +A_STATUS wmi_connect_cmd(struct wmi_t *wmip,
67322 + NETWORK_TYPE netType,
67323 + DOT11_AUTH_MODE dot11AuthMode,
67324 + AUTH_MODE authMode,
67325 + CRYPTO_TYPE pairwiseCrypto,
67326 + A_UINT8 pairwiseCryptoLen,
67327 + CRYPTO_TYPE groupCrypto,
67328 + A_UINT8 groupCryptoLen,
67329 + int ssidLength,
67330 + A_UCHAR *ssid,
67331 + A_UINT8 *bssid,
67332 + A_UINT16 channel,
67333 + A_UINT32 ctrl_flags);
67334 +A_STATUS wmi_reconnect_cmd(struct wmi_t *wmip,
67335 + A_UINT8 *bssid,
67336 + A_UINT16 channel);
67337 +A_STATUS wmi_disconnect_cmd(struct wmi_t *wmip);
67338 +A_STATUS wmi_getrev_cmd(struct wmi_t *wmip);
67339 +A_STATUS wmi_startscan_cmd(struct wmi_t *wmip, WMI_SCAN_TYPE scanType,
67340 + A_BOOL forceFgScan, A_BOOL isLegacy,
67341 + A_UINT32 homeDwellTime, A_UINT32 forceScanInterval);
67342 +A_STATUS wmi_scanparams_cmd(struct wmi_t *wmip, A_UINT16 fg_start_sec,
67343 + A_UINT16 fg_end_sec, A_UINT16 bg_sec,
67344 + A_UINT16 minact_chdw_msec,
67345 + A_UINT16 maxact_chdw_msec, A_UINT16 pas_chdw_msec,
67346 + A_UINT8 shScanRatio, A_UINT8 scanCtrlFlags,
67347 + A_UINT32 max_dfsch_act_time);
67348 +A_STATUS wmi_bssfilter_cmd(struct wmi_t *wmip, A_UINT8 filter, A_UINT32 ieMask);
67349 +A_STATUS wmi_probedSsid_cmd(struct wmi_t *wmip, A_UINT8 index, A_UINT8 flag,
67350 + A_UINT8 ssidLength, A_UCHAR *ssid);
67351 +A_STATUS wmi_listeninterval_cmd(struct wmi_t *wmip, A_UINT16 listenInterval, A_UINT16 listenBeacons);
67352 +A_STATUS wmi_bmisstime_cmd(struct wmi_t *wmip, A_UINT16 bmisstime, A_UINT16 bmissbeacons);
67353 +A_STATUS wmi_associnfo_cmd(struct wmi_t *wmip, A_UINT8 ieType,
67354 + A_UINT8 ieLen, A_UINT8 *ieInfo);
67355 +A_STATUS wmi_powermode_cmd(struct wmi_t *wmip, A_UINT8 powerMode);
67356 +A_STATUS wmi_ibsspmcaps_cmd(struct wmi_t *wmip, A_UINT8 pmEnable, A_UINT8 ttl,
67357 + A_UINT16 atim_windows, A_UINT16 timeout_value);
67358 +A_STATUS wmi_pmparams_cmd(struct wmi_t *wmip, A_UINT16 idlePeriod,
67359 + A_UINT16 psPollNum, A_UINT16 dtimPolicy);
67360 +A_STATUS wmi_disctimeout_cmd(struct wmi_t *wmip, A_UINT8 timeout);
67361 +A_STATUS wmi_sync_cmd(struct wmi_t *wmip, A_UINT8 syncNumber);
67362 +A_STATUS wmi_create_pstream_cmd(struct wmi_t *wmip, WMI_CREATE_PSTREAM_CMD *pstream);
67363 +A_STATUS wmi_delete_pstream_cmd(struct wmi_t *wmip, A_UINT8 trafficClass, A_UINT8 streamID);
67364 +A_STATUS wmi_set_bitrate_cmd(struct wmi_t *wmip, A_INT32 rate);
67365 +A_STATUS wmi_get_bitrate_cmd(struct wmi_t *wmip);
67366 +A_INT8 wmi_validate_bitrate(struct wmi_t *wmip, A_INT32 rate);
67367 +A_STATUS wmi_get_regDomain_cmd(struct wmi_t *wmip);
67368 +A_STATUS wmi_get_channelList_cmd(struct wmi_t *wmip);
67369 +A_STATUS wmi_set_channelParams_cmd(struct wmi_t *wmip, A_UINT8 scanParam,
67370 + WMI_PHY_MODE mode, A_INT8 numChan,
67371 + A_UINT16 *channelList);
67372 +
67373 +A_STATUS wmi_set_snr_threshold_params(struct wmi_t *wmip,
67374 + WMI_SNR_THRESHOLD_PARAMS_CMD *snrCmd);
67375 +A_STATUS wmi_set_rssi_threshold_params(struct wmi_t *wmip,
67376 + WMI_RSSI_THRESHOLD_PARAMS_CMD *rssiCmd);
67377 +A_STATUS wmi_clr_rssi_snr(struct wmi_t *wmip);
67378 +A_STATUS wmi_set_lq_threshold_params(struct wmi_t *wmip,
67379 + WMI_LQ_THRESHOLD_PARAMS_CMD *lqCmd);
67380 +A_STATUS wmi_set_rts_cmd(struct wmi_t *wmip, A_UINT16 threshold);
67381 +A_STATUS wmi_set_lpreamble_cmd(struct wmi_t *wmip, A_UINT8 status);
67382 +
67383 +A_STATUS wmi_set_error_report_bitmask(struct wmi_t *wmip, A_UINT32 bitmask);
67384 +
67385 +A_STATUS wmi_get_challenge_resp_cmd(struct wmi_t *wmip, A_UINT32 cookie,
67386 + A_UINT32 source);
67387 +A_STATUS wmi_config_debug_module_cmd(struct wmi_t *wmip, A_UINT16 mmask,
67388 + A_UINT16 tsr, A_BOOL rep, A_UINT16 size,
67389 + A_UINT32 valid);
67390 +A_STATUS wmi_get_stats_cmd(struct wmi_t *wmip);
67391 +A_STATUS wmi_addKey_cmd(struct wmi_t *wmip, A_UINT8 keyIndex,
67392 + CRYPTO_TYPE keyType, A_UINT8 keyUsage,
67393 + A_UINT8 keyLength,A_UINT8 *keyRSC,
67394 + A_UINT8 *keyMaterial, A_UINT8 key_op_ctrl,
67395 + WMI_SYNC_FLAG sync_flag);
67396 +A_STATUS wmi_add_krk_cmd(struct wmi_t *wmip, A_UINT8 *krk);
67397 +A_STATUS wmi_delete_krk_cmd(struct wmi_t *wmip);
67398 +A_STATUS wmi_deleteKey_cmd(struct wmi_t *wmip, A_UINT8 keyIndex);
67399 +A_STATUS wmi_set_akmp_params_cmd(struct wmi_t *wmip,
67400 + WMI_SET_AKMP_PARAMS_CMD *akmpParams);
67401 +A_STATUS wmi_get_pmkid_list_cmd(struct wmi_t *wmip);
67402 +A_STATUS wmi_set_pmkid_list_cmd(struct wmi_t *wmip,
67403 + WMI_SET_PMKID_LIST_CMD *pmkInfo);
67404 +A_STATUS wmi_set_txPwr_cmd(struct wmi_t *wmip, A_UINT8 dbM);
67405 +A_STATUS wmi_get_txPwr_cmd(struct wmi_t *wmip);
67406 +A_STATUS wmi_switch_radio(struct wmi_t *wmip, A_UINT8 on);
67407 +A_STATUS wmi_addBadAp_cmd(struct wmi_t *wmip, A_UINT8 apIndex, A_UINT8 *bssid);
67408 +A_STATUS wmi_deleteBadAp_cmd(struct wmi_t *wmip, A_UINT8 apIndex);
67409 +A_STATUS wmi_set_tkip_countermeasures_cmd(struct wmi_t *wmip, A_BOOL en);
67410 +A_STATUS wmi_setPmkid_cmd(struct wmi_t *wmip, A_UINT8 *bssid, A_UINT8 *pmkId,
67411 + A_BOOL set);
67412 +A_STATUS wmi_set_access_params_cmd(struct wmi_t *wmip, A_UINT16 txop,
67413 + A_UINT8 eCWmin, A_UINT8 eCWmax,
67414 + A_UINT8 aifsn);
67415 +A_STATUS wmi_set_retry_limits_cmd(struct wmi_t *wmip, A_UINT8 frameType,
67416 + A_UINT8 trafficClass, A_UINT8 maxRetries,
67417 + A_UINT8 enableNotify);
67418 +
67419 +void wmi_get_current_bssid(struct wmi_t *wmip, A_UINT8 *bssid);
67420 +
67421 +A_STATUS wmi_get_roam_tbl_cmd(struct wmi_t *wmip);
67422 +A_STATUS wmi_get_roam_data_cmd(struct wmi_t *wmip, A_UINT8 roamDataType);
67423 +A_STATUS wmi_set_roam_ctrl_cmd(struct wmi_t *wmip, WMI_SET_ROAM_CTRL_CMD *p,
67424 + A_UINT8 size);
67425 +A_STATUS wmi_set_powersave_timers_cmd(struct wmi_t *wmip,
67426 + WMI_POWERSAVE_TIMERS_POLICY_CMD *pCmd,
67427 + A_UINT8 size);
67428 +
67429 +A_STATUS wmi_set_opt_mode_cmd(struct wmi_t *wmip, A_UINT8 optMode);
67430 +A_STATUS wmi_opt_tx_frame_cmd(struct wmi_t *wmip,
67431 + A_UINT8 frmType,
67432 + A_UINT8 *dstMacAddr,
67433 + A_UINT8 *bssid,
67434 + A_UINT16 optIEDataLen,
67435 + A_UINT8 *optIEData);
67436 +
67437 +A_STATUS wmi_set_adhoc_bconIntvl_cmd(struct wmi_t *wmip, A_UINT16 intvl);
67438 +A_STATUS wmi_set_voice_pkt_size_cmd(struct wmi_t *wmip, A_UINT16 voicePktSize);
67439 +A_STATUS wmi_set_max_sp_len_cmd(struct wmi_t *wmip, A_UINT8 maxSpLen);
67440 +A_UINT8 convert_userPriority_to_trafficClass(A_UINT8 userPriority);
67441 +A_UINT8 wmi_get_power_mode_cmd(struct wmi_t *wmip);
67442 +A_STATUS wmi_verify_tspec_params(WMI_CREATE_PSTREAM_CMD *pCmd, A_BOOL tspecCompliance);
67443 +
67444 +#ifdef CONFIG_HOST_TCMD_SUPPORT
67445 +A_STATUS wmi_test_cmd(struct wmi_t *wmip, A_UINT8 *buf, A_UINT32 len);
67446 +#endif
67447 +
67448 +A_STATUS wmi_set_bt_status_cmd(struct wmi_t *wmip, A_UINT8 streamType, A_UINT8 status);
67449 +A_STATUS wmi_set_bt_params_cmd(struct wmi_t *wmip, WMI_SET_BT_PARAMS_CMD* cmd);
67450 +
67451 +
67452 +/*
67453 + * This function is used to configure the fix rates mask to the target.
67454 + */
67455 +A_STATUS wmi_set_fixrates_cmd(struct wmi_t *wmip, A_INT16 fixRatesMask);
67456 +A_STATUS wmi_get_ratemask_cmd(struct wmi_t *wmip);
67457 +
67458 +A_STATUS wmi_set_authmode_cmd(struct wmi_t *wmip, A_UINT8 mode);
67459 +
67460 +A_STATUS wmi_set_reassocmode_cmd(struct wmi_t *wmip, A_UINT8 mode);
67461 +
67462 +A_STATUS wmi_set_wmm_cmd(struct wmi_t *wmip, WMI_WMM_STATUS status);
67463 +A_STATUS wmi_set_wmm_txop(struct wmi_t *wmip, WMI_TXOP_CFG txEnable);
67464 +
67465 +A_STATUS wmi_get_keepalive_configured(struct wmi_t *wmip);
67466 +A_UINT8 wmi_get_keepalive_cmd(struct wmi_t *wmip);
67467 +A_STATUS wmi_set_keepalive_cmd(struct wmi_t *wmip, A_UINT8 keepaliveInterval);
67468 +
67469 +A_STATUS wmi_set_appie_cmd(struct wmi_t *wmip, A_UINT8 mgmtFrmType,
67470 + A_UINT8 ieLen,A_UINT8 *ieInfo);
67471 +
67472 +A_STATUS wmi_set_halparam_cmd(struct wmi_t *wmip, A_UINT8 *cmd, A_UINT16 dataLen);
67473 +A_INT32 wmi_get_rate(A_INT8 rateindex);
67474 +
67475 +/*Wake on Wireless WMI commands*/
67476 +A_STATUS wmi_set_host_sleep_mode_cmd(struct wmi_t *wmip, WMI_SET_HOST_SLEEP_MODE_CMD *cmd);
67477 +A_STATUS wmi_set_wow_mode_cmd(struct wmi_t *wmip, WMI_SET_WOW_MODE_CMD *cmd);
67478 +A_STATUS wmi_get_wow_list_cmd(struct wmi_t *wmip, WMI_GET_WOW_LIST_CMD *cmd);
67479 +A_STATUS wmi_add_wow_pattern_cmd(struct wmi_t *wmip,
67480 + WMI_ADD_WOW_PATTERN_CMD *cmd, A_UINT8* pattern, A_UINT8* mask, A_UINT8 pattern_size);
67481 +A_STATUS wmi_del_wow_pattern_cmd(struct wmi_t *wmip,
67482 + WMI_DEL_WOW_PATTERN_CMD *cmd);
67483 +A_STATUS wmi_set_wsc_status_cmd(struct wmi_t *wmip, A_UINT32 status);
67484 +
67485 +bss_t *
67486 +wmi_find_Ssidnode (struct wmi_t *wmip, A_UCHAR *pSsid,
67487 + A_UINT32 ssidLength, A_BOOL bIsWPA2);
67488 +
67489 +void
67490 +wmi_node_return (struct wmi_t *wmip, bss_t *bss);
67491 +#ifdef __cplusplus
67492 +}
67493 +#endif
67494 +
67495 +#endif /* _WMI_API_H_ */
67496 Index: linux-2.6.28/drivers/ar6000/include/wmi.h
67497 ===================================================================
67498 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
67499 +++ linux-2.6.28/drivers/ar6000/include/wmi.h 2009-01-02 00:01:56.000000000 +0100
67500 @@ -0,0 +1,1743 @@
67501 +/*
67502 + * Copyright (c) 2004-2006 Atheros Communications Inc.
67503 + * All rights reserved.
67504 + *
67505 + *
67506 + * $ATH_LICENSE_HOSTSDK0_C$
67507 + *
67508 + * This file contains the definitions of the WMI protocol specified in the
67509 + * Wireless Module Interface (WMI). It includes definitions of all the
67510 + * commands and events. Commands are messages from the host to the WM.
67511 + * Events and Replies are messages from the WM to the host.
67512 + *
67513 + * Ownership of correctness in regards to WMI commands
67514 + * belongs to the host driver and the WM is not required to validate
67515 + * parameters for value, proper range, or any other checking.
67516 + *
67517 + */
67518 +
67519 +#ifndef _WMI_H_
67520 +#define _WMI_H_
67521 +
67522 +#ifndef ATH_TARGET
67523 +#include "athstartpack.h"
67524 +#endif
67525 +
67526 +#include "wmix.h"
67527 +
67528 +#ifdef __cplusplus
67529 +extern "C" {
67530 +#endif
67531 +
67532 +#define WMI_PROTOCOL_VERSION 0x0002
67533 +#define WMI_PROTOCOL_REVISION 0x0000
67534 +
67535 +#define ATH_MAC_LEN 6 /* length of mac in bytes */
67536 +#define WMI_CMD_MAX_LEN 100
67537 +#define WMI_CONTROL_MSG_MAX_LEN 256
67538 +#define WMI_OPT_CONTROL_MSG_MAX_LEN 1536
67539 +#define IS_ETHERTYPE(_typeOrLen) ((_typeOrLen) >= 0x0600)
67540 +#define RFC1042OUI {0x00, 0x00, 0x00}
67541 +
67542 +#define IP_ETHERTYPE 0x0800
67543 +
67544 +#define WMI_IMPLICIT_PSTREAM 0xFF
67545 +#define WMI_MAX_THINSTREAM 15
67546 +
67547 +struct host_app_area_s {
67548 + A_UINT32 wmi_protocol_ver;
67549 +};
67550 +
67551 +/*
67552 + * Data Path
67553 + */
67554 +typedef PREPACK struct {
67555 + A_UINT8 dstMac[ATH_MAC_LEN];
67556 + A_UINT8 srcMac[ATH_MAC_LEN];
67557 + A_UINT16 typeOrLen;
67558 +} POSTPACK ATH_MAC_HDR;
67559 +
67560 +typedef PREPACK struct {
67561 + A_UINT8 dsap;
67562 + A_UINT8 ssap;
67563 + A_UINT8 cntl;
67564 + A_UINT8 orgCode[3];
67565 + A_UINT16 etherType;
67566 +} POSTPACK ATH_LLC_SNAP_HDR;
67567 +
67568 +typedef enum {
67569 + DATA_MSGTYPE = 0x0,
67570 + CNTL_MSGTYPE,
67571 + SYNC_MSGTYPE
67572 +} WMI_MSG_TYPE;
67573 +
67574 +
67575 +typedef PREPACK struct {
67576 + A_INT8 rssi;
67577 + A_UINT8 info; /* WMI_MSG_TYPE in lower 2 bits - b1b0 */
67578 + /* UP in next 3 bits - b4b3b2 */
67579 +#define WMI_DATA_HDR_MSG_TYPE_MASK 0x03
67580 +#define WMI_DATA_HDR_MSG_TYPE_SHIFT 0
67581 +#define WMI_DATA_HDR_UP_MASK 0x07
67582 +#define WMI_DATA_HDR_UP_SHIFT 2
67583 +#define WMI_DATA_HDR_IS_MSG_TYPE(h, t) (((h)->info & (WMI_DATA_HDR_MSG_TYPE_MASK)) == (t))
67584 +} POSTPACK WMI_DATA_HDR;
67585 +
67586 +
67587 +#define WMI_DATA_HDR_SET_MSG_TYPE(h, t) (h)->info = (((h)->info & ~(WMI_DATA_HDR_MSG_TYPE_MASK << WMI_DATA_HDR_MSG_TYPE_SHIFT)) | (t << WMI_DATA_HDR_MSG_TYPE_SHIFT))
67588 +#define WMI_DATA_HDR_SET_UP(h, p) (h)->info = (((h)->info & ~(WMI_DATA_HDR_UP_MASK << WMI_DATA_HDR_UP_SHIFT)) | (p << WMI_DATA_HDR_UP_SHIFT))
67589 +
67590 +/*
67591 + * Control Path
67592 + */
67593 +typedef PREPACK struct {
67594 + A_UINT16 commandId;
67595 +} POSTPACK WMI_CMD_HDR; /* used for commands and events */
67596 +
67597 +/*
67598 + * List of Commnands
67599 + */
67600 +typedef enum {
67601 + WMI_CONNECT_CMDID = 0x0001,
67602 + WMI_RECONNECT_CMDID,
67603 + WMI_DISCONNECT_CMDID,
67604 + WMI_SYNCHRONIZE_CMDID,
67605 + WMI_CREATE_PSTREAM_CMDID,
67606 + WMI_DELETE_PSTREAM_CMDID,
67607 + WMI_START_SCAN_CMDID,
67608 + WMI_SET_SCAN_PARAMS_CMDID,
67609 + WMI_SET_BSS_FILTER_CMDID,
67610 + WMI_SET_PROBED_SSID_CMDID,
67611 + WMI_SET_LISTEN_INT_CMDID,
67612 + WMI_SET_BMISS_TIME_CMDID,
67613 + WMI_SET_DISC_TIMEOUT_CMDID,
67614 + WMI_GET_CHANNEL_LIST_CMDID,
67615 + WMI_SET_BEACON_INT_CMDID,
67616 + WMI_GET_STATISTICS_CMDID,
67617 + WMI_SET_CHANNEL_PARAMS_CMDID,
67618 + WMI_SET_POWER_MODE_CMDID,
67619 + WMI_SET_IBSS_PM_CAPS_CMDID,
67620 + WMI_SET_POWER_PARAMS_CMDID,
67621 + WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID,
67622 + WMI_ADD_CIPHER_KEY_CMDID,
67623 + WMI_DELETE_CIPHER_KEY_CMDID,
67624 + WMI_ADD_KRK_CMDID,
67625 + WMI_DELETE_KRK_CMDID,
67626 + WMI_SET_PMKID_CMDID,
67627 + WMI_SET_TX_PWR_CMDID,
67628 + WMI_GET_TX_PWR_CMDID,
67629 + WMI_SET_ASSOC_INFO_CMDID,
67630 + WMI_ADD_BAD_AP_CMDID,
67631 + WMI_DELETE_BAD_AP_CMDID,
67632 + WMI_SET_TKIP_COUNTERMEASURES_CMDID,
67633 + WMI_RSSI_THRESHOLD_PARAMS_CMDID,
67634 + WMI_TARGET_ERROR_REPORT_BITMASK_CMDID,
67635 + WMI_SET_ACCESS_PARAMS_CMDID,
67636 + WMI_SET_RETRY_LIMITS_CMDID,
67637 + WMI_SET_OPT_MODE_CMDID,
67638 + WMI_OPT_TX_FRAME_CMDID,
67639 + WMI_SET_VOICE_PKT_SIZE_CMDID,
67640 + WMI_SET_MAX_SP_LEN_CMDID,
67641 + WMI_SET_ROAM_CTRL_CMDID,
67642 + WMI_GET_ROAM_TBL_CMDID,
67643 + WMI_GET_ROAM_DATA_CMDID,
67644 + WMI_ENABLE_RM_CMDID,
67645 + WMI_SET_MAX_OFFHOME_DURATION_CMDID,
67646 + WMI_EXTENSION_CMDID, /* Non-wireless extensions */
67647 + WMI_SNR_THRESHOLD_PARAMS_CMDID,
67648 + WMI_LQ_THRESHOLD_PARAMS_CMDID,
67649 + WMI_SET_LPREAMBLE_CMDID,
67650 + WMI_SET_RTS_CMDID,
67651 + WMI_CLR_RSSI_SNR_CMDID,
67652 + WMI_SET_FIXRATES_CMDID,
67653 + WMI_GET_FIXRATES_CMDID,
67654 + WMI_SET_AUTH_MODE_CMDID,
67655 + WMI_SET_REASSOC_MODE_CMDID,
67656 + WMI_SET_WMM_CMDID,
67657 + WMI_SET_WMM_TXOP_CMDID,
67658 + WMI_TEST_CMDID,
67659 + WMI_SET_BT_STATUS_CMDID,
67660 + WMI_SET_BT_PARAMS_CMDID,
67661 +
67662 + WMI_SET_KEEPALIVE_CMDID,
67663 + WMI_GET_KEEPALIVE_CMDID,
67664 + WMI_SET_APPIE_CMDID,
67665 + WMI_GET_APPIE_CMDID,
67666 + WMI_SET_WSC_STATUS_CMDID,
67667 +
67668 + /* Wake on Wireless */
67669 + WMI_SET_HOST_SLEEP_MODE_CMDID,
67670 + WMI_SET_WOW_MODE_CMDID,
67671 + WMI_GET_WOW_LIST_CMDID,
67672 + WMI_ADD_WOW_PATTERN_CMDID,
67673 + WMI_DEL_WOW_PATTERN_CMDID,
67674 + WMI_SET_MAC_ADDRESS_CMDID,
67675 + WMI_SET_AKMP_PARAMS_CMDID,
67676 + WMI_SET_PMKID_LIST_CMDID,
67677 + WMI_GET_PMKID_LIST_CMDID,
67678 +
67679 + /*
67680 + * Developer commands starts at 0xF000
67681 + */
67682 + WMI_SET_BITRATE_CMDID = 0xF000,
67683 + WMI_GET_BITRATE_CMDID,
67684 + WMI_SET_WHALPARAM_CMDID,
67685 +
67686 +} WMI_COMMAND_ID;
67687 +
67688 +/*
67689 + * Frame Types
67690 + */
67691 +typedef enum {
67692 + WMI_FRAME_BEACON = 0,
67693 + WMI_FRAME_PROBE_REQ,
67694 + WMI_FRAME_PROBE_RESP,
67695 + WMI_FRAME_ASSOC_REQ,
67696 + WMI_FRAME_ASSOC_RESP,
67697 + WMI_NUM_MGMT_FRAME
67698 +} WMI_MGMT_FRAME_TYPE;
67699 +
67700 +/*
67701 + * Connect Command
67702 + */
67703 +typedef enum {
67704 + INFRA_NETWORK = 0x01,
67705 + ADHOC_NETWORK = 0x02,
67706 + ADHOC_CREATOR = 0x04,
67707 +} NETWORK_TYPE;
67708 +
67709 +typedef enum {
67710 + OPEN_AUTH = 0x01,
67711 + SHARED_AUTH = 0x02,
67712 + LEAP_AUTH = 0x04, /* different from IEEE_AUTH_MODE definitions */
67713 +} DOT11_AUTH_MODE;
67714 +
67715 +typedef enum {
67716 + NONE_AUTH = 0x01,
67717 + WPA_AUTH = 0x02,
67718 + WPA_PSK_AUTH = 0x03,
67719 + WPA2_AUTH = 0x04,
67720 + WPA2_PSK_AUTH = 0x05,
67721 + WPA_AUTH_CCKM = 0x06,
67722 + WPA2_AUTH_CCKM = 0x07,
67723 +} AUTH_MODE;
67724 +
67725 +typedef enum {
67726 + NONE_CRYPT = 0x01,
67727 + WEP_CRYPT = 0x02,
67728 + TKIP_CRYPT = 0x03,
67729 + AES_CRYPT = 0x04,
67730 +} CRYPTO_TYPE;
67731 +
67732 +#define WMI_MIN_CRYPTO_TYPE NONE_CRYPT
67733 +#define WMI_MAX_CRYPTO_TYPE (AES_CRYPT + 1)
67734 +
67735 +#define WMI_MIN_KEY_INDEX 0
67736 +#define WMI_MAX_KEY_INDEX 3
67737 +
67738 +#define WMI_MAX_KEY_LEN 32
67739 +
67740 +#define WMI_MAX_SSID_LEN 32
67741 +
67742 +typedef enum {
67743 + CONNECT_ASSOC_POLICY_USER = 0x0001,
67744 + CONNECT_SEND_REASSOC = 0x0002,
67745 + CONNECT_IGNORE_WPAx_GROUP_CIPHER = 0x0004,
67746 + CONNECT_PROFILE_MATCH_DONE = 0x0008,
67747 + CONNECT_IGNORE_AAC_BEACON = 0x0010,
67748 + CONNECT_CSA_FOLLOW_BSS = 0x0020,
67749 +} WMI_CONNECT_CTRL_FLAGS_BITS;
67750 +
67751 +#define DEFAULT_CONNECT_CTRL_FLAGS (CONNECT_CSA_FOLLOW_BSS)
67752 +
67753 +typedef PREPACK struct {
67754 + A_UINT8 networkType;
67755 + A_UINT8 dot11AuthMode;
67756 + A_UINT8 authMode;
67757 + A_UINT8 pairwiseCryptoType;
67758 + A_UINT8 pairwiseCryptoLen;
67759 + A_UINT8 groupCryptoType;
67760 + A_UINT8 groupCryptoLen;
67761 + A_UINT8 ssidLength;
67762 + A_UCHAR ssid[WMI_MAX_SSID_LEN];
67763 + A_UINT16 channel;
67764 + A_UINT8 bssid[ATH_MAC_LEN];
67765 + A_UINT32 ctrl_flags;
67766 +} POSTPACK WMI_CONNECT_CMD;
67767 +
67768 +/*
67769 + * WMI_RECONNECT_CMDID
67770 + */
67771 +typedef PREPACK struct {
67772 + A_UINT16 channel; /* hint */
67773 + A_UINT8 bssid[ATH_MAC_LEN]; /* mandatory if set */
67774 +} POSTPACK WMI_RECONNECT_CMD;
67775 +
67776 +/*
67777 + * WMI_ADD_CIPHER_KEY_CMDID
67778 + */
67779 +typedef enum {
67780 + PAIRWISE_USAGE = 0x00,
67781 + GROUP_USAGE = 0x01,
67782 + TX_USAGE = 0x02, /* default Tx Key - Static WEP only */
67783 +} KEY_USAGE;
67784 +
67785 +/*
67786 + * Bit Flag
67787 + * Bit 0 - Initialise TSC - default is Initialize
67788 + */
67789 +#define KEY_OP_INIT_TSC 0x01
67790 +#define KEY_OP_INIT_RSC 0x02
67791 +
67792 +#define KEY_OP_INIT_VAL 0x03 /* Default Initialise the TSC & RSC */
67793 +#define KEY_OP_VALID_MASK 0x03
67794 +
67795 +typedef PREPACK struct {
67796 + A_UINT8 keyIndex;
67797 + A_UINT8 keyType;
67798 + A_UINT8 keyUsage; /* KEY_USAGE */
67799 + A_UINT8 keyLength;
67800 + A_UINT8 keyRSC[8]; /* key replay sequence counter */
67801 + A_UINT8 key[WMI_MAX_KEY_LEN];
67802 + A_UINT8 key_op_ctrl; /* Additional Key Control information */
67803 +} POSTPACK WMI_ADD_CIPHER_KEY_CMD;
67804 +
67805 +/*
67806 + * WMI_DELETE_CIPHER_KEY_CMDID
67807 + */
67808 +typedef PREPACK struct {
67809 + A_UINT8 keyIndex;
67810 +} POSTPACK WMI_DELETE_CIPHER_KEY_CMD;
67811 +
67812 +#define WMI_KRK_LEN 16
67813 +/*
67814 + * WMI_ADD_KRK_CMDID
67815 + */
67816 +typedef PREPACK struct {
67817 + A_UINT8 krk[WMI_KRK_LEN];
67818 +} POSTPACK WMI_ADD_KRK_CMD;
67819 +
67820 +/*
67821 + * WMI_SET_TKIP_COUNTERMEASURES_CMDID
67822 + */
67823 +typedef enum {
67824 + WMI_TKIP_CM_DISABLE = 0x0,
67825 + WMI_TKIP_CM_ENABLE = 0x1,
67826 +} WMI_TKIP_CM_CONTROL;
67827 +
67828 +typedef PREPACK struct {
67829 + A_UINT8 cm_en; /* WMI_TKIP_CM_CONTROL */
67830 +} POSTPACK WMI_SET_TKIP_COUNTERMEASURES_CMD;
67831 +
67832 +/*
67833 + * WMI_SET_PMKID_CMDID
67834 + */
67835 +
67836 +#define WMI_PMKID_LEN 16
67837 +
67838 +typedef enum {
67839 + PMKID_DISABLE = 0,
67840 + PMKID_ENABLE = 1,
67841 +} PMKID_ENABLE_FLG;
67842 +
67843 +typedef PREPACK struct {
67844 + A_UINT8 bssid[ATH_MAC_LEN];
67845 + A_UINT8 enable; /* PMKID_ENABLE_FLG */
67846 + A_UINT8 pmkid[WMI_PMKID_LEN];
67847 +} POSTPACK WMI_SET_PMKID_CMD;
67848 +
67849 +/*
67850 + * WMI_START_SCAN_CMD
67851 + */
67852 +typedef enum {
67853 + WMI_LONG_SCAN = 0,
67854 + WMI_SHORT_SCAN = 1,
67855 +} WMI_SCAN_TYPE;
67856 +
67857 +typedef PREPACK struct {
67858 + A_BOOL forceFgScan;
67859 + A_BOOL isLegacy; /* For Legacy Cisco AP compatibility */
67860 + A_UINT32 homeDwellTime; /* Maximum duration in the home channel(milliseconds) */
67861 + A_UINT32 forceScanInterval; /* Time interval between scans (milliseconds)*/
67862 + A_UINT8 scanType; /* WMI_SCAN_TYPE */
67863 +} POSTPACK WMI_START_SCAN_CMD;
67864 +
67865 +/*
67866 + * WMI_SET_SCAN_PARAMS_CMDID
67867 + */
67868 +#define WMI_SHORTSCANRATIO_DEFAULT 3
67869 +typedef enum {
67870 + CONNECT_SCAN_CTRL_FLAGS = 0x01, /* set if can scan in the Connect cmd */
67871 + SCAN_CONNECTED_CTRL_FLAGS = 0x02, /* set if scan for the SSID it is */
67872 + /* already connected to */
67873 + ACTIVE_SCAN_CTRL_FLAGS = 0x04, /* set if enable active scan */
67874 + ROAM_SCAN_CTRL_FLAGS = 0x08, /* set if enable roam scan when bmiss and lowrssi */
67875 + REPORT_BSSINFO_CTRL_FLAGS = 0x10, /* set if follows customer BSSINFO reporting rule */
67876 + ENABLE_AUTO_CTRL_FLAGS = 0x20, /* if disabled, target doesn't
67877 + scan after a disconnect event */
67878 + ENABLE_SCAN_ABORT_EVENT = 0x40 /* Scan complete event with canceled status will be generated when a scan is prempted before it gets completed */
67879 +
67880 +} WMI_SCAN_CTRL_FLAGS_BITS;
67881 +
67882 +#define CAN_SCAN_IN_CONNECT(flags) (flags & CONNECT_SCAN_CTRL_FLAGS)
67883 +#define CAN_SCAN_CONNECTED(flags) (flags & SCAN_CONNECTED_CTRL_FLAGS)
67884 +#define ENABLE_ACTIVE_SCAN(flags) (flags & ACTIVE_SCAN_CTRL_FLAGS)
67885 +#define ENABLE_ROAM_SCAN(flags) (flags & ROAM_SCAN_CTRL_FLAGS)
67886 +#define CONFIG_REPORT_BSSINFO(flags) (flags & REPORT_BSSINFO_CTRL_FLAGS)
67887 +#define IS_AUTO_SCAN_ENABLED(flags) (flags & ENABLE_AUTO_CTRL_FLAGS)
67888 +#define SCAN_ABORT_EVENT_ENABLED(flags) (flags & ENABLE_SCAN_ABORT_EVENT)
67889 +
67890 +#define DEFAULT_SCAN_CTRL_FLAGS (CONNECT_SCAN_CTRL_FLAGS| SCAN_CONNECTED_CTRL_FLAGS| ACTIVE_SCAN_CTRL_FLAGS| ROAM_SCAN_CTRL_FLAGS | ENABLE_AUTO_CTRL_FLAGS)
67891 +
67892 +
67893 +typedef PREPACK struct {
67894 + A_UINT16 fg_start_period; /* seconds */
67895 + A_UINT16 fg_end_period; /* seconds */
67896 + A_UINT16 bg_period; /* seconds */
67897 + A_UINT16 maxact_chdwell_time; /* msec */
67898 + A_UINT16 pas_chdwell_time; /* msec */
67899 + A_UINT8 shortScanRatio; /* how many shorts scan for one long */
67900 + A_UINT8 scanCtrlFlags;
67901 + A_UINT16 minact_chdwell_time; /* msec */
67902 + A_UINT32 max_dfsch_act_time; /* msecs */
67903 +} POSTPACK WMI_SCAN_PARAMS_CMD;
67904 +
67905 +/*
67906 + * WMI_SET_BSS_FILTER_CMDID
67907 + */
67908 +typedef enum {
67909 + NONE_BSS_FILTER = 0x0, /* no beacons forwarded */
67910 + ALL_BSS_FILTER, /* all beacons forwarded */
67911 + PROFILE_FILTER, /* only beacons matching profile */
67912 + ALL_BUT_PROFILE_FILTER, /* all but beacons matching profile */
67913 + CURRENT_BSS_FILTER, /* only beacons matching current BSS */
67914 + ALL_BUT_BSS_FILTER, /* all but beacons matching BSS */
67915 + PROBED_SSID_FILTER, /* beacons matching probed ssid */
67916 + LAST_BSS_FILTER, /* marker only */
67917 +} WMI_BSS_FILTER;
67918 +
67919 +typedef PREPACK struct {
67920 + A_UINT8 bssFilter; /* see WMI_BSS_FILTER */
67921 + A_UINT32 ieMask;
67922 +} POSTPACK WMI_BSS_FILTER_CMD;
67923 +
67924 +/*
67925 + * WMI_SET_PROBED_SSID_CMDID
67926 + */
67927 +#define MAX_PROBED_SSID_INDEX 5
67928 +
67929 +typedef enum {
67930 + DISABLE_SSID_FLAG = 0, /* disables entry */
67931 + SPECIFIC_SSID_FLAG = 0x01, /* probes specified ssid */
67932 + ANY_SSID_FLAG = 0x02, /* probes for any ssid */
67933 +} WMI_SSID_FLAG;
67934 +
67935 +typedef PREPACK struct {
67936 + A_UINT8 entryIndex; /* 0 to MAX_PROBED_SSID_INDEX */
67937 + A_UINT8 flag; /* WMI_SSID_FLG */
67938 + A_UINT8 ssidLength;
67939 + A_UINT8 ssid[32];
67940 +} POSTPACK WMI_PROBED_SSID_CMD;
67941 +
67942 +/*
67943 + * WMI_SET_LISTEN_INT_CMDID
67944 + * The Listen interval is between 15 and 3000 TUs
67945 + */
67946 +#define MIN_LISTEN_INTERVAL 15
67947 +#define MAX_LISTEN_INTERVAL 5000
67948 +#define MIN_LISTEN_BEACONS 1
67949 +#define MAX_LISTEN_BEACONS 50
67950 +
67951 +typedef PREPACK struct {
67952 + A_UINT16 listenInterval;
67953 + A_UINT16 numBeacons;
67954 +} POSTPACK WMI_LISTEN_INT_CMD;
67955 +
67956 +/*
67957 + * WMI_SET_BEACON_INT_CMDID
67958 + */
67959 +typedef PREPACK struct {
67960 + A_UINT16 beaconInterval;
67961 +} POSTPACK WMI_BEACON_INT_CMD;
67962 +
67963 +/*
67964 + * WMI_SET_BMISS_TIME_CMDID
67965 + * valid values are between 1000 and 5000 TUs
67966 + */
67967 +
67968 +#define MIN_BMISS_TIME 1000
67969 +#define MAX_BMISS_TIME 5000
67970 +#define MIN_BMISS_BEACONS 1
67971 +#define MAX_BMISS_BEACONS 50
67972 +
67973 +typedef PREPACK struct {
67974 + A_UINT16 bmissTime;
67975 + A_UINT16 numBeacons;
67976 +} POSTPACK WMI_BMISS_TIME_CMD;
67977 +
67978 +/*
67979 + * WMI_SET_POWER_MODE_CMDID
67980 + */
67981 +typedef enum {
67982 + REC_POWER = 0x01,
67983 + MAX_PERF_POWER,
67984 +} WMI_POWER_MODE;
67985 +
67986 +typedef PREPACK struct {
67987 + A_UINT8 powerMode; /* WMI_POWER_MODE */
67988 +} POSTPACK WMI_POWER_MODE_CMD;
67989 +
67990 +/*
67991 + * WMI_SET_POWER_PARAMS_CMDID
67992 + */
67993 +typedef enum {
67994 + IGNORE_DTIM = 0x01,
67995 + NORMAL_DTIM = 0x02,
67996 + STICK_DTIM = 0x03,
67997 +} WMI_DTIM_POLICY;
67998 +
67999 +typedef PREPACK struct {
68000 + A_UINT16 idle_period; /* msec */
68001 + A_UINT16 pspoll_number;
68002 + A_UINT16 dtim_policy;
68003 +} POSTPACK WMI_POWER_PARAMS_CMD;
68004 +
68005 +typedef PREPACK struct {
68006 + A_UINT8 power_saving;
68007 + A_UINT8 ttl; /* number of beacon periods */
68008 + A_UINT16 atim_windows; /* msec */
68009 + A_UINT16 timeout_value; /* msec */
68010 +} POSTPACK WMI_IBSS_PM_CAPS_CMD;
68011 +
68012 +/*
68013 + * WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID
68014 + */
68015 +typedef enum {
68016 + IGNORE_TIM_ALL_QUEUES_APSD = 0,
68017 + PROCESS_TIM_ALL_QUEUES_APSD = 1,
68018 + IGNORE_TIM_SIMULATED_APSD = 2,
68019 + PROCESS_TIM_SIMULATED_APSD = 3,
68020 +} APSD_TIM_POLICY;
68021 +
68022 +typedef PREPACK struct {
68023 + A_UINT16 psPollTimeout; /* msec */
68024 + A_UINT16 triggerTimeout; /* msec */
68025 + A_UINT32 apsdTimPolicy; /* TIM behavior with ques APSD enabled. Default is IGNORE_TIM_ALL_QUEUES_APSD */
68026 + A_UINT32 simulatedAPSDTimPolicy; /* TIM behavior with simulated APSD enabled. Default is PROCESS_TIM_SIMULATED_APSD */
68027 +} POSTPACK WMI_POWERSAVE_TIMERS_POLICY_CMD;
68028 +
68029 +/*
68030 + * WMI_SET_VOICE_PKT_SIZE_CMDID
68031 + */
68032 +typedef PREPACK struct {
68033 + A_UINT16 voicePktSize;
68034 +} POSTPACK WMI_SET_VOICE_PKT_SIZE_CMD;
68035 +
68036 +/*
68037 + * WMI_SET_MAX_SP_LEN_CMDID
68038 + */
68039 +typedef enum {
68040 + DELIVER_ALL_PKT = 0x0,
68041 + DELIVER_2_PKT = 0x1,
68042 + DELIVER_4_PKT = 0x2,
68043 + DELIVER_6_PKT = 0x3,
68044 +} APSD_SP_LEN_TYPE;
68045 +
68046 +typedef PREPACK struct {
68047 + A_UINT8 maxSPLen;
68048 +} POSTPACK WMI_SET_MAX_SP_LEN_CMD;
68049 +
68050 +/*
68051 + * WMI_SET_DISC_TIMEOUT_CMDID
68052 + */
68053 +typedef PREPACK struct {
68054 + A_UINT8 disconnectTimeout; /* seconds */
68055 +} POSTPACK WMI_DISC_TIMEOUT_CMD;
68056 +
68057 +typedef enum {
68058 + UPLINK_TRAFFIC = 0,
68059 + DNLINK_TRAFFIC = 1,
68060 + BIDIR_TRAFFIC = 2,
68061 +} DIR_TYPE;
68062 +
68063 +typedef enum {
68064 + DISABLE_FOR_THIS_AC = 0,
68065 + ENABLE_FOR_THIS_AC = 1,
68066 + ENABLE_FOR_ALL_AC = 2,
68067 +} VOICEPS_CAP_TYPE;
68068 +
68069 +typedef enum {
68070 + TRAFFIC_TYPE_APERIODIC = 0,
68071 + TRAFFIC_TYPE_PERIODIC = 1,
68072 +}TRAFFIC_TYPE;
68073 +
68074 +/*
68075 + * WMI_CREATE_PSTREAM_CMDID
68076 + */
68077 +typedef PREPACK struct {
68078 + A_UINT32 minServiceInt; /* in milli-sec */
68079 + A_UINT32 maxServiceInt; /* in milli-sec */
68080 + A_UINT32 inactivityInt; /* in milli-sec */
68081 + A_UINT32 suspensionInt; /* in milli-sec */
68082 + A_UINT32 serviceStartTime;
68083 + A_UINT32 minDataRate; /* in bps */
68084 + A_UINT32 meanDataRate; /* in bps */
68085 + A_UINT32 peakDataRate; /* in bps */
68086 + A_UINT32 maxBurstSize;
68087 + A_UINT32 delayBound;
68088 + A_UINT32 minPhyRate; /* in bps */
68089 + A_UINT32 sba;
68090 + A_UINT32 mediumTime;
68091 + A_UINT16 nominalMSDU; /* in octects */
68092 + A_UINT16 maxMSDU; /* in octects */
68093 + A_UINT8 trafficClass;
68094 + A_UINT8 trafficType; /* TRAFFIC_TYPE */
68095 + A_UINT8 trafficDirection; /* TRAFFIC_DIR */
68096 + A_UINT8 voicePSCapability; /* VOICEPS_CAP_TYPE */
68097 + A_UINT8 tsid;
68098 + A_UINT8 userPriority; /* 802.1D user priority */
68099 +} POSTPACK WMI_CREATE_PSTREAM_CMD;
68100 +
68101 +/*
68102 + * WMI_DELETE_PSTREAM_CMDID
68103 + */
68104 +typedef PREPACK struct {
68105 + A_UINT8 trafficClass;
68106 + A_UINT8 tsid;
68107 +} POSTPACK WMI_DELETE_PSTREAM_CMD;
68108 +
68109 +/*
68110 + * WMI_SET_CHANNEL_PARAMS_CMDID
68111 + */
68112 +typedef enum {
68113 + WMI_11A_MODE = 0x1,
68114 + WMI_11G_MODE = 0x2,
68115 + WMI_11AG_MODE = 0x3,
68116 + WMI_11B_MODE = 0x4,
68117 + WMI_11GONLY_MODE = 0x5,
68118 +} WMI_PHY_MODE;
68119 +
68120 +#define WMI_MAX_CHANNELS 32
68121 +
68122 +typedef PREPACK struct {
68123 + A_UINT8 reserved1;
68124 + A_UINT8 scanParam; /* set if enable scan */
68125 + A_UINT8 phyMode; /* see WMI_PHY_MODE */
68126 + A_UINT8 numChannels; /* how many channels follow */
68127 + A_UINT16 channelList[1]; /* channels in Mhz */
68128 +} POSTPACK WMI_CHANNEL_PARAMS_CMD;
68129 +
68130 +
68131 +/*
68132 + * WMI_RSSI_THRESHOLD_PARAMS_CMDID
68133 + * Setting the polltime to 0 would disable polling.
68134 + * Threshold values are in the ascending order, and should agree to:
68135 + * (lowThreshold_lowerVal < lowThreshold_upperVal < highThreshold_lowerVal
68136 + * < highThreshold_upperVal)
68137 + */
68138 +
68139 +typedef PREPACK struct WMI_RSSI_THRESHOLD_PARAMS{
68140 + A_UINT32 pollTime; /* Polling time as a factor of LI */
68141 + A_INT16 thresholdAbove1_Val; /* lowest of upper */
68142 + A_INT16 thresholdAbove2_Val;
68143 + A_INT16 thresholdAbove3_Val;
68144 + A_INT16 thresholdAbove4_Val;
68145 + A_INT16 thresholdAbove5_Val;
68146 + A_INT16 thresholdAbove6_Val; /* highest of upper */
68147 + A_INT16 thresholdBelow1_Val; /* lowest of bellow */
68148 + A_INT16 thresholdBelow2_Val;
68149 + A_INT16 thresholdBelow3_Val;
68150 + A_INT16 thresholdBelow4_Val;
68151 + A_INT16 thresholdBelow5_Val;
68152 + A_INT16 thresholdBelow6_Val; /* highest of bellow */
68153 + A_UINT8 weight; /* "alpha" */
68154 + A_UINT8 reserved[3];
68155 +} POSTPACK WMI_RSSI_THRESHOLD_PARAMS_CMD;
68156 +
68157 +/*
68158 + * WMI_SNR_THRESHOLD_PARAMS_CMDID
68159 + * Setting the polltime to 0 would disable polling.
68160 + */
68161 +
68162 +typedef PREPACK struct WMI_SNR_THRESHOLD_PARAMS{
68163 + A_UINT32 pollTime; /* Polling time as a factor of LI */
68164 + A_UINT8 weight; /* "alpha" */
68165 + A_UINT8 thresholdAbove1_Val; /* lowest of uppper*/
68166 + A_UINT8 thresholdAbove2_Val;
68167 + A_UINT8 thresholdAbove3_Val;
68168 + A_UINT8 thresholdAbove4_Val; /* highest of upper */
68169 + A_UINT8 thresholdBelow1_Val; /* lowest of bellow */
68170 + A_UINT8 thresholdBelow2_Val;
68171 + A_UINT8 thresholdBelow3_Val;
68172 + A_UINT8 thresholdBelow4_Val; /* highest of bellow */
68173 + A_UINT8 reserved[3];
68174 +} POSTPACK WMI_SNR_THRESHOLD_PARAMS_CMD;
68175 +
68176 +/*
68177 + * WMI_LQ_THRESHOLD_PARAMS_CMDID
68178 + */
68179 +typedef PREPACK struct WMI_LQ_THRESHOLD_PARAMS {
68180 + A_UINT8 enable;
68181 + A_UINT8 thresholdAbove1_Val;
68182 + A_UINT8 thresholdAbove2_Val;
68183 + A_UINT8 thresholdAbove3_Val;
68184 + A_UINT8 thresholdAbove4_Val;
68185 + A_UINT8 thresholdBelow1_Val;
68186 + A_UINT8 thresholdBelow2_Val;
68187 + A_UINT8 thresholdBelow3_Val;
68188 + A_UINT8 thresholdBelow4_Val;
68189 + A_UINT8 reserved[3];
68190 +} POSTPACK WMI_LQ_THRESHOLD_PARAMS_CMD;
68191 +
68192 +typedef enum {
68193 + WMI_LPREAMBLE_DISABLED = 0,
68194 + WMI_LPREAMBLE_ENABLED
68195 +} WMI_LPREAMBLE_STATUS;
68196 +
68197 +typedef PREPACK struct {
68198 + A_UINT8 status;
68199 +}POSTPACK WMI_SET_LPREAMBLE_CMD;
68200 +
68201 +typedef PREPACK struct {
68202 + A_UINT16 threshold;
68203 +}POSTPACK WMI_SET_RTS_CMD;
68204 +
68205 +/*
68206 + * WMI_TARGET_ERROR_REPORT_BITMASK_CMDID
68207 + * Sets the error reporting event bitmask in target. Target clears it
68208 + * upon an error. Subsequent errors are counted, but not reported
68209 + * via event, unless the bitmask is set again.
68210 + */
68211 +typedef PREPACK struct {
68212 + A_UINT32 bitmask;
68213 +} POSTPACK WMI_TARGET_ERROR_REPORT_BITMASK;
68214 +
68215 +/*
68216 + * WMI_SET_TX_PWR_CMDID
68217 + */
68218 +typedef PREPACK struct {
68219 + A_UINT8 dbM; /* in dbM units */
68220 +} POSTPACK WMI_SET_TX_PWR_CMD, WMI_TX_PWR_REPLY;
68221 +
68222 +/*
68223 + * WMI_SET_ASSOC_INFO_CMDID
68224 + *
68225 + * A maximum of 2 private IEs can be sent in the [Re]Assoc request.
68226 + * A 3rd one, the CCX version IE can also be set from the host.
68227 + */
68228 +#define WMI_MAX_ASSOC_INFO_TYPE 2
68229 +#define WMI_CCX_VER_IE 2 /* ieType to set CCX Version IE */
68230 +
68231 +#define WMI_MAX_ASSOC_INFO_LEN 240
68232 +
68233 +typedef PREPACK struct {
68234 + A_UINT8 ieType;
68235 + A_UINT8 bufferSize;
68236 + A_UINT8 assocInfo[1]; /* up to WMI_MAX_ASSOC_INFO_LEN */
68237 +} POSTPACK WMI_SET_ASSOC_INFO_CMD;
68238 +
68239 +
68240 +/*
68241 + * WMI_GET_TX_PWR_CMDID does not take any parameters
68242 + */
68243 +
68244 +/*
68245 + * WMI_ADD_BAD_AP_CMDID
68246 + */
68247 +#define WMI_MAX_BAD_AP_INDEX 1
68248 +
68249 +typedef PREPACK struct {
68250 + A_UINT8 badApIndex; /* 0 to WMI_MAX_BAD_AP_INDEX */
68251 + A_UINT8 bssid[ATH_MAC_LEN];
68252 +} POSTPACK WMI_ADD_BAD_AP_CMD;
68253 +
68254 +/*
68255 + * WMI_DELETE_BAD_AP_CMDID
68256 + */
68257 +typedef PREPACK struct {
68258 + A_UINT8 badApIndex; /* 0 to WMI_MAX_BAD_AP_INDEX */
68259 +} POSTPACK WMI_DELETE_BAD_AP_CMD;
68260 +
68261 +/*
68262 + * WMI_SET_ACCESS_PARAMS_CMDID
68263 + */
68264 +#define WMI_DEFAULT_TXOP_ACPARAM 0 /* implies one MSDU */
68265 +#define WMI_DEFAULT_ECWMIN_ACPARAM 4 /* corresponds to CWmin of 15 */
68266 +#define WMI_DEFAULT_ECWMAX_ACPARAM 10 /* corresponds to CWmax of 1023 */
68267 +#define WMI_MAX_CW_ACPARAM 15 /* maximum eCWmin or eCWmax */
68268 +#define WMI_DEFAULT_AIFSN_ACPARAM 2
68269 +#define WMI_MAX_AIFSN_ACPARAM 15
68270 +typedef PREPACK struct {
68271 + A_UINT16 txop; /* in units of 32 usec */
68272 + A_UINT8 eCWmin;
68273 + A_UINT8 eCWmax;
68274 + A_UINT8 aifsn;
68275 +} POSTPACK WMI_SET_ACCESS_PARAMS_CMD;
68276 +
68277 +
68278 +/*
68279 + * WMI_SET_RETRY_LIMITS_CMDID
68280 + *
68281 + * This command is used to customize the number of retries the
68282 + * wlan device will perform on a given frame.
68283 + */
68284 +#define WMI_MIN_RETRIES 2
68285 +#define WMI_MAX_RETRIES 13
68286 +typedef enum {
68287 + MGMT_FRAMETYPE = 0,
68288 + CONTROL_FRAMETYPE = 1,
68289 + DATA_FRAMETYPE = 2
68290 +} WMI_FRAMETYPE;
68291 +
68292 +typedef PREPACK struct {
68293 + A_UINT8 frameType; /* WMI_FRAMETYPE */
68294 + A_UINT8 trafficClass; /* applies only to DATA_FRAMETYPE */
68295 + A_UINT8 maxRetries;
68296 + A_UINT8 enableNotify;
68297 +} POSTPACK WMI_SET_RETRY_LIMITS_CMD;
68298 +
68299 +/*
68300 + * WMI_SET_ROAM_CTRL_CMDID
68301 + *
68302 + * This command is used to influence the Roaming behaviour
68303 + * Set the host biases of the BSSs before setting the roam mode as bias
68304 + * based.
68305 + */
68306 +
68307 +/*
68308 + * Different types of Roam Control
68309 + */
68310 +
68311 +typedef enum {
68312 + WMI_FORCE_ROAM = 1, /* Roam to the specified BSSID */
68313 + WMI_SET_ROAM_MODE = 2, /* default ,progd bias, no roam */
68314 + WMI_SET_HOST_BIAS = 3, /* Set the Host Bias */
68315 + WMI_SET_LOWRSSI_SCAN_PARAMS = 4, /* Set lowrssi Scan parameters */
68316 +} WMI_ROAM_CTRL_TYPE;
68317 +
68318 +#define WMI_MIN_ROAM_CTRL_TYPE WMI_FORCE_ROAM
68319 +#define WMI_MAX_ROAM_CTRL_TYPE WMI_SET_LOWRSSI_SCAN_PARAMS
68320 +
68321 +/*
68322 + * ROAM MODES
68323 + */
68324 +
68325 +typedef enum {
68326 + WMI_DEFAULT_ROAM_MODE = 1, /* RSSI based ROAM */
68327 + WMI_HOST_BIAS_ROAM_MODE = 2, /* HOST BIAS based ROAM */
68328 + WMI_LOCK_BSS_MODE = 3 /* Lock to the Current BSS - no Roam */
68329 +} WMI_ROAM_MODE;
68330 +
68331 +/*
68332 + * BSS HOST BIAS INFO
68333 + */
68334 +
68335 +typedef PREPACK struct {
68336 + A_UINT8 bssid[ATH_MAC_LEN];
68337 + A_INT8 bias;
68338 +} POSTPACK WMI_BSS_BIAS;
68339 +
68340 +typedef PREPACK struct {
68341 + A_UINT8 numBss;
68342 + WMI_BSS_BIAS bssBias[1];
68343 +} POSTPACK WMI_BSS_BIAS_INFO;
68344 +
68345 +typedef PREPACK struct WMI_LOWRSSI_SCAN_PARAMS {
68346 + A_UINT16 lowrssi_scan_period;
68347 + A_INT16 lowrssi_scan_threshold;
68348 + A_INT16 lowrssi_roam_threshold;
68349 + A_UINT8 roam_rssi_floor;
68350 + A_UINT8 reserved[1]; /* For alignment */
68351 +} POSTPACK WMI_LOWRSSI_SCAN_PARAMS;
68352 +
68353 +typedef PREPACK struct {
68354 + PREPACK union {
68355 + A_UINT8 bssid[ATH_MAC_LEN]; /* WMI_FORCE_ROAM */
68356 + A_UINT8 roamMode; /* WMI_SET_ROAM_MODE */
68357 + WMI_BSS_BIAS_INFO bssBiasInfo; /* WMI_SET_HOST_BIAS */
68358 + WMI_LOWRSSI_SCAN_PARAMS lrScanParams;
68359 + } POSTPACK info;
68360 + A_UINT8 roamCtrlType ;
68361 +} POSTPACK WMI_SET_ROAM_CTRL_CMD;
68362 +
68363 +/*
68364 + * WMI_ENABLE_RM_CMDID
68365 + */
68366 +typedef PREPACK struct {
68367 + A_BOOL enable_radio_measurements;
68368 +} POSTPACK WMI_ENABLE_RM_CMD;
68369 +
68370 +/*
68371 + * WMI_SET_MAX_OFFHOME_DURATION_CMDID
68372 + */
68373 +typedef PREPACK struct {
68374 + A_UINT8 max_offhome_duration;
68375 +} POSTPACK WMI_SET_MAX_OFFHOME_DURATION_CMD;
68376 +
68377 +typedef PREPACK struct {
68378 + A_UINT32 frequency;
68379 + A_UINT8 threshold;
68380 +} POSTPACK WMI_SET_HB_CHALLENGE_RESP_PARAMS_CMD;
68381 +
68382 +typedef enum {
68383 + BT_STREAM_UNDEF = 0,
68384 + BT_STREAM_SCO, /* SCO stream */
68385 + BT_STREAM_A2DP, /* A2DP stream */
68386 + BT_STREAM_MAX
68387 +} BT_STREAM_TYPE;
68388 +
68389 +typedef enum {
68390 + BT_PARAM_SCO = 1, /* SCO stream parameters */
68391 + BT_PARAM_A2DP, /* A2DP stream parameters */
68392 + BT_PARAM_MISC, /* miscellaneous parameters */
68393 + BT_PARAM_REGS, /* co-existence register parameters */
68394 + BT_PARAM_MAX
68395 +} BT_PARAM_TYPE;
68396 +
68397 +typedef enum {
68398 + BT_STATUS_UNDEF = 0,
68399 + BT_STATUS_START,
68400 + BT_STATUS_STOP,
68401 + BT_STATUS_RESUME,
68402 + BT_STATUS_SUSPEND,
68403 + BT_STATUS_MAX
68404 +} BT_STREAM_STATUS;
68405 +
68406 +typedef PREPACK struct {
68407 + A_UINT8 streamType;
68408 + A_UINT8 status;
68409 +} POSTPACK WMI_SET_BT_STATUS_CMD;
68410 +
68411 +typedef PREPACK struct {
68412 + A_UINT8 noSCOPkts;
68413 + A_UINT8 pspollTimeout;
68414 + A_UINT8 stompbt;
68415 +} POSTPACK BT_PARAMS_SCO;
68416 +
68417 +typedef PREPACK struct {
68418 + A_UINT32 period;
68419 + A_UINT32 dutycycle;
68420 + A_UINT8 stompbt;
68421 +} POSTPACK BT_PARAMS_A2DP;
68422 +
68423 +typedef PREPACK struct {
68424 + A_UINT32 mode;
68425 + A_UINT32 scoWghts;
68426 + A_UINT32 a2dpWghts;
68427 + A_UINT32 genWghts;
68428 + A_UINT32 mode2;
68429 + A_UINT8 setVal;
68430 +} POSTPACK BT_COEX_REGS;
68431 +
68432 +typedef enum {
68433 + WLAN_PROTECT_POLICY = 1,
68434 + WLAN_COEX_CTRL_FLAGS
68435 +} BT_PARAMS_MISC_TYPE;
68436 +
68437 +typedef enum {
68438 + WLAN_PROTECT_PER_STREAM = 0x01, /* default */
68439 + WLAN_PROTECT_ANY_TX = 0x02
68440 +} WLAN_PROTECT_FLAGS;
68441 +
68442 +
68443 +#define WLAN_DISABLE_COEX_IN_DISCONNECT 0x01 /* default */
68444 +#define WLAN_KEEP_COEX_IN_DISCONNECT 0x02
68445 +#define WLAN_STOMPBT_IN_DISCONNECT 0x04
68446 +
68447 +#define WLAN_DISABLE_COEX_IN_ROAM 0x10 /* default */
68448 +#define WLAN_KEEP_COEX_IN_ROAM 0x20
68449 +#define WLAN_STOMPBT_IN_ROAM 0x40
68450 +
68451 +#define WLAN_DISABLE_COEX_IN_SCAN 0x100 /* default */
68452 +#define WLAN_KEEP_COEX_IN_SCAN 0x200
68453 +#define WLAN_STOMPBT_IN_SCAN 0x400
68454 +
68455 +#define WLAN_DISABLE_COEX_BT_OFF 0x1000 /* default */
68456 +#define WLAN_KEEP_COEX_BT_OFF 0x2000
68457 +#define WLAN_STOMPBT_BT_OFF 0x4000
68458 +
68459 +typedef PREPACK struct {
68460 + A_UINT32 period;
68461 + A_UINT32 dutycycle;
68462 + A_UINT8 stompbt;
68463 + A_UINT8 policy;
68464 +} POSTPACK WLAN_PROTECT_POLICY_TYPE;
68465 +
68466 +typedef PREPACK struct {
68467 + PREPACK union {
68468 + WLAN_PROTECT_POLICY_TYPE protectParams;
68469 + A_UINT16 wlanCtrlFlags;
68470 + } POSTPACK info;
68471 + A_UINT8 paramType;
68472 +} POSTPACK BT_PARAMS_MISC;
68473 +
68474 +typedef PREPACK struct {
68475 + PREPACK union {
68476 + BT_PARAMS_SCO scoParams;
68477 + BT_PARAMS_A2DP a2dpParams;
68478 + BT_PARAMS_MISC miscParams;
68479 + BT_COEX_REGS regs;
68480 + } POSTPACK info;
68481 + A_UINT8 paramType;
68482 +} POSTPACK WMI_SET_BT_PARAMS_CMD;
68483 +
68484 +/*
68485 + * Command Replies
68486 + */
68487 +
68488 +/*
68489 + * WMI_GET_CHANNEL_LIST_CMDID reply
68490 + */
68491 +typedef PREPACK struct {
68492 + A_UINT8 reserved1;
68493 + A_UINT8 numChannels; /* number of channels in reply */
68494 + A_UINT16 channelList[1]; /* channel in Mhz */
68495 +} POSTPACK WMI_CHANNEL_LIST_REPLY;
68496 +
68497 +typedef enum {
68498 + A_SUCCEEDED = A_OK,
68499 + A_FAILED_DELETE_STREAM_DOESNOT_EXIST=250,
68500 + A_SUCCEEDED_MODIFY_STREAM=251,
68501 + A_FAILED_INVALID_STREAM = 252,
68502 + A_FAILED_MAX_THINSTREAMS = 253,
68503 + A_FAILED_CREATE_REMOVE_PSTREAM_FIRST = 254,
68504 +} PSTREAM_REPLY_STATUS;
68505 +
68506 +/*
68507 + * List of Events (target to host)
68508 + */
68509 +typedef enum {
68510 + WMI_READY_EVENTID = 0x1001,
68511 + WMI_CONNECT_EVENTID,
68512 + WMI_DISCONNECT_EVENTID,
68513 + WMI_BSSINFO_EVENTID,
68514 + WMI_CMDERROR_EVENTID,
68515 + WMI_REGDOMAIN_EVENTID,
68516 + WMI_PSTREAM_TIMEOUT_EVENTID,
68517 + WMI_NEIGHBOR_REPORT_EVENTID,
68518 + WMI_TKIP_MICERR_EVENTID,
68519 + WMI_SCAN_COMPLETE_EVENTID,
68520 + WMI_REPORT_STATISTICS_EVENTID,
68521 + WMI_RSSI_THRESHOLD_EVENTID,
68522 + WMI_ERROR_REPORT_EVENTID,
68523 + WMI_OPT_RX_FRAME_EVENTID,
68524 + WMI_REPORT_ROAM_TBL_EVENTID,
68525 + WMI_EXTENSION_EVENTID,
68526 + WMI_CAC_EVENTID,
68527 + WMI_SNR_THRESHOLD_EVENTID,
68528 + WMI_LQ_THRESHOLD_EVENTID,
68529 + WMI_TX_RETRY_ERR_EVENTID,
68530 + WMI_REPORT_ROAM_DATA_EVENTID,
68531 + WMI_TEST_EVENTID,
68532 + WMI_APLIST_EVENTID,
68533 + WMI_GET_WOW_LIST_EVENTID,
68534 + WMI_GET_PMKID_LIST_EVENTID
68535 +} WMI_EVENT_ID;
68536 +
68537 +typedef enum {
68538 + WMI_11A_CAPABILITY = 1,
68539 + WMI_11G_CAPABILITY = 2,
68540 + WMI_11AG_CAPABILITY = 3,
68541 +} WMI_PHY_CAPABILITY;
68542 +
68543 +typedef PREPACK struct {
68544 + A_UINT8 macaddr[ATH_MAC_LEN];
68545 + A_UINT8 phyCapability; /* WMI_PHY_CAPABILITY */
68546 +} POSTPACK WMI_READY_EVENT;
68547 +
68548 +/*
68549 + * Connect Event
68550 + */
68551 +typedef PREPACK struct {
68552 + A_UINT16 channel;
68553 + A_UINT8 bssid[ATH_MAC_LEN];
68554 + A_UINT16 listenInterval;
68555 + A_UINT16 beaconInterval;
68556 + A_UINT32 networkType;
68557 + A_UINT8 beaconIeLen;
68558 + A_UINT8 assocReqLen;
68559 + A_UINT8 assocRespLen;
68560 + A_UINT8 assocInfo[1];
68561 +} POSTPACK WMI_CONNECT_EVENT;
68562 +
68563 +/*
68564 + * Disconnect Event
68565 + */
68566 +typedef enum {
68567 + NO_NETWORK_AVAIL = 0x01,
68568 + LOST_LINK = 0x02, /* bmiss */
68569 + DISCONNECT_CMD = 0x03,
68570 + BSS_DISCONNECTED = 0x04,
68571 + AUTH_FAILED = 0x05,
68572 + ASSOC_FAILED = 0x06,
68573 + NO_RESOURCES_AVAIL = 0x07,
68574 + CSERV_DISCONNECT = 0x08,
68575 + INVALID_PROFILE = 0x0a,
68576 + DOT11H_CHANNEL_SWITCH = 0x0b,
68577 +} WMI_DISCONNECT_REASON;
68578 +
68579 +typedef PREPACK struct {
68580 + A_UINT16 protocolReasonStatus; /* reason code, see 802.11 spec. */
68581 + A_UINT8 bssid[ATH_MAC_LEN]; /* set if known */
68582 + A_UINT8 disconnectReason ; /* see WMI_DISCONNECT_REASON */
68583 + A_UINT8 assocRespLen;
68584 + A_UINT8 assocInfo[1];
68585 +} POSTPACK WMI_DISCONNECT_EVENT;
68586 +
68587 +/*
68588 + * BSS Info Event.
68589 + * Mechanism used to inform host of the presence and characteristic of
68590 + * wireless networks present. Consists of bss info header followed by
68591 + * the beacon or probe-response frame body. The 802.11 header is not included.
68592 + */
68593 +typedef enum {
68594 + BEACON_FTYPE = 0x1,
68595 + PROBERESP_FTYPE,
68596 + ACTION_MGMT_FTYPE,
68597 +} WMI_BI_FTYPE;
68598 +
68599 +enum {
68600 + BSS_ELEMID_CHANSWITCH = 0x01,
68601 + BSS_ELEMID_ATHEROS = 0x02,
68602 +};
68603 +
68604 +typedef PREPACK struct {
68605 + A_UINT16 channel;
68606 + A_UINT8 frameType; /* see WMI_BI_FTYPE */
68607 + A_UINT8 snr;
68608 + A_INT16 rssi;
68609 + A_UINT8 bssid[ATH_MAC_LEN];
68610 + A_UINT32 ieMask;
68611 +} POSTPACK WMI_BSS_INFO_HDR;
68612 +
68613 +/*
68614 + * Command Error Event
68615 + */
68616 +typedef enum {
68617 + INVALID_PARAM = 0x01,
68618 + ILLEGAL_STATE = 0x02,
68619 + INTERNAL_ERROR = 0x03,
68620 +} WMI_ERROR_CODE;
68621 +
68622 +typedef PREPACK struct {
68623 + A_UINT16 commandId;
68624 + A_UINT8 errorCode;
68625 +} POSTPACK WMI_CMD_ERROR_EVENT;
68626 +
68627 +/*
68628 + * New Regulatory Domain Event
68629 + */
68630 +typedef PREPACK struct {
68631 + A_UINT32 regDomain;
68632 +} POSTPACK WMI_REG_DOMAIN_EVENT;
68633 +
68634 +typedef PREPACK struct {
68635 + A_UINT8 trafficClass;
68636 +} POSTPACK WMI_PSTREAM_TIMEOUT_EVENT;
68637 +
68638 +/*
68639 + * The WMI_NEIGHBOR_REPORT Event is generated by the target to inform
68640 + * the host of BSS's it has found that matches the current profile.
68641 + * It can be used by the host to cache PMKs and/to initiate pre-authentication
68642 + * if the BSS supports it. The first bssid is always the current associated
68643 + * BSS.
68644 + * The bssid and bssFlags information repeats according to the number
68645 + * or APs reported.
68646 + */
68647 +typedef enum {
68648 + WMI_DEFAULT_BSS_FLAGS = 0x00,
68649 + WMI_PREAUTH_CAPABLE_BSS = 0x01,
68650 + WMI_PMKID_VALID_BSS = 0x02,
68651 +} WMI_BSS_FLAGS;
68652 +
68653 +typedef PREPACK struct {
68654 + A_UINT8 bssid[ATH_MAC_LEN];
68655 + A_UINT8 bssFlags; /* see WMI_BSS_FLAGS */
68656 +} POSTPACK WMI_NEIGHBOR_INFO;
68657 +
68658 +typedef PREPACK struct {
68659 + A_INT8 numberOfAps;
68660 + WMI_NEIGHBOR_INFO neighbor[1];
68661 +} POSTPACK WMI_NEIGHBOR_REPORT_EVENT;
68662 +
68663 +/*
68664 + * TKIP MIC Error Event
68665 + */
68666 +typedef PREPACK struct {
68667 + A_UINT8 keyid;
68668 + A_UINT8 ismcast;
68669 +} POSTPACK WMI_TKIP_MICERR_EVENT;
68670 +
68671 +/*
68672 + * WMI_SCAN_COMPLETE_EVENTID - no parameters (old), staus parameter (new)
68673 + */
68674 +typedef PREPACK struct {
68675 + A_STATUS status;
68676 +} POSTPACK WMI_SCAN_COMPLETE_EVENT;
68677 +
68678 +#define MAX_OPT_DATA_LEN 1400
68679 +
68680 +/*
68681 + * WMI_SET_ADHOC_BSSID_CMDID
68682 + */
68683 +typedef PREPACK struct {
68684 + A_UINT8 bssid[ATH_MAC_LEN];
68685 +} POSTPACK WMI_SET_ADHOC_BSSID_CMD;
68686 +
68687 +/*
68688 + * WMI_SET_OPT_MODE_CMDID
68689 + */
68690 +typedef enum {
68691 + SPECIAL_OFF,
68692 + SPECIAL_ON,
68693 +} OPT_MODE_TYPE;
68694 +
68695 +typedef PREPACK struct {
68696 + A_UINT8 optMode;
68697 +} POSTPACK WMI_SET_OPT_MODE_CMD;
68698 +
68699 +/*
68700 + * WMI_TX_OPT_FRAME_CMDID
68701 + */
68702 +typedef enum {
68703 + OPT_PROBE_REQ = 0x01,
68704 + OPT_PROBE_RESP = 0x02,
68705 + OPT_CPPP_START = 0x03,
68706 + OPT_CPPP_STOP = 0x04,
68707 +} WMI_OPT_FTYPE;
68708 +
68709 +typedef PREPACK struct {
68710 + A_UINT16 optIEDataLen;
68711 + A_UINT8 frmType;
68712 + A_UINT8 dstAddr[ATH_MAC_LEN];
68713 + A_UINT8 bssid[ATH_MAC_LEN];
68714 + A_UINT8 reserved; /* For alignment */
68715 + A_UINT8 optIEData[1];
68716 +} POSTPACK WMI_OPT_TX_FRAME_CMD;
68717 +
68718 +/*
68719 + * Special frame receive Event.
68720 + * Mechanism used to inform host of the receiption of the special frames.
68721 + * Consists of special frame info header followed by special frame body.
68722 + * The 802.11 header is not included.
68723 + */
68724 +typedef PREPACK struct {
68725 + A_UINT16 channel;
68726 + A_UINT8 frameType; /* see WMI_OPT_FTYPE */
68727 + A_INT8 snr;
68728 + A_UINT8 srcAddr[ATH_MAC_LEN];
68729 + A_UINT8 bssid[ATH_MAC_LEN];
68730 +} POSTPACK WMI_OPT_RX_INFO_HDR;
68731 +
68732 +/*
68733 + * Reporting statistics.
68734 + */
68735 +typedef PREPACK struct {
68736 + A_UINT32 tx_packets;
68737 + A_UINT32 tx_bytes;
68738 + A_UINT32 tx_unicast_pkts;
68739 + A_UINT32 tx_unicast_bytes;
68740 + A_UINT32 tx_multicast_pkts;
68741 + A_UINT32 tx_multicast_bytes;
68742 + A_UINT32 tx_broadcast_pkts;
68743 + A_UINT32 tx_broadcast_bytes;
68744 + A_UINT32 tx_rts_success_cnt;
68745 + A_UINT32 tx_packet_per_ac[4];
68746 + A_UINT32 tx_errors_per_ac[4];
68747 +
68748 + A_UINT32 tx_errors;
68749 + A_UINT32 tx_failed_cnt;
68750 + A_UINT32 tx_retry_cnt;
68751 + A_UINT32 tx_rts_fail_cnt;
68752 + A_INT32 tx_unicast_rate;
68753 +}POSTPACK tx_stats_t;
68754 +
68755 +typedef PREPACK struct {
68756 + A_UINT32 rx_packets;
68757 + A_UINT32 rx_bytes;
68758 + A_UINT32 rx_unicast_pkts;
68759 + A_UINT32 rx_unicast_bytes;
68760 + A_UINT32 rx_multicast_pkts;
68761 + A_UINT32 rx_multicast_bytes;
68762 + A_UINT32 rx_broadcast_pkts;
68763 + A_UINT32 rx_broadcast_bytes;
68764 + A_UINT32 rx_fragment_pkt;
68765 +
68766 + A_UINT32 rx_errors;
68767 + A_UINT32 rx_crcerr;
68768 + A_UINT32 rx_key_cache_miss;
68769 + A_UINT32 rx_decrypt_err;
68770 + A_UINT32 rx_duplicate_frames;
68771 + A_INT32 rx_unicast_rate;
68772 +}POSTPACK rx_stats_t;
68773 +
68774 +typedef PREPACK struct {
68775 + A_UINT32 tkip_local_mic_failure;
68776 + A_UINT32 tkip_counter_measures_invoked;
68777 + A_UINT32 tkip_replays;
68778 + A_UINT32 tkip_format_errors;
68779 + A_UINT32 ccmp_format_errors;
68780 + A_UINT32 ccmp_replays;
68781 +}POSTPACK tkip_ccmp_stats_t;
68782 +
68783 +typedef PREPACK struct {
68784 + A_UINT32 power_save_failure_cnt;
68785 +}POSTPACK pm_stats_t;
68786 +
68787 +typedef PREPACK struct {
68788 + A_UINT32 cs_bmiss_cnt;
68789 + A_UINT32 cs_lowRssi_cnt;
68790 + A_UINT16 cs_connect_cnt;
68791 + A_UINT16 cs_disconnect_cnt;
68792 + A_INT16 cs_aveBeacon_rssi;
68793 + A_UINT16 cs_roam_count;
68794 + A_UINT16 cs_rssi;
68795 + A_UINT8 cs_snr;
68796 + A_UINT8 cs_aveBeacon_snr;
68797 + A_UINT8 cs_lastRoam_msec;
68798 +} POSTPACK cserv_stats_t;
68799 +
68800 +typedef PREPACK struct {
68801 + tx_stats_t tx_stats;
68802 + rx_stats_t rx_stats;
68803 + tkip_ccmp_stats_t tkipCcmpStats;
68804 +}POSTPACK wlan_net_stats_t;
68805 +
68806 +typedef PREPACK struct {
68807 + A_UINT32 wow_num_pkts_dropped;
68808 + A_UINT16 wow_num_events_discarded;
68809 + A_UINT8 wow_num_host_pkt_wakeups;
68810 + A_UINT8 wow_num_host_event_wakeups;
68811 +} POSTPACK wlan_wow_stats_t;
68812 +
68813 +typedef PREPACK struct {
68814 + A_UINT32 lqVal;
68815 + A_INT32 noise_floor_calibation;
68816 + pm_stats_t pmStats;
68817 + wlan_net_stats_t txrxStats;
68818 + wlan_wow_stats_t wowStats;
68819 + cserv_stats_t cservStats;
68820 +} POSTPACK WMI_TARGET_STATS;
68821 +
68822 +/*
68823 + * WMI_RSSI_THRESHOLD_EVENTID.
68824 + * Indicate the RSSI events to host. Events are indicated when we breach a
68825 + * thresold value.
68826 + */
68827 +typedef enum{
68828 + WMI_RSSI_THRESHOLD1_ABOVE = 0,
68829 + WMI_RSSI_THRESHOLD2_ABOVE,
68830 + WMI_RSSI_THRESHOLD3_ABOVE,
68831 + WMI_RSSI_THRESHOLD4_ABOVE,
68832 + WMI_RSSI_THRESHOLD5_ABOVE,
68833 + WMI_RSSI_THRESHOLD6_ABOVE,
68834 + WMI_RSSI_THRESHOLD1_BELOW,
68835 + WMI_RSSI_THRESHOLD2_BELOW,
68836 + WMI_RSSI_THRESHOLD3_BELOW,
68837 + WMI_RSSI_THRESHOLD4_BELOW,
68838 + WMI_RSSI_THRESHOLD5_BELOW,
68839 + WMI_RSSI_THRESHOLD6_BELOW
68840 +}WMI_RSSI_THRESHOLD_VAL;
68841 +
68842 +typedef PREPACK struct {
68843 + A_INT16 rssi;
68844 + A_UINT8 range;
68845 +}POSTPACK WMI_RSSI_THRESHOLD_EVENT;
68846 +
68847 +/*
68848 + * WMI_ERROR_REPORT_EVENTID
68849 + */
68850 +typedef enum{
68851 + WMI_TARGET_PM_ERR_FAIL = 0x00000001,
68852 + WMI_TARGET_KEY_NOT_FOUND = 0x00000002,
68853 + WMI_TARGET_DECRYPTION_ERR = 0x00000004,
68854 + WMI_TARGET_BMISS = 0x00000008,
68855 + WMI_PSDISABLE_NODE_JOIN = 0x00000010,
68856 + WMI_TARGET_COM_ERR = 0x00000020,
68857 + WMI_TARGET_FATAL_ERR = 0x00000040
68858 +} WMI_TARGET_ERROR_VAL;
68859 +
68860 +typedef PREPACK struct {
68861 + A_UINT32 errorVal;
68862 +}POSTPACK WMI_TARGET_ERROR_REPORT_EVENT;
68863 +
68864 +typedef PREPACK struct {
68865 + A_UINT8 retrys;
68866 +}POSTPACK WMI_TX_RETRY_ERR_EVENT;
68867 +
68868 +typedef enum{
68869 + WMI_SNR_THRESHOLD1_ABOVE = 1,
68870 + WMI_SNR_THRESHOLD1_BELOW,
68871 + WMI_SNR_THRESHOLD2_ABOVE,
68872 + WMI_SNR_THRESHOLD2_BELOW,
68873 + WMI_SNR_THRESHOLD3_ABOVE,
68874 + WMI_SNR_THRESHOLD3_BELOW,
68875 + WMI_SNR_THRESHOLD4_ABOVE,
68876 + WMI_SNR_THRESHOLD4_BELOW
68877 +} WMI_SNR_THRESHOLD_VAL;
68878 +
68879 +typedef PREPACK struct {
68880 + A_UINT8 range; /* WMI_SNR_THRESHOLD_VAL */
68881 + A_UINT8 snr;
68882 +}POSTPACK WMI_SNR_THRESHOLD_EVENT;
68883 +
68884 +typedef enum{
68885 + WMI_LQ_THRESHOLD1_ABOVE = 1,
68886 + WMI_LQ_THRESHOLD1_BELOW,
68887 + WMI_LQ_THRESHOLD2_ABOVE,
68888 + WMI_LQ_THRESHOLD2_BELOW,
68889 + WMI_LQ_THRESHOLD3_ABOVE,
68890 + WMI_LQ_THRESHOLD3_BELOW,
68891 + WMI_LQ_THRESHOLD4_ABOVE,
68892 + WMI_LQ_THRESHOLD4_BELOW
68893 +} WMI_LQ_THRESHOLD_VAL;
68894 +
68895 +typedef PREPACK struct {
68896 + A_INT32 lq;
68897 + A_UINT8 range; /* WMI_LQ_THRESHOLD_VAL */
68898 +}POSTPACK WMI_LQ_THRESHOLD_EVENT;
68899 +/*
68900 + * WMI_REPORT_ROAM_TBL_EVENTID
68901 + */
68902 +#define MAX_ROAM_TBL_CAND 5
68903 +
68904 +typedef PREPACK struct {
68905 + A_INT32 roam_util;
68906 + A_UINT8 bssid[ATH_MAC_LEN];
68907 + A_INT8 rssi;
68908 + A_INT8 rssidt;
68909 + A_INT8 last_rssi;
68910 + A_INT8 util;
68911 + A_INT8 bias;
68912 + A_UINT8 reserved; /* For alignment */
68913 +} POSTPACK WMI_BSS_ROAM_INFO;
68914 +
68915 +
68916 +typedef PREPACK struct {
68917 + A_UINT16 roamMode;
68918 + A_UINT16 numEntries;
68919 + WMI_BSS_ROAM_INFO bssRoamInfo[1];
68920 +} POSTPACK WMI_TARGET_ROAM_TBL;
68921 +
68922 +/*
68923 + * WMI_CAC_EVENTID
68924 + */
68925 +typedef enum {
68926 + CAC_INDICATION_ADMISSION = 0x00,
68927 + CAC_INDICATION_ADMISSION_RESP = 0x01,
68928 + CAC_INDICATION_DELETE = 0x02,
68929 + CAC_INDICATION_NO_RESP = 0x03,
68930 +}CAC_INDICATION;
68931 +
68932 +#define WMM_TSPEC_IE_LEN 63
68933 +
68934 +typedef PREPACK struct {
68935 + A_UINT8 ac;
68936 + A_UINT8 cac_indication;
68937 + A_UINT8 statusCode;
68938 + A_UINT8 tspecSuggestion[WMM_TSPEC_IE_LEN];
68939 +}POSTPACK WMI_CAC_EVENT;
68940 +
68941 +/*
68942 + * WMI_APLIST_EVENTID
68943 + */
68944 +
68945 +typedef enum {
68946 + APLIST_VER1 = 1,
68947 +} APLIST_VER;
68948 +
68949 +typedef PREPACK struct {
68950 + A_UINT8 bssid[ATH_MAC_LEN];
68951 + A_UINT16 channel;
68952 +} POSTPACK WMI_AP_INFO_V1;
68953 +
68954 +typedef PREPACK union {
68955 + WMI_AP_INFO_V1 apInfoV1;
68956 +} POSTPACK WMI_AP_INFO;
68957 +
68958 +typedef PREPACK struct {
68959 + A_UINT8 apListVer;
68960 + A_UINT8 numAP;
68961 + WMI_AP_INFO apList[1];
68962 +} POSTPACK WMI_APLIST_EVENT;
68963 +
68964 +/*
68965 + * developer commands
68966 + */
68967 +
68968 +/*
68969 + * WMI_SET_BITRATE_CMDID
68970 + *
68971 + * Get bit rate cmd uses same definition as set bit rate cmd
68972 + */
68973 +typedef enum {
68974 + RATE_AUTO = -1,
68975 + RATE_1Mb = 0,
68976 + RATE_2Mb = 1,
68977 + RATE_5_5Mb = 2,
68978 + RATE_11Mb = 3,
68979 + RATE_6Mb = 4,
68980 + RATE_9Mb = 5,
68981 + RATE_12Mb = 6,
68982 + RATE_18Mb = 7,
68983 + RATE_24Mb = 8,
68984 + RATE_36Mb = 9,
68985 + RATE_48Mb = 10,
68986 + RATE_54Mb = 11,
68987 +} WMI_BIT_RATE;
68988 +
68989 +typedef PREPACK struct {
68990 + A_INT8 rateIndex; /* see WMI_BIT_RATE */
68991 +} POSTPACK WMI_BIT_RATE_CMD, WMI_BIT_RATE_REPLY;
68992 +
68993 +/*
68994 + * WMI_SET_FIXRATES_CMDID
68995 + *
68996 + * Get fix rates cmd uses same definition as set fix rates cmd
68997 + */
68998 +typedef enum {
68999 + FIX_RATE_1Mb = 0x1,
69000 + FIX_RATE_2Mb = 0x2,
69001 + FIX_RATE_5_5Mb = 0x4,
69002 + FIX_RATE_11Mb = 0x8,
69003 + FIX_RATE_6Mb = 0x10,
69004 + FIX_RATE_9Mb = 0x20,
69005 + FIX_RATE_12Mb = 0x40,
69006 + FIX_RATE_18Mb = 0x80,
69007 + FIX_RATE_24Mb = 0x100,
69008 + FIX_RATE_36Mb = 0x200,
69009 + FIX_RATE_48Mb = 0x400,
69010 + FIX_RATE_54Mb = 0x800,
69011 +} WMI_FIX_RATES_MASK;
69012 +
69013 +typedef PREPACK struct {
69014 + A_UINT16 fixRateMask; /* see WMI_BIT_RATE */
69015 +} POSTPACK WMI_FIX_RATES_CMD, WMI_FIX_RATES_REPLY;
69016 +
69017 +/*
69018 + * WMI_SET_RECONNECT_AUTH_MODE_CMDID
69019 + *
69020 + * Set authentication mode
69021 + */
69022 +typedef enum {
69023 + RECONN_DO_AUTH = 0x00,
69024 + RECONN_NOT_AUTH = 0x01
69025 +} WMI_AUTH_MODE;
69026 +
69027 +typedef PREPACK struct {
69028 + A_UINT8 mode;
69029 +} POSTPACK WMI_SET_AUTH_MODE_CMD;
69030 +
69031 +/*
69032 + * WMI_SET_REASSOC_MODE_CMDID
69033 + *
69034 + * Set authentication mode
69035 + */
69036 +typedef enum {
69037 + REASSOC_DO_DISASSOC = 0x00,
69038 + REASSOC_DONOT_DISASSOC = 0x01
69039 +} WMI_REASSOC_MODE;
69040 +
69041 +typedef PREPACK struct {
69042 + A_UINT8 mode;
69043 +}POSTPACK WMI_SET_REASSOC_MODE_CMD;
69044 +
69045 +typedef enum {
69046 + ROAM_DATA_TIME = 1, /* Get The Roam Time Data */
69047 +} ROAM_DATA_TYPE;
69048 +
69049 +typedef PREPACK struct {
69050 + A_UINT32 disassoc_time;
69051 + A_UINT32 no_txrx_time;
69052 + A_UINT32 assoc_time;
69053 + A_UINT32 allow_txrx_time;
69054 + A_UINT32 last_data_txrx_time;
69055 + A_UINT32 first_data_txrx_time;
69056 + A_UINT8 disassoc_bssid[ATH_MAC_LEN];
69057 + A_INT8 disassoc_bss_rssi;
69058 + A_UINT8 assoc_bssid[ATH_MAC_LEN];
69059 + A_INT8 assoc_bss_rssi;
69060 +} POSTPACK WMI_TARGET_ROAM_TIME;
69061 +
69062 +typedef PREPACK struct {
69063 + PREPACK union {
69064 + WMI_TARGET_ROAM_TIME roamTime;
69065 + } POSTPACK u;
69066 + A_UINT8 roamDataType ;
69067 +} POSTPACK WMI_TARGET_ROAM_DATA;
69068 +
69069 +typedef enum {
69070 + WMI_WMM_DISABLED = 0,
69071 + WMI_WMM_ENABLED
69072 +} WMI_WMM_STATUS;
69073 +
69074 +typedef PREPACK struct {
69075 + A_UINT8 status;
69076 +}POSTPACK WMI_SET_WMM_CMD;
69077 +
69078 +typedef enum {
69079 + WMI_TXOP_DISABLED = 0,
69080 + WMI_TXOP_ENABLED
69081 +} WMI_TXOP_CFG;
69082 +
69083 +typedef PREPACK struct {
69084 + A_UINT8 txopEnable;
69085 +}POSTPACK WMI_SET_WMM_TXOP_CMD;
69086 +
69087 +typedef PREPACK struct {
69088 + A_UINT8 keepaliveInterval;
69089 +} POSTPACK WMI_SET_KEEPALIVE_CMD;
69090 +
69091 +typedef PREPACK struct {
69092 + A_BOOL configured;
69093 + A_UINT8 keepaliveInterval;
69094 +} POSTPACK WMI_GET_KEEPALIVE_CMD;
69095 +
69096 +/*
69097 + * Add Application specified IE to a management frame
69098 + */
69099 +#define WMI_MAX_IE_LEN 78
69100 +
69101 +typedef PREPACK struct {
69102 + A_UINT8 mgmtFrmType; /* one of WMI_MGMT_FRAME_TYPE */
69103 + A_UINT8 ieLen; /* Length of the IE that should be added to the MGMT frame */
69104 + A_UINT8 ieInfo[1];
69105 +} POSTPACK WMI_SET_APPIE_CMD;
69106 +
69107 +/*
69108 + * Notify the WSC registration status to the target
69109 + */
69110 +#define WSC_REG_ACTIVE 1
69111 +#define WSC_REG_INACTIVE 0
69112 +/* Generic Hal Interface for setting hal paramters. */
69113 +/* Add new Set HAL Param cmdIds here for newer params */
69114 +typedef enum {
69115 + WHAL_SETCABTO_CMDID = 1,
69116 +}WHAL_CMDID;
69117 +
69118 +typedef PREPACK struct {
69119 + A_UINT8 cabTimeOut;
69120 +} POSTPACK WHAL_SETCABTO_PARAM;
69121 +
69122 +typedef PREPACK struct {
69123 + A_UINT8 whalCmdId;
69124 + A_UINT8 data[1];
69125 +} POSTPACK WHAL_PARAMCMD;
69126 +
69127 +
69128 +#define WOW_MAX_FILTER_LISTS 1 /*4*/
69129 +#define WOW_MAX_FILTERS_PER_LIST 4
69130 +#define WOW_PATTERN_SIZE 64
69131 +#define WOW_MASK_SIZE 64
69132 +
69133 +typedef PREPACK struct {
69134 + A_UINT8 wow_valid_filter;
69135 + A_UINT8 wow_filter_id;
69136 + A_UINT8 wow_filter_size;
69137 + A_UINT8 wow_filter_offset;
69138 + A_UINT8 wow_filter_mask[WOW_MASK_SIZE];
69139 + A_UINT8 wow_filter_pattern[WOW_PATTERN_SIZE];
69140 +} POSTPACK WOW_FILTER;
69141 +
69142 +
69143 +typedef PREPACK struct {
69144 + A_UINT8 wow_valid_list;
69145 + A_UINT8 wow_list_id;
69146 + A_UINT8 wow_num_filters;
69147 + A_UINT8 wow_total_list_size;
69148 + WOW_FILTER list[WOW_MAX_FILTERS_PER_LIST];
69149 +} POSTPACK WOW_FILTER_LIST;
69150 +
69151 +typedef PREPACK struct {
69152 + A_BOOL awake;
69153 + A_BOOL asleep;
69154 +} POSTPACK WMI_SET_HOST_SLEEP_MODE_CMD;
69155 +
69156 +typedef PREPACK struct {
69157 + A_BOOL enable_wow;
69158 +} POSTPACK WMI_SET_WOW_MODE_CMD;
69159 +
69160 +typedef PREPACK struct {
69161 + A_UINT8 filter_list_id;
69162 +} POSTPACK WMI_GET_WOW_LIST_CMD;
69163 +
69164 +/*
69165 + * WMI_GET_WOW_LIST_CMD reply
69166 + */
69167 +typedef PREPACK struct {
69168 + A_UINT8 num_filters; /* number of patterns in reply */
69169 + A_UINT8 this_filter_num; /* this is filter # x of total num_filters */
69170 + A_UINT8 wow_mode;
69171 + A_UINT8 host_mode;
69172 + WOW_FILTER wow_filters[1];
69173 +} POSTPACK WMI_GET_WOW_LIST_REPLY;
69174 +
69175 +typedef PREPACK struct {
69176 + A_UINT8 filter_list_id;
69177 + A_UINT8 filter_size;
69178 + A_UINT8 filter_offset;
69179 + A_UINT8 filter[1];
69180 +} POSTPACK WMI_ADD_WOW_PATTERN_CMD;
69181 +
69182 +typedef PREPACK struct {
69183 + A_UINT16 filter_list_id;
69184 + A_UINT16 filter_id;
69185 +} POSTPACK WMI_DEL_WOW_PATTERN_CMD;
69186 +
69187 +typedef PREPACK struct {
69188 + A_UINT8 macaddr[ATH_MAC_LEN];
69189 +} POSTPACK WMI_SET_MAC_ADDRESS_CMD;
69190 +
69191 +/*
69192 + * WMI_SET_AKMP_PARAMS_CMD
69193 + */
69194 +
69195 +#define WMI_AKMP_MULTI_PMKID_EN 0x000001
69196 +
69197 +typedef PREPACK struct {
69198 + A_UINT32 akmpInfo;
69199 +} POSTPACK WMI_SET_AKMP_PARAMS_CMD;
69200 +
69201 +typedef PREPACK struct {
69202 + A_UINT8 pmkid[WMI_PMKID_LEN];
69203 +} POSTPACK WMI_PMKID;
69204 +
69205 +/*
69206 + * WMI_SET_PMKID_LIST_CMD
69207 + */
69208 +#define WMI_MAX_PMKID_CACHE 8
69209 +
69210 +typedef PREPACK struct {
69211 + A_UINT32 numPMKID;
69212 + WMI_PMKID pmkidList[WMI_MAX_PMKID_CACHE];
69213 +} POSTPACK WMI_SET_PMKID_LIST_CMD;
69214 +
69215 +/*
69216 + * WMI_GET_PMKID_LIST_CMD Reply
69217 + * Following the Number of PMKIDs is the list of PMKIDs
69218 + */
69219 +typedef PREPACK struct {
69220 + A_UINT32 numPMKID;
69221 + WMI_PMKID pmkidList[1];
69222 +} POSTPACK WMI_PMKID_LIST_REPLY;
69223 +
69224 +/* index used for priority streams */
69225 +typedef enum {
69226 + WMI_NOT_MAPPED = -1,
69227 + WMI_CONTROL_PRI = 0,
69228 + WMI_BEST_EFFORT_PRI = 1,
69229 + WMI_LOW_PRI = 2,
69230 + WMI_HIGH_PRI = 3,
69231 + WMI_HIGHEST_PRI,
69232 + WMI_PRI_MAX_COUNT
69233 +} WMI_PRI_STREAM_ID;
69234 +
69235 +#ifndef ATH_TARGET
69236 +#include "athendpack.h"
69237 +#endif
69238 +
69239 +#ifdef __cplusplus
69240 +}
69241 +#endif
69242 +
69243 +#endif /* _WMI_H_ */
69244 Index: linux-2.6.28/drivers/ar6000/include/wmix.h
69245 ===================================================================
69246 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
69247 +++ linux-2.6.28/drivers/ar6000/include/wmix.h 2009-01-02 00:01:56.000000000 +0100
69248 @@ -0,0 +1,233 @@
69249 +/*
69250 + * Copyright (c) 2004-2005 Atheros Communications Inc.
69251 + * All rights reserved.
69252 + *
69253 + *
69254 + * $ATH_LICENSE_HOSTSDK0_C$
69255 + *
69256 + * This file contains extensions of the WMI protocol specified in the
69257 + * Wireless Module Interface (WMI). It includes definitions of all
69258 + * extended commands and events. Extensions include useful commands
69259 + * that are not directly related to wireless activities. They may
69260 + * be hardware-specific, and they might not be supported on all
69261 + * implementations.
69262 + *
69263 + * Extended WMIX commands are encapsulated in a WMI message with
69264 + * cmd=WMI_EXTENSION_CMD.
69265 + *
69266 + */
69267 +
69268 +#ifndef _WMIX_H_
69269 +#define _WMIX_H_
69270 +
69271 +#ifdef __cplusplus
69272 +extern "C" {
69273 +#endif
69274 +
69275 +#ifndef ATH_TARGET
69276 +#include "athstartpack.h"
69277 +#endif
69278 +
69279 +#include "dbglog.h"
69280 +
69281 +/*
69282 + * Extended WMI commands are those that are needed during wireless
69283 + * operation, but which are not really wireless commands. This allows,
69284 + * for instance, platform-specific commands. Extended WMI commands are
69285 + * embedded in a WMI command message with WMI_COMMAND_ID=WMI_EXTENSION_CMDID.
69286 + * Extended WMI events are similarly embedded in a WMI event message with
69287 + * WMI_EVENT_ID=WMI_EXTENSION_EVENTID.
69288 + */
69289 +typedef PREPACK struct {
69290 + A_UINT32 commandId;
69291 +} POSTPACK WMIX_CMD_HDR;
69292 +
69293 +typedef enum {
69294 + WMIX_DSETOPEN_REPLY_CMDID = 0x2001,
69295 + WMIX_DSETDATA_REPLY_CMDID,
69296 + WMIX_GPIO_OUTPUT_SET_CMDID,
69297 + WMIX_GPIO_INPUT_GET_CMDID,
69298 + WMIX_GPIO_REGISTER_SET_CMDID,
69299 + WMIX_GPIO_REGISTER_GET_CMDID,
69300 + WMIX_GPIO_INTR_ACK_CMDID,
69301 + WMIX_HB_CHALLENGE_RESP_CMDID,
69302 + WMIX_DBGLOG_CFG_MODULE_CMDID,
69303 +} WMIX_COMMAND_ID;
69304 +
69305 +typedef enum {
69306 + WMIX_DSETOPENREQ_EVENTID = 0x3001,
69307 + WMIX_DSETCLOSE_EVENTID,
69308 + WMIX_DSETDATAREQ_EVENTID,
69309 + WMIX_GPIO_INTR_EVENTID,
69310 + WMIX_GPIO_DATA_EVENTID,
69311 + WMIX_GPIO_ACK_EVENTID,
69312 + WMIX_HB_CHALLENGE_RESP_EVENTID,
69313 + WMIX_DBGLOG_EVENTID,
69314 +} WMIX_EVENT_ID;
69315 +
69316 +/*
69317 + * =============DataSet support=================
69318 + */
69319 +
69320 +/*
69321 + * WMIX_DSETOPENREQ_EVENTID
69322 + * DataSet Open Request Event
69323 + */
69324 +typedef PREPACK struct {
69325 + A_UINT32 dset_id;
69326 + A_UINT32 targ_dset_handle; /* echo'ed, not used by Host, */
69327 + A_UINT32 targ_reply_fn; /* echo'ed, not used by Host, */
69328 + A_UINT32 targ_reply_arg; /* echo'ed, not used by Host, */
69329 +} POSTPACK WMIX_DSETOPENREQ_EVENT;
69330 +
69331 +/*
69332 + * WMIX_DSETCLOSE_EVENTID
69333 + * DataSet Close Event
69334 + */
69335 +typedef PREPACK struct {
69336 + A_UINT32 access_cookie;
69337 +} POSTPACK WMIX_DSETCLOSE_EVENT;
69338 +
69339 +/*
69340 + * WMIX_DSETDATAREQ_EVENTID
69341 + * DataSet Data Request Event
69342 + */
69343 +typedef PREPACK struct {
69344 + A_UINT32 access_cookie;
69345 + A_UINT32 offset;
69346 + A_UINT32 length;
69347 + A_UINT32 targ_buf; /* echo'ed, not used by Host, */
69348 + A_UINT32 targ_reply_fn; /* echo'ed, not used by Host, */
69349 + A_UINT32 targ_reply_arg; /* echo'ed, not used by Host, */
69350 +} POSTPACK WMIX_DSETDATAREQ_EVENT;
69351 +
69352 +typedef PREPACK struct {
69353 + A_UINT32 status;
69354 + A_UINT32 targ_dset_handle;
69355 + A_UINT32 targ_reply_fn;
69356 + A_UINT32 targ_reply_arg;
69357 + A_UINT32 access_cookie;
69358 + A_UINT32 size;
69359 + A_UINT32 version;
69360 +} POSTPACK WMIX_DSETOPEN_REPLY_CMD;
69361 +
69362 +typedef PREPACK struct {
69363 + A_UINT32 status;
69364 + A_UINT32 targ_buf;
69365 + A_UINT32 targ_reply_fn;
69366 + A_UINT32 targ_reply_arg;
69367 + A_UINT32 length;
69368 + A_UINT8 buf[1];
69369 +} POSTPACK WMIX_DSETDATA_REPLY_CMD;
69370 +
69371 +
69372 +/*
69373 + * =============GPIO support=================
69374 + * All masks are 18-bit masks with bit N operating on GPIO pin N.
69375 + */
69376 +
69377 +#include "gpio.h"
69378 +
69379 +/*
69380 + * Set GPIO pin output state.
69381 + * In order for output to be driven, a pin must be enabled for output.
69382 + * This can be done during initialization through the GPIO Configuration
69383 + * DataSet, or during operation with the enable_mask.
69384 + *
69385 + * If a request is made to simultaneously set/clear or set/disable or
69386 + * clear/disable or disable/enable, results are undefined.
69387 + */
69388 +typedef PREPACK struct {
69389 + A_UINT32 set_mask; /* pins to set */
69390 + A_UINT32 clear_mask; /* pins to clear */
69391 + A_UINT32 enable_mask; /* pins to enable for output */
69392 + A_UINT32 disable_mask; /* pins to disable/tristate */
69393 +} POSTPACK WMIX_GPIO_OUTPUT_SET_CMD;
69394 +
69395 +/*
69396 + * Set a GPIO register. For debug/exceptional cases.
69397 + * Values for gpioreg_id are GPIO_REGISTER_IDs, defined in a
69398 + * platform-dependent header.
69399 + */
69400 +typedef PREPACK struct {
69401 + A_UINT32 gpioreg_id; /* GPIO register ID */
69402 + A_UINT32 value; /* value to write */
69403 +} POSTPACK WMIX_GPIO_REGISTER_SET_CMD;
69404 +
69405 +/* Get a GPIO register. For debug/exceptional cases. */
69406 +typedef PREPACK struct {
69407 + A_UINT32 gpioreg_id; /* GPIO register to read */
69408 +} POSTPACK WMIX_GPIO_REGISTER_GET_CMD;
69409 +
69410 +/*
69411 + * Host acknowledges and re-arms GPIO interrupts. A single
69412 + * message should be used to acknowledge all interrupts that
69413 + * were delivered in an earlier WMIX_GPIO_INTR_EVENT message.
69414 + */
69415 +typedef PREPACK struct {
69416 + A_UINT32 ack_mask; /* interrupts to acknowledge */
69417 +} POSTPACK WMIX_GPIO_INTR_ACK_CMD;
69418 +
69419 +/*
69420 + * Target informs Host of GPIO interrupts that have ocurred since the
69421 + * last WMIX_GIPO_INTR_ACK_CMD was received. Additional information --
69422 + * the current GPIO input values is provided -- in order to support
69423 + * use of a GPIO interrupt as a Data Valid signal for other GPIO pins.
69424 + */
69425 +typedef PREPACK struct {
69426 + A_UINT32 intr_mask; /* pending GPIO interrupts */
69427 + A_UINT32 input_values; /* recent GPIO input values */
69428 +} POSTPACK WMIX_GPIO_INTR_EVENT;
69429 +
69430 +/*
69431 + * Target responds to Host's earlier WMIX_GPIO_INPUT_GET_CMDID request
69432 + * using a GPIO_DATA_EVENT with
69433 + * value set to the mask of GPIO pin inputs and
69434 + * reg_id set to GPIO_ID_NONE
69435 + *
69436 + *
69437 + * Target responds to Hosts's earlier WMIX_GPIO_REGISTER_GET_CMDID request
69438 + * using a GPIO_DATA_EVENT with
69439 + * value set to the value of the requested register and
69440 + * reg_id identifying the register (reflects the original request)
69441 + * NB: reg_id supports the future possibility of unsolicited
69442 + * WMIX_GPIO_DATA_EVENTs (for polling GPIO input), and it may
69443 + * simplify Host GPIO support.
69444 + */
69445 +typedef PREPACK struct {
69446 + A_UINT32 value;
69447 + A_UINT32 reg_id;
69448 +} POSTPACK WMIX_GPIO_DATA_EVENT;
69449 +
69450 +/*
69451 + * =============Error Detection support=================
69452 + */
69453 +
69454 +/*
69455 + * WMIX_HB_CHALLENGE_RESP_CMDID
69456 + * Heartbeat Challenge Response command
69457 + */
69458 +typedef PREPACK struct {
69459 + A_UINT32 cookie;
69460 + A_UINT32 source;
69461 +} POSTPACK WMIX_HB_CHALLENGE_RESP_CMD;
69462 +
69463 +/*
69464 + * WMIX_HB_CHALLENGE_RESP_EVENTID
69465 + * Heartbeat Challenge Response Event
69466 + */
69467 +#define WMIX_HB_CHALLENGE_RESP_EVENT WMIX_HB_CHALLENGE_RESP_CMD
69468 +
69469 +typedef PREPACK struct {
69470 + struct dbglog_config_s config;
69471 +} POSTPACK WMIX_DBGLOG_CFG_MODULE_CMD;
69472 +
69473 +#ifndef ATH_TARGET
69474 +#include "athendpack.h"
69475 +#endif
69476 +
69477 +#ifdef __cplusplus
69478 +}
69479 +#endif
69480 +
69481 +#endif /* _WMIX_H_ */
69482 Index: linux-2.6.28/drivers/ar6000/Kconfig
69483 ===================================================================
69484 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
69485 +++ linux-2.6.28/drivers/ar6000/Kconfig 2009-01-02 00:01:56.000000000 +0100
69486 @@ -0,0 +1,7 @@
69487 +config AR6000_WLAN
69488 + tristate "AR6000 wireless networking over SDIO"
69489 + depends on MMC
69490 + select WIRELESS_EXT
69491 + default m
69492 + help
69493 + good luck.
69494 Index: linux-2.6.28/drivers/ar6000/Makefile
69495 ===================================================================
69496 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
69497 +++ linux-2.6.28/drivers/ar6000/Makefile 2009-01-02 00:01:56.000000000 +0100
69498 @@ -0,0 +1,38 @@
69499 +REV ?= 2
69500 +
69501 +PWD := $(shell pwd)
69502 +
69503 +EXTRA_CFLAGS += -I$(src)/include
69504 +
69505 +EXTRA_CFLAGS += -DLINUX -D__KERNEL__ -DHTC_RAW_INTERFACE\
69506 + -DTCMD -DUSER_KEYS \
69507 + -DNO_SYNC_FLUSH #\
69508 + -DMULTIPLE_FRAMES_PER_INTERRUPT -DAR6000REV$(REV) \
69509 + -DBLOCK_TX_PATH_FLAG \
69510 + -DSDIO \
69511 +
69512 +EXTRA_CFLAGS += -DKERNEL_2_6
69513 +
69514 +obj-$(CONFIG_AR6000_WLAN) += ar6000.o
69515 +
69516 +ar6000-objs += htc/ar6k.o \
69517 + htc/ar6k_events.o \
69518 + htc/htc_send.o \
69519 + htc/htc_recv.o \
69520 + htc/htc_services.o \
69521 + htc/htc.o \
69522 + hif/hif2.o \
69523 + bmi/bmi.o \
69524 + ar6000/ar6000_drv.o \
69525 + ar6000/ar6000_raw_if.o \
69526 + ar6000/netbuf.o \
69527 + ar6000/wireless_ext.o \
69528 + ar6000/ioctl.o \
69529 + miscdrv/common_drv.o \
69530 + miscdrv/credit_dist.o \
69531 + wmi/wmi.o \
69532 + wlan/wlan_node.o \
69533 + wlan/wlan_recv_beacon.o \
69534 + wlan/wlan_utils.o
69535 +
69536 +
69537 Index: linux-2.6.28/drivers/ar6000/miscdrv/common_drv.c
69538 ===================================================================
69539 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
69540 +++ linux-2.6.28/drivers/ar6000/miscdrv/common_drv.c 2009-01-02 00:01:56.000000000 +0100
69541 @@ -0,0 +1,467 @@
69542 +
69543 +/*
69544 + *
69545 + * Copyright (c) 2004-2007 Atheros Communications Inc.
69546 + * All rights reserved.
69547 + *
69548 + *
69549 + * This program is free software; you can redistribute it and/or modify
69550 + * it under the terms of the GNU General Public License version 2 as
69551 + * published by the Free Software Foundation;
69552 + *
69553 + * Software distributed under the License is distributed on an "AS
69554 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
69555 + * implied. See the License for the specific language governing
69556 + * rights and limitations under the License.
69557 + *
69558 + *
69559 + *
69560 + */
69561 +
69562 +#include "a_config.h"
69563 +#include "athdefs.h"
69564 +#include "a_types.h"
69565 +#include "AR6Khwreg.h"
69566 +#include "targaddrs.h"
69567 +#include "a_osapi.h"
69568 +#include "hif.h"
69569 +#include "htc_api.h"
69570 +#include "bmi.h"
69571 +#include "bmi_msg.h"
69572 +#include "common_drv.h"
69573 +#include "a_debug.h"
69574 +#include "targaddrs.h"
69575 +
69576 +#define HOST_INTEREST_ITEM_ADDRESS(target, item) \
69577 +(((TargetType) == TARGET_TYPE_AR6001) ? \
69578 + AR6001_HOST_INTEREST_ITEM_ADDRESS(item) : \
69579 + AR6002_HOST_INTEREST_ITEM_ADDRESS(item))
69580 +
69581 +
69582 +/* Compile the 4BYTE version of the window register setup routine,
69583 + * This mitigates host interconnect issues with non-4byte aligned bus requests, some
69584 + * interconnects use bus adapters that impose strict limitations.
69585 + * Since diag window access is not intended for performance critical operations, the 4byte mode should
69586 + * be satisfactory even though it generates 4X the bus activity. */
69587 +
69588 +#ifdef USE_4BYTE_REGISTER_ACCESS
69589 +
69590 + /* set the window address register (using 4-byte register access ). */
69591 +A_STATUS ar6000_SetAddressWindowRegister(HIF_DEVICE *hifDevice, A_UINT32 RegisterAddr, A_UINT32 Address)
69592 +{
69593 + A_STATUS status;
69594 + A_UINT8 addrValue[4];
69595 + int i;
69596 +
69597 + /* write bytes 1,2,3 of the register to set the upper address bytes, the LSB is written
69598 + * last to initiate the access cycle */
69599 +
69600 + for (i = 1; i <= 3; i++) {
69601 + /* fill the buffer with the address byte value we want to hit 4 times*/
69602 + addrValue[0] = ((A_UINT8 *)&Address)[i];
69603 + addrValue[1] = addrValue[0];
69604 + addrValue[2] = addrValue[0];
69605 + addrValue[3] = addrValue[0];
69606 +
69607 + /* hit each byte of the register address with a 4-byte write operation to the same address,
69608 + * this is a harmless operation */
69609 + status = HIFReadWrite(hifDevice,
69610 + RegisterAddr+i,
69611 + addrValue,
69612 + 4,
69613 + HIF_WR_SYNC_BYTE_FIX,
69614 + NULL);
69615 + if (status != A_OK) {
69616 + break;
69617 + }
69618 + }
69619 +
69620 + if (status != A_OK) {
69621 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Cannot write initial bytes of 0x%x to window reg: 0x%X \n",
69622 + RegisterAddr, Address));
69623 + return status;
69624 + }
69625 +
69626 + /* write the address register again, this time write the whole 4-byte value.
69627 + * The effect here is that the LSB write causes the cycle to start, the extra
69628 + * 3 byte write to bytes 1,2,3 has no effect since we are writing the same values again */
69629 + status = HIFReadWrite(hifDevice,
69630 + RegisterAddr,
69631 + (A_UCHAR *)(&Address),
69632 + 4,
69633 + HIF_WR_SYNC_BYTE_INC,
69634 + NULL);
69635 +
69636 + if (status != A_OK) {
69637 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Cannot write 0x%x to window reg: 0x%X \n",
69638 + RegisterAddr, Address));
69639 + return status;
69640 + }
69641 +
69642 + return A_OK;
69643 +
69644 +
69645 +
69646 +}
69647 +
69648 +
69649 +#else
69650 +
69651 + /* set the window address register */
69652 +A_STATUS ar6000_SetAddressWindowRegister(HIF_DEVICE *hifDevice, A_UINT32 RegisterAddr, A_UINT32 Address)
69653 +{
69654 + A_STATUS status;
69655 +
69656 + /* write bytes 1,2,3 of the register to set the upper address bytes, the LSB is written
69657 + * last to initiate the access cycle */
69658 + status = HIFReadWrite(hifDevice,
69659 + RegisterAddr+1, /* write upper 3 bytes */
69660 + ((A_UCHAR *)(&Address))+1,
69661 + sizeof(A_UINT32)-1,
69662 + HIF_WR_SYNC_BYTE_INC,
69663 + NULL);
69664 +
69665 + if (status != A_OK) {
69666 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Cannot write initial bytes of 0x%x to window reg: 0x%X \n",
69667 + RegisterAddr, Address));
69668 + return status;
69669 + }
69670 +
69671 + /* write the LSB of the register, this initiates the operation */
69672 + status = HIFReadWrite(hifDevice,
69673 + RegisterAddr,
69674 + (A_UCHAR *)(&Address),
69675 + sizeof(A_UINT8),
69676 + HIF_WR_SYNC_BYTE_INC,
69677 + NULL);
69678 +
69679 + if (status != A_OK) {
69680 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Cannot write 0x%x to window reg: 0x%X \n",
69681 + RegisterAddr, Address));
69682 + return status;
69683 + }
69684 +
69685 + return A_OK;
69686 +}
69687 +
69688 +#endif
69689 +
69690 +/*
69691 + * Read from the AR6000 through its diagnostic window.
69692 + * No cooperation from the Target is required for this.
69693 + */
69694 +A_STATUS
69695 +ar6000_ReadRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data)
69696 +{
69697 + A_STATUS status;
69698 +
69699 + /* set window register to start read cycle */
69700 + status = ar6000_SetAddressWindowRegister(hifDevice,
69701 + WINDOW_READ_ADDR_ADDRESS,
69702 + *address);
69703 +
69704 + if (status != A_OK) {
69705 + return status;
69706 + }
69707 +
69708 + /* read the data */
69709 + status = HIFReadWrite(hifDevice,
69710 + WINDOW_DATA_ADDRESS,
69711 + (A_UCHAR *)data,
69712 + sizeof(A_UINT32),
69713 + HIF_RD_SYNC_BYTE_INC,
69714 + NULL);
69715 + if (status != A_OK) {
69716 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Cannot read from WINDOW_DATA_ADDRESS\n"));
69717 + return status;
69718 + }
69719 +
69720 + return status;
69721 +}
69722 +
69723 +
69724 +/*
69725 + * Write to the AR6000 through its diagnostic window.
69726 + * No cooperation from the Target is required for this.
69727 + */
69728 +A_STATUS
69729 +ar6000_WriteRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data)
69730 +{
69731 + A_STATUS status;
69732 +
69733 + /* set write data */
69734 + status = HIFReadWrite(hifDevice,
69735 + WINDOW_DATA_ADDRESS,
69736 + (A_UCHAR *)data,
69737 + sizeof(A_UINT32),
69738 + HIF_WR_SYNC_BYTE_INC,
69739 + NULL);
69740 + if (status != A_OK) {
69741 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Cannot write 0x%x to WINDOW_DATA_ADDRESS\n", *data));
69742 + return status;
69743 + }
69744 +
69745 + /* set window register, which starts the write cycle */
69746 + return ar6000_SetAddressWindowRegister(hifDevice,
69747 + WINDOW_WRITE_ADDR_ADDRESS,
69748 + *address);
69749 +}
69750 +
69751 +A_STATUS
69752 +ar6000_ReadDataDiag(HIF_DEVICE *hifDevice, A_UINT32 address,
69753 + A_UCHAR *data, A_UINT32 length)
69754 +{
69755 + A_UINT32 count;
69756 + A_STATUS status = A_OK;
69757 +
69758 + for (count = 0; count < length; count += 4, address += 4) {
69759 + if ((status = ar6000_ReadRegDiag(hifDevice, &address,
69760 + (A_UINT32 *)&data[count])) != A_OK)
69761 + {
69762 + break;
69763 + }
69764 + }
69765 +
69766 + return status;
69767 +}
69768 +
69769 +A_STATUS
69770 +ar6000_WriteDataDiag(HIF_DEVICE *hifDevice, A_UINT32 address,
69771 + A_UCHAR *data, A_UINT32 length)
69772 +{
69773 + A_UINT32 count;
69774 + A_STATUS status = A_OK;
69775 +
69776 + for (count = 0; count < length; count += 4, address += 4) {
69777 + if ((status = ar6000_WriteRegDiag(hifDevice, &address,
69778 + (A_UINT32 *)&data[count])) != A_OK)
69779 + {
69780 + break;
69781 + }
69782 + }
69783 +
69784 + return status;
69785 +}
69786 +
69787 +A_STATUS
69788 +ar6000_reset_device_skipflash(HIF_DEVICE *hifDevice)
69789 +{
69790 + int i;
69791 + struct forceROM_s {
69792 + A_UINT32 addr;
69793 + A_UINT32 data;
69794 + };
69795 + struct forceROM_s *ForceROM;
69796 + int szForceROM;
69797 + A_UINT32 instruction;
69798 +
69799 + static struct forceROM_s ForceROM_REV2[] = {
69800 + /* NB: This works for old REV2 ROM (old). */
69801 + {0x00001ff0, 0x175b0027}, /* jump instruction at 0xa0001ff0 */
69802 + {0x00001ff4, 0x00000000}, /* nop instruction at 0xa0001ff4 */
69803 +
69804 + {MC_REMAP_TARGET_ADDRESS, 0x00001ff0}, /* remap to 0xa0001ff0 */
69805 + {MC_REMAP_COMPARE_ADDRESS, 0x01000040},/* ...from 0xbfc00040 */
69806 + {MC_REMAP_SIZE_ADDRESS, 0x00000000}, /* ...1 cache line */
69807 + {MC_REMAP_VALID_ADDRESS, 0x00000001}, /* ...remap is valid */
69808 +
69809 + {LOCAL_COUNT_ADDRESS+0x10, 0}, /* clear BMI credit counter */
69810 +
69811 + {RESET_CONTROL_ADDRESS, RESET_CONTROL_WARM_RST_MASK},
69812 + };
69813 +
69814 + static struct forceROM_s ForceROM_NEW[] = {
69815 + /* NB: This works for AR6000 ROM REV3 and beyond. */
69816 + {LOCAL_SCRATCH_ADDRESS, AR6K_OPTION_IGNORE_FLASH},
69817 + {LOCAL_COUNT_ADDRESS+0x10, 0}, /* clear BMI credit counter */
69818 + {RESET_CONTROL_ADDRESS, RESET_CONTROL_WARM_RST_MASK},
69819 + };
69820 +
69821 + /*
69822 + * Examine a semi-arbitrary instruction that's different
69823 + * in REV2 and other revisions.
69824 + * NB: If a Host port does not require simultaneous support
69825 + * for multiple revisions of Target ROM, this code can be elided.
69826 + */
69827 + (void)ar6000_ReadDataDiag(hifDevice, 0x01000040,
69828 + (A_UCHAR *)&instruction, 4);
69829 +
69830 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("instruction=0x%x\n", instruction));
69831 +
69832 + if (instruction == 0x3c1aa200) {
69833 + /* It's an old ROM */
69834 + ForceROM = ForceROM_REV2;
69835 + szForceROM = sizeof(ForceROM_REV2)/sizeof(*ForceROM);
69836 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Using OLD method\n"));
69837 + } else {
69838 + ForceROM = ForceROM_NEW;
69839 + szForceROM = sizeof(ForceROM_NEW)/sizeof(*ForceROM);
69840 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Using NEW method\n"));
69841 + }
69842 +
69843 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Force Target to execute from ROM....\n"));
69844 + for (i = 0; i < szForceROM; i++)
69845 + {
69846 + if (ar6000_WriteRegDiag(hifDevice,
69847 + &ForceROM[i].addr,
69848 + &ForceROM[i].data) != A_OK)
69849 + {
69850 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Cannot force Target to execute ROM!\n"));
69851 + return A_ERROR;
69852 + }
69853 + }
69854 +
69855 + A_MDELAY(50); /* delay to allow dragon to come to BMI phase */
69856 + return A_OK;
69857 +}
69858 +
69859 +/* reset device */
69860 +A_STATUS ar6000_reset_device(HIF_DEVICE *hifDevice, A_UINT32 TargetType)
69861 +{
69862 +
69863 +#if !defined(DWSIM)
69864 + A_STATUS status = A_OK;
69865 + A_UINT32 address;
69866 + A_UINT32 data;
69867 +
69868 + do {
69869 +
69870 + // address = RESET_CONTROL_ADDRESS;
69871 + data = RESET_CONTROL_COLD_RST_MASK;
69872 +
69873 + /* Hardcode the address of RESET_CONTROL_ADDRESS based on the target type */
69874 + if (TargetType == TARGET_TYPE_AR6001) {
69875 + address = 0x0C000000;
69876 + } else {
69877 + if (TargetType == TARGET_TYPE_AR6002) {
69878 + address = 0x00004000;
69879 + } else {
69880 + A_ASSERT(0);
69881 + }
69882 + }
69883 +
69884 + status = ar6000_WriteRegDiag(hifDevice, &address, &data);
69885 +
69886 + if (A_FAILED(status)) {
69887 + break;
69888 + }
69889 +
69890 + /*
69891 + * Read back the RESET CAUSE register to ensure that the cold reset
69892 + * went through.
69893 + */
69894 + A_MDELAY(2000); /* 2 second delay to allow things to settle down */
69895 +
69896 +
69897 + // address = RESET_CAUSE_ADDRESS;
69898 + /* Hardcode the address of RESET_CAUSE_ADDRESS based on the target type */
69899 + if (TargetType == TARGET_TYPE_AR6001) {
69900 + address = 0x0C0000CC;
69901 + } else {
69902 + if (TargetType == TARGET_TYPE_AR6002) {
69903 + address = 0x000040C0;
69904 + } else {
69905 + A_ASSERT(0);
69906 + }
69907 + }
69908 +
69909 + data = 0;
69910 + status = ar6000_ReadRegDiag(hifDevice, &address, &data);
69911 +
69912 + if (A_FAILED(status)) {
69913 + break;
69914 + }
69915 +
69916 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Reset Cause readback: 0x%X \n",data));
69917 + data &= RESET_CAUSE_LAST_MASK;
69918 + if (data != 2) {
69919 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Unable to cold reset the target \n"));
69920 + }
69921 +
69922 + } while (FALSE);
69923 +
69924 + if (A_FAILED(status)) {
69925 + AR_DEBUG_PRINTF(ATH_LOG_ERR, ("Failed to reset target \n"));
69926 + }
69927 +#endif
69928 + return A_OK;
69929 +}
69930 +
69931 +#define REG_DUMP_COUNT_AR6001 38 /* WORDs, derived from AR6001_regdump.h */
69932 +#define REG_DUMP_COUNT_AR6002 32 /* WORDs, derived from AR6002_regdump.h */
69933 +
69934 +
69935 +#if REG_DUMP_COUNT_AR6001 <= REG_DUMP_COUNT_AR6002
69936 +#define REGISTER_DUMP_LEN_MAX REG_DUMP_COUNT_AR6002
69937 +#else
69938 +#define REGISTER_DUMP_LEN_MAX REG_DUMP_COUNT_AR6001
69939 +#endif
69940 +
69941 +void ar6000_dump_target_assert_info(HIF_DEVICE *hifDevice, A_UINT32 TargetType)
69942 +{
69943 + A_UINT32 address;
69944 + A_UINT32 regDumpArea = 0;
69945 + A_STATUS status;
69946 + A_UINT32 regDumpValues[REGISTER_DUMP_LEN_MAX];
69947 + A_UINT32 regDumpCount = 0;
69948 + A_UINT32 i;
69949 +
69950 + do {
69951 +
69952 + /* the reg dump pointer is copied to the host interest area */
69953 + address = HOST_INTEREST_ITEM_ADDRESS(TargetType, hi_failure_state);
69954 +
69955 + if (TargetType == TARGET_TYPE_AR6001) {
69956 + /* for AR6001, this is a fixed location because the ptr is actually stuck in cache,
69957 + * this may be fixed in later firmware versions */
69958 + address = 0x18a0;
69959 + regDumpCount = REG_DUMP_COUNT_AR6001;
69960 +
69961 + } else if (TargetType == TARGET_TYPE_AR6002) {
69962 +
69963 + regDumpCount = REG_DUMP_COUNT_AR6002;
69964 +
69965 + } else {
69966 + A_ASSERT(0);
69967 + }
69968 +
69969 + /* read RAM location through diagnostic window */
69970 + status = ar6000_ReadRegDiag(hifDevice, &address, &regDumpArea);
69971 +
69972 + if (A_FAILED(status)) {
69973 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("AR6K: Failed to get ptr to register dump area \n"));
69974 + break;
69975 + }
69976 +
69977 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("AR6K: Location of register dump data: 0x%X \n",regDumpArea));
69978 +
69979 + if (regDumpArea == 0) {
69980 + /* no reg dump */
69981 + break;
69982 + }
69983 +
69984 + if (TargetType == TARGET_TYPE_AR6001) {
69985 + regDumpArea &= 0x0FFFFFFF; /* convert to physical address in target memory */
69986 + }
69987 +
69988 + /* fetch register dump data */
69989 + status = ar6000_ReadDataDiag(hifDevice,
69990 + regDumpArea,
69991 + (A_UCHAR *)&regDumpValues[0],
69992 + regDumpCount * (sizeof(A_UINT32)));
69993 +
69994 + if (A_FAILED(status)) {
69995 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("AR6K: Failed to get register dump \n"));
69996 + break;
69997 + }
69998 +
69999 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("AR6K: Register Dump: \n"));
70000 +
70001 + for (i = 0; i < regDumpCount; i++) {
70002 + AR_DEBUG_PRINTF(ATH_DEBUG_ERR,(" %d : 0x%8.8X \n",i, regDumpValues[i]));
70003 + }
70004 +
70005 + } while (FALSE);
70006 +
70007 +}
70008 +
70009 Index: linux-2.6.28/drivers/ar6000/miscdrv/credit_dist.c
70010 ===================================================================
70011 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
70012 +++ linux-2.6.28/drivers/ar6000/miscdrv/credit_dist.c 2009-01-02 00:01:56.000000000 +0100
70013 @@ -0,0 +1,346 @@
70014 +
70015 +/*
70016 + *
70017 + * Copyright (c) 2004-2007 Atheros Communications Inc.
70018 + * All rights reserved.
70019 + *
70020 + *
70021 + * This program is free software; you can redistribute it and/or modify
70022 + * it under the terms of the GNU General Public License version 2 as
70023 + * published by the Free Software Foundation;
70024 + *
70025 + * Software distributed under the License is distributed on an "AS
70026 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
70027 + * implied. See the License for the specific language governing
70028 + * rights and limitations under the License.
70029 + *
70030 + *
70031 + *
70032 + */
70033 +
70034 +#include "a_config.h"
70035 +#include "athdefs.h"
70036 +#include "a_types.h"
70037 +#include "a_osapi.h"
70038 +#include "a_debug.h"
70039 +#include "htc_api.h"
70040 +#include "common_drv.h"
70041 +
70042 +/********* CREDIT DISTRIBUTION FUNCTIONS ******************************************/
70043 +
70044 +#define NO_VO_SERVICE 1 /* currently WMI only uses 3 data streams, so we leave VO service inactive */
70045 +
70046 +#ifdef NO_VO_SERVICE
70047 +#define DATA_SVCS_USED 3
70048 +#else
70049 +#define DATA_SVCS_USED 4
70050 +#endif
70051 +
70052 +static void RedistributeCredits(COMMON_CREDIT_STATE_INFO *pCredInfo,
70053 + HTC_ENDPOINT_CREDIT_DIST *pEPDistList);
70054 +
70055 +static void SeekCredits(COMMON_CREDIT_STATE_INFO *pCredInfo,
70056 + HTC_ENDPOINT_CREDIT_DIST *pEPDistList);
70057 +
70058 +/* reduce an ep's credits back to a set limit */
70059 +static INLINE void ReduceCredits(COMMON_CREDIT_STATE_INFO *pCredInfo,
70060 + HTC_ENDPOINT_CREDIT_DIST *pEpDist,
70061 + int Limit)
70062 +{
70063 + int credits;
70064 +
70065 + /* set the new limit */
70066 + pEpDist->TxCreditsAssigned = Limit;
70067 +
70068 + if (pEpDist->TxCredits <= Limit) {
70069 + return;
70070 + }
70071 +
70072 + /* figure out how much to take away */
70073 + credits = pEpDist->TxCredits - Limit;
70074 + /* take them away */
70075 + pEpDist->TxCredits -= credits;
70076 + pCredInfo->CurrentFreeCredits += credits;
70077 +}
70078 +
70079 +/* give an endpoint some credits from the free credit pool */
70080 +#define GiveCredits(pCredInfo,pEpDist,credits) \
70081 +{ \
70082 + (pEpDist)->TxCredits += (credits); \
70083 + (pEpDist)->TxCreditsAssigned += (credits); \
70084 + (pCredInfo)->CurrentFreeCredits -= (credits); \
70085 +}
70086 +
70087 +
70088 +/* default credit init callback.
70089 + * This function is called in the context of HTCStart() to setup initial (application-specific)
70090 + * credit distributions */
70091 +static void ar6000_credit_init(void *Context,
70092 + HTC_ENDPOINT_CREDIT_DIST *pEPList,
70093 + int TotalCredits)
70094 +{
70095 + HTC_ENDPOINT_CREDIT_DIST *pCurEpDist;
70096 + int count;
70097 + COMMON_CREDIT_STATE_INFO *pCredInfo = (COMMON_CREDIT_STATE_INFO *)Context;
70098 +
70099 + pCredInfo->CurrentFreeCredits = TotalCredits;
70100 + pCredInfo->TotalAvailableCredits = TotalCredits;
70101 +
70102 + pCurEpDist = pEPList;
70103 +
70104 + /* run through the list and initialize */
70105 + while (pCurEpDist != NULL) {
70106 +
70107 + /* set minimums for each endpoint */
70108 + pCurEpDist->TxCreditsMin = pCurEpDist->TxCreditsPerMaxMsg;
70109 +
70110 + if (pCurEpDist->ServiceID == WMI_CONTROL_SVC) {
70111 + /* give control service some credits */
70112 + GiveCredits(pCredInfo,pCurEpDist,pCurEpDist->TxCreditsMin);
70113 + /* control service is always marked active, it never goes inactive EVER */
70114 + SET_EP_ACTIVE(pCurEpDist);
70115 + } else if (pCurEpDist->ServiceID == WMI_DATA_BK_SVC) {
70116 + /* this is the lowest priority data endpoint, save this off for easy access */
70117 + pCredInfo->pLowestPriEpDist = pCurEpDist;
70118 + }
70119 +
70120 + /* Streams have to be created (explicit | implicit)for all kinds
70121 + * of traffic. BE endpoints are also inactive in the beginning.
70122 + * When BE traffic starts it creates implicit streams that
70123 + * redistributes credits.
70124 + */
70125 +
70126 + /* note, all other endpoints have minimums set but are initially given NO credits.
70127 + * Credits will be distributed as traffic activity demands */
70128 + pCurEpDist = pCurEpDist->pNext;
70129 + }
70130 +
70131 + if (pCredInfo->CurrentFreeCredits <= 0) {
70132 + AR_DEBUG_PRINTF(ATH_LOG_INF, ("Not enough credits (%d) to do credit distributions \n", TotalCredits));
70133 + A_ASSERT(FALSE);
70134 + return;
70135 + }
70136 +
70137 + /* reset list */
70138 + pCurEpDist = pEPList;
70139 + /* now run through the list and set max operating credit limits for everyone */
70140 + while (pCurEpDist != NULL) {
70141 + if (pCurEpDist->ServiceID == WMI_CONTROL_SVC) {
70142 + /* control service max is just 1 max message */
70143 + pCurEpDist->TxCreditsNorm = pCurEpDist->TxCreditsPerMaxMsg;
70144 + } else {
70145 + /* for the remaining data endpoints, we assume that each TxCreditsPerMaxMsg are
70146 + * the same.
70147 + * We use a simple calculation here, we take the remaining credits and
70148 + * determine how many max messages this can cover and then set each endpoint's
70149 + * normal value equal to half this amount.
70150 + * */
70151 + count = (pCredInfo->CurrentFreeCredits/pCurEpDist->TxCreditsPerMaxMsg) * pCurEpDist->TxCreditsPerMaxMsg;
70152 + count = count >> 1;
70153 + count = max(count,pCurEpDist->TxCreditsPerMaxMsg);
70154 + /* set normal */
70155 + pCurEpDist->TxCreditsNorm = count;
70156 +
70157 + }
70158 + pCurEpDist = pCurEpDist->pNext;
70159 + }
70160 +
70161 +}
70162 +
70163 +
70164 +/* default credit distribution callback
70165 + * This callback is invoked whenever endpoints require credit distributions.
70166 + * A lock is held while this function is invoked, this function shall NOT block.
70167 + * The pEPDistList is a list of distribution structures in prioritized order as
70168 + * defined by the call to the HTCSetCreditDistribution() api.
70169 + *
70170 + */
70171 +static void ar6000_credit_distribute(void *Context,
70172 + HTC_ENDPOINT_CREDIT_DIST *pEPDistList,
70173 + HTC_CREDIT_DIST_REASON Reason)
70174 +{
70175 + HTC_ENDPOINT_CREDIT_DIST *pCurEpDist;
70176 + COMMON_CREDIT_STATE_INFO *pCredInfo = (COMMON_CREDIT_STATE_INFO *)Context;
70177 +
70178 + switch (Reason) {
70179 + case HTC_CREDIT_DIST_SEND_COMPLETE :
70180 + pCurEpDist = pEPDistList;
70181 + /* we are given the start of the endpoint distribution list.
70182 + * There may be one or more endpoints to service.
70183 + * Run through the list and distribute credits */
70184 + while (pCurEpDist != NULL) {
70185 +
70186 + if (pCurEpDist->TxCreditsToDist > 0) {
70187 + /* return the credits back to the endpoint */
70188 + pCurEpDist->TxCredits += pCurEpDist->TxCreditsToDist;
70189 + /* always zero out when we are done */
70190 + pCurEpDist->TxCreditsToDist = 0;
70191 +
70192 + if (pCurEpDist->TxCredits > pCurEpDist->TxCreditsAssigned) {
70193 + /* reduce to the assigned limit, previous credit reductions
70194 + * could have caused the limit to change */
70195 + ReduceCredits(pCredInfo, pCurEpDist, pCurEpDist->TxCreditsAssigned);
70196 + }
70197 +
70198 + if (pCurEpDist->TxCredits > pCurEpDist->TxCreditsNorm) {
70199 + /* oversubscribed endpoints need to reduce back to normal */
70200 + ReduceCredits(pCredInfo, pCurEpDist, pCurEpDist->TxCreditsNorm);
70201 + }
70202 + }
70203 +
70204 + pCurEpDist = pCurEpDist->pNext;
70205 + }
70206 +
70207 + A_ASSERT(pCredInfo->CurrentFreeCredits <= pCredInfo->TotalAvailableCredits);
70208 +
70209 + break;
70210 +
70211 + case HTC_CREDIT_DIST_ACTIVITY_CHANGE :
70212 + RedistributeCredits(pCredInfo,pEPDistList);
70213 + break;
70214 + case HTC_CREDIT_DIST_SEEK_CREDITS :
70215 + SeekCredits(pCredInfo,pEPDistList);
70216 + break;
70217 + case HTC_DUMP_CREDIT_STATE :
70218 + AR_DEBUG_PRINTF(ATH_LOG_INF, ("Credit Distribution, total : %d, free : %d\n",
70219 + pCredInfo->TotalAvailableCredits, pCredInfo->CurrentFreeCredits));
70220 + break;
70221 + default:
70222 + break;
70223 +
70224 + }
70225 +
70226 +}
70227 +
70228 +/* redistribute credits based on activity change */
70229 +static void RedistributeCredits(COMMON_CREDIT_STATE_INFO *pCredInfo,
70230 + HTC_ENDPOINT_CREDIT_DIST *pEPDistList)
70231 +{
70232 + HTC_ENDPOINT_CREDIT_DIST *pCurEpDist = pEPDistList;
70233 +
70234 + /* walk through the list and remove credits from inactive endpoints */
70235 + while (pCurEpDist != NULL) {
70236 +
70237 + if (pCurEpDist->ServiceID != WMI_CONTROL_SVC) {
70238 + if (!IS_EP_ACTIVE(pCurEpDist)) {
70239 + /* EP is inactive, reduce credits back to zero */
70240 + ReduceCredits(pCredInfo, pCurEpDist, 0);
70241 + }
70242 + }
70243 +
70244 + /* NOTE in the active case, we do not need to do anything further,
70245 + * when an EP goes active and needs credits, HTC will call into
70246 + * our distribution function using a reason code of HTC_CREDIT_DIST_SEEK_CREDITS */
70247 +
70248 + pCurEpDist = pCurEpDist->pNext;
70249 + }
70250 +
70251 + A_ASSERT(pCredInfo->CurrentFreeCredits <= pCredInfo->TotalAvailableCredits);
70252 +
70253 +}
70254 +
70255 +/* HTC has an endpoint that needs credits, pEPDist is the endpoint in question */
70256 +static void SeekCredits(COMMON_CREDIT_STATE_INFO *pCredInfo,
70257 + HTC_ENDPOINT_CREDIT_DIST *pEPDist)
70258 +{
70259 + HTC_ENDPOINT_CREDIT_DIST *pCurEpDist;
70260 + int credits = 0;
70261 + int need;
70262 +
70263 + do {
70264 +
70265 + if (pEPDist->ServiceID == WMI_CONTROL_SVC) {
70266 + /* we never oversubscribe on the control service, this is not
70267 + * a high performance path and the target never holds onto control
70268 + * credits for too long */
70269 + break;
70270 + }
70271 +
70272 + /* for all other services, we follow a simple algorithm of
70273 + * 1. checking the free pool for credits
70274 + * 2. checking lower priority endpoints for credits to take */
70275 +
70276 + if (pCredInfo->CurrentFreeCredits >= 2 * pEPDist->TxCreditsSeek) {
70277 + /* try to give more credits than it needs */
70278 + credits = 2 * pEPDist->TxCreditsSeek;
70279 + } else {
70280 + /* give what we can */
70281 + credits = min(pCredInfo->CurrentFreeCredits,pEPDist->TxCreditsSeek);
70282 + }
70283 +
70284 + if (credits >= pEPDist->TxCreditsSeek) {
70285 + /* we found some to fullfill the seek request */
70286 + break;
70287 + }
70288 +
70289 + /* we don't have enough in the free pool, try taking away from lower priority services
70290 + *
70291 + * The rule for taking away credits:
70292 + * 1. Only take from lower priority endpoints
70293 + * 2. Only take what is allocated above the minimum (never starve an endpoint completely)
70294 + * 3. Only take what you need.
70295 + *
70296 + * */
70297 +
70298 + /* starting at the lowest priority */
70299 + pCurEpDist = pCredInfo->pLowestPriEpDist;
70300 +
70301 + /* work backwards until we hit the endpoint again */
70302 + while (pCurEpDist != pEPDist) {
70303 + /* calculate how many we need so far */
70304 + need = pEPDist->TxCreditsSeek - pCredInfo->CurrentFreeCredits;
70305 +
70306 + if ((pCurEpDist->TxCreditsAssigned - need) > pCurEpDist->TxCreditsMin) {
70307 + /* the current one has been allocated more than it's minimum and it
70308 + * has enough credits assigned above it's minimum to fullfill our need
70309 + * try to take away just enough to fullfill our need */
70310 + ReduceCredits(pCredInfo,
70311 + pCurEpDist,
70312 + pCurEpDist->TxCreditsAssigned - need);
70313 +
70314 + if (pCredInfo->CurrentFreeCredits >= pEPDist->TxCreditsSeek) {
70315 + /* we have enough */
70316 + break;
70317 + }
70318 + }
70319 +
70320 + pCurEpDist = pCurEpDist->pPrev;
70321 + }
70322 +
70323 + /* return what we can get */
70324 + credits = min(pCredInfo->CurrentFreeCredits,pEPDist->TxCreditsSeek);
70325 +
70326 + } while (FALSE);
70327 +
70328 + /* did we find some credits? */
70329 + if (credits) {
70330 + /* give what we can */
70331 + GiveCredits(pCredInfo, pEPDist, credits);
70332 + }
70333 +
70334 +}
70335 +
70336 +/* initialize and setup credit distribution */
70337 +A_STATUS ar6000_setup_credit_dist(HTC_HANDLE HTCHandle, COMMON_CREDIT_STATE_INFO *pCredInfo)
70338 +{
70339 + HTC_SERVICE_ID servicepriority[5];
70340 +
70341 + A_MEMZERO(pCredInfo,sizeof(COMMON_CREDIT_STATE_INFO));
70342 +
70343 + servicepriority[0] = WMI_CONTROL_SVC; /* highest */
70344 + servicepriority[1] = WMI_DATA_VO_SVC;
70345 + servicepriority[2] = WMI_DATA_VI_SVC;
70346 + servicepriority[3] = WMI_DATA_BE_SVC;
70347 + servicepriority[4] = WMI_DATA_BK_SVC; /* lowest */
70348 +
70349 + /* set callbacks and priority list */
70350 + HTCSetCreditDistribution(HTCHandle,
70351 + pCredInfo,
70352 + ar6000_credit_distribute,
70353 + ar6000_credit_init,
70354 + servicepriority,
70355 + 5);
70356 +
70357 + return A_OK;
70358 +}
70359 +
70360 Index: linux-2.6.28/drivers/ar6000/wlan/wlan_node.c
70361 ===================================================================
70362 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
70363 +++ linux-2.6.28/drivers/ar6000/wlan/wlan_node.c 2009-01-02 00:01:56.000000000 +0100
70364 @@ -0,0 +1,371 @@
70365 +/*-
70366 + * Copyright (c) 2001 Atsushi Onoe
70367 + * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting
70368 + * Copyright (c) 2004-2005 Atheros Communications
70369 + * All rights reserved.
70370 + *
70371 + * Redistribution and use in source and binary forms, with or without
70372 + * modification, are permitted provided that the following conditions
70373 + * are met:
70374 + * 1. Redistributions of source code must retain the above copyright
70375 + * notice, this list of conditions and the following disclaimer.
70376 + * 2. Redistributions in binary form must reproduce the above copyright
70377 + * notice, this list of conditions and the following disclaimer in the
70378 + * documentation and/or other materials provided with the distribution.
70379 + * 3. The name of the author may not be used to endorse or promote products
70380 + * derived from this software without specific prior written permission.
70381 + *
70382 + * Alternatively, this software may be distributed under the terms of the
70383 + * GNU General Public License ("GPL") version 2 as published by the Free
70384 + * Software Foundation.
70385 + *
70386 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
70387 + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
70388 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
70389 + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
70390 + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
70391 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
70392 + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
70393 + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
70394 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
70395 + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
70396 + *
70397 + * $Id: //depot/sw/releases/olca2.0-GPL/host/wlan/src/wlan_node.c#1 $
70398 + */
70399 +/*
70400 + * IEEE 802.11 node handling support.
70401 + */
70402 +#include <a_config.h>
70403 +#include <athdefs.h>
70404 +#include <a_types.h>
70405 +#include <a_osapi.h>
70406 +#include <a_debug.h>
70407 +#include <ieee80211.h>
70408 +#include <wlan_api.h>
70409 +#include <ieee80211_node.h>
70410 +#include <htc_api.h>
70411 +#include <wmi.h>
70412 +#include <wmi_api.h>
70413 +
70414 +static void wlan_node_timeout(A_ATH_TIMER arg);
70415 +static bss_t * _ieee80211_find_node(struct ieee80211_node_table *nt,
70416 + const A_UINT8 *macaddr);
70417 +
70418 +bss_t *
70419 +wlan_node_alloc(struct ieee80211_node_table *nt, int wh_size)
70420 +{
70421 + bss_t *ni;
70422 +
70423 + ni = A_MALLOC_NOWAIT(sizeof(bss_t));
70424 +
70425 + if (ni != NULL) {
70426 + ni->ni_buf = A_MALLOC_NOWAIT(wh_size);
70427 + if (ni->ni_buf == NULL) {
70428 + A_FREE(ni);
70429 + ni = NULL;
70430 + return ni;
70431 + }
70432 + } else {
70433 + return ni;
70434 + }
70435 +
70436 + /* Make sure our lists are clean */
70437 + ni->ni_list_next = NULL;
70438 + ni->ni_list_prev = NULL;
70439 + ni->ni_hash_next = NULL;
70440 + ni->ni_hash_prev = NULL;
70441 +
70442 + //
70443 + // ni_scangen never initialized before and during suspend/resume of winmobile, customer (LG/SEMCO) identified
70444 + // that some junk has been stored in this, due to this scan list didn't properly updated
70445 + //
70446 + ni->ni_scangen = 0;
70447 +
70448 + return ni;
70449 +}
70450 +
70451 +void
70452 +wlan_node_free(bss_t *ni)
70453 +{
70454 + if (ni->ni_buf != NULL) {
70455 + A_FREE(ni->ni_buf);
70456 + }
70457 + A_FREE(ni);
70458 +}
70459 +
70460 +void
70461 +wlan_setup_node(struct ieee80211_node_table *nt, bss_t *ni,
70462 + const A_UINT8 *macaddr)
70463 +{
70464 + int hash;
70465 +
70466 + A_MEMCPY(ni->ni_macaddr, macaddr, IEEE80211_ADDR_LEN);
70467 + hash = IEEE80211_NODE_HASH(macaddr);
70468 + ieee80211_node_initref(ni); /* mark referenced */
70469 +
70470 + ni->ni_tstamp = A_GET_MS(WLAN_NODE_INACT_TIMEOUT_MSEC);
70471 + IEEE80211_NODE_LOCK_BH(nt);
70472 +
70473 + /* Insert at the end of the node list */
70474 + ni->ni_list_next = NULL;
70475 + ni->ni_list_prev = nt->nt_node_last;
70476 + if(nt->nt_node_last != NULL)
70477 + {
70478 + nt->nt_node_last->ni_list_next = ni;
70479 + }
70480 + nt->nt_node_last = ni;
70481 + if(nt->nt_node_first == NULL)
70482 + {
70483 + nt->nt_node_first = ni;
70484 + }
70485 +
70486 + /* Insert into the hash list i.e. the bucket */
70487 + if((ni->ni_hash_next = nt->nt_hash[hash]) != NULL)
70488 + {
70489 + nt->nt_hash[hash]->ni_hash_prev = ni;
70490 + }
70491 + ni->ni_hash_prev = NULL;
70492 + nt->nt_hash[hash] = ni;
70493 +
70494 + if (!nt->isTimerArmed) {
70495 + A_TIMEOUT_MS(&nt->nt_inact_timer, WLAN_NODE_INACT_TIMEOUT_MSEC, 0);
70496 + nt->isTimerArmed = TRUE;
70497 + }
70498 +
70499 + IEEE80211_NODE_UNLOCK_BH(nt);
70500 +}
70501 +
70502 +static bss_t *
70503 +_ieee80211_find_node(struct ieee80211_node_table *nt,
70504 + const A_UINT8 *macaddr)
70505 +{
70506 + bss_t *ni;
70507 + int hash;
70508 +
70509 + IEEE80211_NODE_LOCK_ASSERT(nt);
70510 +
70511 + hash = IEEE80211_NODE_HASH(macaddr);
70512 + for(ni = nt->nt_hash[hash]; ni; ni = ni->ni_hash_next) {
70513 + if (IEEE80211_ADDR_EQ(ni->ni_macaddr, macaddr)) {
70514 + ieee80211_node_incref(ni); /* mark referenced */
70515 + return ni;
70516 + }
70517 + }
70518 + return NULL;
70519 +}
70520 +
70521 +bss_t *
70522 +wlan_find_node(struct ieee80211_node_table *nt, const A_UINT8 *macaddr)
70523 +{
70524 + bss_t *ni;
70525 +
70526 + IEEE80211_NODE_LOCK(nt);
70527 + ni = _ieee80211_find_node(nt, macaddr);
70528 + IEEE80211_NODE_UNLOCK(nt);
70529 + return ni;
70530 +}
70531 +
70532 +/*
70533 + * Reclaim a node. If this is the last reference count then
70534 + * do the normal free work. Otherwise remove it from the node
70535 + * table and mark it gone by clearing the back-reference.
70536 + */
70537 +void
70538 +wlan_node_reclaim(struct ieee80211_node_table *nt, bss_t *ni)
70539 +{
70540 + IEEE80211_NODE_LOCK(nt);
70541 +
70542 + if(ni->ni_list_prev == NULL)
70543 + {
70544 + /* First in list so fix the list head */
70545 + nt->nt_node_first = ni->ni_list_next;
70546 + }
70547 + else
70548 + {
70549 + ni->ni_list_prev->ni_list_next = ni->ni_list_next;
70550 + }
70551 +
70552 + if(ni->ni_list_next == NULL)
70553 + {
70554 + /* Last in list so fix list tail */
70555 + nt->nt_node_last = ni->ni_list_prev;
70556 + }
70557 + else
70558 + {
70559 + ni->ni_list_next->ni_list_prev = ni->ni_list_prev;
70560 + }
70561 +
70562 + if(ni->ni_hash_prev == NULL)
70563 + {
70564 + /* First in list so fix the list head */
70565 + int hash;
70566 + hash = IEEE80211_NODE_HASH(ni->ni_macaddr);
70567 + nt->nt_hash[hash] = ni->ni_hash_next;
70568 + }
70569 + else
70570 + {
70571 + ni->ni_hash_prev->ni_hash_next = ni->ni_hash_next;
70572 + }
70573 +
70574 + if(ni->ni_hash_next != NULL)
70575 + {
70576 + ni->ni_hash_next->ni_hash_prev = ni->ni_hash_prev;
70577 + }
70578 + wlan_node_free(ni);
70579 +
70580 + IEEE80211_NODE_UNLOCK(nt);
70581 +}
70582 +
70583 +static void
70584 +wlan_node_dec_free(bss_t *ni)
70585 +{
70586 + if (ieee80211_node_dectestref(ni)) {
70587 + wlan_node_free(ni);
70588 + }
70589 +}
70590 +
70591 +void
70592 +wlan_free_allnodes(struct ieee80211_node_table *nt)
70593 +{
70594 + bss_t *ni;
70595 +
70596 + while ((ni = nt->nt_node_first) != NULL) {
70597 + wlan_node_reclaim(nt, ni);
70598 + }
70599 +}
70600 +
70601 +void
70602 +wlan_iterate_nodes(struct ieee80211_node_table *nt, wlan_node_iter_func *f,
70603 + void *arg)
70604 +{
70605 + bss_t *ni;
70606 + A_UINT32 gen;
70607 +
70608 + gen = ++nt->nt_scangen;
70609 +
70610 + IEEE80211_NODE_LOCK(nt);
70611 + for (ni = nt->nt_node_first; ni; ni = ni->ni_list_next) {
70612 + if (ni->ni_scangen != gen) {
70613 + ni->ni_scangen = gen;
70614 + (void) ieee80211_node_incref(ni);
70615 + (*f)(arg, ni);
70616 + wlan_node_dec_free(ni);
70617 + }
70618 + }
70619 + IEEE80211_NODE_UNLOCK(nt);
70620 +}
70621 +
70622 +/*
70623 + * Node table support.
70624 + */
70625 +void
70626 +wlan_node_table_init(void *wmip, struct ieee80211_node_table *nt)
70627 +{
70628 + int i;
70629 +
70630 + AR_DEBUG_PRINTF(ATH_DEBUG_WLAN, ("node table = 0x%x\n", (A_UINT32)nt));
70631 + IEEE80211_NODE_LOCK_INIT(nt);
70632 +
70633 + nt->nt_node_first = nt->nt_node_last = NULL;
70634 + for(i = 0; i < IEEE80211_NODE_HASHSIZE; i++)
70635 + {
70636 + nt->nt_hash[i] = NULL;
70637 + }
70638 + A_INIT_TIMER(&nt->nt_inact_timer, wlan_node_timeout, nt);
70639 + nt->isTimerArmed = FALSE;
70640 + nt->nt_wmip = wmip;
70641 +}
70642 +
70643 +static void
70644 +wlan_node_timeout(A_ATH_TIMER arg)
70645 +{
70646 + struct ieee80211_node_table *nt = (struct ieee80211_node_table *)arg;
70647 + bss_t *bss, *nextBss;
70648 + A_UINT8 myBssid[IEEE80211_ADDR_LEN], reArmTimer = FALSE;
70649 +
70650 + wmi_get_current_bssid(nt->nt_wmip, myBssid);
70651 +
70652 + bss = nt->nt_node_first;
70653 + while (bss != NULL)
70654 + {
70655 + nextBss = bss->ni_list_next;
70656 + if (A_MEMCMP(myBssid, bss->ni_macaddr, sizeof(myBssid)) != 0)
70657 + {
70658 +
70659 + if (bss->ni_tstamp <= A_GET_MS(0))
70660 + {
70661 + /*
70662 + * free up all but the current bss - if set
70663 + */
70664 + wlan_node_reclaim(nt, bss);
70665 + }
70666 + else
70667 + {
70668 + /*
70669 + * Re-arm timer, only when we have a bss other than
70670 + * current bss AND it is not aged-out.
70671 + */
70672 + reArmTimer = TRUE;
70673 + }
70674 + }
70675 + bss = nextBss;
70676 + }
70677 +
70678 + if(reArmTimer)
70679 + A_TIMEOUT_MS(&nt->nt_inact_timer, WLAN_NODE_INACT_TIMEOUT_MSEC, 0);
70680 +
70681 + nt->isTimerArmed = reArmTimer;
70682 +}
70683 +
70684 +void
70685 +wlan_node_table_cleanup(struct ieee80211_node_table *nt)
70686 +{
70687 + A_UNTIMEOUT(&nt->nt_inact_timer);
70688 + A_DELETE_TIMER(&nt->nt_inact_timer);
70689 + wlan_free_allnodes(nt);
70690 + IEEE80211_NODE_LOCK_DESTROY(nt);
70691 +}
70692 +
70693 +bss_t *
70694 +wlan_find_Ssidnode (struct ieee80211_node_table *nt, A_UCHAR *pSsid,
70695 + A_UINT32 ssidLength, A_BOOL bIsWPA2)
70696 +{
70697 + bss_t *ni = NULL;
70698 + A_UCHAR *pIESsid = NULL;
70699 +
70700 + IEEE80211_NODE_LOCK (nt);
70701 +
70702 + for (ni = nt->nt_node_first; ni; ni = ni->ni_list_next) {
70703 + pIESsid = ni->ni_cie.ie_ssid;
70704 + if (pIESsid[1] <= 32) {
70705 +
70706 + // Step 1 : Check SSID
70707 + if (0x00 == memcmp (pSsid, &pIESsid[2], ssidLength)) {
70708 +
70709 + // Step 2 : if SSID matches, check WPA or WPA2
70710 + if (TRUE == bIsWPA2 && NULL != ni->ni_cie.ie_rsn) {
70711 + ieee80211_node_incref (ni); /* mark referenced */
70712 + IEEE80211_NODE_UNLOCK (nt);
70713 + return ni;
70714 + }
70715 + if (FALSE == bIsWPA2 && NULL != ni->ni_cie.ie_wpa) {
70716 + ieee80211_node_incref(ni); /* mark referenced */
70717 + IEEE80211_NODE_UNLOCK (nt);
70718 + return ni;
70719 + }
70720 + }
70721 + }
70722 + }
70723 +
70724 + IEEE80211_NODE_UNLOCK (nt);
70725 +
70726 + return NULL;
70727 +}
70728 +
70729 +void
70730 +wlan_node_return (struct ieee80211_node_table *nt, bss_t *ni)
70731 +{
70732 + IEEE80211_NODE_LOCK (nt);
70733 + wlan_node_dec_free (ni);
70734 + IEEE80211_NODE_UNLOCK (nt);
70735 +}
70736 Index: linux-2.6.28/drivers/ar6000/wlan/wlan_recv_beacon.c
70737 ===================================================================
70738 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
70739 +++ linux-2.6.28/drivers/ar6000/wlan/wlan_recv_beacon.c 2009-01-02 00:01:56.000000000 +0100
70740 @@ -0,0 +1,192 @@
70741 +/*-
70742 + * Copyright (c) 2001 Atsushi Onoe
70743 + * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting
70744 + * All rights reserved.
70745 + *
70746 + * Redistribution and use in source and binary forms, with or without
70747 + * modification, are permitted provided that the following conditions
70748 + * are met:
70749 + * 1. Redistributions of source code must retain the above copyright
70750 + * notice, this list of conditions and the following disclaimer.
70751 + * 2. Redistributions in binary form must reproduce the above copyright
70752 + * notice, this list of conditions and the following disclaimer in the
70753 + * documentation and/or other materials provided with the distribution.
70754 + * 3. The name of the author may not be used to endorse or promote products
70755 + * derived from this software without specific prior written permission.
70756 + *
70757 + * Alternatively, this software may be distributed under the terms of the
70758 + * GNU General Public License ("GPL") version 2 as published by the Free
70759 + * Software Foundation.
70760 + *
70761 + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
70762 + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
70763 + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
70764 + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
70765 + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
70766 + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
70767 + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
70768 + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
70769 + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
70770 + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
70771 + */
70772 +/*
70773 + * IEEE 802.11 input handling.
70774 + */
70775 +
70776 +#include "a_config.h"
70777 +#include "athdefs.h"
70778 +#include "a_types.h"
70779 +#include "a_osapi.h"
70780 +#include <wmi.h>
70781 +#include <ieee80211.h>
70782 +#include <wlan_api.h>
70783 +
70784 +#define IEEE80211_VERIFY_LENGTH(_len, _minlen) do { \
70785 + if ((_len) < (_minlen)) { \
70786 + return A_EINVAL; \
70787 + } \
70788 +} while (0)
70789 +
70790 +#define IEEE80211_VERIFY_ELEMENT(__elem, __maxlen) do { \
70791 + if ((__elem) == NULL) { \
70792 + return A_EINVAL; \
70793 + } \
70794 + if ((__elem)[1] > (__maxlen)) { \
70795 + return A_EINVAL; \
70796 + } \
70797 +} while (0)
70798 +
70799 +
70800 +/* unaligned little endian access */
70801 +#define LE_READ_2(p) \
70802 + ((A_UINT16) \
70803 + ((((A_UINT8 *)(p))[0] ) | (((A_UINT8 *)(p))[1] << 8)))
70804 +
70805 +#define LE_READ_4(p) \
70806 + ((A_UINT32) \
70807 + ((((A_UINT8 *)(p))[0] ) | (((A_UINT8 *)(p))[1] << 8) | \
70808 + (((A_UINT8 *)(p))[2] << 16) | (((A_UINT8 *)(p))[3] << 24)))
70809 +
70810 +
70811 +static int __inline
70812 +iswpaoui(const A_UINT8 *frm)
70813 +{
70814 + return frm[1] > 3 && LE_READ_4(frm+2) == ((WPA_OUI_TYPE<<24)|WPA_OUI);
70815 +}
70816 +
70817 +static int __inline
70818 +iswmmoui(const A_UINT8 *frm)
70819 +{
70820 + return frm[1] > 3 && LE_READ_4(frm+2) == ((WMM_OUI_TYPE<<24)|WMM_OUI);
70821 +}
70822 +
70823 +static int __inline
70824 +iswmmparam(const A_UINT8 *frm)
70825 +{
70826 + return frm[1] > 5 && frm[6] == WMM_PARAM_OUI_SUBTYPE;
70827 +}
70828 +
70829 +static int __inline
70830 +iswmminfo(const A_UINT8 *frm)
70831 +{
70832 + return frm[1] > 5 && frm[6] == WMM_INFO_OUI_SUBTYPE;
70833 +}
70834 +
70835 +static int __inline
70836 +isatherosoui(const A_UINT8 *frm)
70837 +{
70838 + return frm[1] > 3 && LE_READ_4(frm+2) == ((ATH_OUI_TYPE<<24)|ATH_OUI);
70839 +}
70840 +
70841 +static int __inline
70842 +iswscoui(const A_UINT8 *frm)
70843 +{
70844 + return frm[1] > 3 && LE_READ_4(frm+2) == ((0x04<<24)|WPA_OUI);
70845 +}
70846 +
70847 +A_STATUS
70848 +wlan_parse_beacon(A_UINT8 *buf, int framelen, struct ieee80211_common_ie *cie)
70849 +{
70850 + A_UINT8 *frm, *efrm;
70851 +
70852 + frm = buf;
70853 + efrm = (A_UINT8 *) (frm + framelen);
70854 +
70855 + /*
70856 + * beacon/probe response frame format
70857 + * [8] time stamp
70858 + * [2] beacon interval
70859 + * [2] capability information
70860 + * [tlv] ssid
70861 + * [tlv] supported rates
70862 + * [tlv] country information
70863 + * [tlv] parameter set (FH/DS)
70864 + * [tlv] erp information
70865 + * [tlv] extended supported rates
70866 + * [tlv] WMM
70867 + * [tlv] WPA or RSN
70868 + * [tlv] Atheros Advanced Capabilities
70869 + */
70870 + IEEE80211_VERIFY_LENGTH(efrm - frm, 12);
70871 + A_MEMZERO(cie, sizeof(*cie));
70872 +
70873 + cie->ie_tstamp = frm; frm += 8;
70874 + cie->ie_beaconInt = A_LE2CPU16(*(A_UINT16 *)frm); frm += 2;
70875 + cie->ie_capInfo = A_LE2CPU16(*(A_UINT16 *)frm); frm += 2;
70876 + cie->ie_chan = 0;
70877 +
70878 + while (frm < efrm) {
70879 + switch (*frm) {
70880 + case IEEE80211_ELEMID_SSID:
70881 + cie->ie_ssid = frm;
70882 + break;
70883 + case IEEE80211_ELEMID_RATES:
70884 + cie->ie_rates = frm;
70885 + break;
70886 + case IEEE80211_ELEMID_COUNTRY:
70887 + cie->ie_country = frm;
70888 + break;
70889 + case IEEE80211_ELEMID_FHPARMS:
70890 + break;
70891 + case IEEE80211_ELEMID_DSPARMS:
70892 + cie->ie_chan = frm[2];
70893 + break;
70894 + case IEEE80211_ELEMID_TIM:
70895 + cie->ie_tim = frm;
70896 + break;
70897 + case IEEE80211_ELEMID_IBSSPARMS:
70898 + break;
70899 + case IEEE80211_ELEMID_XRATES:
70900 + cie->ie_xrates = frm;
70901 + break;
70902 + case IEEE80211_ELEMID_ERP:
70903 + if (frm[1] != 1) {
70904 + //A_PRINTF("Discarding ERP Element - Bad Len\n");
70905 + return A_EINVAL;
70906 + }
70907 + cie->ie_erp = frm[2];
70908 + break;
70909 + case IEEE80211_ELEMID_RSN:
70910 + cie->ie_rsn = frm;
70911 + break;
70912 + case IEEE80211_ELEMID_VENDOR:
70913 + if (iswpaoui(frm)) {
70914 + cie->ie_wpa = frm;
70915 + } else if (iswmmoui(frm)) {
70916 + cie->ie_wmm = frm;
70917 + } else if (isatherosoui(frm)) {
70918 + cie->ie_ath = frm;
70919 + } else if(iswscoui(frm)) {
70920 + cie->ie_wsc = frm;
70921 + }
70922 + break;
70923 + default:
70924 + break;
70925 + }
70926 + frm += frm[1] + 2;
70927 + }
70928 + IEEE80211_VERIFY_ELEMENT(cie->ie_rates, IEEE80211_RATE_MAXSIZE);
70929 + IEEE80211_VERIFY_ELEMENT(cie->ie_ssid, IEEE80211_NWID_LEN);
70930 +
70931 + return A_OK;
70932 +}
70933 Index: linux-2.6.28/drivers/ar6000/wlan/wlan_utils.c
70934 ===================================================================
70935 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
70936 +++ linux-2.6.28/drivers/ar6000/wlan/wlan_utils.c 2009-01-02 00:01:56.000000000 +0100
70937 @@ -0,0 +1,59 @@
70938 +/*
70939 + * Copyright (c) 2004-2005 Atheros Communications Inc.
70940 + * All rights reserved.
70941 + *
70942 + * This module implements frequently used wlan utilies
70943 + *
70944 + * $Id: //depot/sw/releases/olca2.0-GPL/host/wlan/src/wlan_utils.c#1 $
70945 + *
70946 + *
70947 + * This program is free software; you can redistribute it and/or modify
70948 + * it under the terms of the GNU General Public License version 2 as
70949 + * published by the Free Software Foundation;
70950 + *
70951 + * Software distributed under the License is distributed on an "AS
70952 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
70953 + * implied. See the License for the specific language governing
70954 + * rights and limitations under the License.
70955 + *
70956 + *
70957 + *
70958 + */
70959 +
70960 +#include <a_config.h>
70961 +#include <athdefs.h>
70962 +#include <a_types.h>
70963 +#include <a_osapi.h>
70964 +
70965 +/*
70966 + * converts ieee channel number to frequency
70967 + */
70968 +A_UINT16
70969 +wlan_ieee2freq(int chan)
70970 +{
70971 + if (chan == 14) {
70972 + return 2484;
70973 + }
70974 + if (chan < 14) { /* 0-13 */
70975 + return (2407 + (chan*5));
70976 + }
70977 + if (chan < 27) { /* 15-26 */
70978 + return (2512 + ((chan-15)*20));
70979 + }
70980 + return (5000 + (chan*5));
70981 +}
70982 +
70983 +/*
70984 + * Converts MHz frequency to IEEE channel number.
70985 + */
70986 +A_UINT32
70987 +wlan_freq2ieee(A_UINT16 freq)
70988 +{
70989 + if (freq == 2484)
70990 + return 14;
70991 + if (freq < 2484)
70992 + return (freq - 2407) / 5;
70993 + if (freq < 5000)
70994 + return 15 + ((freq - 2512) / 20);
70995 + return (freq - 5000) / 5;
70996 +}
70997 Index: linux-2.6.28/drivers/ar6000/wmi/wmi.c
70998 ===================================================================
70999 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
71000 +++ linux-2.6.28/drivers/ar6000/wmi/wmi.c 2009-01-02 00:01:56.000000000 +0100
71001 @@ -0,0 +1,3954 @@
71002 +/*
71003 + * Copyright (c) 2004-2007 Atheros Communications Inc.
71004 + * All rights reserved.
71005 + *
71006 + * This module implements the hardware independent layer of the
71007 + * Wireless Module Interface (WMI) protocol.
71008 + *
71009 + * $Id: //depot/sw/releases/olca2.0-GPL/host/wmi/wmi.c#3 $
71010 + *
71011 + *
71012 + * This program is free software; you can redistribute it and/or modify
71013 + * it under the terms of the GNU General Public License version 2 as
71014 + * published by the Free Software Foundation;
71015 + *
71016 + * Software distributed under the License is distributed on an "AS
71017 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
71018 + * implied. See the License for the specific language governing
71019 + * rights and limitations under the License.
71020 + *
71021 + *
71022 + *
71023 + */
71024 +
71025 +#include <a_config.h>
71026 +#include <athdefs.h>
71027 +#include <a_types.h>
71028 +#include <a_osapi.h>
71029 +#include "htc.h"
71030 +#include "htc_api.h"
71031 +#include "wmi.h"
71032 +#include <ieee80211.h>
71033 +#include <ieee80211_node.h>
71034 +#include <wlan_api.h>
71035 +#include <wmi_api.h>
71036 +#include "dset_api.h"
71037 +#include "gpio_api.h"
71038 +#include "wmi_host.h"
71039 +#include "a_drv.h"
71040 +#include "a_drv_api.h"
71041 +#include "a_debug.h"
71042 +#include "dbglog_api.h"
71043 +
71044 +static A_STATUS wmi_ready_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71045 +
71046 +static A_STATUS wmi_connect_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71047 + int len);
71048 +static A_STATUS wmi_disconnect_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71049 + int len);
71050 +static A_STATUS wmi_tkip_micerr_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71051 + int len);
71052 +static A_STATUS wmi_bssInfo_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71053 + int len);
71054 +static A_STATUS wmi_opt_frame_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71055 + int len);
71056 +static A_STATUS wmi_pstream_timeout_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71057 + int len);
71058 +static A_STATUS wmi_sync_point(struct wmi_t *wmip);
71059 +
71060 +static A_STATUS wmi_bitrate_reply_rx(struct wmi_t *wmip, A_UINT8 *datap,
71061 + int len);
71062 +static A_STATUS wmi_ratemask_reply_rx(struct wmi_t *wmip, A_UINT8 *datap,
71063 + int len);
71064 +static A_STATUS wmi_channelList_reply_rx(struct wmi_t *wmip, A_UINT8 *datap,
71065 + int len);
71066 +static A_STATUS wmi_regDomain_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71067 + int len);
71068 +static A_STATUS wmi_txPwr_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71069 +static A_STATUS wmi_neighborReport_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71070 + int len);
71071 +
71072 +static A_STATUS wmi_dset_open_req_rx(struct wmi_t *wmip, A_UINT8 *datap,
71073 + int len);
71074 +#ifdef CONFIG_HOST_DSET_SUPPORT
71075 +static A_STATUS wmi_dset_close_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71076 +static A_STATUS wmi_dset_data_req_rx(struct wmi_t *wmip, A_UINT8 *datap,
71077 + int len);
71078 +#endif /* CONFIG_HOST_DSET_SUPPORT */
71079 +
71080 +
71081 +static A_STATUS wmi_scanComplete_rx(struct wmi_t *wmip, A_UINT8 *datap,
71082 + int len);
71083 +static A_STATUS wmi_errorEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71084 +static A_STATUS wmi_statsEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71085 +static A_STATUS wmi_rssiThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71086 +static A_STATUS wmi_hbChallengeResp_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71087 +static A_STATUS wmi_reportErrorEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71088 +static A_STATUS wmi_cac_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71089 +static A_STATUS wmi_roam_tbl_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71090 + int len);
71091 +static A_STATUS wmi_roam_data_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71092 + int len);
71093 +static A_STATUS wmi_get_wow_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap,
71094 + int len);
71095 +static A_STATUS
71096 +wmi_get_pmkid_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len);
71097 +
71098 +#ifdef CONFIG_HOST_GPIO_SUPPORT
71099 +static A_STATUS wmi_gpio_intr_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71100 +static A_STATUS wmi_gpio_data_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71101 +static A_STATUS wmi_gpio_ack_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71102 +#endif /* CONFIG_HOST_GPIO_SUPPORT */
71103 +
71104 +#ifdef CONFIG_HOST_TCMD_SUPPORT
71105 +static A_STATUS
71106 +wmi_tcmd_test_report_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71107 +#endif
71108 +
71109 +static A_STATUS
71110 +wmi_txRetryErrEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71111 +
71112 +static A_STATUS
71113 +wmi_snrThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71114 +
71115 +static A_STATUS
71116 +wmi_lqThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71117 +
71118 +static A_BOOL
71119 +wmi_is_bitrate_index_valid(struct wmi_t *wmip, A_UINT32 rateIndex);
71120 +
71121 +static A_STATUS
71122 +wmi_aplistEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71123 +
71124 +static A_STATUS
71125 +wmi_dbglog_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71126 +
71127 +static A_STATUS wmi_keepalive_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len);
71128 +
71129 +int wps_enable;
71130 +static const A_INT32 wmi_rateTable[] = {
71131 + 1000,
71132 + 2000,
71133 + 5500,
71134 + 11000,
71135 + 6000,
71136 + 9000,
71137 + 12000,
71138 + 18000,
71139 + 24000,
71140 + 36000,
71141 + 48000,
71142 + 54000,
71143 + 0};
71144 +
71145 +#define MODE_A_SUPPORT_RATE_START 4
71146 +#define MODE_A_SUPPORT_RATE_STOP 11
71147 +
71148 +#define MODE_GONLY_SUPPORT_RATE_START MODE_A_SUPPORT_RATE_START
71149 +#define MODE_GONLY_SUPPORT_RATE_STOP MODE_A_SUPPORT_RATE_STOP
71150 +
71151 +#define MODE_B_SUPPORT_RATE_START 0
71152 +#define MODE_B_SUPPORT_RATE_STOP 3
71153 +
71154 +#define MODE_G_SUPPORT_RATE_START 0
71155 +#define MODE_G_SUPPORT_RATE_STOP 11
71156 +
71157 +#define MAX_NUMBER_OF_SUPPORT_RATES (MODE_G_SUPPORT_RATE_STOP + 1)
71158 +
71159 +/* 802.1d to AC mapping. Refer pg 57 of WMM-test-plan-v1.2 */
71160 +const A_UINT8 up_to_ac[]= {
71161 + WMM_AC_BE,
71162 + WMM_AC_BK,
71163 + WMM_AC_BK,
71164 + WMM_AC_BE,
71165 + WMM_AC_VI,
71166 + WMM_AC_VI,
71167 + WMM_AC_VO,
71168 + WMM_AC_VO,
71169 + };
71170 +
71171 +void *
71172 +wmi_init(void *devt)
71173 +{
71174 + struct wmi_t *wmip;
71175 +
71176 + wmip = A_MALLOC(sizeof(struct wmi_t));
71177 + if (wmip == NULL) {
71178 + return (NULL);
71179 + }
71180 + A_MEMZERO(wmip, sizeof(*wmip));
71181 + A_MUTEX_INIT(&wmip->wmi_lock);
71182 + wmip->wmi_devt = devt;
71183 + wlan_node_table_init(wmip, &wmip->wmi_scan_table);
71184 + wmi_qos_state_init(wmip);
71185 + wmip->wmi_powerMode = REC_POWER;
71186 + wmip->wmi_phyMode = WMI_11G_MODE;
71187 +
71188 + return (wmip);
71189 +}
71190 +
71191 +void
71192 +wmi_qos_state_init(struct wmi_t *wmip)
71193 +{
71194 + A_UINT8 i;
71195 +
71196 + if (wmip == NULL) {
71197 + return;
71198 + }
71199 + LOCK_WMI(wmip);
71200 +
71201 + /* Initialize QoS States */
71202 + wmip->wmi_numQoSStream = 0;
71203 +
71204 + wmip->wmi_fatPipeExists = 0;
71205 +
71206 + for (i=0; i < WMM_NUM_AC; i++) {
71207 + wmip->wmi_streamExistsForAC[i]=0;
71208 + }
71209 +
71210 + /* Initialize the static Wmi stream Pri to WMM AC mappings Arrays */
71211 + WMI_INIT_WMISTREAM_AC_MAP(wmip);
71212 +
71213 + UNLOCK_WMI(wmip);
71214 +
71215 + A_WMI_SET_NUMDATAENDPTS(wmip->wmi_devt, 1);
71216 +}
71217 +
71218 +void
71219 +wmi_shutdown(struct wmi_t *wmip)
71220 +{
71221 + if (wmip != NULL) {
71222 + wlan_node_table_cleanup(&wmip->wmi_scan_table);
71223 + if (A_IS_MUTEX_VALID(&wmip->wmi_lock)) {
71224 + A_MUTEX_DELETE(&wmip->wmi_lock);
71225 + }
71226 + A_FREE(wmip);
71227 + }
71228 +}
71229 +
71230 +/*
71231 + * performs DIX to 802.3 encapsulation for transmit packets.
71232 + * uses passed in buffer. Returns buffer or NULL if failed.
71233 + * Assumes the entire DIX header is contigous and that there is
71234 + * enough room in the buffer for a 802.3 mac header and LLC+SNAP headers.
71235 + */
71236 +A_STATUS
71237 +wmi_dix_2_dot3(struct wmi_t *wmip, void *osbuf)
71238 +{
71239 + A_UINT8 *datap;
71240 + A_UINT16 typeorlen;
71241 + ATH_MAC_HDR macHdr;
71242 + ATH_LLC_SNAP_HDR *llcHdr;
71243 +
71244 + A_ASSERT(osbuf != NULL);
71245 +
71246 + if (A_NETBUF_HEADROOM(osbuf) <
71247 + (sizeof(ATH_LLC_SNAP_HDR) + sizeof(WMI_DATA_HDR)))
71248 + {
71249 + return A_NO_MEMORY;
71250 + }
71251 +
71252 + datap = A_NETBUF_DATA(osbuf);
71253 +
71254 + typeorlen = *(A_UINT16 *)(datap + ATH_MAC_LEN + ATH_MAC_LEN);
71255 +
71256 + if (!IS_ETHERTYPE(A_BE2CPU16(typeorlen))) {
71257 + /*
71258 + * packet is already in 802.3 format - return success
71259 + */
71260 + A_DPRINTF(DBG_WMI, (DBGFMT "packet already 802.3\n", DBGARG));
71261 + return (A_OK);
71262 + }
71263 +
71264 + /*
71265 + * Save mac fields and length to be inserted later
71266 + */
71267 + A_MEMCPY(macHdr.dstMac, datap, ATH_MAC_LEN);
71268 + A_MEMCPY(macHdr.srcMac, datap + ATH_MAC_LEN, ATH_MAC_LEN);
71269 + macHdr.typeOrLen = A_CPU2BE16(A_NETBUF_LEN(osbuf) - sizeof(ATH_MAC_HDR) +
71270 + sizeof(ATH_LLC_SNAP_HDR));
71271 +
71272 + /*
71273 + * Make room for LLC+SNAP headers
71274 + */
71275 + if (A_NETBUF_PUSH(osbuf, sizeof(ATH_LLC_SNAP_HDR)) != A_OK) {
71276 + return A_NO_MEMORY;
71277 + }
71278 +
71279 + datap = A_NETBUF_DATA(osbuf);
71280 +
71281 + A_MEMCPY(datap, &macHdr, sizeof (ATH_MAC_HDR));
71282 +
71283 + llcHdr = (ATH_LLC_SNAP_HDR *)(datap + sizeof(ATH_MAC_HDR));
71284 + llcHdr->dsap = 0xAA;
71285 + llcHdr->ssap = 0xAA;
71286 + llcHdr->cntl = 0x03;
71287 + llcHdr->orgCode[0] = 0x0;
71288 + llcHdr->orgCode[1] = 0x0;
71289 + llcHdr->orgCode[2] = 0x0;
71290 + llcHdr->etherType = typeorlen;
71291 +
71292 + return (A_OK);
71293 +}
71294 +
71295 +/*
71296 + * Adds a WMI data header
71297 + * Assumes there is enough room in the buffer to add header.
71298 + */
71299 +A_STATUS
71300 +wmi_data_hdr_add(struct wmi_t *wmip, void *osbuf, A_UINT8 msgType)
71301 +{
71302 + WMI_DATA_HDR *dtHdr;
71303 +
71304 + A_ASSERT(osbuf != NULL);
71305 +
71306 + if (A_NETBUF_PUSH(osbuf, sizeof(WMI_DATA_HDR)) != A_OK) {
71307 + return A_NO_MEMORY;
71308 + }
71309 +
71310 + dtHdr = (WMI_DATA_HDR *)A_NETBUF_DATA(osbuf);
71311 + dtHdr->info = msgType;
71312 + dtHdr->rssi = 0;
71313 +
71314 + return (A_OK);
71315 +}
71316 +
71317 +A_UINT8 wmi_implicit_create_pstream(struct wmi_t *wmip, void *osbuf, A_UINT8 dir, A_UINT8 up)
71318 +{
71319 + A_UINT8 *datap;
71320 + A_UINT8 trafficClass = WMM_AC_BE, userPriority = up;
71321 + ATH_LLC_SNAP_HDR *llcHdr;
71322 + A_UINT16 ipType = IP_ETHERTYPE;
71323 + WMI_DATA_HDR *dtHdr;
71324 + WMI_CREATE_PSTREAM_CMD cmd;
71325 + A_BOOL streamExists = FALSE;
71326 +
71327 + A_ASSERT(osbuf != NULL);
71328 +
71329 + datap = A_NETBUF_DATA(osbuf);
71330 +
71331 + if (up == UNDEFINED_PRI) {
71332 + llcHdr = (ATH_LLC_SNAP_HDR *)(datap + sizeof(WMI_DATA_HDR) +
71333 + sizeof(ATH_MAC_HDR));
71334 +
71335 + if (llcHdr->etherType == A_CPU2BE16(ipType)) {
71336 + /* Extract the endpoint info from the TOS field in the IP header */
71337 + userPriority = A_WMI_IPTOS_TO_USERPRIORITY(((A_UINT8 *)llcHdr) + sizeof(ATH_LLC_SNAP_HDR));
71338 + }
71339 + }
71340 +
71341 + if (userPriority < MAX_NUM_PRI) {
71342 + trafficClass = convert_userPriority_to_trafficClass(userPriority);
71343 + }
71344 +
71345 + dtHdr = (WMI_DATA_HDR *)datap;
71346 + if(dir==UPLINK_TRAFFIC)
71347 + dtHdr->info |= (userPriority & WMI_DATA_HDR_UP_MASK) << WMI_DATA_HDR_UP_SHIFT; /* lower 3-bits are 802.1d priority */
71348 +
71349 + LOCK_WMI(wmip);
71350 + streamExists = wmip->wmi_fatPipeExists;
71351 + UNLOCK_WMI(wmip);
71352 +
71353 + if (!(streamExists & (1 << trafficClass))) {
71354 +
71355 + A_MEMZERO(&cmd, sizeof(cmd));
71356 + cmd.trafficClass = trafficClass;
71357 + cmd.userPriority = userPriority;
71358 + cmd.inactivityInt = WMI_IMPLICIT_PSTREAM_INACTIVITY_INT;
71359 + /* Implicit streams are created with TSID 0xFF */
71360 + cmd.tsid = WMI_IMPLICIT_PSTREAM;
71361 + wmi_create_pstream_cmd(wmip, &cmd);
71362 + }
71363 +
71364 + return trafficClass;
71365 +}
71366 +
71367 +WMI_PRI_STREAM_ID
71368 +wmi_get_stream_id(struct wmi_t *wmip, A_UINT8 trafficClass)
71369 +{
71370 + return WMI_ACCESSCATEGORY_WMISTREAM(wmip, trafficClass);
71371 +}
71372 +
71373 +/*
71374 + * performs 802.3 to DIX encapsulation for received packets.
71375 + * Assumes the entire 802.3 header is contigous.
71376 + */
71377 +A_STATUS
71378 +wmi_dot3_2_dix(struct wmi_t *wmip, void *osbuf)
71379 +{
71380 + A_UINT8 *datap;
71381 + ATH_MAC_HDR macHdr;
71382 + ATH_LLC_SNAP_HDR *llcHdr;
71383 +
71384 + A_ASSERT(osbuf != NULL);
71385 + datap = A_NETBUF_DATA(osbuf);
71386 +
71387 + A_MEMCPY(&macHdr, datap, sizeof(ATH_MAC_HDR));
71388 + llcHdr = (ATH_LLC_SNAP_HDR *)(datap + sizeof(ATH_MAC_HDR));
71389 + macHdr.typeOrLen = llcHdr->etherType;
71390 +
71391 + if (A_NETBUF_PULL(osbuf, sizeof(ATH_LLC_SNAP_HDR)) != A_OK) {
71392 + return A_NO_MEMORY;
71393 + }
71394 +
71395 + datap = A_NETBUF_DATA(osbuf);
71396 +
71397 + A_MEMCPY(datap, &macHdr, sizeof (ATH_MAC_HDR));
71398 +
71399 + return (A_OK);
71400 +}
71401 +
71402 +/*
71403 + * Removes a WMI data header
71404 + */
71405 +A_STATUS
71406 +wmi_data_hdr_remove(struct wmi_t *wmip, void *osbuf)
71407 +{
71408 + A_ASSERT(osbuf != NULL);
71409 +
71410 + return (A_NETBUF_PULL(osbuf, sizeof(WMI_DATA_HDR)));
71411 +}
71412 +
71413 +void
71414 +wmi_iterate_nodes(struct wmi_t *wmip, wlan_node_iter_func *f, void *arg)
71415 +{
71416 + wlan_iterate_nodes(&wmip->wmi_scan_table, f, arg);
71417 +}
71418 +
71419 +/*
71420 + * WMI Extended Event received from Target.
71421 + */
71422 +A_STATUS
71423 +wmi_control_rx_xtnd(struct wmi_t *wmip, void *osbuf)
71424 +{
71425 + WMIX_CMD_HDR *cmd;
71426 + A_UINT16 id;
71427 + A_UINT8 *datap;
71428 + A_UINT32 len;
71429 + A_STATUS status = A_OK;
71430 +
71431 + if (A_NETBUF_LEN(osbuf) < sizeof(WMIX_CMD_HDR)) {
71432 + A_DPRINTF(DBG_WMI, (DBGFMT "bad packet 1\n", DBGARG));
71433 + wmip->wmi_stats.cmd_len_err++;
71434 + A_NETBUF_FREE(osbuf);
71435 + return A_ERROR;
71436 + }
71437 +
71438 + cmd = (WMIX_CMD_HDR *)A_NETBUF_DATA(osbuf);
71439 + id = cmd->commandId;
71440 +
71441 + if (A_NETBUF_PULL(osbuf, sizeof(WMIX_CMD_HDR)) != A_OK) {
71442 + A_DPRINTF(DBG_WMI, (DBGFMT "bad packet 2\n", DBGARG));
71443 + wmip->wmi_stats.cmd_len_err++;
71444 + A_NETBUF_FREE(osbuf);
71445 + return A_ERROR;
71446 + }
71447 +
71448 + datap = A_NETBUF_DATA(osbuf);
71449 + len = A_NETBUF_LEN(osbuf);
71450 +
71451 + switch (id) {
71452 + case (WMIX_DSETOPENREQ_EVENTID):
71453 + status = wmi_dset_open_req_rx(wmip, datap, len);
71454 + break;
71455 +#ifdef CONFIG_HOST_DSET_SUPPORT
71456 + case (WMIX_DSETCLOSE_EVENTID):
71457 + status = wmi_dset_close_rx(wmip, datap, len);
71458 + break;
71459 + case (WMIX_DSETDATAREQ_EVENTID):
71460 + status = wmi_dset_data_req_rx(wmip, datap, len);
71461 + break;
71462 +#endif /* CONFIG_HOST_DSET_SUPPORT */
71463 +#ifdef CONFIG_HOST_GPIO_SUPPORT
71464 + case (WMIX_GPIO_INTR_EVENTID):
71465 + wmi_gpio_intr_rx(wmip, datap, len);
71466 + break;
71467 + case (WMIX_GPIO_DATA_EVENTID):
71468 + wmi_gpio_data_rx(wmip, datap, len);
71469 + break;
71470 + case (WMIX_GPIO_ACK_EVENTID):
71471 + wmi_gpio_ack_rx(wmip, datap, len);
71472 + break;
71473 +#endif /* CONFIG_HOST_GPIO_SUPPORT */
71474 + case (WMIX_HB_CHALLENGE_RESP_EVENTID):
71475 + wmi_hbChallengeResp_rx(wmip, datap, len);
71476 + break;
71477 + case (WMIX_DBGLOG_EVENTID):
71478 + wmi_dbglog_event_rx(wmip, datap, len);
71479 + break;
71480 + default:
71481 + A_DPRINTF(DBG_WMI|DBG_ERROR,
71482 + (DBGFMT "Unknown id 0x%x\n", DBGARG, id));
71483 + wmip->wmi_stats.cmd_id_err++;
71484 + status = A_ERROR;
71485 + break;
71486 + }
71487 +
71488 + return status;
71489 +}
71490 +
71491 +/*
71492 + * Control Path
71493 + */
71494 +A_UINT32 cmdRecvNum;
71495 +
71496 +A_STATUS
71497 +wmi_control_rx(struct wmi_t *wmip, void *osbuf)
71498 +{
71499 + WMI_CMD_HDR *cmd;
71500 + A_UINT16 id;
71501 + A_UINT8 *datap;
71502 + A_UINT32 len, i, loggingReq;
71503 + A_STATUS status = A_OK;
71504 +
71505 + A_ASSERT(osbuf != NULL);
71506 + if (A_NETBUF_LEN(osbuf) < sizeof(WMI_CMD_HDR)) {
71507 + A_DPRINTF(DBG_WMI, (DBGFMT "bad packet 1\n", DBGARG));
71508 + wmip->wmi_stats.cmd_len_err++;
71509 + A_NETBUF_FREE(osbuf);
71510 + return A_ERROR;
71511 + }
71512 +
71513 + cmd = (WMI_CMD_HDR *)A_NETBUF_DATA(osbuf);
71514 + id = cmd->commandId;
71515 +
71516 + if (A_NETBUF_PULL(osbuf, sizeof(WMI_CMD_HDR)) != A_OK) {
71517 + A_DPRINTF(DBG_WMI, (DBGFMT "bad packet 2\n", DBGARG));
71518 + wmip->wmi_stats.cmd_len_err++;
71519 + A_NETBUF_FREE(osbuf);
71520 + return A_ERROR;
71521 + }
71522 +
71523 + datap = A_NETBUF_DATA(osbuf);
71524 + len = A_NETBUF_LEN(osbuf);
71525 +
71526 + ar6000_get_driver_cfg(wmip->wmi_devt,
71527 + AR6000_DRIVER_CFG_LOG_RAW_WMI_MSGS,
71528 + &loggingReq);
71529 +
71530 + if(loggingReq) {
71531 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("WMI %d \n",id));
71532 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("WMI recv, MsgNo %d : ", cmdRecvNum));
71533 + for(i = 0; i < len; i++)
71534 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("%x ", datap[i]));
71535 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("\n"));
71536 + }
71537 +
71538 + LOCK_WMI(wmip);
71539 + cmdRecvNum++;
71540 + UNLOCK_WMI(wmip);
71541 +
71542 + switch (id) {
71543 + case (WMI_GET_BITRATE_CMDID):
71544 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_BITRATE_CMDID\n", DBGARG));
71545 + status = wmi_bitrate_reply_rx(wmip, datap, len);
71546 + break;
71547 + case (WMI_GET_CHANNEL_LIST_CMDID):
71548 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_CHANNEL_LIST_CMDID\n", DBGARG));
71549 + status = wmi_channelList_reply_rx(wmip, datap, len);
71550 + break;
71551 + case (WMI_GET_TX_PWR_CMDID):
71552 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_TX_PWR_CMDID\n", DBGARG));
71553 + status = wmi_txPwr_reply_rx(wmip, datap, len);
71554 + break;
71555 + case (WMI_READY_EVENTID):
71556 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_READY_EVENTID\n", DBGARG));
71557 + status = wmi_ready_event_rx(wmip, datap, len);
71558 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71559 + A_WMI_DBGLOG_INIT_DONE(wmip->wmi_devt);
71560 + break;
71561 + case (WMI_CONNECT_EVENTID):
71562 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_CONNECT_EVENTID\n", DBGARG));
71563 + status = wmi_connect_event_rx(wmip, datap, len);
71564 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71565 + break;
71566 + case (WMI_DISCONNECT_EVENTID):
71567 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_DISCONNECT_EVENTID\n", DBGARG));
71568 + status = wmi_disconnect_event_rx(wmip, datap, len);
71569 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71570 + break;
71571 + case (WMI_TKIP_MICERR_EVENTID):
71572 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_TKIP_MICERR_EVENTID\n", DBGARG));
71573 + status = wmi_tkip_micerr_event_rx(wmip, datap, len);
71574 + break;
71575 + case (WMI_BSSINFO_EVENTID):
71576 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_BSSINFO_EVENTID\n", DBGARG));
71577 + status = wmi_bssInfo_event_rx(wmip, datap, len);
71578 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71579 + break;
71580 + case (WMI_REGDOMAIN_EVENTID):
71581 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_REGDOMAIN_EVENTID\n", DBGARG));
71582 + status = wmi_regDomain_event_rx(wmip, datap, len);
71583 + break;
71584 + case (WMI_PSTREAM_TIMEOUT_EVENTID):
71585 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_PSTREAM_TIMEOUT_EVENTID\n", DBGARG));
71586 + status = wmi_pstream_timeout_event_rx(wmip, datap, len);
71587 + /* pstreams are fatpipe abstractions that get implicitly created.
71588 + * User apps only deal with thinstreams. creation of a thinstream
71589 + * by the user or data traffic flow in an AC triggers implicit
71590 + * pstream creation. Do we need to send this event to App..?
71591 + * no harm in sending it.
71592 + */
71593 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71594 + break;
71595 + case (WMI_NEIGHBOR_REPORT_EVENTID):
71596 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_NEIGHBOR_REPORT_EVENTID\n", DBGARG));
71597 + status = wmi_neighborReport_event_rx(wmip, datap, len);
71598 + break;
71599 + case (WMI_SCAN_COMPLETE_EVENTID):
71600 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_SCAN_COMPLETE_EVENTID\n", DBGARG));
71601 + status = wmi_scanComplete_rx(wmip, datap, len);
71602 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71603 + break;
71604 + case (WMI_CMDERROR_EVENTID):
71605 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_CMDERROR_EVENTID\n", DBGARG));
71606 + status = wmi_errorEvent_rx(wmip, datap, len);
71607 + break;
71608 + case (WMI_REPORT_STATISTICS_EVENTID):
71609 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_REPORT_STATISTICS_EVENTID\n", DBGARG));
71610 + status = wmi_statsEvent_rx(wmip, datap, len);
71611 + break;
71612 + case (WMI_RSSI_THRESHOLD_EVENTID):
71613 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_RSSI_THRESHOLD_EVENTID\n", DBGARG));
71614 + status = wmi_rssiThresholdEvent_rx(wmip, datap, len);
71615 + break;
71616 + case (WMI_ERROR_REPORT_EVENTID):
71617 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_ERROR_REPORT_EVENTID\n", DBGARG));
71618 + status = wmi_reportErrorEvent_rx(wmip, datap, len);
71619 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71620 + break;
71621 + case (WMI_OPT_RX_FRAME_EVENTID):
71622 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_OPT_RX_FRAME_EVENTID\n", DBGARG));
71623 + status = wmi_opt_frame_event_rx(wmip, datap, len);
71624 + break;
71625 + case (WMI_REPORT_ROAM_TBL_EVENTID):
71626 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_REPORT_ROAM_TBL_EVENTID\n", DBGARG));
71627 + status = wmi_roam_tbl_event_rx(wmip, datap, len);
71628 + break;
71629 + case (WMI_EXTENSION_EVENTID):
71630 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_EXTENSION_EVENTID\n", DBGARG));
71631 + status = wmi_control_rx_xtnd(wmip, osbuf);
71632 + break;
71633 + case (WMI_CAC_EVENTID):
71634 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_CAC_EVENTID\n", DBGARG));
71635 + status = wmi_cac_event_rx(wmip, datap, len);
71636 + break;
71637 + case (WMI_REPORT_ROAM_DATA_EVENTID):
71638 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_REPORT_ROAM_DATA_EVENTID\n", DBGARG));
71639 + status = wmi_roam_data_event_rx(wmip, datap, len);
71640 + break;
71641 +#ifdef CONFIG_HOST_TCMD_SUPPORT
71642 + case (WMI_TEST_EVENTID):
71643 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_TEST_EVENTID\n", DBGARG));
71644 + status = wmi_tcmd_test_report_rx(wmip, datap, len);
71645 + break;
71646 +#endif
71647 + case (WMI_GET_FIXRATES_CMDID):
71648 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_FIXRATES_CMDID\n", DBGARG));
71649 + status = wmi_ratemask_reply_rx(wmip, datap, len);
71650 + break;
71651 + case (WMI_TX_RETRY_ERR_EVENTID):
71652 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_TX_RETRY_ERR_EVENTID\n", DBGARG));
71653 + status = wmi_txRetryErrEvent_rx(wmip, datap, len);
71654 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71655 + break;
71656 + case (WMI_SNR_THRESHOLD_EVENTID):
71657 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_SNR_THRESHOLD_EVENTID\n", DBGARG));
71658 + status = wmi_snrThresholdEvent_rx(wmip, datap, len);
71659 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71660 + break;
71661 + case (WMI_LQ_THRESHOLD_EVENTID):
71662 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_LQ_THRESHOLD_EVENTID\n", DBGARG));
71663 + status = wmi_lqThresholdEvent_rx(wmip, datap, len);
71664 + A_WMI_SEND_EVENT_TO_APP(wmip->wmi_devt, id, datap, len);
71665 + break;
71666 + case (WMI_APLIST_EVENTID):
71667 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Received APLIST Event\n"));
71668 + status = wmi_aplistEvent_rx(wmip, datap, len);
71669 + break;
71670 + case (WMI_GET_KEEPALIVE_CMDID):
71671 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_KEEPALIVE_CMDID\n", DBGARG));
71672 + status = wmi_keepalive_reply_rx(wmip, datap, len);
71673 + break;
71674 + case (WMI_GET_WOW_LIST_EVENTID):
71675 + status = wmi_get_wow_list_event_rx(wmip, datap, len);
71676 + break;
71677 + case (WMI_GET_PMKID_LIST_EVENTID):
71678 + A_DPRINTF(DBG_WMI, (DBGFMT "WMI_GET_PMKID_LIST Event\n", DBGARG));
71679 + status = wmi_get_pmkid_list_event_rx(wmip, datap, len);
71680 + break;
71681 + default:
71682 + A_DPRINTF(DBG_WMI|DBG_ERROR,
71683 + (DBGFMT "Unknown id 0x%x\n", DBGARG, id));
71684 + wmip->wmi_stats.cmd_id_err++;
71685 + status = A_ERROR;
71686 + break;
71687 + }
71688 +
71689 + A_NETBUF_FREE(osbuf);
71690 +
71691 + return status;
71692 +}
71693 +
71694 +static A_STATUS
71695 +wmi_ready_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71696 +{
71697 + WMI_READY_EVENT *ev = (WMI_READY_EVENT *)datap;
71698 +
71699 + if (len < sizeof(WMI_READY_EVENT)) {
71700 + return A_EINVAL;
71701 + }
71702 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
71703 + wmip->wmi_ready = TRUE;
71704 + A_WMI_READY_EVENT(wmip->wmi_devt, ev->macaddr, ev->phyCapability);
71705 +
71706 + return A_OK;
71707 +}
71708 +
71709 +static A_STATUS
71710 +wmi_connect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71711 +{
71712 + WMI_CONNECT_EVENT *ev;
71713 +
71714 + if (len < sizeof(WMI_CONNECT_EVENT)) {
71715 + return A_EINVAL;
71716 + }
71717 + ev = (WMI_CONNECT_EVENT *)datap;
71718 + A_DPRINTF(DBG_WMI,
71719 + (DBGFMT "freq %d bssid %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
71720 + DBGARG, ev->channel,
71721 + ev->bssid[0], ev->bssid[1], ev->bssid[2],
71722 + ev->bssid[3], ev->bssid[4], ev->bssid[5]));
71723 +
71724 + A_MEMCPY(wmip->wmi_bssid, ev->bssid, ATH_MAC_LEN);
71725 +
71726 + A_WMI_CONNECT_EVENT(wmip->wmi_devt, ev->channel, ev->bssid,
71727 + ev->listenInterval, ev->beaconInterval,
71728 + ev->networkType, ev->beaconIeLen,
71729 + ev->assocReqLen, ev->assocRespLen,
71730 + ev->assocInfo);
71731 +
71732 + return A_OK;
71733 +}
71734 +
71735 +static A_STATUS
71736 +wmi_regDomain_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71737 +{
71738 + WMI_REG_DOMAIN_EVENT *ev;
71739 +
71740 + if (len < sizeof(*ev)) {
71741 + return A_EINVAL;
71742 + }
71743 + ev = (WMI_REG_DOMAIN_EVENT *)datap;
71744 +
71745 + A_WMI_REGDOMAIN_EVENT(wmip->wmi_devt, ev->regDomain);
71746 +
71747 + return A_OK;
71748 +}
71749 +
71750 +static A_STATUS
71751 +wmi_neighborReport_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71752 +{
71753 + WMI_NEIGHBOR_REPORT_EVENT *ev;
71754 + int numAps;
71755 +
71756 + if (len < sizeof(*ev)) {
71757 + return A_EINVAL;
71758 + }
71759 + ev = (WMI_NEIGHBOR_REPORT_EVENT *)datap;
71760 + numAps = ev->numberOfAps;
71761 +
71762 + if (len < (int)(sizeof(*ev) + ((numAps - 1) * sizeof(WMI_NEIGHBOR_INFO)))) {
71763 + return A_EINVAL;
71764 + }
71765 +
71766 + A_WMI_NEIGHBORREPORT_EVENT(wmip->wmi_devt, numAps, ev->neighbor);
71767 +
71768 + return A_OK;
71769 +}
71770 +
71771 +static A_STATUS
71772 +wmi_disconnect_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71773 +{
71774 + WMI_DISCONNECT_EVENT *ev;
71775 +
71776 + if (len < sizeof(WMI_DISCONNECT_EVENT)) {
71777 + return A_EINVAL;
71778 + }
71779 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
71780 +
71781 + ev = (WMI_DISCONNECT_EVENT *)datap;
71782 +
71783 + A_MEMZERO(wmip->wmi_bssid, sizeof(wmip->wmi_bssid));
71784 +
71785 + A_WMI_DISCONNECT_EVENT(wmip->wmi_devt, ev->disconnectReason, ev->bssid,
71786 + ev->assocRespLen, ev->assocInfo, ev->protocolReasonStatus);
71787 +
71788 + return A_OK;
71789 +}
71790 +
71791 +static A_STATUS
71792 +wmi_tkip_micerr_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71793 +{
71794 + WMI_TKIP_MICERR_EVENT *ev;
71795 +
71796 + if (len < sizeof(*ev)) {
71797 + return A_EINVAL;
71798 + }
71799 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
71800 +
71801 + ev = (WMI_TKIP_MICERR_EVENT *)datap;
71802 + A_WMI_TKIP_MICERR_EVENT(wmip->wmi_devt, ev->keyid, ev->ismcast);
71803 +
71804 + return A_OK;
71805 +}
71806 +
71807 +static A_STATUS
71808 +wmi_bssInfo_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71809 +{
71810 + bss_t *bss;
71811 + WMI_BSS_INFO_HDR *bih;
71812 + A_UINT8 *buf;
71813 + A_UINT32 nodeCachingAllowed;
71814 +
71815 + if (len <= sizeof(WMI_BSS_INFO_HDR)) {
71816 + return A_EINVAL;
71817 + }
71818 +
71819 + A_WMI_BSSINFO_EVENT_RX(wmip->wmi_devt, datap, len);
71820 + /* What is driver config for wlan node caching? */
71821 + if(ar6000_get_driver_cfg(wmip->wmi_devt,
71822 + AR6000_DRIVER_CFG_GET_WLANNODECACHING,
71823 + &nodeCachingAllowed) != A_OK) {
71824 + return A_EINVAL;
71825 + }
71826 +
71827 + if(!nodeCachingAllowed) {
71828 + return A_OK;
71829 + }
71830 +
71831 +
71832 + bih = (WMI_BSS_INFO_HDR *)datap;
71833 + buf = datap + sizeof(WMI_BSS_INFO_HDR);
71834 + len -= sizeof(WMI_BSS_INFO_HDR);
71835 +
71836 + A_DPRINTF(DBG_WMI2, (DBGFMT "bssInfo event - ch %u, rssi %02x, "
71837 + "bssid \"%02x:%02x:%02x:%02x:%02x:%02x\"\n", DBGARG,
71838 + bih->channel, (unsigned char) bih->rssi, bih->bssid[0],
71839 + bih->bssid[1], bih->bssid[2], bih->bssid[3], bih->bssid[4],
71840 + bih->bssid[5]));
71841 +
71842 + if(wps_enable && (bih->frameType == PROBERESP_FTYPE) ) {
71843 + printk("%s() A_OK 2\n", __FUNCTION__);
71844 + return A_OK;
71845 + }
71846 +
71847 + bss = wlan_find_node(&wmip->wmi_scan_table, bih->bssid);
71848 + if (bss != NULL) {
71849 + /*
71850 + * Free up the node. Not the most efficient process given
71851 + * we are about to allocate a new node but it is simple and should be
71852 + * adequate.
71853 + */
71854 + wlan_node_reclaim(&wmip->wmi_scan_table, bss);
71855 + }
71856 +
71857 + bss = wlan_node_alloc(&wmip->wmi_scan_table, len);
71858 + if (bss == NULL) {
71859 + return A_NO_MEMORY;
71860 + }
71861 +
71862 + bss->ni_snr = bih->snr;
71863 + bss->ni_rssi = bih->rssi;
71864 + A_ASSERT(bss->ni_buf != NULL);
71865 + A_MEMCPY(bss->ni_buf, buf, len);
71866 +
71867 + if (wlan_parse_beacon(bss->ni_buf, len, &bss->ni_cie) != A_OK) {
71868 + wlan_node_free(bss);
71869 + return A_EINVAL;
71870 + }
71871 +
71872 + /*
71873 + * Update the frequency in ie_chan, overwriting of channel number
71874 + * which is done in wlan_parse_beacon
71875 + */
71876 + bss->ni_cie.ie_chan = bih->channel;
71877 + wlan_setup_node(&wmip->wmi_scan_table, bss, bih->bssid);
71878 +
71879 + return A_OK;
71880 +}
71881 +
71882 +static A_STATUS
71883 +wmi_opt_frame_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71884 +{
71885 + bss_t *bss;
71886 + WMI_OPT_RX_INFO_HDR *bih;
71887 + A_UINT8 *buf;
71888 +
71889 + if (len <= sizeof(WMI_OPT_RX_INFO_HDR)) {
71890 + return A_EINVAL;
71891 + }
71892 +
71893 + bih = (WMI_OPT_RX_INFO_HDR *)datap;
71894 + buf = datap + sizeof(WMI_OPT_RX_INFO_HDR);
71895 + len -= sizeof(WMI_OPT_RX_INFO_HDR);
71896 +
71897 + A_DPRINTF(DBG_WMI2, (DBGFMT "opt frame event %2.2x:%2.2x\n", DBGARG,
71898 + bih->bssid[4], bih->bssid[5]));
71899 +
71900 + bss = wlan_find_node(&wmip->wmi_scan_table, bih->bssid);
71901 + if (bss != NULL) {
71902 + /*
71903 + * Free up the node. Not the most efficient process given
71904 + * we are about to allocate a new node but it is simple and should be
71905 + * adequate.
71906 + */
71907 + wlan_node_reclaim(&wmip->wmi_scan_table, bss);
71908 + }
71909 +
71910 + bss = wlan_node_alloc(&wmip->wmi_scan_table, len);
71911 + if (bss == NULL) {
71912 + return A_NO_MEMORY;
71913 + }
71914 +
71915 + bss->ni_snr = bih->snr;
71916 + bss->ni_cie.ie_chan = bih->channel;
71917 + A_ASSERT(bss->ni_buf != NULL);
71918 + A_MEMCPY(bss->ni_buf, buf, len);
71919 + wlan_setup_node(&wmip->wmi_scan_table, bss, bih->bssid);
71920 +
71921 + return A_OK;
71922 +}
71923 +
71924 + /* This event indicates inactivity timeout of a fatpipe(pstream)
71925 + * at the target
71926 + */
71927 +static A_STATUS
71928 +wmi_pstream_timeout_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71929 +{
71930 + WMI_PSTREAM_TIMEOUT_EVENT *ev;
71931 +
71932 + if (len < sizeof(WMI_PSTREAM_TIMEOUT_EVENT)) {
71933 + return A_EINVAL;
71934 + }
71935 +
71936 + A_DPRINTF(DBG_WMI, (DBGFMT "wmi_pstream_timeout_event_rx\n", DBGARG));
71937 +
71938 + ev = (WMI_PSTREAM_TIMEOUT_EVENT *)datap;
71939 +
71940 + /* When the pstream (fat pipe == AC) timesout, it means there were no
71941 + * thinStreams within this pstream & it got implicitly created due to
71942 + * data flow on this AC. We start the inactivity timer only for
71943 + * implicitly created pstream. Just reset the host state.
71944 + */
71945 + /* Set the activeTsids for this AC to 0 */
71946 + LOCK_WMI(wmip);
71947 + wmip->wmi_streamExistsForAC[ev->trafficClass]=0;
71948 + wmip->wmi_fatPipeExists &= ~(1 << ev->trafficClass);
71949 + UNLOCK_WMI(wmip);
71950 +
71951 + /*Indicate inactivity to driver layer for this fatpipe (pstream)*/
71952 + A_WMI_STREAM_TX_INACTIVE(wmip->wmi_devt, ev->trafficClass);
71953 +
71954 + return A_OK;
71955 +}
71956 +
71957 +static A_STATUS
71958 +wmi_bitrate_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71959 +{
71960 + WMI_BIT_RATE_CMD *reply;
71961 + A_INT32 rate;
71962 +
71963 + if (len < sizeof(WMI_BIT_RATE_CMD)) {
71964 + return A_EINVAL;
71965 + }
71966 + reply = (WMI_BIT_RATE_CMD *)datap;
71967 + A_DPRINTF(DBG_WMI,
71968 + (DBGFMT "Enter - rateindex %d\n", DBGARG, reply->rateIndex));
71969 +
71970 + if (reply->rateIndex == RATE_AUTO) {
71971 + rate = RATE_AUTO;
71972 + } else {
71973 + rate = wmi_rateTable[(A_UINT32) reply->rateIndex];
71974 + }
71975 +
71976 + A_WMI_BITRATE_RX(wmip->wmi_devt, rate);
71977 +
71978 + return A_OK;
71979 +}
71980 +
71981 +static A_STATUS
71982 +wmi_ratemask_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
71983 +{
71984 + WMI_FIX_RATES_CMD *reply;
71985 +
71986 + if (len < sizeof(WMI_BIT_RATE_CMD)) {
71987 + return A_EINVAL;
71988 + }
71989 + reply = (WMI_FIX_RATES_CMD *)datap;
71990 + A_DPRINTF(DBG_WMI,
71991 + (DBGFMT "Enter - fixed rate mask %x\n", DBGARG, reply->fixRateMask));
71992 +
71993 + A_WMI_RATEMASK_RX(wmip->wmi_devt, reply->fixRateMask);
71994 +
71995 + return A_OK;
71996 +}
71997 +
71998 +static A_STATUS
71999 +wmi_channelList_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72000 +{
72001 + WMI_CHANNEL_LIST_REPLY *reply;
72002 +
72003 + if (len < sizeof(WMI_CHANNEL_LIST_REPLY)) {
72004 + return A_EINVAL;
72005 + }
72006 + reply = (WMI_CHANNEL_LIST_REPLY *)datap;
72007 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72008 +
72009 + A_WMI_CHANNELLIST_RX(wmip->wmi_devt, reply->numChannels,
72010 + reply->channelList);
72011 +
72012 + return A_OK;
72013 +}
72014 +
72015 +static A_STATUS
72016 +wmi_txPwr_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72017 +{
72018 + WMI_TX_PWR_REPLY *reply;
72019 +
72020 + if (len < sizeof(*reply)) {
72021 + return A_EINVAL;
72022 + }
72023 + reply = (WMI_TX_PWR_REPLY *)datap;
72024 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72025 +
72026 + A_WMI_TXPWR_RX(wmip->wmi_devt, reply->dbM);
72027 +
72028 + return A_OK;
72029 +}
72030 +static A_STATUS
72031 +wmi_keepalive_reply_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72032 +{
72033 + WMI_GET_KEEPALIVE_CMD *reply;
72034 +
72035 + if (len < sizeof(*reply)) {
72036 + return A_EINVAL;
72037 + }
72038 + reply = (WMI_GET_KEEPALIVE_CMD *)datap;
72039 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72040 +
72041 + A_WMI_KEEPALIVE_RX(wmip->wmi_devt, reply->configured);
72042 +
72043 + return A_OK;
72044 +}
72045 +
72046 +
72047 +static A_STATUS
72048 +wmi_dset_open_req_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72049 +{
72050 + WMIX_DSETOPENREQ_EVENT *dsetopenreq;
72051 +
72052 + if (len < sizeof(WMIX_DSETOPENREQ_EVENT)) {
72053 + return A_EINVAL;
72054 + }
72055 + dsetopenreq = (WMIX_DSETOPENREQ_EVENT *)datap;
72056 + A_DPRINTF(DBG_WMI,
72057 + (DBGFMT "Enter - dset_id=0x%x\n", DBGARG, dsetopenreq->dset_id));
72058 + A_WMI_DSET_OPEN_REQ(wmip->wmi_devt,
72059 + dsetopenreq->dset_id,
72060 + dsetopenreq->targ_dset_handle,
72061 + dsetopenreq->targ_reply_fn,
72062 + dsetopenreq->targ_reply_arg);
72063 +
72064 + return A_OK;
72065 +}
72066 +
72067 +#ifdef CONFIG_HOST_DSET_SUPPORT
72068 +static A_STATUS
72069 +wmi_dset_close_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72070 +{
72071 + WMIX_DSETCLOSE_EVENT *dsetclose;
72072 +
72073 + if (len < sizeof(WMIX_DSETCLOSE_EVENT)) {
72074 + return A_EINVAL;
72075 + }
72076 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72077 +
72078 + dsetclose = (WMIX_DSETCLOSE_EVENT *)datap;
72079 + A_WMI_DSET_CLOSE(wmip->wmi_devt, dsetclose->access_cookie);
72080 +
72081 + return A_OK;
72082 +}
72083 +
72084 +static A_STATUS
72085 +wmi_dset_data_req_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72086 +{
72087 + WMIX_DSETDATAREQ_EVENT *dsetdatareq;
72088 +
72089 + if (len < sizeof(WMIX_DSETDATAREQ_EVENT)) {
72090 + return A_EINVAL;
72091 + }
72092 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72093 +
72094 + dsetdatareq = (WMIX_DSETDATAREQ_EVENT *)datap;
72095 + A_WMI_DSET_DATA_REQ(wmip->wmi_devt,
72096 + dsetdatareq->access_cookie,
72097 + dsetdatareq->offset,
72098 + dsetdatareq->length,
72099 + dsetdatareq->targ_buf,
72100 + dsetdatareq->targ_reply_fn,
72101 + dsetdatareq->targ_reply_arg);
72102 +
72103 + return A_OK;
72104 +}
72105 +#endif /* CONFIG_HOST_DSET_SUPPORT */
72106 +
72107 +static A_STATUS
72108 +wmi_scanComplete_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72109 +{
72110 + WMI_SCAN_COMPLETE_EVENT *ev;
72111 +
72112 + ev = (WMI_SCAN_COMPLETE_EVENT *)datap;
72113 + A_WMI_SCANCOMPLETE_EVENT(wmip->wmi_devt, ev->status);
72114 +
72115 + return A_OK;
72116 +}
72117 +
72118 +/*
72119 + * Target is reporting a programming error. This is for
72120 + * developer aid only. Target only checks a few common violations
72121 + * and it is responsibility of host to do all error checking.
72122 + * Behavior of target after wmi error event is undefined.
72123 + * A reset is recommended.
72124 + */
72125 +static A_STATUS
72126 +wmi_errorEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72127 +{
72128 + WMI_CMD_ERROR_EVENT *ev;
72129 +
72130 + ev = (WMI_CMD_ERROR_EVENT *)datap;
72131 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Programming Error: cmd=%d ", ev->commandId));
72132 + switch (ev->errorCode) {
72133 + case (INVALID_PARAM):
72134 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Illegal Parameter\n"));
72135 + break;
72136 + case (ILLEGAL_STATE):
72137 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Illegal State\n"));
72138 + break;
72139 + case (INTERNAL_ERROR):
72140 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Internal Error\n"));
72141 + break;
72142 + }
72143 +
72144 + return A_OK;
72145 +}
72146 +
72147 +
72148 +static A_STATUS
72149 +wmi_statsEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72150 +{
72151 + WMI_TARGET_STATS *reply;
72152 +
72153 + if (len < sizeof(*reply)) {
72154 + return A_EINVAL;
72155 + }
72156 + reply = (WMI_TARGET_STATS *)datap;
72157 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72158 +
72159 + A_WMI_TARGETSTATS_EVENT(wmip->wmi_devt, reply);
72160 +
72161 + return A_OK;
72162 +}
72163 +
72164 +static A_STATUS
72165 +wmi_rssiThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72166 +{
72167 + WMI_RSSI_THRESHOLD_EVENT *reply;
72168 +
72169 + if (len < sizeof(*reply)) {
72170 + return A_EINVAL;
72171 + }
72172 + reply = (WMI_RSSI_THRESHOLD_EVENT *)datap;
72173 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72174 +
72175 + A_WMI_RSSI_THRESHOLD_EVENT(wmip->wmi_devt, reply->range, reply->rssi);
72176 +
72177 + return A_OK;
72178 +}
72179 +
72180 +
72181 +static A_STATUS
72182 +wmi_reportErrorEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72183 +{
72184 + WMI_TARGET_ERROR_REPORT_EVENT *reply;
72185 +
72186 + if (len < sizeof(*reply)) {
72187 + return A_EINVAL;
72188 + }
72189 + reply = (WMI_TARGET_ERROR_REPORT_EVENT *)datap;
72190 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72191 +
72192 + A_WMI_REPORT_ERROR_EVENT(wmip->wmi_devt, reply->errorVal);
72193 +
72194 + return A_OK;
72195 +}
72196 +
72197 +static A_STATUS
72198 +wmi_cac_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72199 +{
72200 + WMI_CAC_EVENT *reply;
72201 +
72202 + if (len < sizeof(*reply)) {
72203 + return A_EINVAL;
72204 + }
72205 + reply = (WMI_CAC_EVENT *)datap;
72206 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72207 +
72208 + A_WMI_CAC_EVENT(wmip->wmi_devt, reply->ac,
72209 + reply->cac_indication, reply->statusCode,
72210 + reply->tspecSuggestion);
72211 +
72212 + return A_OK;
72213 +}
72214 +
72215 +static A_STATUS
72216 +wmi_hbChallengeResp_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72217 +{
72218 + WMIX_HB_CHALLENGE_RESP_EVENT *reply;
72219 +
72220 + if (len < sizeof(*reply)) {
72221 + return A_EINVAL;
72222 + }
72223 + reply = (WMIX_HB_CHALLENGE_RESP_EVENT *)datap;
72224 + A_DPRINTF(DBG_WMI, (DBGFMT "wmi: challenge response event\n", DBGARG));
72225 +
72226 + A_WMI_HBCHALLENGERESP_EVENT(wmip->wmi_devt, reply->cookie, reply->source);
72227 +
72228 + return A_OK;
72229 +}
72230 +
72231 +static A_STATUS
72232 +wmi_roam_tbl_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72233 +{
72234 + WMI_TARGET_ROAM_TBL *reply;
72235 +
72236 + if (len < sizeof(*reply)) {
72237 + return A_EINVAL;
72238 + }
72239 + reply = (WMI_TARGET_ROAM_TBL *)datap;
72240 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72241 +
72242 + A_WMI_ROAM_TABLE_EVENT(wmip->wmi_devt, reply);
72243 +
72244 + return A_OK;
72245 +}
72246 +
72247 +static A_STATUS
72248 +wmi_roam_data_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72249 +{
72250 + WMI_TARGET_ROAM_DATA *reply;
72251 +
72252 + if (len < sizeof(*reply)) {
72253 + return A_EINVAL;
72254 + }
72255 + reply = (WMI_TARGET_ROAM_DATA *)datap;
72256 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72257 +
72258 + A_WMI_ROAM_DATA_EVENT(wmip->wmi_devt, reply);
72259 +
72260 + return A_OK;
72261 +}
72262 +
72263 +static A_STATUS
72264 +wmi_txRetryErrEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72265 +{
72266 + WMI_TX_RETRY_ERR_EVENT *reply;
72267 +
72268 + if (len < sizeof(*reply)) {
72269 + return A_EINVAL;
72270 + }
72271 + reply = (WMI_TX_RETRY_ERR_EVENT *)datap;
72272 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72273 +
72274 + A_WMI_TX_RETRY_ERR_EVENT(wmip->wmi_devt);
72275 +
72276 + return A_OK;
72277 +}
72278 +
72279 +static A_STATUS
72280 +wmi_snrThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72281 +{
72282 + WMI_SNR_THRESHOLD_EVENT *reply;
72283 +
72284 + if (len < sizeof(*reply)) {
72285 + return A_EINVAL;
72286 + }
72287 + reply = (WMI_SNR_THRESHOLD_EVENT *)datap;
72288 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72289 +
72290 + A_WMI_SNR_THRESHOLD_EVENT_RX(wmip->wmi_devt, reply->range, reply->snr);
72291 +
72292 + return A_OK;
72293 +}
72294 +
72295 +static A_STATUS
72296 +wmi_lqThresholdEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72297 +{
72298 + WMI_LQ_THRESHOLD_EVENT *reply;
72299 +
72300 + if (len < sizeof(*reply)) {
72301 + return A_EINVAL;
72302 + }
72303 + reply = (WMI_LQ_THRESHOLD_EVENT *)datap;
72304 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72305 +
72306 + A_WMI_LQ_THRESHOLD_EVENT_RX(wmip->wmi_devt, reply->range, reply->lq);
72307 +
72308 + return A_OK;
72309 +}
72310 +
72311 +static A_STATUS
72312 +wmi_aplistEvent_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72313 +{
72314 + A_UINT16 ap_info_entry_size;
72315 + WMI_APLIST_EVENT *ev = (WMI_APLIST_EVENT *)datap;
72316 + WMI_AP_INFO_V1 *ap_info_v1;
72317 + A_UINT8 i;
72318 +
72319 + if (len < sizeof(WMI_APLIST_EVENT)) {
72320 + return A_EINVAL;
72321 + }
72322 +
72323 + if (ev->apListVer == APLIST_VER1) {
72324 + ap_info_entry_size = sizeof(WMI_AP_INFO_V1);
72325 + ap_info_v1 = (WMI_AP_INFO_V1 *)ev->apList;
72326 + } else {
72327 + return A_EINVAL;
72328 + }
72329 +
72330 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("Number of APs in APLIST Event is %d\n", ev->numAP));
72331 + if (len < (int)(sizeof(WMI_APLIST_EVENT) +
72332 + (ev->numAP - 1) * ap_info_entry_size))
72333 + {
72334 + return A_EINVAL;
72335 + }
72336 +
72337 + /*
72338 + * AP List Ver1 Contents
72339 + */
72340 + for (i = 0; i < ev->numAP; i++) {
72341 + AR_DEBUG_PRINTF(ATH_DEBUG_WMI, ("AP#%d BSSID %2.2x %2.2x %2.2x %2.2x %2.2x %2.2x "\
72342 + "Channel %d\n", i,
72343 + ap_info_v1->bssid[0], ap_info_v1->bssid[1],
72344 + ap_info_v1->bssid[2], ap_info_v1->bssid[3],
72345 + ap_info_v1->bssid[4], ap_info_v1->bssid[5],
72346 + ap_info_v1->channel));
72347 + ap_info_v1++;
72348 + }
72349 + return A_OK;
72350 +}
72351 +
72352 +static A_STATUS
72353 +wmi_dbglog_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72354 +{
72355 + A_UINT32 dropped;
72356 +
72357 + dropped = *((A_UINT32 *)datap);
72358 + datap += sizeof(dropped);
72359 + len -= sizeof(dropped);
72360 + A_WMI_DBGLOG_EVENT(wmip->wmi_devt, dropped, datap, len);
72361 + return A_OK;
72362 +}
72363 +
72364 +#ifdef CONFIG_HOST_GPIO_SUPPORT
72365 +static A_STATUS
72366 +wmi_gpio_intr_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72367 +{
72368 + WMIX_GPIO_INTR_EVENT *gpio_intr = (WMIX_GPIO_INTR_EVENT *)datap;
72369 +
72370 + A_DPRINTF(DBG_WMI,
72371 + (DBGFMT "Enter - intrmask=0x%x input=0x%x.\n", DBGARG,
72372 + gpio_intr->intr_mask, gpio_intr->input_values));
72373 +
72374 + A_WMI_GPIO_INTR_RX(gpio_intr->intr_mask, gpio_intr->input_values);
72375 +
72376 + return A_OK;
72377 +}
72378 +
72379 +static A_STATUS
72380 +wmi_gpio_data_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72381 +{
72382 + WMIX_GPIO_DATA_EVENT *gpio_data = (WMIX_GPIO_DATA_EVENT *)datap;
72383 +
72384 + A_DPRINTF(DBG_WMI,
72385 + (DBGFMT "Enter - reg=%d value=0x%x\n", DBGARG,
72386 + gpio_data->reg_id, gpio_data->value));
72387 +
72388 + A_WMI_GPIO_DATA_RX(gpio_data->reg_id, gpio_data->value);
72389 +
72390 + return A_OK;
72391 +}
72392 +
72393 +static A_STATUS
72394 +wmi_gpio_ack_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
72395 +{
72396 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
72397 +
72398 + A_WMI_GPIO_ACK_RX();
72399 +
72400 + return A_OK;
72401 +}
72402 +#endif /* CONFIG_HOST_GPIO_SUPPORT */
72403 +
72404 +/*
72405 + * Called to send a wmi command. Command specific data is already built
72406 + * on osbuf and current osbuf->data points to it.
72407 + */
72408 +A_STATUS
72409 +wmi_cmd_send(struct wmi_t *wmip, void *osbuf, WMI_COMMAND_ID cmdId,
72410 + WMI_SYNC_FLAG syncflag)
72411 +{
72412 +#define IS_LONG_CMD(cmdId) ((cmdId == WMI_OPT_TX_FRAME_CMDID) || (cmdId == WMI_ADD_WOW_PATTERN_CMDID))
72413 + WMI_CMD_HDR *cHdr;
72414 + WMI_PRI_STREAM_ID streamID = WMI_CONTROL_PRI;
72415 +
72416 + A_ASSERT(osbuf != NULL);
72417 +
72418 + if (syncflag >= END_WMIFLAG) {
72419 + return A_EINVAL;
72420 + }
72421 +
72422 + if ((syncflag == SYNC_BEFORE_WMIFLAG) || (syncflag == SYNC_BOTH_WMIFLAG)) {
72423 + /*
72424 + * We want to make sure all data currently queued is transmitted before
72425 + * the cmd execution. Establish a new sync point.
72426 + */
72427 + wmi_sync_point(wmip);
72428 + }
72429 +
72430 + if (A_NETBUF_PUSH(osbuf, sizeof(WMI_CMD_HDR)) != A_OK) {
72431 + return A_NO_MEMORY;
72432 + }
72433 +
72434 + cHdr = (WMI_CMD_HDR *)A_NETBUF_DATA(osbuf);
72435 + cHdr->commandId = cmdId;
72436 +
72437 + /*
72438 + * Send cmd, some via control pipe, others via data pipe
72439 + */
72440 + if (IS_LONG_CMD(cmdId)) {
72441 + wmi_data_hdr_add(wmip, osbuf, CNTL_MSGTYPE);
72442 + // TODO ... these can now go through the control endpoint via HTC 2.0
72443 + streamID = WMI_BEST_EFFORT_PRI;
72444 + }
72445 + A_WMI_CONTROL_TX(wmip->wmi_devt, osbuf, streamID);
72446 +
72447 + if ((syncflag == SYNC_AFTER_WMIFLAG) || (syncflag == SYNC_BOTH_WMIFLAG)) {
72448 + /*
72449 + * We want to make sure all new data queued waits for the command to
72450 + * execute. Establish a new sync point.
72451 + */
72452 + wmi_sync_point(wmip);
72453 + }
72454 + return (A_OK);
72455 +#undef IS_LONG_CMD
72456 +}
72457 +
72458 +A_STATUS
72459 +wmi_cmd_send_xtnd(struct wmi_t *wmip, void *osbuf, WMI_COMMAND_ID cmdId,
72460 + WMI_SYNC_FLAG syncflag)
72461 +{
72462 + WMIX_CMD_HDR *cHdr;
72463 +
72464 + if (A_NETBUF_PUSH(osbuf, sizeof(WMIX_CMD_HDR)) != A_OK) {
72465 + return A_NO_MEMORY;
72466 + }
72467 +
72468 + cHdr = (WMIX_CMD_HDR *)A_NETBUF_DATA(osbuf);
72469 + cHdr->commandId = cmdId;
72470 +
72471 + return wmi_cmd_send(wmip, osbuf, WMI_EXTENSION_CMDID, syncflag);
72472 +}
72473 +
72474 +A_STATUS
72475 +wmi_connect_cmd(struct wmi_t *wmip, NETWORK_TYPE netType,
72476 + DOT11_AUTH_MODE dot11AuthMode, AUTH_MODE authMode,
72477 + CRYPTO_TYPE pairwiseCrypto, A_UINT8 pairwiseCryptoLen,
72478 + CRYPTO_TYPE groupCrypto,A_UINT8 groupCryptoLen,
72479 + int ssidLength, A_UCHAR *ssid,
72480 + A_UINT8 *bssid, A_UINT16 channel, A_UINT32 ctrl_flags)
72481 +{
72482 + void *osbuf;
72483 + WMI_CONNECT_CMD *cc;
72484 +
72485 + if ((pairwiseCrypto == NONE_CRYPT) && (groupCrypto != NONE_CRYPT)) {
72486 + return A_EINVAL;
72487 + }
72488 + if ((pairwiseCrypto != NONE_CRYPT) && (groupCrypto == NONE_CRYPT)) {
72489 + return A_EINVAL;
72490 + }
72491 +
72492 + osbuf = A_NETBUF_ALLOC(sizeof(WMI_CONNECT_CMD));
72493 + if (osbuf == NULL) {
72494 + return A_NO_MEMORY;
72495 + }
72496 +
72497 + A_NETBUF_PUT(osbuf, sizeof(WMI_CONNECT_CMD));
72498 +
72499 + cc = (WMI_CONNECT_CMD *)(A_NETBUF_DATA(osbuf));
72500 + A_MEMZERO(cc, sizeof(*cc));
72501 +
72502 + A_MEMCPY(cc->ssid, ssid, ssidLength);
72503 + cc->ssidLength = ssidLength;
72504 + cc->networkType = netType;
72505 + cc->dot11AuthMode = dot11AuthMode;
72506 + cc->authMode = authMode;
72507 + cc->pairwiseCryptoType = pairwiseCrypto;
72508 + cc->pairwiseCryptoLen = pairwiseCryptoLen;
72509 + cc->groupCryptoType = groupCrypto;
72510 + cc->groupCryptoLen = groupCryptoLen;
72511 + cc->channel = channel;
72512 + cc->ctrl_flags = ctrl_flags;
72513 +
72514 + if (bssid != NULL) {
72515 + A_MEMCPY(cc->bssid, bssid, ATH_MAC_LEN);
72516 + }
72517 + if (wmi_set_keepalive_cmd(wmip, wmip->wmi_keepaliveInterval) != A_OK) {
72518 + return(A_ERROR);
72519 + }
72520 +
72521 + return (wmi_cmd_send(wmip, osbuf, WMI_CONNECT_CMDID, NO_SYNC_WMIFLAG));
72522 +}
72523 +
72524 +A_STATUS
72525 +wmi_reconnect_cmd(struct wmi_t *wmip, A_UINT8 *bssid, A_UINT16 channel)
72526 +{
72527 + void *osbuf;
72528 + WMI_RECONNECT_CMD *cc;
72529 +
72530 + osbuf = A_NETBUF_ALLOC(sizeof(WMI_RECONNECT_CMD));
72531 + if (osbuf == NULL) {
72532 + return A_NO_MEMORY;
72533 + }
72534 +
72535 + A_NETBUF_PUT(osbuf, sizeof(WMI_RECONNECT_CMD));
72536 +
72537 + cc = (WMI_RECONNECT_CMD *)(A_NETBUF_DATA(osbuf));
72538 + A_MEMZERO(cc, sizeof(*cc));
72539 +
72540 + cc->channel = channel;
72541 +
72542 + if (bssid != NULL) {
72543 + A_MEMCPY(cc->bssid, bssid, ATH_MAC_LEN);
72544 + }
72545 +
72546 + return (wmi_cmd_send(wmip, osbuf, WMI_RECONNECT_CMDID, NO_SYNC_WMIFLAG));
72547 +}
72548 +
72549 +A_STATUS
72550 +wmi_disconnect_cmd(struct wmi_t *wmip)
72551 +{
72552 + void *osbuf;
72553 + A_STATUS status;
72554 +
72555 + osbuf = A_NETBUF_ALLOC(0); /* no payload */
72556 + if (osbuf == NULL) {
72557 + return A_NO_MEMORY;
72558 + }
72559 +
72560 + /* Bug fix for 24817(elevator bug) - the disconnect command does not
72561 + need to do a SYNC before.*/
72562 + status = (wmi_cmd_send(wmip, osbuf, WMI_DISCONNECT_CMDID,
72563 + NO_SYNC_WMIFLAG));
72564 +
72565 + return status;
72566 +}
72567 +
72568 +A_STATUS
72569 +wmi_startscan_cmd(struct wmi_t *wmip, WMI_SCAN_TYPE scanType,
72570 + A_BOOL forceFgScan, A_BOOL isLegacy,
72571 + A_UINT32 homeDwellTime, A_UINT32 forceScanInterval)
72572 +{
72573 + void *osbuf;
72574 + WMI_START_SCAN_CMD *sc;
72575 +
72576 + if ((scanType != WMI_LONG_SCAN) && (scanType != WMI_SHORT_SCAN)) {
72577 + return A_EINVAL;
72578 + }
72579 +
72580 + osbuf = A_NETBUF_ALLOC(sizeof(*sc));
72581 + if (osbuf == NULL) {
72582 + return A_NO_MEMORY;
72583 + }
72584 +
72585 + A_NETBUF_PUT(osbuf, sizeof(*sc));
72586 +
72587 + sc = (WMI_START_SCAN_CMD *)(A_NETBUF_DATA(osbuf));
72588 + sc->scanType = scanType;
72589 + sc->forceFgScan = forceFgScan;
72590 + sc->isLegacy = isLegacy;
72591 + sc->homeDwellTime = homeDwellTime;
72592 + sc->forceScanInterval = forceScanInterval;
72593 +
72594 + return (wmi_cmd_send(wmip, osbuf, WMI_START_SCAN_CMDID, NO_SYNC_WMIFLAG));
72595 +}
72596 +
72597 +A_STATUS
72598 +wmi_scanparams_cmd(struct wmi_t *wmip, A_UINT16 fg_start_sec,
72599 + A_UINT16 fg_end_sec, A_UINT16 bg_sec,
72600 + A_UINT16 minact_chdw_msec, A_UINT16 maxact_chdw_msec,
72601 + A_UINT16 pas_chdw_msec,
72602 + A_UINT8 shScanRatio, A_UINT8 scanCtrlFlags,
72603 + A_UINT32 max_dfsch_act_time)
72604 +{
72605 + void *osbuf;
72606 + WMI_SCAN_PARAMS_CMD *sc;
72607 +
72608 + osbuf = A_NETBUF_ALLOC(sizeof(*sc));
72609 + if (osbuf == NULL) {
72610 + return A_NO_MEMORY;
72611 + }
72612 +
72613 + A_NETBUF_PUT(osbuf, sizeof(*sc));
72614 +
72615 + sc = (WMI_SCAN_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
72616 + A_MEMZERO(sc, sizeof(*sc));
72617 + sc->fg_start_period = fg_start_sec;
72618 + sc->fg_end_period = fg_end_sec;
72619 + sc->bg_period = bg_sec;
72620 + sc->minact_chdwell_time = minact_chdw_msec;
72621 + sc->maxact_chdwell_time = maxact_chdw_msec;
72622 + sc->pas_chdwell_time = pas_chdw_msec;
72623 + sc->shortScanRatio = shScanRatio;
72624 + sc->scanCtrlFlags = scanCtrlFlags;
72625 + sc->max_dfsch_act_time = max_dfsch_act_time;
72626 +
72627 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_SCAN_PARAMS_CMDID,
72628 + NO_SYNC_WMIFLAG));
72629 +}
72630 +
72631 +A_STATUS
72632 +wmi_bssfilter_cmd(struct wmi_t *wmip, A_UINT8 filter, A_UINT32 ieMask)
72633 +{
72634 + void *osbuf;
72635 + WMI_BSS_FILTER_CMD *cmd;
72636 +
72637 + if (filter >= LAST_BSS_FILTER) {
72638 + return A_EINVAL;
72639 + }
72640 +
72641 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72642 + if (osbuf == NULL) {
72643 + return A_NO_MEMORY;
72644 + }
72645 +
72646 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72647 +
72648 + cmd = (WMI_BSS_FILTER_CMD *)(A_NETBUF_DATA(osbuf));
72649 + A_MEMZERO(cmd, sizeof(*cmd));
72650 + cmd->bssFilter = filter;
72651 + cmd->ieMask = ieMask;
72652 +
72653 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_BSS_FILTER_CMDID,
72654 + NO_SYNC_WMIFLAG));
72655 +}
72656 +
72657 +A_STATUS
72658 +wmi_probedSsid_cmd(struct wmi_t *wmip, A_UINT8 index, A_UINT8 flag,
72659 + A_UINT8 ssidLength, A_UCHAR *ssid)
72660 +{
72661 + void *osbuf;
72662 + WMI_PROBED_SSID_CMD *cmd;
72663 +
72664 + if (index > MAX_PROBED_SSID_INDEX) {
72665 + return A_EINVAL;
72666 + }
72667 + if (ssidLength > sizeof(cmd->ssid)) {
72668 + return A_EINVAL;
72669 + }
72670 + if ((flag & (DISABLE_SSID_FLAG | ANY_SSID_FLAG)) && (ssidLength > 0)) {
72671 + return A_EINVAL;
72672 + }
72673 + if ((flag & SPECIFIC_SSID_FLAG) && !ssidLength) {
72674 + return A_EINVAL;
72675 + }
72676 +
72677 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72678 + if (osbuf == NULL) {
72679 + return A_NO_MEMORY;
72680 + }
72681 +
72682 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72683 +
72684 + cmd = (WMI_PROBED_SSID_CMD *)(A_NETBUF_DATA(osbuf));
72685 + A_MEMZERO(cmd, sizeof(*cmd));
72686 + cmd->entryIndex = index;
72687 + cmd->flag = flag;
72688 + cmd->ssidLength = ssidLength;
72689 + A_MEMCPY(cmd->ssid, ssid, ssidLength);
72690 +
72691 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_PROBED_SSID_CMDID,
72692 + NO_SYNC_WMIFLAG));
72693 +}
72694 +
72695 +A_STATUS
72696 +wmi_listeninterval_cmd(struct wmi_t *wmip, A_UINT16 listenInterval, A_UINT16 listenBeacons)
72697 +{
72698 + void *osbuf;
72699 + WMI_LISTEN_INT_CMD *cmd;
72700 +
72701 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72702 + if (osbuf == NULL) {
72703 + return A_NO_MEMORY;
72704 + }
72705 +
72706 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72707 +
72708 + cmd = (WMI_LISTEN_INT_CMD *)(A_NETBUF_DATA(osbuf));
72709 + A_MEMZERO(cmd, sizeof(*cmd));
72710 + cmd->listenInterval = listenInterval;
72711 + cmd->numBeacons = listenBeacons;
72712 +
72713 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_LISTEN_INT_CMDID,
72714 + NO_SYNC_WMIFLAG));
72715 +}
72716 +
72717 +A_STATUS
72718 +wmi_bmisstime_cmd(struct wmi_t *wmip, A_UINT16 bmissTime, A_UINT16 bmissBeacons)
72719 +{
72720 + void *osbuf;
72721 + WMI_BMISS_TIME_CMD *cmd;
72722 +
72723 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72724 + if (osbuf == NULL) {
72725 + return A_NO_MEMORY;
72726 + }
72727 +
72728 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72729 +
72730 + cmd = (WMI_BMISS_TIME_CMD *)(A_NETBUF_DATA(osbuf));
72731 + A_MEMZERO(cmd, sizeof(*cmd));
72732 + cmd->bmissTime = bmissTime;
72733 + cmd->numBeacons = bmissBeacons;
72734 +
72735 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_BMISS_TIME_CMDID,
72736 + NO_SYNC_WMIFLAG));
72737 +}
72738 +
72739 +A_STATUS
72740 +wmi_associnfo_cmd(struct wmi_t *wmip, A_UINT8 ieType,
72741 + A_UINT8 ieLen, A_UINT8 *ieInfo)
72742 +{
72743 + void *osbuf;
72744 + WMI_SET_ASSOC_INFO_CMD *cmd;
72745 + A_UINT16 cmdLen;
72746 +
72747 + cmdLen = sizeof(*cmd) + ieLen - 1;
72748 + osbuf = A_NETBUF_ALLOC(cmdLen);
72749 + if (osbuf == NULL) {
72750 + return A_NO_MEMORY;
72751 + }
72752 +
72753 + A_NETBUF_PUT(osbuf, cmdLen);
72754 +
72755 + cmd = (WMI_SET_ASSOC_INFO_CMD *)(A_NETBUF_DATA(osbuf));
72756 + A_MEMZERO(cmd, cmdLen);
72757 + cmd->ieType = ieType;
72758 + cmd->bufferSize = ieLen;
72759 + A_MEMCPY(cmd->assocInfo, ieInfo, ieLen);
72760 +
72761 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_ASSOC_INFO_CMDID,
72762 + NO_SYNC_WMIFLAG));
72763 +}
72764 +
72765 +A_STATUS
72766 +wmi_powermode_cmd(struct wmi_t *wmip, A_UINT8 powerMode)
72767 +{
72768 + void *osbuf;
72769 + WMI_POWER_MODE_CMD *cmd;
72770 +
72771 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72772 + if (osbuf == NULL) {
72773 + return A_NO_MEMORY;
72774 + }
72775 +
72776 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72777 +
72778 + cmd = (WMI_POWER_MODE_CMD *)(A_NETBUF_DATA(osbuf));
72779 + A_MEMZERO(cmd, sizeof(*cmd));
72780 + cmd->powerMode = powerMode;
72781 + wmip->wmi_powerMode = powerMode;
72782 +
72783 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_POWER_MODE_CMDID,
72784 + NO_SYNC_WMIFLAG));
72785 +}
72786 +
72787 +A_STATUS
72788 +wmi_ibsspmcaps_cmd(struct wmi_t *wmip, A_UINT8 pmEnable, A_UINT8 ttl,
72789 + A_UINT16 atim_windows, A_UINT16 timeout_value)
72790 +{
72791 + void *osbuf;
72792 + WMI_IBSS_PM_CAPS_CMD *cmd;
72793 +
72794 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72795 + if (osbuf == NULL) {
72796 + return A_NO_MEMORY;
72797 + }
72798 +
72799 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72800 +
72801 + cmd = (WMI_IBSS_PM_CAPS_CMD *)(A_NETBUF_DATA(osbuf));
72802 + A_MEMZERO(cmd, sizeof(*cmd));
72803 + cmd->power_saving = pmEnable;
72804 + cmd->ttl = ttl;
72805 + cmd->atim_windows = atim_windows;
72806 + cmd->timeout_value = timeout_value;
72807 +
72808 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_IBSS_PM_CAPS_CMDID,
72809 + NO_SYNC_WMIFLAG));
72810 +}
72811 +
72812 +A_STATUS
72813 +wmi_pmparams_cmd(struct wmi_t *wmip, A_UINT16 idlePeriod,
72814 + A_UINT16 psPollNum, A_UINT16 dtimPolicy)
72815 +{
72816 + void *osbuf;
72817 + WMI_POWER_PARAMS_CMD *pm;
72818 +
72819 + osbuf = A_NETBUF_ALLOC(sizeof(*pm));
72820 + if (osbuf == NULL) {
72821 + return A_NO_MEMORY;
72822 + }
72823 +
72824 + A_NETBUF_PUT(osbuf, sizeof(*pm));
72825 +
72826 + pm = (WMI_POWER_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
72827 + A_MEMZERO(pm, sizeof(*pm));
72828 + pm->idle_period = idlePeriod;
72829 + pm->pspoll_number = psPollNum;
72830 + pm->dtim_policy = dtimPolicy;
72831 +
72832 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_POWER_PARAMS_CMDID,
72833 + NO_SYNC_WMIFLAG));
72834 +}
72835 +
72836 +A_STATUS
72837 +wmi_disctimeout_cmd(struct wmi_t *wmip, A_UINT8 timeout)
72838 +{
72839 + void *osbuf;
72840 + WMI_DISC_TIMEOUT_CMD *cmd;
72841 +
72842 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72843 + if (osbuf == NULL) {
72844 + return A_NO_MEMORY;
72845 + }
72846 +
72847 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72848 +
72849 + cmd = (WMI_DISC_TIMEOUT_CMD *)(A_NETBUF_DATA(osbuf));
72850 + A_MEMZERO(cmd, sizeof(*cmd));
72851 + cmd->disconnectTimeout = timeout;
72852 +
72853 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_DISC_TIMEOUT_CMDID,
72854 + NO_SYNC_WMIFLAG));
72855 +}
72856 +
72857 +A_STATUS
72858 +wmi_addKey_cmd(struct wmi_t *wmip, A_UINT8 keyIndex, CRYPTO_TYPE keyType,
72859 + A_UINT8 keyUsage, A_UINT8 keyLength, A_UINT8 *keyRSC,
72860 + A_UINT8 *keyMaterial, A_UINT8 key_op_ctrl,
72861 + WMI_SYNC_FLAG sync_flag)
72862 +{
72863 + void *osbuf;
72864 + WMI_ADD_CIPHER_KEY_CMD *cmd;
72865 +
72866 + if ((keyIndex > WMI_MAX_KEY_INDEX) || (keyLength > WMI_MAX_KEY_LEN) ||
72867 + (keyMaterial == NULL))
72868 + {
72869 + return A_EINVAL;
72870 + }
72871 +
72872 + if ((WEP_CRYPT != keyType) && (NULL == keyRSC)) {
72873 + return A_EINVAL;
72874 + }
72875 +
72876 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72877 + if (osbuf == NULL) {
72878 + return A_NO_MEMORY;
72879 + }
72880 +
72881 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72882 +
72883 + cmd = (WMI_ADD_CIPHER_KEY_CMD *)(A_NETBUF_DATA(osbuf));
72884 + A_MEMZERO(cmd, sizeof(*cmd));
72885 + cmd->keyIndex = keyIndex;
72886 + cmd->keyType = keyType;
72887 + cmd->keyUsage = keyUsage;
72888 + cmd->keyLength = keyLength;
72889 + A_MEMCPY(cmd->key, keyMaterial, keyLength);
72890 + if (NULL != keyRSC) {
72891 + A_MEMCPY(cmd->keyRSC, keyRSC, sizeof(cmd->keyRSC));
72892 + }
72893 + cmd->key_op_ctrl = key_op_ctrl;
72894 +
72895 + return (wmi_cmd_send(wmip, osbuf, WMI_ADD_CIPHER_KEY_CMDID, sync_flag));
72896 +}
72897 +
72898 +A_STATUS
72899 +wmi_add_krk_cmd(struct wmi_t *wmip, A_UINT8 *krk)
72900 +{
72901 + void *osbuf;
72902 + WMI_ADD_KRK_CMD *cmd;
72903 +
72904 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72905 +
72906 + if (osbuf == NULL) {
72907 + return A_NO_MEMORY;
72908 + }
72909 +
72910 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72911 +
72912 + cmd = (WMI_ADD_KRK_CMD *)(A_NETBUF_DATA(osbuf));
72913 + A_MEMZERO(cmd, sizeof(*cmd));
72914 + A_MEMCPY(cmd->krk, krk, WMI_KRK_LEN);
72915 +
72916 + return (wmi_cmd_send(wmip, osbuf, WMI_ADD_KRK_CMDID, NO_SYNC_WMIFLAG));
72917 +}
72918 +
72919 +A_STATUS
72920 +wmi_delete_krk_cmd(struct wmi_t *wmip)
72921 +{
72922 + void *osbuf;
72923 +
72924 + osbuf = A_NETBUF_ALLOC(0);
72925 +
72926 + if (osbuf == NULL) {
72927 + return A_NO_MEMORY;
72928 + }
72929 +
72930 + return (wmi_cmd_send(wmip, osbuf, WMI_DELETE_KRK_CMDID, NO_SYNC_WMIFLAG));
72931 +}
72932 +
72933 +A_STATUS
72934 +wmi_deleteKey_cmd(struct wmi_t *wmip, A_UINT8 keyIndex)
72935 +{
72936 + void *osbuf;
72937 + WMI_DELETE_CIPHER_KEY_CMD *cmd;
72938 +
72939 + if (keyIndex > WMI_MAX_KEY_INDEX) {
72940 + return A_EINVAL;
72941 + }
72942 +
72943 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72944 + if (osbuf == NULL) {
72945 + return A_NO_MEMORY;
72946 + }
72947 +
72948 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72949 +
72950 + cmd = (WMI_DELETE_CIPHER_KEY_CMD *)(A_NETBUF_DATA(osbuf));
72951 + A_MEMZERO(cmd, sizeof(*cmd));
72952 + cmd->keyIndex = keyIndex;
72953 +
72954 + return (wmi_cmd_send(wmip, osbuf, WMI_DELETE_CIPHER_KEY_CMDID,
72955 + NO_SYNC_WMIFLAG));
72956 +}
72957 +
72958 +A_STATUS
72959 +wmi_setPmkid_cmd(struct wmi_t *wmip, A_UINT8 *bssid, A_UINT8 *pmkId,
72960 + A_BOOL set)
72961 +{
72962 + void *osbuf;
72963 + WMI_SET_PMKID_CMD *cmd;
72964 +
72965 + if (bssid == NULL) {
72966 + return A_EINVAL;
72967 + }
72968 +
72969 + if ((set == TRUE) && (pmkId == NULL)) {
72970 + return A_EINVAL;
72971 + }
72972 +
72973 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
72974 + if (osbuf == NULL) {
72975 + return A_NO_MEMORY;
72976 + }
72977 +
72978 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
72979 +
72980 + cmd = (WMI_SET_PMKID_CMD *)(A_NETBUF_DATA(osbuf));
72981 + A_MEMCPY(cmd->bssid, bssid, sizeof(cmd->bssid));
72982 + if (set == TRUE) {
72983 + A_MEMCPY(cmd->pmkid, pmkId, sizeof(cmd->pmkid));
72984 + cmd->enable = PMKID_ENABLE;
72985 + } else {
72986 + A_MEMZERO(cmd->pmkid, sizeof(cmd->pmkid));
72987 + cmd->enable = PMKID_DISABLE;
72988 + }
72989 +
72990 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_PMKID_CMDID, NO_SYNC_WMIFLAG));
72991 +}
72992 +
72993 +A_STATUS
72994 +wmi_set_tkip_countermeasures_cmd(struct wmi_t *wmip, A_BOOL en)
72995 +{
72996 + void *osbuf;
72997 + WMI_SET_TKIP_COUNTERMEASURES_CMD *cmd;
72998 +
72999 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73000 + if (osbuf == NULL) {
73001 + return A_NO_MEMORY;
73002 + }
73003 +
73004 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73005 +
73006 + cmd = (WMI_SET_TKIP_COUNTERMEASURES_CMD *)(A_NETBUF_DATA(osbuf));
73007 + cmd->cm_en = (en == TRUE)? WMI_TKIP_CM_ENABLE : WMI_TKIP_CM_DISABLE;
73008 +
73009 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_TKIP_COUNTERMEASURES_CMDID,
73010 + NO_SYNC_WMIFLAG));
73011 +}
73012 +
73013 +A_STATUS
73014 +wmi_set_akmp_params_cmd(struct wmi_t *wmip,
73015 + WMI_SET_AKMP_PARAMS_CMD *akmpParams)
73016 +{
73017 + void *osbuf;
73018 + WMI_SET_AKMP_PARAMS_CMD *cmd;
73019 +
73020 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73021 + if (osbuf == NULL) {
73022 + return A_NO_MEMORY;
73023 + }
73024 +
73025 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73026 + cmd = (WMI_SET_AKMP_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
73027 + cmd->akmpInfo = akmpParams->akmpInfo;
73028 +
73029 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_AKMP_PARAMS_CMDID,
73030 + NO_SYNC_WMIFLAG));
73031 +}
73032 +
73033 +A_STATUS
73034 +wmi_set_pmkid_list_cmd(struct wmi_t *wmip,
73035 + WMI_SET_PMKID_LIST_CMD *pmkInfo)
73036 +{
73037 + void *osbuf;
73038 + WMI_SET_PMKID_LIST_CMD *cmd;
73039 + A_UINT16 cmdLen;
73040 + A_UINT8 i;
73041 +
73042 + cmdLen = sizeof(pmkInfo->numPMKID) +
73043 + pmkInfo->numPMKID * sizeof(WMI_PMKID);
73044 +
73045 + osbuf = A_NETBUF_ALLOC(cmdLen);
73046 +
73047 + if (osbuf == NULL) {
73048 + return A_NO_MEMORY;
73049 + }
73050 +
73051 + A_NETBUF_PUT(osbuf, cmdLen);
73052 + cmd = (WMI_SET_PMKID_LIST_CMD *)(A_NETBUF_DATA(osbuf));
73053 + cmd->numPMKID = pmkInfo->numPMKID;
73054 +
73055 + for (i = 0; i < cmd->numPMKID; i++) {
73056 + A_MEMCPY(&cmd->pmkidList[i], &pmkInfo->pmkidList[i],
73057 + WMI_PMKID_LEN);
73058 + }
73059 +
73060 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_PMKID_LIST_CMDID,
73061 + NO_SYNC_WMIFLAG));
73062 +}
73063 +
73064 +A_STATUS
73065 +wmi_get_pmkid_list_cmd(struct wmi_t *wmip)
73066 +{
73067 + void *osbuf;
73068 +
73069 + osbuf = A_NETBUF_ALLOC(0); /* no payload */
73070 + if (osbuf == NULL) {
73071 + return A_NO_MEMORY;
73072 + }
73073 +
73074 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_PMKID_LIST_CMDID,
73075 + NO_SYNC_WMIFLAG));
73076 +}
73077 +
73078 +A_STATUS
73079 +wmi_dataSync_send(struct wmi_t *wmip, void *osbuf, WMI_PRI_STREAM_ID streamID)
73080 +{
73081 + WMI_DATA_HDR *dtHdr;
73082 +
73083 + A_ASSERT(streamID != WMI_CONTROL_PRI);
73084 + A_ASSERT(osbuf != NULL);
73085 +
73086 + if (A_NETBUF_PUSH(osbuf, sizeof(WMI_DATA_HDR)) != A_OK) {
73087 + return A_NO_MEMORY;
73088 + }
73089 +
73090 + dtHdr = (WMI_DATA_HDR *)A_NETBUF_DATA(osbuf);
73091 + dtHdr->info =
73092 + (SYNC_MSGTYPE & WMI_DATA_HDR_MSG_TYPE_MASK) << WMI_DATA_HDR_MSG_TYPE_SHIFT;
73093 +
73094 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter - streamID %d\n", DBGARG, streamID));
73095 +
73096 + return (A_WMI_CONTROL_TX(wmip->wmi_devt, osbuf, streamID));
73097 +}
73098 +
73099 +typedef struct _WMI_DATA_SYNC_BUFS {
73100 + A_UINT8 trafficClass;
73101 + void *osbuf;
73102 +}WMI_DATA_SYNC_BUFS;
73103 +
73104 +static A_STATUS
73105 +wmi_sync_point(struct wmi_t *wmip)
73106 +{
73107 + void *cmd_osbuf;
73108 + WMI_DATA_SYNC_BUFS dataSyncBufs[WMM_NUM_AC];
73109 + A_UINT8 i,numPriStreams=0;
73110 + A_STATUS status;
73111 +
73112 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
73113 +
73114 + memset(dataSyncBufs,0,sizeof(dataSyncBufs));
73115 +
73116 + /* lock out while we walk through the priority list and assemble our local array */
73117 + LOCK_WMI(wmip);
73118 +
73119 + for (i=0; i < WMM_NUM_AC ; i++) {
73120 + if (wmip->wmi_fatPipeExists & (1 << i)) {
73121 + numPriStreams++;
73122 + dataSyncBufs[numPriStreams-1].trafficClass = i;
73123 + }
73124 + }
73125 +
73126 + UNLOCK_WMI(wmip);
73127 +
73128 + /* dataSyncBufs is now filled with entries (starting at index 0) containing valid streamIDs */
73129 +
73130 + do {
73131 + /*
73132 + * We allocate all network buffers needed so we will be able to
73133 + * send all required frames.
73134 + */
73135 + cmd_osbuf = A_NETBUF_ALLOC(0); /* no payload */
73136 + if (cmd_osbuf == NULL) {
73137 + status = A_NO_MEMORY;
73138 + break;
73139 + }
73140 +
73141 + for (i=0; i < numPriStreams ; i++) {
73142 + dataSyncBufs[i].osbuf = A_NETBUF_ALLOC(0);
73143 + if (dataSyncBufs[i].osbuf == NULL) {
73144 + status = A_NO_MEMORY;
73145 + break;
73146 + }
73147 + } //end for
73148 +
73149 + /*
73150 + * Send sync cmd followed by sync data messages on all endpoints being
73151 + * used
73152 + */
73153 + status = wmi_cmd_send(wmip, cmd_osbuf, WMI_SYNCHRONIZE_CMDID,
73154 + NO_SYNC_WMIFLAG);
73155 +
73156 + if (A_FAILED(status)) {
73157 + break;
73158 + }
73159 + /* cmd buffer sent, we no longer own it */
73160 + cmd_osbuf = NULL;
73161 +
73162 + for(i=0; i < numPriStreams; i++) {
73163 + A_ASSERT(dataSyncBufs[i].osbuf != NULL);
73164 +
73165 + status = wmi_dataSync_send(wmip, dataSyncBufs[i].osbuf,
73166 + WMI_ACCESSCATEGORY_WMISTREAM(wmip,dataSyncBufs[i].trafficClass));
73167 +
73168 + if (A_FAILED(status)) {
73169 + break;
73170 + }
73171 + /* we don't own this buffer anymore, NULL it out of the array so it
73172 + * won't get cleaned up */
73173 + dataSyncBufs[i].osbuf = NULL;
73174 + } //end for
73175 +
73176 + } while(FALSE);
73177 +
73178 + /* free up any resources left over (possibly due to an error) */
73179 +
73180 + if (cmd_osbuf != NULL) {
73181 + A_NETBUF_FREE(cmd_osbuf);
73182 + }
73183 +
73184 + for (i = 0; i < numPriStreams; i++) {
73185 + if (dataSyncBufs[i].osbuf != NULL) {
73186 + A_NETBUF_FREE(dataSyncBufs[i].osbuf);
73187 + }
73188 + }
73189 +
73190 + return (status);
73191 +}
73192 +
73193 +A_STATUS
73194 +wmi_create_pstream_cmd(struct wmi_t *wmip, WMI_CREATE_PSTREAM_CMD *params)
73195 +{
73196 + void *osbuf;
73197 + WMI_CREATE_PSTREAM_CMD *cmd;
73198 + A_UINT16 activeTsids=0;
73199 + A_UINT8 fatPipeExistsForAC=0;
73200 +
73201 + /* Validate all the parameters. */
73202 + if( !((params->userPriority < 8) &&
73203 + (params->userPriority <= 0x7) &&
73204 + (convert_userPriority_to_trafficClass(params->userPriority) == params->trafficClass) &&
73205 + (params->trafficDirection == UPLINK_TRAFFIC ||
73206 + params->trafficDirection == DNLINK_TRAFFIC ||
73207 + params->trafficDirection == BIDIR_TRAFFIC) &&
73208 + (params->trafficType == TRAFFIC_TYPE_APERIODIC ||
73209 + params->trafficType == TRAFFIC_TYPE_PERIODIC ) &&
73210 + (params->voicePSCapability == DISABLE_FOR_THIS_AC ||
73211 + params->voicePSCapability == ENABLE_FOR_THIS_AC ||
73212 + params->voicePSCapability == ENABLE_FOR_ALL_AC) &&
73213 + (params->tsid == WMI_IMPLICIT_PSTREAM || params->tsid <= WMI_MAX_THINSTREAM)) )
73214 + {
73215 + return A_EINVAL;
73216 + }
73217 +
73218 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73219 + if (osbuf == NULL) {
73220 + return A_NO_MEMORY;
73221 + }
73222 +
73223 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73224 +
73225 + A_DPRINTF(DBG_WMI,
73226 + (DBGFMT "Sending create_pstream_cmd: ac=%d tsid:%d\n", DBGARG,
73227 + params->trafficClass, params->tsid));
73228 +
73229 + cmd = (WMI_CREATE_PSTREAM_CMD *)(A_NETBUF_DATA(osbuf));
73230 + A_MEMZERO(cmd, sizeof(*cmd));
73231 + A_MEMCPY(cmd, params, sizeof(*cmd));
73232 +
73233 + /* this is an implicitly created Fat pipe */
73234 + if (params->tsid == WMI_IMPLICIT_PSTREAM) {
73235 + LOCK_WMI(wmip);
73236 + fatPipeExistsForAC = (wmip->wmi_fatPipeExists & (1 << params->trafficClass));
73237 + wmip->wmi_fatPipeExists |= (1<<params->trafficClass);
73238 + UNLOCK_WMI(wmip);
73239 + } else {
73240 + /* this is an explicitly created thin stream within a fat pipe */
73241 + LOCK_WMI(wmip);
73242 + fatPipeExistsForAC = (wmip->wmi_fatPipeExists & (1 << params->trafficClass));
73243 + activeTsids = wmip->wmi_streamExistsForAC[params->trafficClass];
73244 + wmip->wmi_streamExistsForAC[params->trafficClass] |= (1<<params->tsid);
73245 + /* if a thinstream becomes active, the fat pipe automatically
73246 + * becomes active
73247 + */
73248 + wmip->wmi_fatPipeExists |= (1<<params->trafficClass);
73249 + UNLOCK_WMI(wmip);
73250 + }
73251 +
73252 + /* Indicate activty change to driver layer only if this is the
73253 + * first TSID to get created in this AC explicitly or an implicit
73254 + * fat pipe is getting created.
73255 + */
73256 + if (!fatPipeExistsForAC) {
73257 + A_WMI_STREAM_TX_ACTIVE(wmip->wmi_devt, params->trafficClass);
73258 + }
73259 +
73260 + /* mike: should be SYNC_BEFORE_WMIFLAG */
73261 + return (wmi_cmd_send(wmip, osbuf, WMI_CREATE_PSTREAM_CMDID,
73262 + NO_SYNC_WMIFLAG));
73263 +}
73264 +
73265 +A_STATUS
73266 +wmi_delete_pstream_cmd(struct wmi_t *wmip, A_UINT8 trafficClass, A_UINT8 tsid)
73267 +{
73268 + void *osbuf;
73269 + WMI_DELETE_PSTREAM_CMD *cmd;
73270 + A_STATUS status;
73271 + A_UINT16 activeTsids=0;
73272 +
73273 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73274 + if (osbuf == NULL) {
73275 + return A_NO_MEMORY;
73276 + }
73277 +
73278 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73279 +
73280 + cmd = (WMI_DELETE_PSTREAM_CMD *)(A_NETBUF_DATA(osbuf));
73281 + A_MEMZERO(cmd, sizeof(*cmd));
73282 +
73283 + cmd->trafficClass = trafficClass;
73284 + cmd->tsid = tsid;
73285 +
73286 + LOCK_WMI(wmip);
73287 + activeTsids = wmip->wmi_streamExistsForAC[trafficClass];
73288 + UNLOCK_WMI(wmip);
73289 +
73290 + /* Check if the tsid was created & exists */
73291 + if (!(activeTsids & (1<<tsid))) {
73292 +
73293 + A_DPRINTF(DBG_WMI,
73294 + (DBGFMT "TSID %d does'nt exist for trafficClass: %d\n", DBGARG, tsid, trafficClass));
73295 + /* TODO: return a more appropriate err code */
73296 + return A_ERROR;
73297 + }
73298 +
73299 + A_DPRINTF(DBG_WMI,
73300 + (DBGFMT "Sending delete_pstream_cmd: trafficClass: %d tsid=%d\n", DBGARG, trafficClass, tsid));
73301 +
73302 + status = (wmi_cmd_send(wmip, osbuf, WMI_DELETE_PSTREAM_CMDID,
73303 + SYNC_BEFORE_WMIFLAG));
73304 +
73305 + LOCK_WMI(wmip);
73306 + wmip->wmi_streamExistsForAC[trafficClass] &= ~(1<<tsid);
73307 + activeTsids = wmip->wmi_streamExistsForAC[trafficClass];
73308 + UNLOCK_WMI(wmip);
73309 +
73310 +
73311 + /* Indicate stream inactivity to driver layer only if all tsids
73312 + * within this AC are deleted.
73313 + */
73314 + if(!activeTsids) {
73315 + A_WMI_STREAM_TX_INACTIVE(wmip->wmi_devt, trafficClass);
73316 + wmip->wmi_fatPipeExists &= ~(1<<trafficClass);
73317 + }
73318 +
73319 + return status;
73320 +}
73321 +
73322 +/*
73323 + * used to set the bit rate. rate is in Kbps. If rate == -1
73324 + * then auto selection is used.
73325 + */
73326 +A_STATUS
73327 +wmi_set_bitrate_cmd(struct wmi_t *wmip, A_INT32 rate)
73328 +{
73329 + void *osbuf;
73330 + WMI_BIT_RATE_CMD *cmd;
73331 + A_INT8 index;
73332 +
73333 + if (rate != -1) {
73334 + index = wmi_validate_bitrate(wmip, rate);
73335 + if(index == A_EINVAL){
73336 + return A_EINVAL;
73337 + }
73338 + } else {
73339 + index = -1;
73340 + }
73341 +
73342 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73343 + if (osbuf == NULL) {
73344 + return A_NO_MEMORY;
73345 + }
73346 +
73347 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73348 +
73349 + cmd = (WMI_BIT_RATE_CMD *)(A_NETBUF_DATA(osbuf));
73350 + A_MEMZERO(cmd, sizeof(*cmd));
73351 +
73352 + cmd->rateIndex = index;
73353 +
73354 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_BITRATE_CMDID, NO_SYNC_WMIFLAG));
73355 +}
73356 +
73357 +A_STATUS
73358 +wmi_get_bitrate_cmd(struct wmi_t *wmip)
73359 +{
73360 + void *osbuf;
73361 +
73362 + osbuf = A_NETBUF_ALLOC(0); /* no payload */
73363 + if (osbuf == NULL) {
73364 + return A_NO_MEMORY;
73365 + }
73366 +
73367 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_BITRATE_CMDID, NO_SYNC_WMIFLAG));
73368 +}
73369 +
73370 +/*
73371 + * Returns TRUE iff the given rate index is legal in the current PHY mode.
73372 + */
73373 +A_BOOL
73374 +wmi_is_bitrate_index_valid(struct wmi_t *wmip, A_UINT32 rateIndex)
73375 +{
73376 + WMI_PHY_MODE phyMode = wmip->wmi_phyMode;
73377 + A_BOOL isValid = TRUE;
73378 + switch(phyMode) {
73379 + case WMI_11A_MODE:
73380 + if ((rateIndex < MODE_A_SUPPORT_RATE_START) || (rateIndex > MODE_A_SUPPORT_RATE_STOP)) {
73381 + isValid = FALSE;
73382 + }
73383 + break;
73384 +
73385 + case WMI_11B_MODE:
73386 + if ((rateIndex < MODE_B_SUPPORT_RATE_START) || (rateIndex > MODE_B_SUPPORT_RATE_STOP)) {
73387 + isValid = FALSE;
73388 + }
73389 + break;
73390 +
73391 + case WMI_11GONLY_MODE:
73392 + if ((rateIndex < MODE_GONLY_SUPPORT_RATE_START) || (rateIndex > MODE_GONLY_SUPPORT_RATE_STOP)) {
73393 + isValid = FALSE;
73394 + }
73395 + break;
73396 +
73397 + case WMI_11G_MODE:
73398 + case WMI_11AG_MODE:
73399 + if ((rateIndex < MODE_G_SUPPORT_RATE_START) || (rateIndex > MODE_G_SUPPORT_RATE_STOP)) {
73400 + isValid = FALSE;
73401 + }
73402 + break;
73403 +
73404 + default:
73405 + A_ASSERT(FALSE);
73406 + break;
73407 + }
73408 +
73409 + return isValid;
73410 +}
73411 +
73412 +A_INT8
73413 +wmi_validate_bitrate(struct wmi_t *wmip, A_INT32 rate)
73414 +{
73415 + A_INT8 i;
73416 + if (rate != -1)
73417 + {
73418 + for (i=0;;i++)
73419 + {
73420 + if (wmi_rateTable[(A_UINT32) i] == 0) {
73421 + return A_EINVAL;
73422 + }
73423 + if (wmi_rateTable[(A_UINT32) i] == rate) {
73424 + break;
73425 + }
73426 + }
73427 + }
73428 + else{
73429 + i = -1;
73430 + }
73431 +
73432 + if(wmi_is_bitrate_index_valid(wmip, i) != TRUE) {
73433 + return A_EINVAL;
73434 + }
73435 +
73436 + return i;
73437 +}
73438 +
73439 +A_STATUS
73440 +wmi_set_fixrates_cmd(struct wmi_t *wmip, A_INT16 fixRatesMask)
73441 +{
73442 + void *osbuf;
73443 + WMI_FIX_RATES_CMD *cmd;
73444 + A_UINT32 rateIndex;
73445 +
73446 + /* Make sure all rates in the mask are valid in the current PHY mode */
73447 + for(rateIndex = 0; rateIndex < MAX_NUMBER_OF_SUPPORT_RATES; rateIndex++) {
73448 + if((1 << rateIndex) & (A_UINT32)fixRatesMask) {
73449 + if(wmi_is_bitrate_index_valid(wmip, rateIndex) != TRUE) {
73450 + A_DPRINTF(DBG_WMI, (DBGFMT "Set Fix Rates command failed: Given rate is illegal in current PHY mode\n", DBGARG));
73451 + return A_EINVAL;
73452 + }
73453 + }
73454 + }
73455 +
73456 +
73457 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73458 + if (osbuf == NULL) {
73459 + return A_NO_MEMORY;
73460 + }
73461 +
73462 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73463 +
73464 + cmd = (WMI_FIX_RATES_CMD *)(A_NETBUF_DATA(osbuf));
73465 + A_MEMZERO(cmd, sizeof(*cmd));
73466 +
73467 + cmd->fixRateMask = fixRatesMask;
73468 +
73469 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_FIXRATES_CMDID, NO_SYNC_WMIFLAG));
73470 +}
73471 +
73472 +A_STATUS
73473 +wmi_get_ratemask_cmd(struct wmi_t *wmip)
73474 +{
73475 + void *osbuf;
73476 +
73477 + osbuf = A_NETBUF_ALLOC(0); /* no payload */
73478 + if (osbuf == NULL) {
73479 + return A_NO_MEMORY;
73480 + }
73481 +
73482 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_FIXRATES_CMDID, NO_SYNC_WMIFLAG));
73483 +}
73484 +
73485 +A_STATUS
73486 +wmi_get_channelList_cmd(struct wmi_t *wmip)
73487 +{
73488 + void *osbuf;
73489 +
73490 + osbuf = A_NETBUF_ALLOC(0); /* no payload */
73491 + if (osbuf == NULL) {
73492 + return A_NO_MEMORY;
73493 + }
73494 +
73495 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_CHANNEL_LIST_CMDID,
73496 + NO_SYNC_WMIFLAG));
73497 +}
73498 +
73499 +/*
73500 + * used to generate a wmi sey channel Parameters cmd.
73501 + * mode should always be specified and corresponds to the phy mode of the
73502 + * wlan.
73503 + * numChan should alway sbe specified. If zero indicates that all available
73504 + * channels should be used.
73505 + * channelList is an array of channel frequencies (in Mhz) which the radio
73506 + * should limit its operation to. It should be NULL if numChan == 0. Size of
73507 + * array should correspond to numChan entries.
73508 + */
73509 +A_STATUS
73510 +wmi_set_channelParams_cmd(struct wmi_t *wmip, A_UINT8 scanParam,
73511 + WMI_PHY_MODE mode, A_INT8 numChan,
73512 + A_UINT16 *channelList)
73513 +{
73514 + void *osbuf;
73515 + WMI_CHANNEL_PARAMS_CMD *cmd;
73516 + A_INT8 size;
73517 +
73518 + size = sizeof (*cmd);
73519 +
73520 + if (numChan) {
73521 + if (numChan > WMI_MAX_CHANNELS) {
73522 + return A_EINVAL;
73523 + }
73524 + size += sizeof(A_UINT16) * (numChan - 1);
73525 + }
73526 +
73527 + osbuf = A_NETBUF_ALLOC(size);
73528 + if (osbuf == NULL) {
73529 + return A_NO_MEMORY;
73530 + }
73531 +
73532 + A_NETBUF_PUT(osbuf, size);
73533 +
73534 + cmd = (WMI_CHANNEL_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
73535 + A_MEMZERO(cmd, size);
73536 +
73537 + wmip->wmi_phyMode = mode;
73538 + cmd->scanParam = scanParam;
73539 + cmd->phyMode = mode;
73540 + cmd->numChannels = numChan;
73541 + A_MEMCPY(cmd->channelList, channelList, numChan * sizeof(A_UINT16));
73542 +
73543 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_CHANNEL_PARAMS_CMDID,
73544 + NO_SYNC_WMIFLAG));
73545 +}
73546 +
73547 +A_STATUS
73548 +wmi_set_rssi_threshold_params(struct wmi_t *wmip,
73549 + WMI_RSSI_THRESHOLD_PARAMS_CMD *rssiCmd)
73550 +{
73551 + void *osbuf;
73552 + A_INT8 size;
73553 + WMI_RSSI_THRESHOLD_PARAMS_CMD *cmd;
73554 + /* These values are in ascending order */
73555 + if( rssiCmd->thresholdAbove6_Val <= rssiCmd->thresholdAbove5_Val ||
73556 + rssiCmd->thresholdAbove5_Val <= rssiCmd->thresholdAbove4_Val ||
73557 + rssiCmd->thresholdAbove4_Val <= rssiCmd->thresholdAbove3_Val ||
73558 + rssiCmd->thresholdAbove3_Val <= rssiCmd->thresholdAbove2_Val ||
73559 + rssiCmd->thresholdAbove2_Val <= rssiCmd->thresholdAbove1_Val ||
73560 + rssiCmd->thresholdBelow6_Val <= rssiCmd->thresholdBelow5_Val ||
73561 + rssiCmd->thresholdBelow5_Val <= rssiCmd->thresholdBelow4_Val ||
73562 + rssiCmd->thresholdBelow4_Val <= rssiCmd->thresholdBelow3_Val ||
73563 + rssiCmd->thresholdBelow3_Val <= rssiCmd->thresholdBelow2_Val ||
73564 + rssiCmd->thresholdBelow2_Val <= rssiCmd->thresholdBelow1_Val) {
73565 +
73566 + return A_EINVAL;
73567 + }
73568 +
73569 + size = sizeof (*cmd);
73570 +
73571 + osbuf = A_NETBUF_ALLOC(size);
73572 + if (osbuf == NULL) {
73573 + return A_NO_MEMORY;
73574 + }
73575 +
73576 + A_NETBUF_PUT(osbuf, size);
73577 +
73578 + cmd = (WMI_RSSI_THRESHOLD_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
73579 + A_MEMZERO(cmd, size);
73580 + A_MEMCPY(cmd, rssiCmd, sizeof(WMI_RSSI_THRESHOLD_PARAMS_CMD));
73581 +
73582 + return (wmi_cmd_send(wmip, osbuf, WMI_RSSI_THRESHOLD_PARAMS_CMDID,
73583 + NO_SYNC_WMIFLAG));
73584 +}
73585 +
73586 +A_STATUS
73587 +wmi_set_host_sleep_mode_cmd(struct wmi_t *wmip,
73588 + WMI_SET_HOST_SLEEP_MODE_CMD *hostModeCmd)
73589 +{
73590 + void *osbuf;
73591 + A_INT8 size;
73592 + WMI_SET_HOST_SLEEP_MODE_CMD *cmd;
73593 +
73594 + if( hostModeCmd->awake == hostModeCmd->asleep) {
73595 + return A_EINVAL;
73596 + }
73597 +
73598 + size = sizeof (*cmd);
73599 +
73600 + osbuf = A_NETBUF_ALLOC(size);
73601 + if (osbuf == NULL) {
73602 + return A_NO_MEMORY;
73603 + }
73604 +
73605 + A_NETBUF_PUT(osbuf, size);
73606 +
73607 + cmd = (WMI_SET_HOST_SLEEP_MODE_CMD *)(A_NETBUF_DATA(osbuf));
73608 + A_MEMZERO(cmd, size);
73609 + A_MEMCPY(cmd, hostModeCmd, sizeof(WMI_SET_HOST_SLEEP_MODE_CMD));
73610 +
73611 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_HOST_SLEEP_MODE_CMDID,
73612 + NO_SYNC_WMIFLAG));
73613 +}
73614 +
73615 +A_STATUS
73616 +wmi_set_wow_mode_cmd(struct wmi_t *wmip,
73617 + WMI_SET_WOW_MODE_CMD *wowModeCmd)
73618 +{
73619 + void *osbuf;
73620 + A_INT8 size;
73621 + WMI_SET_WOW_MODE_CMD *cmd;
73622 +
73623 + size = sizeof (*cmd);
73624 +
73625 + osbuf = A_NETBUF_ALLOC(size);
73626 + if (osbuf == NULL) {
73627 + return A_NO_MEMORY;
73628 + }
73629 +
73630 + A_NETBUF_PUT(osbuf, size);
73631 +
73632 + cmd = (WMI_SET_WOW_MODE_CMD *)(A_NETBUF_DATA(osbuf));
73633 + A_MEMZERO(cmd, size);
73634 + A_MEMCPY(cmd, wowModeCmd, sizeof(WMI_SET_WOW_MODE_CMD));
73635 +
73636 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_WOW_MODE_CMDID,
73637 + NO_SYNC_WMIFLAG));
73638 +
73639 +}
73640 +
73641 +A_STATUS
73642 +wmi_get_wow_list_cmd(struct wmi_t *wmip,
73643 + WMI_GET_WOW_LIST_CMD *wowListCmd)
73644 +{
73645 + void *osbuf;
73646 + A_INT8 size;
73647 + WMI_GET_WOW_LIST_CMD *cmd;
73648 +
73649 + size = sizeof (*cmd);
73650 +
73651 + osbuf = A_NETBUF_ALLOC(size);
73652 + if (osbuf == NULL) {
73653 + return A_NO_MEMORY;
73654 + }
73655 +
73656 + A_NETBUF_PUT(osbuf, size);
73657 +
73658 + cmd = (WMI_GET_WOW_LIST_CMD *)(A_NETBUF_DATA(osbuf));
73659 + A_MEMZERO(cmd, size);
73660 + A_MEMCPY(cmd, wowListCmd, sizeof(WMI_GET_WOW_LIST_CMD));
73661 +
73662 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_WOW_LIST_CMDID,
73663 + NO_SYNC_WMIFLAG));
73664 +
73665 +}
73666 +
73667 +static A_STATUS
73668 +wmi_get_wow_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
73669 +{
73670 + WMI_GET_WOW_LIST_REPLY *reply;
73671 +
73672 + if (len < sizeof(WMI_GET_WOW_LIST_REPLY)) {
73673 + return A_EINVAL;
73674 + }
73675 + reply = (WMI_GET_WOW_LIST_REPLY *)datap;
73676 +
73677 + A_WMI_WOW_LIST_EVENT(wmip->wmi_devt, reply->num_filters,
73678 + reply);
73679 +
73680 + return A_OK;
73681 +}
73682 +
73683 +A_STATUS wmi_add_wow_pattern_cmd(struct wmi_t *wmip,
73684 + WMI_ADD_WOW_PATTERN_CMD *addWowCmd,
73685 + A_UINT8* pattern, A_UINT8* mask,
73686 + A_UINT8 pattern_size)
73687 +{
73688 + void *osbuf;
73689 + A_INT8 size;
73690 + WMI_ADD_WOW_PATTERN_CMD *cmd;
73691 + A_UINT8 *filter_mask = NULL;
73692 +
73693 + size = sizeof (*cmd);
73694 +
73695 + size += ((2 * addWowCmd->filter_size)* sizeof(A_UINT8));
73696 + osbuf = A_NETBUF_ALLOC(size);
73697 + if (osbuf == NULL) {
73698 + return A_NO_MEMORY;
73699 + }
73700 +
73701 + A_NETBUF_PUT(osbuf, size);
73702 +
73703 + cmd = (WMI_ADD_WOW_PATTERN_CMD *)(A_NETBUF_DATA(osbuf));
73704 + cmd->filter_list_id = addWowCmd->filter_list_id;
73705 + cmd->filter_offset = addWowCmd->filter_offset;
73706 + cmd->filter_size = addWowCmd->filter_size;
73707 +
73708 + A_MEMCPY(cmd->filter, pattern, addWowCmd->filter_size);
73709 +
73710 + filter_mask = (A_UINT8*)(cmd->filter + cmd->filter_size);
73711 + A_MEMCPY(filter_mask, mask, addWowCmd->filter_size);
73712 +
73713 +
73714 + return (wmi_cmd_send(wmip, osbuf, WMI_ADD_WOW_PATTERN_CMDID,
73715 + NO_SYNC_WMIFLAG));
73716 +}
73717 +
73718 +A_STATUS
73719 +wmi_del_wow_pattern_cmd(struct wmi_t *wmip,
73720 + WMI_DEL_WOW_PATTERN_CMD *delWowCmd)
73721 +{
73722 + void *osbuf;
73723 + A_INT8 size;
73724 + WMI_DEL_WOW_PATTERN_CMD *cmd;
73725 +
73726 + size = sizeof (*cmd);
73727 +
73728 + osbuf = A_NETBUF_ALLOC(size);
73729 + if (osbuf == NULL) {
73730 + return A_NO_MEMORY;
73731 + }
73732 +
73733 + A_NETBUF_PUT(osbuf, size);
73734 +
73735 + cmd = (WMI_DEL_WOW_PATTERN_CMD *)(A_NETBUF_DATA(osbuf));
73736 + A_MEMZERO(cmd, size);
73737 + A_MEMCPY(cmd, delWowCmd, sizeof(WMI_DEL_WOW_PATTERN_CMD));
73738 +
73739 + return (wmi_cmd_send(wmip, osbuf, WMI_DEL_WOW_PATTERN_CMDID,
73740 + NO_SYNC_WMIFLAG));
73741 +
73742 +}
73743 +
73744 +A_STATUS
73745 +wmi_set_snr_threshold_params(struct wmi_t *wmip,
73746 + WMI_SNR_THRESHOLD_PARAMS_CMD *snrCmd)
73747 +{
73748 + void *osbuf;
73749 + A_INT8 size;
73750 + WMI_SNR_THRESHOLD_PARAMS_CMD *cmd;
73751 + /* These values are in ascending order */
73752 + if( snrCmd->thresholdAbove4_Val <= snrCmd->thresholdAbove3_Val ||
73753 + snrCmd->thresholdAbove3_Val <= snrCmd->thresholdAbove2_Val ||
73754 + snrCmd->thresholdAbove2_Val <= snrCmd->thresholdAbove1_Val ||
73755 + snrCmd->thresholdBelow4_Val <= snrCmd->thresholdBelow3_Val ||
73756 + snrCmd->thresholdBelow3_Val <= snrCmd->thresholdBelow2_Val ||
73757 + snrCmd->thresholdBelow2_Val <= snrCmd->thresholdBelow1_Val) {
73758 +
73759 + return A_EINVAL;
73760 + }
73761 +
73762 + size = sizeof (*cmd);
73763 +
73764 + osbuf = A_NETBUF_ALLOC(size);
73765 + if (osbuf == NULL) {
73766 + return A_NO_MEMORY;
73767 + }
73768 +
73769 + A_NETBUF_PUT(osbuf, size);
73770 +
73771 + cmd = (WMI_SNR_THRESHOLD_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
73772 + A_MEMZERO(cmd, size);
73773 + A_MEMCPY(cmd, snrCmd, sizeof(WMI_SNR_THRESHOLD_PARAMS_CMD));
73774 +
73775 + return (wmi_cmd_send(wmip, osbuf, WMI_SNR_THRESHOLD_PARAMS_CMDID,
73776 + NO_SYNC_WMIFLAG));
73777 +}
73778 +
73779 +A_STATUS
73780 +wmi_clr_rssi_snr(struct wmi_t *wmip)
73781 +{
73782 + void *osbuf;
73783 +
73784 + osbuf = A_NETBUF_ALLOC(sizeof(int));
73785 + if (osbuf == NULL) {
73786 + return A_NO_MEMORY;
73787 + }
73788 +
73789 + return (wmi_cmd_send(wmip, osbuf, WMI_CLR_RSSI_SNR_CMDID,
73790 + NO_SYNC_WMIFLAG));
73791 +}
73792 +
73793 +A_STATUS
73794 +wmi_set_lq_threshold_params(struct wmi_t *wmip,
73795 + WMI_LQ_THRESHOLD_PARAMS_CMD *lqCmd)
73796 +{
73797 + void *osbuf;
73798 + A_INT8 size;
73799 + WMI_LQ_THRESHOLD_PARAMS_CMD *cmd;
73800 + /* These values are in ascending order */
73801 + if( lqCmd->thresholdAbove4_Val <= lqCmd->thresholdAbove3_Val ||
73802 + lqCmd->thresholdAbove3_Val <= lqCmd->thresholdAbove2_Val ||
73803 + lqCmd->thresholdAbove2_Val <= lqCmd->thresholdAbove1_Val ||
73804 + lqCmd->thresholdBelow4_Val <= lqCmd->thresholdBelow3_Val ||
73805 + lqCmd->thresholdBelow3_Val <= lqCmd->thresholdBelow2_Val ||
73806 + lqCmd->thresholdBelow2_Val <= lqCmd->thresholdBelow1_Val ) {
73807 +
73808 + return A_EINVAL;
73809 + }
73810 +
73811 + size = sizeof (*cmd);
73812 +
73813 + osbuf = A_NETBUF_ALLOC(size);
73814 + if (osbuf == NULL) {
73815 + return A_NO_MEMORY;
73816 + }
73817 +
73818 + A_NETBUF_PUT(osbuf, size);
73819 +
73820 + cmd = (WMI_LQ_THRESHOLD_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
73821 + A_MEMZERO(cmd, size);
73822 + A_MEMCPY(cmd, lqCmd, sizeof(WMI_LQ_THRESHOLD_PARAMS_CMD));
73823 +
73824 + return (wmi_cmd_send(wmip, osbuf, WMI_LQ_THRESHOLD_PARAMS_CMDID,
73825 + NO_SYNC_WMIFLAG));
73826 +}
73827 +
73828 +A_STATUS
73829 +wmi_set_error_report_bitmask(struct wmi_t *wmip, A_UINT32 mask)
73830 +{
73831 + void *osbuf;
73832 + A_INT8 size;
73833 + WMI_TARGET_ERROR_REPORT_BITMASK *cmd;
73834 +
73835 + size = sizeof (*cmd);
73836 +
73837 + osbuf = A_NETBUF_ALLOC(size);
73838 + if (osbuf == NULL) {
73839 + return A_NO_MEMORY;
73840 + }
73841 +
73842 + A_NETBUF_PUT(osbuf, size);
73843 +
73844 + cmd = (WMI_TARGET_ERROR_REPORT_BITMASK *)(A_NETBUF_DATA(osbuf));
73845 + A_MEMZERO(cmd, size);
73846 +
73847 + cmd->bitmask = mask;
73848 +
73849 + return (wmi_cmd_send(wmip, osbuf, WMI_TARGET_ERROR_REPORT_BITMASK_CMDID,
73850 + NO_SYNC_WMIFLAG));
73851 +}
73852 +
73853 +A_STATUS
73854 +wmi_get_challenge_resp_cmd(struct wmi_t *wmip, A_UINT32 cookie, A_UINT32 source)
73855 +{
73856 + void *osbuf;
73857 + WMIX_HB_CHALLENGE_RESP_CMD *cmd;
73858 +
73859 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73860 + if (osbuf == NULL) {
73861 + return A_NO_MEMORY;
73862 + }
73863 +
73864 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73865 +
73866 + cmd = (WMIX_HB_CHALLENGE_RESP_CMD *)(A_NETBUF_DATA(osbuf));
73867 + cmd->cookie = cookie;
73868 + cmd->source = source;
73869 +
73870 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_HB_CHALLENGE_RESP_CMDID,
73871 + NO_SYNC_WMIFLAG));
73872 +}
73873 +
73874 +A_STATUS
73875 +wmi_config_debug_module_cmd(struct wmi_t *wmip, A_UINT16 mmask,
73876 + A_UINT16 tsr, A_BOOL rep, A_UINT16 size,
73877 + A_UINT32 valid)
73878 +{
73879 + void *osbuf;
73880 + WMIX_DBGLOG_CFG_MODULE_CMD *cmd;
73881 +
73882 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73883 + if (osbuf == NULL) {
73884 + return A_NO_MEMORY;
73885 + }
73886 +
73887 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73888 +
73889 + cmd = (WMIX_DBGLOG_CFG_MODULE_CMD *)(A_NETBUF_DATA(osbuf));
73890 + cmd->config.cfgmmask = mmask;
73891 + cmd->config.cfgtsr = tsr;
73892 + cmd->config.cfgrep = rep;
73893 + cmd->config.cfgsize = size;
73894 + cmd->config.cfgvalid = valid;
73895 +
73896 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_DBGLOG_CFG_MODULE_CMDID,
73897 + NO_SYNC_WMIFLAG));
73898 +}
73899 +
73900 +A_STATUS
73901 +wmi_get_stats_cmd(struct wmi_t *wmip)
73902 +{
73903 + void *osbuf;
73904 +
73905 + osbuf = A_NETBUF_ALLOC(0); /* no payload */
73906 + if (osbuf == NULL) {
73907 + return A_NO_MEMORY;
73908 + }
73909 +
73910 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_STATISTICS_CMDID,
73911 + NO_SYNC_WMIFLAG));
73912 +}
73913 +
73914 +A_STATUS
73915 +wmi_addBadAp_cmd(struct wmi_t *wmip, A_UINT8 apIndex, A_UINT8 *bssid)
73916 +{
73917 + void *osbuf;
73918 + WMI_ADD_BAD_AP_CMD *cmd;
73919 +
73920 + if ((bssid == NULL) || (apIndex > WMI_MAX_BAD_AP_INDEX)) {
73921 + return A_EINVAL;
73922 + }
73923 +
73924 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73925 + if (osbuf == NULL) {
73926 + return A_NO_MEMORY;
73927 + }
73928 +
73929 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73930 +
73931 + cmd = (WMI_ADD_BAD_AP_CMD *)(A_NETBUF_DATA(osbuf));
73932 + cmd->badApIndex = apIndex;
73933 + A_MEMCPY(cmd->bssid, bssid, sizeof(cmd->bssid));
73934 +
73935 + return (wmi_cmd_send(wmip, osbuf, WMI_ADD_BAD_AP_CMDID, NO_SYNC_WMIFLAG));
73936 +}
73937 +
73938 +A_STATUS
73939 +wmi_deleteBadAp_cmd(struct wmi_t *wmip, A_UINT8 apIndex)
73940 +{
73941 + void *osbuf;
73942 + WMI_DELETE_BAD_AP_CMD *cmd;
73943 +
73944 + if (apIndex > WMI_MAX_BAD_AP_INDEX) {
73945 + return A_EINVAL;
73946 + }
73947 +
73948 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73949 + if (osbuf == NULL) {
73950 + return A_NO_MEMORY;
73951 + }
73952 +
73953 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73954 +
73955 + cmd = (WMI_DELETE_BAD_AP_CMD *)(A_NETBUF_DATA(osbuf));
73956 + cmd->badApIndex = apIndex;
73957 +
73958 + return (wmi_cmd_send(wmip, osbuf, WMI_DELETE_BAD_AP_CMDID,
73959 + NO_SYNC_WMIFLAG));
73960 +}
73961 +
73962 +A_STATUS
73963 +wmi_set_txPwr_cmd(struct wmi_t *wmip, A_UINT8 dbM)
73964 +{
73965 + void *osbuf;
73966 + WMI_SET_TX_PWR_CMD *cmd;
73967 +
73968 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
73969 + if (osbuf == NULL) {
73970 + return A_NO_MEMORY;
73971 + }
73972 +
73973 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
73974 +
73975 + cmd = (WMI_SET_TX_PWR_CMD *)(A_NETBUF_DATA(osbuf));
73976 + cmd->dbM = dbM;
73977 +
73978 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_TX_PWR_CMDID, NO_SYNC_WMIFLAG));
73979 +}
73980 +
73981 +A_STATUS
73982 +wmi_get_txPwr_cmd(struct wmi_t *wmip)
73983 +{
73984 + void *osbuf;
73985 +
73986 + osbuf = A_NETBUF_ALLOC(0); /* no payload */
73987 + if (osbuf == NULL) {
73988 + return A_NO_MEMORY;
73989 + }
73990 +
73991 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_TX_PWR_CMDID, NO_SYNC_WMIFLAG));
73992 +}
73993 +
73994 +A_STATUS
73995 +wmi_switch_radio(struct wmi_t *wmip, A_UINT8 on)
73996 +{
73997 + WMI_SCAN_PARAMS_CMD scParams = {0, 0, 0, 0, 0,
73998 + WMI_SHORTSCANRATIO_DEFAULT,
73999 + DEFAULT_SCAN_CTRL_FLAGS,
74000 + 0};
74001 +
74002 + if (on) {
74003 + /* Enable foreground scanning */
74004 + if (wmi_scanparams_cmd(wmip, scParams.fg_start_period,
74005 + scParams.fg_end_period,
74006 + scParams.bg_period,
74007 + scParams.minact_chdwell_time,
74008 + scParams.maxact_chdwell_time,
74009 + scParams.pas_chdwell_time,
74010 + scParams.shortScanRatio,
74011 + scParams.scanCtrlFlags,
74012 + scParams.max_dfsch_act_time) != A_OK) {
74013 + return -EIO;
74014 + }
74015 + } else {
74016 + wmi_disconnect_cmd(wmip);
74017 + if (wmi_scanparams_cmd(wmip, 0xFFFF, 0, 0, 0,
74018 + 0, 0, 0, 0xFF, 0) != A_OK) {
74019 + return -EIO;
74020 + }
74021 + }
74022 +
74023 + return A_OK;
74024 +}
74025 +
74026 +
74027 +A_UINT16
74028 +wmi_get_mapped_qos_queue(struct wmi_t *wmip, A_UINT8 trafficClass)
74029 +{
74030 + A_UINT16 activeTsids=0;
74031 +
74032 + LOCK_WMI(wmip);
74033 + activeTsids = wmip->wmi_streamExistsForAC[trafficClass];
74034 + UNLOCK_WMI(wmip);
74035 +
74036 + return activeTsids;
74037 +}
74038 +
74039 +A_STATUS
74040 +wmi_get_roam_tbl_cmd(struct wmi_t *wmip)
74041 +{
74042 + void *osbuf;
74043 +
74044 + osbuf = A_NETBUF_ALLOC(0); /* no payload */
74045 + if (osbuf == NULL) {
74046 + return A_NO_MEMORY;
74047 + }
74048 +
74049 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_ROAM_TBL_CMDID,
74050 + NO_SYNC_WMIFLAG));
74051 +}
74052 +
74053 +A_STATUS
74054 +wmi_get_roam_data_cmd(struct wmi_t *wmip, A_UINT8 roamDataType)
74055 +{
74056 + void *osbuf;
74057 + A_UINT32 size = sizeof(A_UINT8);
74058 + WMI_TARGET_ROAM_DATA *cmd;
74059 +
74060 + osbuf = A_NETBUF_ALLOC(size); /* no payload */
74061 + if (osbuf == NULL) {
74062 + return A_NO_MEMORY;
74063 + }
74064 +
74065 + A_NETBUF_PUT(osbuf, size);
74066 +
74067 + cmd = (WMI_TARGET_ROAM_DATA *)(A_NETBUF_DATA(osbuf));
74068 + cmd->roamDataType = roamDataType;
74069 +
74070 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_ROAM_DATA_CMDID,
74071 + NO_SYNC_WMIFLAG));
74072 +}
74073 +
74074 +A_STATUS
74075 +wmi_set_roam_ctrl_cmd(struct wmi_t *wmip, WMI_SET_ROAM_CTRL_CMD *p,
74076 + A_UINT8 size)
74077 +{
74078 + void *osbuf;
74079 + WMI_SET_ROAM_CTRL_CMD *cmd;
74080 +
74081 + osbuf = A_NETBUF_ALLOC(size);
74082 + if (osbuf == NULL) {
74083 + return A_NO_MEMORY;
74084 + }
74085 +
74086 + A_NETBUF_PUT(osbuf, size);
74087 +
74088 + cmd = (WMI_SET_ROAM_CTRL_CMD *)(A_NETBUF_DATA(osbuf));
74089 + A_MEMZERO(cmd, size);
74090 +
74091 + A_MEMCPY(cmd, p, size);
74092 +
74093 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_ROAM_CTRL_CMDID,
74094 + NO_SYNC_WMIFLAG));
74095 +}
74096 +
74097 +A_STATUS
74098 +wmi_set_powersave_timers_cmd(struct wmi_t *wmip,
74099 + WMI_POWERSAVE_TIMERS_POLICY_CMD *pCmd,
74100 + A_UINT8 size)
74101 +{
74102 + void *osbuf;
74103 + WMI_POWERSAVE_TIMERS_POLICY_CMD *cmd;
74104 +
74105 + /* These timers can't be zero */
74106 + if(!pCmd->psPollTimeout || !pCmd->triggerTimeout ||
74107 + !(pCmd->apsdTimPolicy == IGNORE_TIM_ALL_QUEUES_APSD ||
74108 + pCmd->apsdTimPolicy == PROCESS_TIM_ALL_QUEUES_APSD) ||
74109 + !(pCmd->simulatedAPSDTimPolicy == IGNORE_TIM_SIMULATED_APSD ||
74110 + pCmd->simulatedAPSDTimPolicy == PROCESS_TIM_SIMULATED_APSD))
74111 + return A_EINVAL;
74112 +
74113 + osbuf = A_NETBUF_ALLOC(size);
74114 + if (osbuf == NULL) {
74115 + return A_NO_MEMORY;
74116 + }
74117 +
74118 + A_NETBUF_PUT(osbuf, size);
74119 +
74120 + cmd = (WMI_POWERSAVE_TIMERS_POLICY_CMD *)(A_NETBUF_DATA(osbuf));
74121 + A_MEMZERO(cmd, size);
74122 +
74123 + A_MEMCPY(cmd, pCmd, size);
74124 +
74125 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID,
74126 + NO_SYNC_WMIFLAG));
74127 +}
74128 +
74129 +#ifdef CONFIG_HOST_GPIO_SUPPORT
74130 +/* Send a command to Target to change GPIO output pins. */
74131 +A_STATUS
74132 +wmi_gpio_output_set(struct wmi_t *wmip,
74133 + A_UINT32 set_mask,
74134 + A_UINT32 clear_mask,
74135 + A_UINT32 enable_mask,
74136 + A_UINT32 disable_mask)
74137 +{
74138 + void *osbuf;
74139 + WMIX_GPIO_OUTPUT_SET_CMD *output_set;
74140 + int size;
74141 +
74142 + size = sizeof(*output_set);
74143 +
74144 + A_DPRINTF(DBG_WMI,
74145 + (DBGFMT "Enter - set=0x%x clear=0x%x enb=0x%x dis=0x%x\n", DBGARG,
74146 + set_mask, clear_mask, enable_mask, disable_mask));
74147 +
74148 + osbuf = A_NETBUF_ALLOC(size);
74149 + if (osbuf == NULL) {
74150 + return A_NO_MEMORY;
74151 + }
74152 + A_NETBUF_PUT(osbuf, size);
74153 + output_set = (WMIX_GPIO_OUTPUT_SET_CMD *)(A_NETBUF_DATA(osbuf));
74154 +
74155 + output_set->set_mask = set_mask;
74156 + output_set->clear_mask = clear_mask;
74157 + output_set->enable_mask = enable_mask;
74158 + output_set->disable_mask = disable_mask;
74159 +
74160 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_OUTPUT_SET_CMDID,
74161 + NO_SYNC_WMIFLAG));
74162 +}
74163 +
74164 +/* Send a command to the Target requesting state of the GPIO input pins */
74165 +A_STATUS
74166 +wmi_gpio_input_get(struct wmi_t *wmip)
74167 +{
74168 + void *osbuf;
74169 +
74170 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
74171 +
74172 + osbuf = A_NETBUF_ALLOC(0);
74173 + if (osbuf == NULL) {
74174 + return A_NO_MEMORY;
74175 + }
74176 +
74177 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_INPUT_GET_CMDID,
74178 + NO_SYNC_WMIFLAG));
74179 +}
74180 +
74181 +/* Send a command to the Target that changes the value of a GPIO register. */
74182 +A_STATUS
74183 +wmi_gpio_register_set(struct wmi_t *wmip,
74184 + A_UINT32 gpioreg_id,
74185 + A_UINT32 value)
74186 +{
74187 + void *osbuf;
74188 + WMIX_GPIO_REGISTER_SET_CMD *register_set;
74189 + int size;
74190 +
74191 + size = sizeof(*register_set);
74192 +
74193 + A_DPRINTF(DBG_WMI,
74194 + (DBGFMT "Enter - reg=%d value=0x%x\n", DBGARG, gpioreg_id, value));
74195 +
74196 + osbuf = A_NETBUF_ALLOC(size);
74197 + if (osbuf == NULL) {
74198 + return A_NO_MEMORY;
74199 + }
74200 + A_NETBUF_PUT(osbuf, size);
74201 + register_set = (WMIX_GPIO_REGISTER_SET_CMD *)(A_NETBUF_DATA(osbuf));
74202 +
74203 + register_set->gpioreg_id = gpioreg_id;
74204 + register_set->value = value;
74205 +
74206 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_REGISTER_SET_CMDID,
74207 + NO_SYNC_WMIFLAG));
74208 +}
74209 +
74210 +/* Send a command to the Target to fetch the value of a GPIO register. */
74211 +A_STATUS
74212 +wmi_gpio_register_get(struct wmi_t *wmip,
74213 + A_UINT32 gpioreg_id)
74214 +{
74215 + void *osbuf;
74216 + WMIX_GPIO_REGISTER_GET_CMD *register_get;
74217 + int size;
74218 +
74219 + size = sizeof(*register_get);
74220 +
74221 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter - reg=%d\n", DBGARG, gpioreg_id));
74222 +
74223 + osbuf = A_NETBUF_ALLOC(size);
74224 + if (osbuf == NULL) {
74225 + return A_NO_MEMORY;
74226 + }
74227 + A_NETBUF_PUT(osbuf, size);
74228 + register_get = (WMIX_GPIO_REGISTER_GET_CMD *)(A_NETBUF_DATA(osbuf));
74229 +
74230 + register_get->gpioreg_id = gpioreg_id;
74231 +
74232 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_REGISTER_GET_CMDID,
74233 + NO_SYNC_WMIFLAG));
74234 +}
74235 +
74236 +/* Send a command to the Target acknowledging some GPIO interrupts. */
74237 +A_STATUS
74238 +wmi_gpio_intr_ack(struct wmi_t *wmip,
74239 + A_UINT32 ack_mask)
74240 +{
74241 + void *osbuf;
74242 + WMIX_GPIO_INTR_ACK_CMD *intr_ack;
74243 + int size;
74244 +
74245 + size = sizeof(*intr_ack);
74246 +
74247 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter ack_mask=0x%x\n", DBGARG, ack_mask));
74248 +
74249 + osbuf = A_NETBUF_ALLOC(size);
74250 + if (osbuf == NULL) {
74251 + return A_NO_MEMORY;
74252 + }
74253 + A_NETBUF_PUT(osbuf, size);
74254 + intr_ack = (WMIX_GPIO_INTR_ACK_CMD *)(A_NETBUF_DATA(osbuf));
74255 +
74256 + intr_ack->ack_mask = ack_mask;
74257 +
74258 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_GPIO_INTR_ACK_CMDID,
74259 + NO_SYNC_WMIFLAG));
74260 +}
74261 +#endif /* CONFIG_HOST_GPIO_SUPPORT */
74262 +
74263 +A_STATUS
74264 +wmi_set_access_params_cmd(struct wmi_t *wmip, A_UINT16 txop, A_UINT8 eCWmin,
74265 + A_UINT8 eCWmax, A_UINT8 aifsn)
74266 +{
74267 + void *osbuf;
74268 + WMI_SET_ACCESS_PARAMS_CMD *cmd;
74269 +
74270 + if ((eCWmin > WMI_MAX_CW_ACPARAM) || (eCWmax > WMI_MAX_CW_ACPARAM) ||
74271 + (aifsn > WMI_MAX_AIFSN_ACPARAM))
74272 + {
74273 + return A_EINVAL;
74274 + }
74275 +
74276 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74277 + if (osbuf == NULL) {
74278 + return A_NO_MEMORY;
74279 + }
74280 +
74281 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74282 +
74283 + cmd = (WMI_SET_ACCESS_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
74284 + cmd->txop = txop;
74285 + cmd->eCWmin = eCWmin;
74286 + cmd->eCWmax = eCWmax;
74287 + cmd->aifsn = aifsn;
74288 +
74289 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_ACCESS_PARAMS_CMDID,
74290 + NO_SYNC_WMIFLAG));
74291 +}
74292 +
74293 +A_STATUS
74294 +wmi_set_retry_limits_cmd(struct wmi_t *wmip, A_UINT8 frameType,
74295 + A_UINT8 trafficClass, A_UINT8 maxRetries,
74296 + A_UINT8 enableNotify)
74297 +{
74298 + void *osbuf;
74299 + WMI_SET_RETRY_LIMITS_CMD *cmd;
74300 +
74301 + if ((frameType != MGMT_FRAMETYPE) && (frameType != CONTROL_FRAMETYPE) &&
74302 + (frameType != DATA_FRAMETYPE))
74303 + {
74304 + return A_EINVAL;
74305 + }
74306 +
74307 + if (maxRetries > WMI_MAX_RETRIES) {
74308 + return A_EINVAL;
74309 + }
74310 +
74311 + if (frameType != DATA_FRAMETYPE) {
74312 + trafficClass = 0;
74313 + }
74314 +
74315 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74316 + if (osbuf == NULL) {
74317 + return A_NO_MEMORY;
74318 + }
74319 +
74320 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74321 +
74322 + cmd = (WMI_SET_RETRY_LIMITS_CMD *)(A_NETBUF_DATA(osbuf));
74323 + cmd->frameType = frameType;
74324 + cmd->trafficClass = trafficClass;
74325 + cmd->maxRetries = maxRetries;
74326 + cmd->enableNotify = enableNotify;
74327 +
74328 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_RETRY_LIMITS_CMDID,
74329 + NO_SYNC_WMIFLAG));
74330 +}
74331 +
74332 +void
74333 +wmi_get_current_bssid(struct wmi_t *wmip, A_UINT8 *bssid)
74334 +{
74335 + if (bssid != NULL) {
74336 + A_MEMCPY(bssid, wmip->wmi_bssid, ATH_MAC_LEN);
74337 + }
74338 +}
74339 +
74340 +A_STATUS
74341 +wmi_set_opt_mode_cmd(struct wmi_t *wmip, A_UINT8 optMode)
74342 +{
74343 + void *osbuf;
74344 + WMI_SET_OPT_MODE_CMD *cmd;
74345 +
74346 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74347 + if (osbuf == NULL) {
74348 + return A_NO_MEMORY;
74349 + }
74350 +
74351 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74352 +
74353 + cmd = (WMI_SET_OPT_MODE_CMD *)(A_NETBUF_DATA(osbuf));
74354 + A_MEMZERO(cmd, sizeof(*cmd));
74355 + cmd->optMode = optMode;
74356 +
74357 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_OPT_MODE_CMDID,
74358 + SYNC_BOTH_WMIFLAG));
74359 +}
74360 +
74361 +A_STATUS
74362 +wmi_opt_tx_frame_cmd(struct wmi_t *wmip,
74363 + A_UINT8 frmType,
74364 + A_UINT8 *dstMacAddr,
74365 + A_UINT8 *bssid,
74366 + A_UINT16 optIEDataLen,
74367 + A_UINT8 *optIEData)
74368 +{
74369 + void *osbuf;
74370 + WMI_OPT_TX_FRAME_CMD *cmd;
74371 + osbuf = A_NETBUF_ALLOC(optIEDataLen + sizeof(*cmd));
74372 + if (osbuf == NULL) {
74373 + return A_NO_MEMORY;
74374 + }
74375 +
74376 + A_NETBUF_PUT(osbuf, (optIEDataLen + sizeof(*cmd)));
74377 +
74378 + cmd = (WMI_OPT_TX_FRAME_CMD *)(A_NETBUF_DATA(osbuf));
74379 + A_MEMZERO(cmd, (optIEDataLen + sizeof(*cmd)-1));
74380 +
74381 + cmd->frmType = frmType;
74382 + cmd->optIEDataLen = optIEDataLen;
74383 + //cmd->optIEData = (A_UINT8 *)((int)cmd + sizeof(*cmd));
74384 + A_MEMCPY(cmd->bssid, bssid, sizeof(cmd->bssid));
74385 + A_MEMCPY(cmd->dstAddr, dstMacAddr, sizeof(cmd->dstAddr));
74386 + A_MEMCPY(&cmd->optIEData[0], optIEData, optIEDataLen);
74387 +
74388 + return (wmi_cmd_send(wmip, osbuf, WMI_OPT_TX_FRAME_CMDID,
74389 + NO_SYNC_WMIFLAG));
74390 +}
74391 +
74392 +A_STATUS
74393 +wmi_set_adhoc_bconIntvl_cmd(struct wmi_t *wmip, A_UINT16 intvl)
74394 +{
74395 + void *osbuf;
74396 + WMI_BEACON_INT_CMD *cmd;
74397 +
74398 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74399 + if (osbuf == NULL) {
74400 + return A_NO_MEMORY;
74401 + }
74402 +
74403 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74404 +
74405 + cmd = (WMI_BEACON_INT_CMD *)(A_NETBUF_DATA(osbuf));
74406 + A_MEMZERO(cmd, sizeof(*cmd));
74407 + cmd->beaconInterval = intvl;
74408 +
74409 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_BEACON_INT_CMDID,
74410 + NO_SYNC_WMIFLAG));
74411 +}
74412 +
74413 +
74414 +A_STATUS
74415 +wmi_set_voice_pkt_size_cmd(struct wmi_t *wmip, A_UINT16 voicePktSize)
74416 +{
74417 + void *osbuf;
74418 + WMI_SET_VOICE_PKT_SIZE_CMD *cmd;
74419 +
74420 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74421 + if (osbuf == NULL) {
74422 + return A_NO_MEMORY;
74423 + }
74424 +
74425 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74426 +
74427 + cmd = (WMI_SET_VOICE_PKT_SIZE_CMD *)(A_NETBUF_DATA(osbuf));
74428 + A_MEMZERO(cmd, sizeof(*cmd));
74429 + cmd->voicePktSize = voicePktSize;
74430 +
74431 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_VOICE_PKT_SIZE_CMDID,
74432 + NO_SYNC_WMIFLAG));
74433 +}
74434 +
74435 +
74436 +A_STATUS
74437 +wmi_set_max_sp_len_cmd(struct wmi_t *wmip, A_UINT8 maxSPLen)
74438 +{
74439 + void *osbuf;
74440 + WMI_SET_MAX_SP_LEN_CMD *cmd;
74441 +
74442 + /* maxSPLen is a two-bit value. If user trys to set anything
74443 + * other than this, then its invalid
74444 + */
74445 + if(maxSPLen & ~0x03)
74446 + return A_EINVAL;
74447 +
74448 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74449 + if (osbuf == NULL) {
74450 + return A_NO_MEMORY;
74451 + }
74452 +
74453 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74454 +
74455 + cmd = (WMI_SET_MAX_SP_LEN_CMD *)(A_NETBUF_DATA(osbuf));
74456 + A_MEMZERO(cmd, sizeof(*cmd));
74457 + cmd->maxSPLen = maxSPLen;
74458 +
74459 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_MAX_SP_LEN_CMDID,
74460 + NO_SYNC_WMIFLAG));
74461 +}
74462 +
74463 +A_UINT8
74464 +convert_userPriority_to_trafficClass(A_UINT8 userPriority)
74465 +{
74466 + return (up_to_ac[userPriority & 0x7]);
74467 +}
74468 +
74469 +A_UINT8
74470 +wmi_get_power_mode_cmd(struct wmi_t *wmip)
74471 +{
74472 + return wmip->wmi_powerMode;
74473 +}
74474 +
74475 +A_STATUS
74476 +wmi_verify_tspec_params(WMI_CREATE_PSTREAM_CMD *pCmd, A_BOOL tspecCompliance)
74477 +{
74478 + return A_OK;
74479 +}
74480 +
74481 +#ifdef CONFIG_HOST_TCMD_SUPPORT
74482 +static A_STATUS
74483 +wmi_tcmd_test_report_rx(struct wmi_t *wmip, A_UINT8 *datap, int len)
74484 +{
74485 +
74486 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
74487 +
74488 + A_WMI_TCMD_RX_REPORT_EVENT(wmip->wmi_devt, datap, len);
74489 +
74490 + return A_OK;
74491 +}
74492 +
74493 +#endif /* CONFIG_HOST_TCMD_SUPPORT*/
74494 +
74495 +A_STATUS
74496 +wmi_set_authmode_cmd(struct wmi_t *wmip, A_UINT8 mode)
74497 +{
74498 + void *osbuf;
74499 + WMI_SET_AUTH_MODE_CMD *cmd;
74500 +
74501 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74502 + if (osbuf == NULL) {
74503 + return A_NO_MEMORY;
74504 + }
74505 +
74506 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74507 +
74508 + cmd = (WMI_SET_AUTH_MODE_CMD *)(A_NETBUF_DATA(osbuf));
74509 + A_MEMZERO(cmd, sizeof(*cmd));
74510 + cmd->mode = mode;
74511 +
74512 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_AUTH_MODE_CMDID,
74513 + NO_SYNC_WMIFLAG));
74514 +}
74515 +
74516 +A_STATUS
74517 +wmi_set_reassocmode_cmd(struct wmi_t *wmip, A_UINT8 mode)
74518 +{
74519 + void *osbuf;
74520 + WMI_SET_REASSOC_MODE_CMD *cmd;
74521 +
74522 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74523 + if (osbuf == NULL) {
74524 + return A_NO_MEMORY;
74525 + }
74526 +
74527 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74528 +
74529 + cmd = (WMI_SET_REASSOC_MODE_CMD *)(A_NETBUF_DATA(osbuf));
74530 + A_MEMZERO(cmd, sizeof(*cmd));
74531 + cmd->mode = mode;
74532 +
74533 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_REASSOC_MODE_CMDID,
74534 + NO_SYNC_WMIFLAG));
74535 +}
74536 +
74537 +A_STATUS
74538 +wmi_set_lpreamble_cmd(struct wmi_t *wmip, A_UINT8 status)
74539 +{
74540 + void *osbuf;
74541 + WMI_SET_LPREAMBLE_CMD *cmd;
74542 +
74543 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74544 + if (osbuf == NULL) {
74545 + return A_NO_MEMORY;
74546 + }
74547 +
74548 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74549 +
74550 + cmd = (WMI_SET_LPREAMBLE_CMD *)(A_NETBUF_DATA(osbuf));
74551 + A_MEMZERO(cmd, sizeof(*cmd));
74552 + cmd->status = status;
74553 +
74554 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_LPREAMBLE_CMDID,
74555 + NO_SYNC_WMIFLAG));
74556 +}
74557 +
74558 +A_STATUS
74559 +wmi_set_rts_cmd(struct wmi_t *wmip, A_UINT16 threshold)
74560 +{
74561 + void *osbuf;
74562 + WMI_SET_RTS_CMD *cmd;
74563 +
74564 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74565 + if (osbuf == NULL) {
74566 + return A_NO_MEMORY;
74567 + }
74568 +
74569 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74570 +
74571 + cmd = (WMI_SET_RTS_CMD*)(A_NETBUF_DATA(osbuf));
74572 + A_MEMZERO(cmd, sizeof(*cmd));
74573 + cmd->threshold = threshold;
74574 +
74575 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_RTS_CMDID,
74576 + NO_SYNC_WMIFLAG));
74577 +}
74578 +
74579 +A_STATUS
74580 +wmi_set_wmm_cmd(struct wmi_t *wmip, WMI_WMM_STATUS status)
74581 +{
74582 + void *osbuf;
74583 + WMI_SET_WMM_CMD *cmd;
74584 +
74585 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74586 + if (osbuf == NULL) {
74587 + return A_NO_MEMORY;
74588 + }
74589 +
74590 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74591 +
74592 + cmd = (WMI_SET_WMM_CMD*)(A_NETBUF_DATA(osbuf));
74593 + A_MEMZERO(cmd, sizeof(*cmd));
74594 + cmd->status = status;
74595 +
74596 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_WMM_CMDID,
74597 + NO_SYNC_WMIFLAG));
74598 +
74599 +}
74600 +
74601 +A_STATUS
74602 +wmi_set_wmm_txop(struct wmi_t *wmip, WMI_TXOP_CFG cfg)
74603 +{
74604 + void *osbuf;
74605 + WMI_SET_WMM_TXOP_CMD *cmd;
74606 +
74607 + if( !((cfg == WMI_TXOP_DISABLED) || (cfg == WMI_TXOP_ENABLED)) )
74608 + return A_EINVAL;
74609 +
74610 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74611 + if (osbuf == NULL) {
74612 + return A_NO_MEMORY;
74613 + }
74614 +
74615 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74616 +
74617 + cmd = (WMI_SET_WMM_TXOP_CMD *)(A_NETBUF_DATA(osbuf));
74618 + A_MEMZERO(cmd, sizeof(*cmd));
74619 + cmd->txopEnable = cfg;
74620 +
74621 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_WMM_TXOP_CMDID,
74622 + NO_SYNC_WMIFLAG));
74623 +
74624 +}
74625 +
74626 +#ifdef CONFIG_HOST_TCMD_SUPPORT
74627 +/* WMI layer doesn't need to know the data type of the test cmd.
74628 + This would be beneficial for customers like Qualcomm, who might
74629 + have different test command requirements from differnt manufacturers
74630 + */
74631 +A_STATUS
74632 +wmi_test_cmd(struct wmi_t *wmip, A_UINT8 *buf, A_UINT32 len)
74633 +{
74634 + void *osbuf;
74635 + char *data;
74636 +
74637 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter\n", DBGARG));
74638 +
74639 + osbuf= A_NETBUF_ALLOC(len);
74640 + if(osbuf == NULL)
74641 + {
74642 + return A_NO_MEMORY;
74643 + }
74644 + A_NETBUF_PUT(osbuf, len);
74645 + data = A_NETBUF_DATA(osbuf);
74646 + A_MEMCPY(data, buf, len);
74647 +
74648 + return(wmi_cmd_send(wmip, osbuf, WMI_TEST_CMDID,
74649 + NO_SYNC_WMIFLAG));
74650 +}
74651 +
74652 +#endif
74653 +
74654 +A_STATUS
74655 +wmi_set_bt_status_cmd(struct wmi_t *wmip, A_UINT8 streamType, A_UINT8 status)
74656 +{
74657 + void *osbuf;
74658 + WMI_SET_BT_STATUS_CMD *cmd;
74659 +
74660 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74661 + if (osbuf == NULL) {
74662 + return A_NO_MEMORY;
74663 + }
74664 +
74665 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74666 +
74667 + cmd = (WMI_SET_BT_STATUS_CMD *)(A_NETBUF_DATA(osbuf));
74668 + A_MEMZERO(cmd, sizeof(*cmd));
74669 + cmd->streamType = streamType;
74670 + cmd->status = status;
74671 +
74672 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_BT_STATUS_CMDID,
74673 + NO_SYNC_WMIFLAG));
74674 +}
74675 +
74676 +A_STATUS
74677 +wmi_set_bt_params_cmd(struct wmi_t *wmip, WMI_SET_BT_PARAMS_CMD* cmd)
74678 +{
74679 + void *osbuf;
74680 + WMI_SET_BT_PARAMS_CMD* alloc_cmd;
74681 +
74682 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74683 + if (osbuf == NULL) {
74684 + return A_NO_MEMORY;
74685 + }
74686 +
74687 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74688 +
74689 + alloc_cmd = (WMI_SET_BT_PARAMS_CMD *)(A_NETBUF_DATA(osbuf));
74690 + A_MEMZERO(alloc_cmd, sizeof(*cmd));
74691 + A_MEMCPY(alloc_cmd, cmd, sizeof(*cmd));
74692 +
74693 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_BT_PARAMS_CMDID,
74694 + NO_SYNC_WMIFLAG));
74695 +}
74696 +
74697 +A_STATUS
74698 +wmi_get_keepalive_configured(struct wmi_t *wmip)
74699 +{
74700 + void *osbuf;
74701 + WMI_GET_KEEPALIVE_CMD *cmd;
74702 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74703 + if (osbuf == NULL) {
74704 + return A_NO_MEMORY;
74705 + }
74706 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74707 + cmd = (WMI_GET_KEEPALIVE_CMD *)(A_NETBUF_DATA(osbuf));
74708 + A_MEMZERO(cmd, sizeof(*cmd));
74709 + return (wmi_cmd_send(wmip, osbuf, WMI_GET_KEEPALIVE_CMDID,
74710 + NO_SYNC_WMIFLAG));
74711 +}
74712 +
74713 +A_UINT8
74714 +wmi_get_keepalive_cmd(struct wmi_t *wmip)
74715 +{
74716 + return wmip->wmi_keepaliveInterval;
74717 +}
74718 +
74719 +A_STATUS
74720 +wmi_set_keepalive_cmd(struct wmi_t *wmip, A_UINT8 keepaliveInterval)
74721 +{
74722 + void *osbuf;
74723 + WMI_SET_KEEPALIVE_CMD *cmd;
74724 +
74725 + osbuf = A_NETBUF_ALLOC(sizeof(*cmd));
74726 + if (osbuf == NULL) {
74727 + return A_NO_MEMORY;
74728 + }
74729 +
74730 + A_NETBUF_PUT(osbuf, sizeof(*cmd));
74731 +
74732 + cmd = (WMI_SET_KEEPALIVE_CMD *)(A_NETBUF_DATA(osbuf));
74733 + A_MEMZERO(cmd, sizeof(*cmd));
74734 + cmd->keepaliveInterval = keepaliveInterval;
74735 + wmip->wmi_keepaliveInterval = keepaliveInterval;
74736 +
74737 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_KEEPALIVE_CMDID,
74738 + NO_SYNC_WMIFLAG));
74739 +}
74740 +
74741 +A_STATUS
74742 +wmi_set_appie_cmd(struct wmi_t *wmip, A_UINT8 mgmtFrmType, A_UINT8 ieLen,
74743 + A_UINT8 *ieInfo)
74744 +{
74745 + void *osbuf;
74746 + WMI_SET_APPIE_CMD *cmd;
74747 + A_UINT16 cmdLen;
74748 +
74749 + if (ieLen > WMI_MAX_IE_LEN) {
74750 + return A_ERROR;
74751 + }
74752 + cmdLen = sizeof(*cmd) + ieLen - 1;
74753 + osbuf = A_NETBUF_ALLOC(cmdLen);
74754 + if (osbuf == NULL) {
74755 + return A_NO_MEMORY;
74756 + }
74757 +
74758 + A_NETBUF_PUT(osbuf, cmdLen);
74759 +
74760 + cmd = (WMI_SET_APPIE_CMD *)(A_NETBUF_DATA(osbuf));
74761 + A_MEMZERO(cmd, cmdLen);
74762 +
74763 + cmd->mgmtFrmType = mgmtFrmType;
74764 + cmd->ieLen = ieLen;
74765 + A_MEMCPY(cmd->ieInfo, ieInfo, ieLen);
74766 +
74767 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_APPIE_CMDID, NO_SYNC_WMIFLAG));
74768 +}
74769 +
74770 +A_STATUS
74771 +wmi_set_halparam_cmd(struct wmi_t *wmip, A_UINT8 *cmd, A_UINT16 dataLen)
74772 +{
74773 + void *osbuf;
74774 + A_UINT8 *data;
74775 +
74776 + osbuf = A_NETBUF_ALLOC(dataLen);
74777 + if (osbuf == NULL) {
74778 + return A_NO_MEMORY;
74779 + }
74780 +
74781 + A_NETBUF_PUT(osbuf, dataLen);
74782 +
74783 + data = A_NETBUF_DATA(osbuf);
74784 +
74785 + A_MEMCPY(data, cmd, dataLen);
74786 +
74787 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_WHALPARAM_CMDID, NO_SYNC_WMIFLAG));
74788 +}
74789 +
74790 +A_INT32
74791 +wmi_get_rate(A_INT8 rateindex)
74792 +{
74793 + if (rateindex == RATE_AUTO) {
74794 + return 0;
74795 + } else {
74796 + return(wmi_rateTable[(A_UINT32) rateindex]);
74797 + }
74798 +}
74799 +
74800 +void
74801 +wmi_node_return (struct wmi_t *wmip, bss_t *bss)
74802 +{
74803 + if (NULL != bss)
74804 + {
74805 + wlan_node_return (&wmip->wmi_scan_table, bss);
74806 + }
74807 +}
74808 +
74809 +bss_t *
74810 +wmi_find_Ssidnode (struct wmi_t *wmip, A_UCHAR *pSsid,
74811 + A_UINT32 ssidLength, A_BOOL bIsWPA2)
74812 +{
74813 + bss_t *node = NULL;
74814 + node = wlan_find_Ssidnode (&wmip->wmi_scan_table, pSsid,
74815 + ssidLength, bIsWPA2);
74816 + return node;
74817 +}
74818 +
74819 +void
74820 +wmi_free_allnodes(struct wmi_t *wmip)
74821 +{
74822 + wlan_free_allnodes(&wmip->wmi_scan_table);
74823 +}
74824 +
74825 +bss_t *
74826 +wmi_find_node(struct wmi_t *wmip, const A_UINT8 *macaddr)
74827 +{
74828 + bss_t *ni=NULL;
74829 + ni=wlan_find_node(&wmip->wmi_scan_table,macaddr);
74830 + return ni;
74831 +}
74832 +
74833 +A_STATUS
74834 +wmi_dset_open_reply(struct wmi_t *wmip,
74835 + A_UINT32 status,
74836 + A_UINT32 access_cookie,
74837 + A_UINT32 dset_size,
74838 + A_UINT32 dset_version,
74839 + A_UINT32 targ_handle,
74840 + A_UINT32 targ_reply_fn,
74841 + A_UINT32 targ_reply_arg)
74842 +{
74843 + void *osbuf;
74844 + WMIX_DSETOPEN_REPLY_CMD *open_reply;
74845 +
74846 + A_DPRINTF(DBG_WMI, (DBGFMT "Enter - wmip=0x%x\n", DBGARG, (int)wmip));
74847 +
74848 + osbuf = A_NETBUF_ALLOC(sizeof(*open_reply));
74849 + if (osbuf == NULL) {
74850 + return A_NO_MEMORY;
74851 + }
74852 +
74853 + A_NETBUF_PUT(osbuf, sizeof(*open_reply));
74854 + open_reply = (WMIX_DSETOPEN_REPLY_CMD *)(A_NETBUF_DATA(osbuf));
74855 +
74856 + open_reply->status = status;
74857 + open_reply->targ_dset_handle = targ_handle;
74858 + open_reply->targ_reply_fn = targ_reply_fn;
74859 + open_reply->targ_reply_arg = targ_reply_arg;
74860 + open_reply->access_cookie = access_cookie;
74861 + open_reply->size = dset_size;
74862 + open_reply->version = dset_version;
74863 +
74864 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_DSETOPEN_REPLY_CMDID,
74865 + NO_SYNC_WMIFLAG));
74866 +}
74867 +
74868 +static A_STATUS
74869 +wmi_get_pmkid_list_event_rx(struct wmi_t *wmip, A_UINT8 *datap, A_UINT32 len)
74870 +{
74871 + WMI_PMKID_LIST_REPLY *reply;
74872 + A_UINT32 expected_len;
74873 +
74874 + if (len < sizeof(WMI_PMKID_LIST_REPLY)) {
74875 + return A_EINVAL;
74876 + }
74877 + reply = (WMI_PMKID_LIST_REPLY *)datap;
74878 + expected_len = sizeof(reply->numPMKID) + reply->numPMKID * WMI_PMKID_LEN;
74879 +
74880 + if (len < expected_len) {
74881 + return A_EINVAL;
74882 + }
74883 +
74884 + A_WMI_PMKID_LIST_EVENT(wmip->wmi_devt, reply->numPMKID,
74885 + reply->pmkidList);
74886 +
74887 + return A_OK;
74888 +}
74889 +
74890 +#ifdef CONFIG_HOST_DSET_SUPPORT
74891 +A_STATUS
74892 +wmi_dset_data_reply(struct wmi_t *wmip,
74893 + A_UINT32 status,
74894 + A_UINT8 *user_buf,
74895 + A_UINT32 length,
74896 + A_UINT32 targ_buf,
74897 + A_UINT32 targ_reply_fn,
74898 + A_UINT32 targ_reply_arg)
74899 +{
74900 + void *osbuf;
74901 + WMIX_DSETDATA_REPLY_CMD *data_reply;
74902 + int size;
74903 +
74904 + size = sizeof(*data_reply) + length;
74905 +
74906 + A_DPRINTF(DBG_WMI,
74907 + (DBGFMT "Enter - length=%d status=%d\n", DBGARG, length, status));
74908 +
74909 + osbuf = A_NETBUF_ALLOC(size);
74910 + if (osbuf == NULL) {
74911 + return A_NO_MEMORY;
74912 + }
74913 + A_NETBUF_PUT(osbuf, size);
74914 + data_reply = (WMIX_DSETDATA_REPLY_CMD *)(A_NETBUF_DATA(osbuf));
74915 +
74916 + data_reply->status = status;
74917 + data_reply->targ_buf = targ_buf;
74918 + data_reply->targ_reply_fn = targ_reply_fn;
74919 + data_reply->targ_reply_arg = targ_reply_arg;
74920 + data_reply->length = length;
74921 +
74922 + if (status == A_OK) {
74923 + if (a_copy_from_user(data_reply->buf, user_buf, length)) {
74924 + return A_ERROR;
74925 + }
74926 + }
74927 +
74928 + return (wmi_cmd_send_xtnd(wmip, osbuf, WMIX_DSETDATA_REPLY_CMDID,
74929 + NO_SYNC_WMIFLAG));
74930 +}
74931 +#endif /* CONFIG_HOST_DSET_SUPPORT */
74932 +
74933 +A_STATUS
74934 +wmi_set_wsc_status_cmd(struct wmi_t *wmip, A_UINT32 status)
74935 +{
74936 + void *osbuf;
74937 + char *cmd;
74938 +
74939 + wps_enable = status;
74940 +
74941 + osbuf = a_netbuf_alloc(sizeof(1));
74942 + if (osbuf == NULL) {
74943 + return A_NO_MEMORY;
74944 + }
74945 +
74946 + a_netbuf_put(osbuf, sizeof(1));
74947 +
74948 + cmd = (char *)(a_netbuf_to_data(osbuf));
74949 +
74950 + A_MEMZERO(cmd, sizeof(*cmd));
74951 + cmd[0] = (status?1:0);
74952 + return (wmi_cmd_send(wmip, osbuf, WMI_SET_WSC_STATUS_CMDID,
74953 + NO_SYNC_WMIFLAG));
74954 +}
74955 +
74956 Index: linux-2.6.28/drivers/ar6000/wmi/wmi_doc.h
74957 ===================================================================
74958 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
74959 +++ linux-2.6.28/drivers/ar6000/wmi/wmi_doc.h 2009-01-02 00:01:56.000000000 +0100
74960 @@ -0,0 +1,4421 @@
74961 +/*
74962 + *
74963 + * Copyright (c) 2004-2007 Atheros Communications Inc.
74964 + * All rights reserved.
74965 + *
74966 + *
74967 + * This program is free software; you can redistribute it and/or modify
74968 + * it under the terms of the GNU General Public License version 2 as
74969 + * published by the Free Software Foundation;
74970 + *
74971 + * Software distributed under the License is distributed on an "AS
74972 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
74973 + * implied. See the License for the specific language governing
74974 + * rights and limitations under the License.
74975 + *
74976 + *
74977 + *
74978 + */
74979 +
74980 +
74981 +#if 0
74982 +Wireless Module Interface (WMI) Documentaion
74983 +
74984 + This section describes the format and the usage model for WMI control and
74985 + data messages between the host and the AR6000-based targets. The header
74986 + file include/wmi.h contains all command and event manifest constants as
74987 + well as structure typedefs for each set of command and reply parameters.
74988 +
74989 +Data Frames
74990 +
74991 + The data payload transmitted and received by the target follows RFC-1042
74992 + encapsulation and thus starts with an 802.2-style LLC-SNAP header. The
74993 + WLAN module completes 802.11 encapsulation of the payload, including the
74994 + MAC header, FCS, and WLAN security related fields. At the interface to the
74995 + message transport (HTC), a data frame is encapsulated in a WMI message.
74996 +
74997 +WMI Message Structure
74998 +
74999 + The WMI protocol leverages an 802.3-style Ethernet header in communicating
75000 + the source and destination information between the host and the AR6000
75001 + modules using a 14-byte 802.3 header ahead of the 802.2-style payload. In
75002 + addition, the WMI protocol adds a header to all data messages:
75003 +
75004 + {
75005 + INT8 rssi
75006 + The RSSI of the received packet and its units are shown in db above the
75007 + noise floor, and the noise floor is shown in dbm.
75008 + UINT8 info
75009 + Contains information on message type and user priority. Message type
75010 + differentiates between a data packet and a synchronization message.
75011 + } WMI_DATA_HDR
75012 +
75013 + User priority contains the 802.1d user priority info from host to target. Host
75014 + software translates the host Ethernet format to 802.3 format prior to Tx and
75015 + 802.3 format to host format in the Rx direction. The host does not transmit the
75016 + FCS that follows the data. MsgType differentiates between a regular data
75017 + packet (msgType=0) and a synchronization message (msgType=1).
75018 +
75019 +Data Endpoints
75020 +
75021 + The AR6000 chipset provides several data endpoints to support quality of
75022 + service (QoS) and maintains separate queues and separate DMA engines for
75023 + each data endpoint. A data endpoint can be bi-directional.
75024 +
75025 + Best effort (BE) class traffic uses the default data endpoint (2). The host can
75026 + establish up to two additional data endpoints for other traffic classes. Once
75027 + such a data endpoint is established, it sends and receives corresponding QoS
75028 + traffic in a manner similar to the default data endpoint.
75029 +
75030 + If QoS is desired over the interconnect, host software must classify each data
75031 + packet and place it on the appropriate data endpoint. The information
75032 + required to classify data is generally available in-band as an 802.1p/q style
75033 + tag or as the ToS field in the IP header. The information may also be available
75034 + out-of-band depending on the host DDI.
75035 +
75036 +Connection States
75037 +
75038 + Table B-1 describes the AR6000 WLAN connection states:
75039 +
75040 + Table B-1. AR6000 Connection States
75041 +
75042 +Connection State
75043 + Description
75044 +
75045 + DISCONNECTED
75046 + In this state, the AR6000 device is not connected to a wireless
75047 + network. The device is in this state after reset when it sends the
75048 + WIRELESS MODULE \93READY\94 EVENT, after it processes a
75049 + DISCONNECT command, and when it loses its link with the
75050 + access point (AP) that it was connected to. The device signals a
75051 + transition to the DISCONNECTED state with a \93DISCONNECT\94
75052 + event.
75053 +
75054 +CONNECTED
75055 + In this state, the AR6000 device is connected to wireless networks.
75056 + The device enters this state after successfully processing a
75057 + CONNECT, which establishes a connection with a wireless
75058 + network. The device signals a transition to the CONNECTED state
75059 + with a \93CONNECT\94 event.
75060 +
75061 +
75062 +Message Types
75063 +
75064 + WMI uses commands, replies, and events for the control and configuration of
75065 + the AR6000 device. The control protocol is asynchronous. Table B-2 describes
75066 + AR6000 message types:
75067 +
75068 +Table B-2. AR6000 Message Types
75069 +
75070 +Message Type
75071 + Description
75072 +
75073 +Commands
75074 + Control messages that flow from the host to the device
75075 +
75076 +Replies/Events
75077 + Control messages that flow from the device to the host.
75078 +
75079 + The device issues a reply to some WMI commands, but not to others.
75080 + The payload in a reply is command-specific, and some commands do
75081 + not trigger a reply message at all. Events are control messages issued
75082 + by the device to signal the occurrence of an asynchronous event.
75083 +
75084 +
75085 +WMI Message Format
75086 +
75087 + All WMI control commands, replies and events use the header format:
75088 +
75089 + WMI_CMD_HDR Header Format
75090 + {
75091 + UINT16 id
75092 + This 16-bit constant identifies which WMI command the host is issuing,
75093 + which command the target is replying to, or which event has occurred.
75094 + WMI_CMD_HDR
75095 + }
75096 +
75097 +
75098 + A variable-size command-, reply-, or event-specific payload follows the
75099 + header. Over the interconnect, all fields in control messages (including
75100 + WMI_CMD_HDR and the command specific payload) use 32-bit little Endian
75101 + byte ordering and fields are packed. The AR6000 device always executes
75102 + commands in order, and the host may send multiple commands without
75103 + waiting for previous commands to complete. A majority of commands are
75104 + processed to completion once received. Other commands trigger a longer
75105 + duration activity whose completion is signaled to the host through an event.
75106 +
75107 +Command Restrictions
75108 +
75109 + Some commands may only be issued when the AR6000 device is in a certain
75110 + state. The host is required to wait for an event signaling a state transition
75111 + before such a command can be issued. For example, if a command requires
75112 + the device to be in the CONNECTED state, then the host is required to wait
75113 + for a \93CONNECT\94 event before it issues that command.
75114 +
75115 + The device ignores any commands inappropriate for its current state. If the
75116 + command triggers a reply, the device generates an error reply. Otherwise, the
75117 + device silently ignores the inappropriate command.
75118 +
75119 +Command and Data Synchronization
75120 +
75121 + WMI provides a mechanism for a host to advise the device of necessary
75122 + synchronization between commands and data. The device implements
75123 + synchronization; no implicit synchronization exists between endpoints.
75124 +
75125 + The host controls synchronization using the \93SYNCHRONIZE\94 command
75126 + over the control channel and synchronization messages over data channels.
75127 + The device stops each data channel upon receiving a synchronization message
75128 + on that channel, processing all data packets received prior to that message.
75129 + After the device receives synchronization messages for each data endpoint
75130 + and the \93SYNCHRONIZE\94 command, it resumes all channels.
75131 +
75132 + When the host must guarantee a command executes before processing new
75133 + data packets, it first issues the command, then issues the \93SYNCHRONIZE\94
75134 + command and sends synchronization messages on data channels. When the
75135 + host must guarantee the device has processed all old data packets before a
75136 + processing a new command, it issues a \93SYNCHRONIZE\94 command and
75137 + synchronization messages on all data channels, then issues the desired
75138 + command.
75139 +
75140 +
75141 +
75142 +WMI Commands
75143 +
75144 + ADD_BAD_AP
75145 + Cause the AR6000 device to avoid a particular AP
75146 + ADD_CIPHER_KEY
75147 + Add or replace any of the four AR6000 encryption keys
75148 + ADD_WOW_PATTERN
75149 + Used to add a pattern to the WoW pattern list
75150 + CLR_RSSI_SNR
75151 + Clear the current calculated RSSI and SNR value
75152 + CONNECT_CMD
75153 + Request that the AR6000 device establish a wireless connection
75154 + with the specified SSID
75155 + CREATE_PSTREAM
75156 + Create prioritized data endpoint between the host and device
75157 + DELETE_BAD_AP
75158 + Clear an entry in the bad AP table
75159 + DELETE_CIPHER_KEY
75160 + Delete a previously added cipher key
75161 + DELETE_PSTREAM
75162 + Delete a prioritized data endpoint
75163 + DELETE_WOW_PATTERN
75164 + Remove a pre-specified pattern from the WoW pattern list
75165 + EXTENSION
75166 + WMI message interface command
75167 + GET_BIT_RATE
75168 + Retrieve rate most recently used by the AR6000
75169 + GET_CHANNEL_LIST
75170 + Retrieve list of channels used by the AR6000
75171 + GET_FIXRATES
75172 + Retrieves the rate-mask set via the SET_FIXRATES command.
75173 + GET_PMKID_LIST_CMD
75174 + Retrieve the firmware list of PMKIDs
75175 + GET_ROAM_DATA
75176 + Internal use for data collection; available in special build only
75177 + GET_ROAM_TBL
75178 + Retrieve the roaming table maintained on the target
75179 + GET_TARGET_STATS
75180 + Request that the target send the statistics it maintains
75181 + GET_TX_PWR
75182 + Retrieve the current AR6000 device Tx power levels
75183 + GET_WOW_LIST
75184 + Retrieve the current list of WoW patterns
75185 + LQ_THRESHOLD_PARAMS
75186 + Set the link quality thresholds
75187 + OPT_TX_FRAME
75188 + Send a special frame (special feature)
75189 + RECONNECT
75190 + Request a reconnection to a BSS
75191 + RSSI_THRESHOLD_PARAMS
75192 + Configure how the AR6000 device monitors and reports signal
75193 + strength (RSSI) of the connected BSS
75194 + SCAN_PARAMS
75195 + Determine dwell time and changes scanned channels
75196 + SET_ACCESS_PARAMS
75197 + Set access parameters for the wireless network
75198 + SET_ADHOC_BSSID
75199 + Set the BSSID for an ad hoc network
75200 + SET_AKMP_PARAMS
75201 + Set multiPMKID mode
75202 + SET_APPIE
75203 + Add application-specified IE to a management frame
75204 + SET_ASSOC_INFO
75205 + Specify the IEs the device should add to association or
75206 + reassociation requests
75207 + SET_AUTH_MODE
75208 + Set 802.11 authentication mode of reconnection
75209 + SET_BEACON_INT
75210 + Set the beacon interval for an ad hoc network
75211 + SET_BIT_RATE
75212 + Set the AR6000 to a specific fixed bit rate
75213 + SET_BMISS_TIME
75214 + Set the beacon miss time
75215 + SET_BSS_FILTER
75216 + Inform the AR6000 of network types about which it wants to
75217 + receive information using a \93BSSINFO\94 event
75218 + SET_BT_PARAMS
75219 + Set the status of a Bluetooth stream (SCO or A2DP) or set
75220 + Bluetooth coexistence register parameters
75221 + SET_BT_STATUS
75222 + Set the status of a Bluetooth stream (SCO or A2DP)
75223 + SET_CHANNEL_PARAMETERS
75224 + Configure WLAN channel parameters
75225 + SET_DISC_TIMEOUT
75226 + Set the amount of time the AR6000 spends attempting to
75227 + reestablish a connection
75228 + SET_FIXRATES
75229 + Set the device to a specific fixed PHY rate (supported subset)
75230 + SET_HALPARAM
75231 + Internal AR6000 command to set certain hardware parameters
75232 + SET_HOST_SLEEP_MODE
75233 + Set the host mode to asleep or awake
75234 + SET_IBSS_PM_CAPS
75235 + Support a non-standard power management scheme for an
75236 + ad hoc network
75237 + SET_LISTEN_INT
75238 + Request a listen interval
75239 + SET_LPREAMBLE
75240 + Override the short preamble capability of the AR6000 device
75241 + SET_MAX_SP_LEN
75242 + Set the maximum service period
75243 + SET_OPT_MODE
75244 + Set the special mode on/off (special feature)
75245 + SET_PMKID
75246 + Set the pairwise master key ID (PMKID)
75247 + SET_PMKID_LIST_CMD
75248 + Configure the firmware list of PMKIDs
75249 + SET_POWER_MODE
75250 + Set guidelines on trade-off between power utilization
75251 + SET_POWER_PARAMS
75252 + Configure power parameters
75253 + SET_POWERSAVE_PARAMS
75254 + Set the two AR6000 power save timers
75255 + SET_PROBED_SSID
75256 + Provide list of SSIDs the device should seek
75257 + SET_REASSOC_MODE
75258 + Specify whether the disassociated frame should be sent upon
75259 + reassociation
75260 + SET_RETRY_LIMITS
75261 + Limit how many times the device tries to send a frame
75262 + SET_ROAM_CTRL
75263 + Control roaming behavior
75264 + SET_RTS
75265 + Determine when RTS should be sent
75266 + SET_SCAN_PARAMS
75267 + Set the AR6000 scan parameters
75268 + SET_TKIP_COUNTERMEASURES
75269 + Enable/disable reports of TKIP MIC errors
75270 + SET_TX_PWR
75271 + Specify the AR6000 device Tx power levels
75272 + SET_VOICE_PKT_SIZE
75273 + Set voice packet size
75274 + SET_WMM
75275 + Override the AR6000 WMM capability
75276 + SET_WMM_TXOP
75277 + Configure TxOP bursting when sending traffic to a WMM-
75278 + capable AP
75279 + SET_WOW_MODE
75280 + Enable/disable WoW mode
75281 + SET_WSC_STATUS
75282 + Enable/disable profile check in cserv when the WPS protocol
75283 + is in progress
75284 + SNR_THRESHOLD_PARAMS
75285 + Configure how the device monitors and reports SNR of BSS
75286 + START_SCAN
75287 + Start a long or short channel scan
75288 + SYNCHRONIZE
75289 + Force a synchronization point between command and data
75290 + paths
75291 + TARGET_REPORT_ERROR_BITMASK
75292 + Control \93ERROR_REPORT\94 events from the AR6000
75293 +
75294 +
75295 +
75296 +
75297 +Name
75298 + ADD_BAD_AP
75299 +
75300 +Synopsis
75301 + The host uses this command to cause the AR6000 to avoid a particular AP. The
75302 + AR6000 maintain a table with up to two APs to avoid. An ADD_BAD_AP command
75303 + adds or replaces the specified entry in this bad AP table.
75304 +
75305 + If the AR6000 are currently connected to the AP specified in this command, they
75306 + disassociate.
75307 +
75308 +Command
75309 + wmiconfig eth1 --badap <bssid> <badApIndex>
75310 +
75311 +Command Parameters
75312 + UINT8 badApIndex Index [0...1] that identifies which entry in the
75313 + bad AP table to use
75314 +
75315 +
75316 + UINT8 bssid[6] MAC address of the AP to avoid
75317 +
75318 +Command Values
75319 + badApIndex = 0, 1 Entry in the bad AP table to use
75320 +
75321 +Reset Value
75322 + The bad AP table is cleared
75323 +
75324 +Restrictions
75325 + None
75326 +
75327 +See Also
75328 + \93DELETE_BAD_AP\94 on page B-13
75329 +
75330 +=====================================================================
75331 +Name
75332 + ADD_CIPHER_KEY
75333 +
75334 +Synopsis
75335 + The host uses this command to add/replace any of four encryption keys on the
75336 + AR6000. The ADD_CIPHER_KEY command is issued after the CONNECT event
75337 + has been received by the host for all dot11Auth modes except for SHARED_AUTH.
75338 + When the dot11AuthMode is SHARED_AUTH, then the ADD_CIPHER_KEY
75339 + command should be issued before the \93CONNECT\94 command.
75340 +
75341 +Command
75342 + wmiconfig eth1 --cipherkey <keyIndex> <keyType> <keyUsage>
75343 + <keyLength> <keyopctrl> <keyRSC> <key>
75344 +
75345 +Command Parameters
75346 + UINT8 keyIndex Index (0...3) of the key to add/replace;
75347 + uniquely identifies the key
75348 + UINT8 keyType CRYPTO_TYPE
75349 + UINT8 keyUsage Specifies usage parameters of the key when
75350 + keyType = WEP_CRYPT
75351 + UINT8 keyLength Length of the key in bytes
75352 + UINT8 keyOpCtrl bit[0] = Initialize TSC (default),
75353 + bit[1] = Initialize RSC
75354 + UINT8 keyRSC[8] Key replay sequence counter (RSC) initial
75355 + value the device should use
75356 + UINT8 key[32] Key material used for this connection
75357 + Command Values
75358 + {
75359 + NONE_CRYPT = 1
75360 + WEP_CRYPT = 2
75361 + TKIP_CRYPT = 3
75362 + AES_CRYPT = 4
75363 + KEY_OP_INIT_TSC 0x01
75364 + KEY_OP_INIT_RSC 0x02
75365 + KEY_OP_INIT_VAL 0x03
75366 + Default is to Initialize the TSC
75367 + KEY_OP_VALID_MASK 0x04
75368 + Two operations defined
75369 + } CRYPTO_TYPE
75370 +
75371 + {
75372 + PAIRWISE_USAGE = 0 Set if the key is used for unicast traffic only
75373 + GROUP_USAGE = 1 Set if the key is used to receive multicast
75374 + traffic (also set for static WEP keys)
75375 + TX_USAGE = 2 Set for the GROUP key used to transmit frames
75376 + All others are reserved
75377 + } KEY_USAGE
75378 +
75379 +Reset Value
75380 + The four available keys are disabled.
75381 +
75382 +Restrictions
75383 + The cipher should correspond to the encryption mode specified in the \93CONNECT\94
75384 + command.
75385 +
75386 +See Also
75387 + \93DELETE_CIPHER_KEY\94
75388 +
75389 +=====================================================================
75390 +
75391 +
75392 +Name
75393 + ADD_WOW_PATTERN
75394 +
75395 +Synopsis
75396 + The host uses this command to add a pattern to the WoW pattern list; used for
75397 + pattern-matching for host wakeups by the WoW module. If the host mode is asleep
75398 + and WoW is enabled, all packets are matched against the existing WoW patterns. If a
75399 + packet matches any of the patterns specified, the target will wake up the host. All
75400 + non-matching packets are discarded by the target without being sent up to the host.
75401 +
75402 +Command
75403 + wmiconfig \96addwowpattern <list-id> <filter-size> <filter-offset>
75404 + <pattern> <mask>
75405 +
75406 +Command Parameters
75407 + A_UINT8 filter_list_id ID of the list that is to include the new pattern
75408 + A_UINT8 filter_size Size of the new pattern
75409 + A_UINT8 filter_offset Offset at which the pattern matching for this
75410 + new pattern should begin at
75411 + A_UINT8 filter[1] Byte stream that contains both the pattern and
75412 + the mask of the new WoW wake-up pattern
75413 +
75414 +Reply Parameters
75415 + None
75416 +
75417 +Reset Value
75418 + None defined (default host mode is awake)
75419 +
75420 +Restrictions
75421 + None
75422 +
75423 +See Also
75424 + \93DELETE_WOW_PATTERN\94
75425 +
75426 +=====================================================================
75427 +
75428 +
75429 +Name
75430 + CLR_RSSI_SNR
75431 +
75432 +Synopsis
75433 + Clears the current calculated RSSI and SNR value. RSSI and SNR are reported by
75434 + running-average value. This command will clear the history and have a fresh start
75435 + for the running-average mechanism.
75436 +
75437 +Command
75438 + wmiconfig eth1 --cleanRssiSnr
75439 +
75440 +Command Parameters
75441 + None
75442 +
75443 +Reply Parameters
75444 + None
75445 +
75446 +Reset Value
75447 + None defined
75448 +
75449 +Restrictions
75450 + None
75451 +
75452 +=====================================================================
75453 +
75454 +Name
75455 + CONNECT_CMD
75456 +
75457 +Synopsis
75458 + New connect control information (connectCtrl) is added, with 32 possible modifiers.
75459 +
75460 + CONNECT_SEND_REASSOC
75461 + Valid only for a host-controlled connection to a
75462 + particular AP. If this bit is set, a reassociation frame is
75463 + sent. If this bit is clear, an association request frame is
75464 + sent to the AP.
75465 +
75466 + CONNECT_IGNORE_WPAx_GROUP_CIPHER
75467 + No group key is issued in the CONNECT command,
75468 + so use the group key advertised by the AP. In a target-
75469 + initiated roaming situation this allows a STA to roam
75470 + between APs that support different multicast ciphers.
75471 +
75472 + CONNECT_PROFILE_MATCH_DONE
75473 + In a host-controlled connection case, it is possible that
75474 + during connect, firmware may not have the
75475 + information for a profile match (e.g, when the AP
75476 + supports hidden SSIDs and the device may not
75477 + transmit probe requests during connect). By setting
75478 + this bit in the connection control information, the
75479 + firmware waits for a beacon from the AP with the
75480 + BSSID supplied in the CONNECT command. No
75481 + additional profile checks are done.
75482 +
75483 + CONNECT_IGNORE_AAC_BEACON
75484 + Ignore the Admission Capacity information in the
75485 + beacon of the AP
75486 +
75487 + CONNECT_ASSOC_POLICY_USER
75488 + When set, the CONNECT_SEND_REASSOC setting
75489 + determines if an Assoc or Reassoc is sent to an AP
75490 +
75491 +Command
75492 + wmiconfig --setconnectctrl <ctrl flags bitmask>
75493 +
75494 +Command Parameters
75495 + typedef struct{
75496 + A_UINT8 networktype;
75497 + A_UINT8 dot11authmode;
75498 + A_UINT8 authmode;
75499 + A_UINT8 pairwiseCryptoType; /*CRYPTO_TYPE*/
75500 + A_UINT8 pairwiseCryptoLen;
75501 + A_UINT8 groupCryptoType; /*CRYPTO_TYPE*/
75502 + A_UINT8 groupCryptoLen;
75503 + A_UINT8 ssidLength;
75504 + A_UCHAR ssid[WMI_MAX_SSID_LEN];
75505 + A_UINT16 channel;
75506 + A_UINT8 bssid[AUTH_MAC_LEN];
75507 + A_UINT8 ctrl_flags; /*WMI_CONNECT_CTRL_FLAGS_BITS*/
75508 + } WMI_CONNECT_CMD;
75509 +
75510 + ctrl flags bitmask
75511 + = 0x0001 CONNECT_ASSOC_POLICY_USER
75512 + Assoc frames are sent using the policy specified by
75513 + the flag
75514 + = 0x0002 CONNECT_SEND_REASSOC
75515 + Send Reassoc frame while connecting, otherwise send
75516 + assoc frames
75517 + = 0x0004 CONNECT_IGNORE_WPAx_GROUP_CIPHER
75518 + Ignore WPAx group cipher for WPA/WPA2
75519 + = 0x0008 CONNECT_PROFILE_MATCH_DONE
75520 + Ignore any profile check
75521 + = 0x0010 CONNECT_IGNORE_AAC_BEACON
75522 + Ignore the admission control information in the
75523 + beacon
75524 + ... CONNECT_CMD, continued
75525 + Command Values
75526 + typedef enum {
75527 + INFRA_NETWORK = 0x01,
75528 + ADHOC_NETWORK = 0x02,
75529 + ADHOC_CREATOR = 0x04,
75530 + } NETWORK_TYPE;
75531 +
75532 + typedef enum {
75533 + OPEN_AUTH = 0x01,
75534 + SHARED_AUTH = 0x02,
75535 + LEAP_AUTH = 0x04,
75536 + } DOT11_AUTH_MODE;
75537 + typedef enum {
75538 + NONE_AUTH = 0x01,
75539 + WPA_AUTH = 0x02,
75540 + WPA_PSK_AUTH = 0x03,
75541 + WPA2_AUTH = 0x04,
75542 + WPA2_PSK_AUTH = 0x05,
75543 + WPA_AUTH_CCKM = 0x06,
75544 + WPA2_AUTH_CCKM = 0x07,
75545 + } AUTH_MODE;
75546 + typedef enum {
75547 + NONE_CRYPT = 0x01,
75548 + WEP_CRYPT = 0x02,
75549 + TKIP_CRYPT = 0x03,
75550 + AES_CRYPT = 0x04,
75551 + } CRYPTO_TYPE;
75552 + typedef enum {
75553 + CONNECT_ASSOC_POLICY_USER = 0x0001,
75554 + CONNECT_SEND_REASSOC = 0x0002,
75555 + CONNECT_IGNORE_WPAx_GROUP_CIPHER = 0x0004,
75556 + CONNECT_PROFILE_MATCH_DONE = 0x0008,
75557 + CONNECT_IGNORE_AAC_BEACON = 0x0010,
75558 + } WMI_CONNECT_CTRL_FLAGS_BITS;
75559 +
75560 + pairwiseCryptoLen and groupCryptoLen are valid when the respective
75561 + CryptoTypesis WEP_CRYPT, otherwise this value should be 0. This is the length in
75562 + bytes.
75563 +
75564 +Reset Value
75565 + None defined
75566 +
75567 +Restrictions
75568 + None
75569 +
75570 +=====================================================================
75571 +
75572 +
75573 +Name
75574 + CREATE_PSTREAM
75575 +
75576 +Synopsis
75577 + The host uses this command to create a new prioritized data endpoint between the
75578 + host and the AR6000 device that carries a prioritized stream of data. If the AP that the
75579 + device connects to requires TSPEC stream establishment, the device requests the
75580 + corresponding TSPEC with the AP. The maximum and minimum service interval
75581 + ranges from 0 \96 0x7FFFFFFF (ms), where 0 = disabled. The device does not send a
75582 + reply event for this command, as it is always assumed the command has succeeded.
75583 + An AP admission control response comes to the host via a WMI_CAC_INDICATION
75584 + event, once the response for the ADDTS frame comes.
75585 +
75586 + Examples of cases where reassociation is generated (when WMM) and cases where
75587 + ADDTS is generated (when WMM and enabling ACM) are when:
75588 + Changing UAPSD flags in WMM mode, reassociation is generated
75589 + Changing the interval of sending auto QoS Null frame in WMM mode;
75590 + reassociation is not generated
75591 + Issuing a command with same previous parameters in WMM mode and enabling
75592 + ACM, an ADDTS request is generated
75593 + Changing the interval of a QoS null frame sending in WMM mode and enabling
75594 + ACM, an ADDTS request is generated
75595 + Issuing the command in disconnected state, reassociation or ADDTS is not
75596 + generated but the parameters are available after (re)association
75597 +
75598 +Command
75599 + --createqos <user priority> <direction> <traffic class>
75600 +<trafficType> <voice PS capability> <min service interval> <max
75601 +service interval> <inactivity interval> <suspension interval>
75602 +<service start time> <tsid> <nominal MSDU> <max MSDU> <min data
75603 +rate> <mean data rate> <peak data rate> <max burst size> <delay
75604 +bound> <min phy rate> <sba> <medium time> where:
75605 +
75606 + <user priority>
75607 + 802.1D user priority range (0\967)
75608 + <direction>
75609 + = 0 Tx (uplink) traffic
75610 + = 1 Rx (downlink) traffic
75611 + = 2 Bi-directional traffic
75612 + <traffic class>
75613 + = 1 BK
75614 + = 2 VI
75615 + = 3 VO
75616 + <trafficType>
75617 + = 0 Aperiodic
75618 + = 1 Periodic
75619 + <voice PS capability>
75620 + Specifies whether the voice power save mechanism
75621 + (APSD if AP supports it or legacy/simulated APSD
75622 + [using PS-Poll]) should be used
75623 + = 0 Disable voice power save for traffic class
75624 + = 1 Enable APSD voice power save for traffic class
75625 + = 2 Enable voice power save for all traffic classes
75626 + <min service interval>
75627 + (In ms)
75628 + <max service interval>
75629 + Inactivity interval (in ms) (0 = Infinite)
75630 + <suspension interval>
75631 + (In ms)
75632 + <service start time>
75633 + Service start time
75634 + <tsid>
75635 + TSID range (0\9615)
75636 + <nominal MSDU>
75637 + Nominal MAC SDU size
75638 + <max MSDU>
75639 + Maximum MAC SDU size
75640 + <min data rate>
75641 + Minimum data rate (in bps)
75642 + <mean data rate>
75643 + Mean data rate (in bps)
75644 + <peak data rate>
75645 + Peak data rate (in bps)
75646 + <max burst size>
75647 + Maximum burst size (in bps)
75648 + <delay bound>
75649 + Delay bound
75650 + <min phy rate>
75651 + Minimum PHY rate (in bps)
75652 + <sba>
75653 + Surplus bandwidth allowance
75654 + <medium time>
75655 + Medium time in TU of 32-ms periods per sec
75656 + ... CREATE_PSTREAM (continued)
75657 +
75658 +Command Parameters
75659 + UINT8 trafficClass TRAFFIC_CLASS value
75660 + UINT8 traffic
75661 + Direction
75662 + DIR_TYPE value
75663 + UINT8 rxQueueNum
75664 + AR6000 device mailbox index (2 or 3)
75665 + corresponding to the endpoint the host
75666 + wishes to use to receive packets for the
75667 + prioritized stream
75668 + UINT8 trafficType TRAFFIC_TYPE value
75669 + UINT8 voicePS
75670 +Capability
75671 + VOICEPS_CAP_TYPE value
75672 + UINT8 tsid Traffic stream ID
75673 + UINT8 userPriority 802.1D user priority
75674 + UINT16 nominalMSDU Nominal MSDU in octets
75675 + UINT16 maxMSDU Maximum MSDU in octets
75676 + UINT32 minServiceInt Minimum service interval: the min.
75677 + period of traffic specified (in ms)
75678 + UINT32 maxServiceInt Maximum service interval: the max.
75679 + period of traffic specified (in ms)
75680 + UINT32 inactivityInt Indicates how many ms an established
75681 + stream is inactive before the prioritized
75682 + data endpoint is taken down and the
75683 + corresponding T-SPEC deleted
75684 + UINT32 suspensionInt Suspension interval (in ms)
75685 + UINT32 service StartTime Service start time
75686 + UINT32 minDataRate Minimum data rate (in bps)
75687 + UINT32 meanDataRate Mean data rate (in bps)
75688 + UINT32 peakDataRate Peak data rate (in bps)
75689 + UINT32 maxBurstSize
75690 + UINT32 delayBound
75691 + UINT32 minPhyRate Minimum PHY rate for TSPEC (in bps)
75692 + UINT32 sba Surplus bandwidth allowance
75693 + UINT32 mediumTime Medium TSPEC time (in units of 32 ms)
75694 +Command Values
75695 + {
75696 + WMM_AC_BE = 0 Best Effort
75697 + WMM_AC_BK = 1 Background
75698 + WMM_AC_VI = 2 Video
75699 + WMM_AC_VO = 3 Voice
75700 + All other values reserved
75701 + } TRAFFIC_CLASS
75702 + {
75703 + UPLINK_TRAFFIC = 0 From the AR6000 device to the AP
75704 + DOWNLINK_TRAFFIC = 1 From the AP to the AR6000 device
75705 + BIDIR_TRAFFIC = 2 Bi-directional traffic
75706 + All other values reserved
75707 + } DIR_TYPE
75708 + {
75709 + DISABLE_FOR_THIS_AC = 0
75710 + ENABLE_FOR_THIS_AC = 1
75711 + ENABLE_FOR_ALL_AC = 2
75712 + All other values reserved
75713 + } VOICEPS_CAP_TYPE
75714 +
75715 + ... CREATE_PSTREAM (continued)
75716 +
75717 +
75718 + VI BE BK Supported, Y/N?
75719 + 0 0 0 0 Y
75720 + 0 0 0 1 Y
75721 + 0 0 1 0 N
75722 + 0 0 1 1 N
75723 + 0 1 0 0 Y
75724 + 0 1 0 1 Y
75725 + 0 1 1 0 N
75726 + 0 1 1 1 N
75727 + 1 0 0 0 Y
75728 + 1 0 0 1 Y
75729 + 1 0 1 0 N
75730 + 1 1 0 0 N
75731 + 1 1 0 1 Y
75732 + 1 1 0 0 N
75733 + 1 1 1 0 N
75734 + 1 1 1 1 Y
75735 +
75736 +Reset Value
75737 + No pstream is present after reset; each of the BE, BK, VI,VO pstreams must be created
75738 + (either implicitly by data flow or explicitly by user)
75739 +
75740 +Restrictions
75741 + This command can only be issued when the device is in the CONNECTED state. If
75742 + the device receives the command while in DISCONNECTED state, it replies with a
75743 + failure indication. At most four prioritized data endpoints can be created, one for
75744 + each AC.
75745 +
75746 +See Also
75747 + \93DELETE_PSTREAM\94
75748 +=====================================================================
75749 +
75750 +Name
75751 + DELETE_BAD_AP
75752 +
75753 +Synopsis
75754 + The host uses this command to clear a particular entry in the bad AP table
75755 +
75756 +Command
75757 + wmiconfig eth1 --rmAP [--num=<index>] // used to clear a badAP
75758 + entry. num is index from 0-3
75759 +
75760 +Command Parameters
75761 + UINT8 badApIndex Index [0...n] that identifies the entry in the bad
75762 + AP table to delete
75763 +
75764 +Command Values
75765 + badApIndex = 0, 1, 2, 3
75766 + Entry in the bad AP table
75767 +
75768 +Reset Value
75769 + None defined
75770 +
75771 +Restrictions
75772 + None
75773 +
75774 +See Also
75775 + \93ADD_BAD_AP\94
75776 +
75777 +=====================================================================
75778 +
75779 +
75780 +Name
75781 + DELETE_CIPHER_KEY
75782 +
75783 +Synopsis
75784 + The host uses this command to delete a key that was previously added with the
75785 + \93ADD_CIPHER_KEY\94 command.
75786 +
75787 +Command
75788 + TBD
75789 +
75790 +Command Parameters
75791 + UINT8 keyIndex Index (0...3) of the key to be deleted
75792 +
75793 +Command Values
75794 + keyIndex = 0, 1,2, 3 Key to delete
75795 +
75796 +Reset Value
75797 + None
75798 +
75799 +Restrictions
75800 + The host should not delete a key that is currently in use by the AR6000.
75801 +
75802 +See Also
75803 + \93ADD_CIPHER_KEY\94
75804 +
75805 +=====================================================================
75806 +
75807 +Name
75808 + DELETE_PSTREAM
75809 +
75810 +Synopsis
75811 + The host uses this command to delete a prioritized data endpoint created by a
75812 + previous \93CREATE_PSTREAM\94 command
75813 +
75814 +Command
75815 + --deleteqos <trafficClass> <tsid>, where:
75816 +
75817 + <traffic class>
75818 + = 0 BE
75819 + = 1 BK
75820 + = 2 VI
75821 + = 3 VO
75822 + <tsid>
75823 + The TSpec ID; use the -qosqueue option
75824 + to get the active TSpec IDs for each traffic class
75825 +
75826 +Command Parameters
75827 + A_UINT8 trafficClass Indicate the traffic class of the stream
75828 + being deleted
75829 +
75830 +Command Values
75831 + {
75832 + WMM_AC_BE = 0 Best effort
75833 + WMM_AC_BK = 1 Background
75834 + WMM_AC_VI = 2 Video
75835 + WMM_AC_VO = 3 Voice
75836 + } TRAFFIC CLASS
75837 +
75838 + 0-15 for TSID
75839 +
75840 +Reply Values
75841 + N/A
75842 +
75843 +Restrictions
75844 + This command should only be issued after a \93CREATE_PSTREAM\94 command has
75845 + successfully created a prioritized stream
75846 +
75847 +See Also
75848 + \93CREATE_PSTREAM\94
75849 +
75850 +=====================================================================
75851 +
75852 +
75853 +Name
75854 + DELETE_WOW_PATTERN
75855 +
75856 +Synopsis
75857 + The host uses this command to remove a pre-specified pattern from the
75858 + WoW pattern list.
75859 +
75860 +Command
75861 + wmiconfig \96delwowpattern <list-id> <pattern-id>
75862 +
75863 +Command Parameters
75864 + A_UINT8 filter_list_id ID of the list that contains the WoW filter
75865 + pattern to delete
75866 + A_UINT8 filter_id ID of the WoW filter pattern to delete
75867 +
75868 +Reply Parameters
75869 + None
75870 +
75871 +
75872 +
75873 +Reset Value
75874 + None defined
75875 +
75876 +Restrictions
75877 + None
75878 +
75879 +See Also
75880 + \93ADD_WOW_PATTERN\94
75881 +
75882 +=====================================================================
75883 +
75884 +
75885 +Name
75886 + EXTENSION
75887 +
75888 +Synopsis
75889 + The WMI message interface is used mostly for wireless control messages to a wireless
75890 + module applicable to wireless module management regardless of the target platform
75891 + implementation. However, some commands only peripherally related to wireless
75892 + management are desired during operation. These wireless extension commands may
75893 + be platform-specific or implementation-dependent.
75894 +
75895 +Command
75896 + N/A
75897 +
75898 +Command Parameters
75899 + Command-specific
75900 +
75901 +Command Values
75902 + Command-specific
75903 +
75904 +Reply Parameters
75905 + Command-specific
75906 +
75907 +Reset Values
75908 + None defined
75909 +
75910 +Restrictions
75911 + None defined
75912 +
75913 +=====================================================================
75914 +
75915 +
75916 +Name
75917 + GET_BIT_RATE
75918 +
75919 +Synopsis
75920 + Used by the host to obtain the rate most recently used by the AR6000 device
75921 +
75922 +Command
75923 + wmiconfig eth1 --getfixrates
75924 +
75925 +Command Parameters
75926 + None
75927 +
75928 +
75929 +
75930 +Reply Parameters
75931 + INT8
75932 + rateIndex
75933 + See the \93SET_BIT_RATE\94 command
75934 +
75935 +Reset Values
75936 + None
75937 +
75938 +Restrictions
75939 + This command should only be used during development/debug; it is not intended
75940 +for use in production. It is only valid when the device is in the CONNECTED state
75941 +
75942 +See Also
75943 + \93SET_BIT_RATE\94
75944 +
75945 +=====================================================================
75946 +
75947 +
75948 +Name
75949 + GET_CHANNEL_LIST
75950 +
75951 +Synopsis
75952 + Used by the host uses to retrieve the list of channels that can be used by the device
75953 + while in the current wireless mode and in the current regulatory domain.
75954 +
75955 +Command
75956 + TBD
75957 +
75958 +Command Parameters
75959 + None
75960 +
75961 +Reply Parameters
75962 + UINT8 reserved Reserved
75963 + UINT8 numberOfChannels Number of channels the reply contains
75964 + UINT16 channelList[numberOfChannels] Array of channel frequencies (in MHz)
75965 +
75966 +Reset Values
75967 + None defined
75968 +
75969 +Restrictions
75970 + The maximum number of channels that can be reported are 32
75971 +
75972 +=====================================================================
75973 +
75974 +
75975 +Name
75976 + GET_FIXRATES
75977 +
75978 +Synopsis
75979 + Clears the current calculated RSSI and SNR value. RSSI and SNR are reported by
75980 + running-average value. This command will clear the history and have a fresh start for
75981 + the running-average mechanism.
75982 +
75983 +Synopsis
75984 + This returns rate-mask set via WMI_SET_FIXRATES to retrieve the current fixed rate
75985 + that the AR6001 or AR6001 is using. See \93SET_FIXRATES\94.
75986 +
75987 +Command
75988 + wmiconfig eth1 --getfixrates
75989 +
75990 +Command Parameters
75991 + A_UINT16 fixRateMask; Note: if this command is used prior to
75992 + using WMI_SET_FIXRATES, AR6000
75993 + returns 0xffff as fixRateMask, indicating
75994 + all the rates are enabled
75995 +
75996 +Reply Parameters
75997 + None
75998 +
75999 +Reset Value
76000 + None defined
76001 +
76002 +Restrictions
76003 + None
76004 +
76005 +See Also
76006 + \93SET_FIXRATES\94
76007 +
76008 +=====================================================================
76009 +
76010 +
76011 +
76012 +Name
76013 + GET_PMKID_LIST_CMD
76014 +
76015 +Synopsis
76016 + Retrieves the list of PMKIDs on the firmware. The
76017 + WMI_GET_PMKID_LIST_EVENT is generated by the firmware.
76018 +
76019 +Command
76020 + TBD
76021 +
76022 +Command Parameters
76023 +
76024 +Reset Values
76025 + None
76026 +
76027 +Restrictions
76028 + None
76029 +
76030 +See Also
76031 + SET_PMKID_LIST_CMD GET_PMKID_LIST_EVENT
76032 +
76033 +=====================================================================
76034 +
76035 +
76036 +Name
76037 + GET_ROAM_TBL
76038 +
76039 +Synopsis
76040 + Retrieve the roaming table maintained on the target. The response is reported
76041 + asynchronously through the ROAM_TBL_EVENT.
76042 +
76043 +Command
76044 + wmiconfig --getroamtable <roamctrl> <info>
76045 +
76046 +Command Parameters
76047 + A_UINT8 roamCtrlType;
76048 + A_UINT16 roamMode
76049 + A_UINT16 numEntries
76050 + WMI_BSS_ROAM_INFO bssRoamInfo[1]
76051 +
76052 +Reply Value
76053 + Reported asynchronously through the ROAM_TBL_EVENT
76054 +
76055 +Reset Value
76056 + None defined
76057 +
76058 +Restrictions
76059 + None
76060 +
76061 +See Also
76062 + SET_KEEPALIVE
76063 +
76064 +=====================================================================
76065 +
76066 +
76067 +Name
76068 + GET_TARGET_STATS
76069 +
76070 +Synopsis
76071 + The host uses this command to request that the target send the statistics that it
76072 + maintains. The statistics obtained from the target are accrued in the host every time
76073 + the GET_TARGET_STATS command is issued. The --clearStats option is added to
76074 + clear the target statistics maintained in the host.
76075 +
76076 +Command
76077 + wmiconfig --getTargetStats --clearStats
76078 +
76079 +Command Parameters
76080 + TARGET_STATS targetStats
76081 + WMI_TARGET_STATS
76082 + UINT8 clearStats
76083 +
76084 +
76085 +Reply Value
76086 + RSSI return value (0\96100)
76087 +
76088 +Reset Values
76089 + All statistics are cleared (zeroed)
76090 +
76091 +Restrictions
76092 + The --getTargetStats option must be used; the --clearStats option is also available also
76093 +
76094 +
76095 +=====================================================================
76096 +
76097 +Name
76098 + GET_TX_PWR
76099 +
76100 +Synopsis
76101 + The host uses this command to retrieve the current Tx power level
76102 +
76103 +Command
76104 + wmiconfig -i eth1 --getpower
76105 +
76106 +Command Parameters
76107 + None
76108 +
76109 +Reply Parameters
76110 + UINT16 dbM The current Tx power level specified in dbM
76111 +
76112 +Reset Values
76113 + The maximum permitted by the regulatory domain
76114 +
76115 +Restrictions
76116 + None
76117 +
76118 +See Also
76119 + \93SET_TX_PWR\94
76120 +
76121 +=====================================================================
76122 +
76123 +
76124 +Name
76125 + GET_WOW_LIST
76126 +
76127 +Synopsis
76128 + The host uses this command to retrieve the current list of WoW patterns.
76129 +
76130 +Command
76131 + wmiconfig \96getwowlist <list-id>
76132 +
76133 +Command Parameters
76134 + A_UINT8 filter_list_id ID of the list of WoW patterns to retrieve
76135 +
76136 +Reply Value(s)
76137 + A_UINT16 num_filters Number of WoW patterns contained in the list
76138 + A_UINT8 wow_mode Current mode of WoW (enabled or disabled)
76139 + A_UINT8 host_mode Current host mode (asleep or awake)
76140 + WOW_FILTER wow_filters[1]
76141 + Contents of the WoW filter pattern list
76142 + (contains mask, pattern, offset and size
76143 + information for each of the patterns)
76144 +
76145 +Reset Value
76146 + None defined
76147 +
76148 +Restrictions
76149 + None
76150 +
76151 +See Also
76152 + \93SET_WSC_STATUS\94
76153 +
76154 +=====================================================================
76155 +
76156 +
76157 +Name
76158 + LQ_THRESHOLD_PARAMS
76159 +
76160 +Synopsis
76161 + Sets Link Quality thresholds, the sampling will happen at every unicast data frame
76162 + Tx if a certain threshold is met, and the corresponding event will be sent to the host.
76163 +
76164 +Command
76165 + --lqThreshold <enable> <upper_threshold_1> ...
76166 + <upper_threshold_4> <lower_threshold_1> ... <lower_threshold_4>
76167 +
76168 +Command Parameters
76169 + <enable> = 0 Disable link quality sampling
76170 + = 1 Enable link quality sampling
76171 + <upper_threshold_x> Above thresholds (value in [0,100]), in
76172 + ascending order
76173 + <lower_threshold_x> Below thresholds (value in [0,100]), in
76174 + ascending order
76175 +
76176 +Command Values
76177 + See command parameters
76178 +
76179 +Reset Value
76180 + None defined
76181 +
76182 +Restrictions
76183 + None
76184 +
76185 +=====================================================================
76186 +
76187 +
76188 +Name
76189 + OPT_TX_FRAME
76190 +
76191 +Synopsis
76192 + Special feature, sends a special frame.
76193 +
76194 +Command
76195 + wmiconfig --sendframe <frmType> <dstaddr> <bssid> <optIEDatalen>
76196 + <optIEData>
76197 +
76198 +Command Parameters
76199 + {
76200 + A_UINT16 optIEDataLen;
76201 + A_UINT8 frmType;
76202 + A_UINT8 dstAddr[ATH_MAC_LEN];
76203 + A_UINT8 bssid[ATH_MAC_LEN];
76204 + A_UINT8 optIEData[1];
76205 + } WMI_OPT_TX_FRAME_CMD;
76206 +
76207 +Command Values
76208 + <frmtype> = 1 Probe request frame
76209 + = 2 Probe response frame
76210 + = 3 CPPP start
76211 + = 4 CPPP stop
76212 +
76213 +Reset Value
76214 + None defined
76215 +
76216 +Restrictions
76217 + Send a special frame only when special mode is on.
76218 +
76219 +=====================================================================
76220 +
76221 +
76222 +Name
76223 + RECONNECT
76224 +
76225 +Synopsis
76226 + This command requests a reconnection to a BSS to which the AR6000 device was
76227 + formerly connected
76228 +
76229 +Command
76230 + TBD
76231 +
76232 +Command Parameters
76233 + UINT16 channel Provides a hint as to which channel was
76234 + used for a previous connection
76235 + UINT8 bssid[6] If set, indicates which BSSID to connect to
76236 +
76237 +Command Values
76238 + None
76239 +
76240 +Reset Values
76241 + None
76242 +
76243 +Restrictions
76244 + None
76245 +
76246 +See Also
76247 + \93CONNECT_CMD\94
76248 +
76249 +=====================================================================
76250 +
76251 +
76252 +Name
76253 + RSSI_THRESHOLD_PARAMS
76254 +
76255 +Synopsis
76256 + Configures how the AR6000 device monitors and reports signal strength (RSSI) of the
76257 + connected BSS, which is used as a link quality metric. The four RSSI threshold sets (in
76258 + dbM) of the host specification divide the signal strength range into six segments.
76259 + When signal strength increases or decreases across one of the boundaries, an
76260 + RSSI_THRESHOLD event is signaled to the host. The host may then choose to take
76261 + action (such as influencing roaming).
76262 +
76263 +Command
76264 + wmiconfig eth1 --rssiThreshold <weight> <pollTime>
76265 + <above_threshold_val_1> ... <above_threshold_tag_6>
76266 + <above_threshold_val_6>
76267 + <below_threshold_tag_1> <below_threshold_val_1> ...
76268 + <below_threshold_tag_6> <below_threshold_val_6>
76269 +
76270 +Command Parameters
76271 + UINT8 weight Range in [1, 16] used to calculate average RSSI
76272 + UINT32 pollTime RSSI (signal strength) sampling frequency in
76273 + seconds (if pollTime = 0, single strength
76274 + sampling is disabled)
76275 + USER_RSS__THOLD tholds[12] Thresholds (6 x 2)
76276 +
76277 +Command Values
76278 + None defined
76279 +
76280 +Reset Values
76281 + pollTime is 0, and sampling is disabled
76282 +
76283 +Restrictions
76284 + Can only be issued if the AR6000 device is connected
76285 +
76286 +
76287 +=====================================================================
76288 +
76289 +Name
76290 + SCAN_PARAMS
76291 +
76292 +Synopsis
76293 + The minact parameter determines the minimum active channel dwell time, within
76294 + which if the STA receives any beacon, it remains on that channel until the maxact
76295 + channel dwell time. If the STA does not receive a beacon within the minact dwell
76296 + time, it switches to scan the next channel.
76297 +
76298 +Command
76299 + wmiconfig -scan -minact=<ms> --maxact=<ms>
76300 +
76301 +Command Parameters
76302 + UINT16 maxact Channel dwell time (in ms), default = 0
76303 + UINT16 minact Channel dwell time (in ms), default = 105
76304 +
76305 +Command Values
76306 + See channel parameters
76307 +
76308 +Reset Values
76309 + None defined
76310 +
76311 +Restrictions
76312 + The minact value should be greater than 0; maxact should be between 5\9665535 ms
76313 + and greater than minact
76314 +
76315 +=====================================================================
76316 +
76317 +
76318 +Name
76319 + SET_ACCESS_PARAMS
76320 +
76321 +Synopsis
76322 + Allows the host to set access parameters for the wireless network. A thorough
76323 + understanding of IEEE 802.11 is required to properly manipulate these parameters.
76324 +
76325 +Command
76326 + wmiconfig eth1 --acparams --txop <limit> --cwmin <0-15>
76327 + --cwmax <0-15> --aifsn<0-15>
76328 +
76329 +Command Parameters
76330 + UINT16 txop The maximum time (expressed in units of
76331 + 32 ms) the device can spend transmitting
76332 + after acquiring the right to transmit
76333 + UINT8 eCWmin Minimum contention window
76334 + UINT8 eCWmax Maximum contention window
76335 + UINT8 aifsn The arbitration inter-frame space number
76336 +
76337 +Command Values
76338 + None
76339 +
76340 +Reset Values
76341 + Reasonable defaults that vary, between endpoints (prioritized streams)
76342 +
76343 +Restrictions
76344 + None
76345 +
76346 +=====================================================================
76347 +
76348 +
76349 +Name
76350 + SET_ADHOC_BSSID
76351 +
76352 +Synopsis
76353 + Allows the host to set the BSSID for an ad hoc network. If a network with this BSSID
76354 + is not found, the target creates an ad hoc network with this BSSID after the connect
76355 + WMI command is triggered (e.g., by the SIOCSIWESSID IOCTL).
76356 +
76357 +Command
76358 + wmiconfig eth1 --adhocbssid <bssid>
76359 +
76360 +Command Parameters
76361 + A_UINT8 bssid[ATH_MAC_LEN] BSSID is specified in xx:xx:xx:xx:xx:xx format
76362 +
76363 +Command Values
76364 + None
76365 +
76366 +Reset Values
76367 + None
76368 +
76369 +Restrictions
76370 + None
76371 +
76372 +=====================================================================
76373 +
76374 +
76375 +Name
76376 + SET_AKMP_PARAMS
76377 +
76378 +Synopsis
76379 + Enables or disables multi PMKID mode.
76380 +
76381 +Command
76382 + wmiconfig eth1 --setakmp --multipmkid=<on/off>
76383 +
76384 +Command Parameters
76385 + typedef struct {
76386 + A_UINT32 akmpInfo;
76387 + } WMI_SET_AKMP_PARAMS_CMD;
76388 +
76389 +Command Values
76390 + akmpInfo;
76391 + bit[0] = 0
76392 + MultiPMKID mode is disabled and PMKIDs that
76393 + were set using the WMI_SET_PMKID_CMD are
76394 + used in the [Re]AssocRequest frame.
76395 + bit[0] = 1
76396 + MultiPMKID mode is enabled and PMKIDs issued
76397 + by the WMI_SET_PMKID_LIST_CMD are used in
76398 + the next [Re]AssocRequest sent to the AP.
76399 +
76400 +Reset Values
76401 + MultiPMKID mode is disabled
76402 +
76403 +Restrictions
76404 + None
76405 +
76406 +=====================================================================
76407 +
76408 +
76409 +Name
76410 + SET_APPIE
76411 +
76412 +Synopsis
76413 + Add an application-specified IE to a management frame. The maximum length is
76414 + 76 bytes. Including the length and the element ID, this translates to 78 bytes.
76415 +
76416 +Command
76417 + wmiconfig --setappie <frame> <IE>, where:
76418 +
76419 + frame
76420 + One of beacon, probe, respon, assoc
76421 +
76422 + IE
76423 + A hex string beginning with DD (if = 0, no
76424 + IE is sent in the management frame)
76425 +
76426 +Command Parameters
76427 + mgmtFrmType;
76428 + A WMI_MGMT_FRAME_TYPE
76429 +
76430 + ieLen;
76431 + Length of the IE to add to the GMT frame
76432 +
76433 +Command Values
76434 + None
76435 +
76436 +Reset Value
76437 + None defined
76438 +
76439 +Restrictions
76440 + Supported only for the probe request and association request management frame
76441 +types. Also, only one IE can be added per management frame type.
76442 +
76443 +=====================================================================
76444 +
76445 +
76446 +Name
76447 + SET_ASSOC_INFO
76448 +
76449 +Synopsis
76450 + The host uses this command to specify any information elements (IEs) it wishes the
76451 + AR6000 device to add to all future association and reassociation requests. IEs must be
76452 + correct and are used as is by the device. IEs specified through this command are
76453 + cleared with a DISCONNECT.
76454 +
76455 +Command
76456 + wmiconfig eth1 --setAssocIe <IE>
76457 +
76458 +Command Parameters
76459 + UINT8 ieType Used directly in 802.11 frames
76460 + UINT8 bufferSize Size of assocInfo (in bytes) ranging from
76461 + 0\96240. If = 0, previously set IEs are cleared.
76462 + UINT8 assocInfo[bufferSize] Used directly in 802.11 frames
76463 +
76464 +Command Values
76465 + None
76466 +
76467 +Reset Values
76468 + IEs are cleared
76469 +
76470 +Restrictions
76471 + This command can only be issued in the DISCONNECTED state
76472 +
76473 +=====================================================================
76474 +
76475 +
76476 +Name
76477 + SET_AUTHMODE
76478 +
76479 +Synopsis
76480 + Sets the 802.11 authentication mode of reconnection
76481 +
76482 +Command
76483 + wmiconfig eth1 --setauthmode <mode>
76484 +
76485 +Command Parameters
76486 + UINT8 mode
76487 +
76488 +Command Values
76489 + mode = 0x00 Proceed with authentication during reconnect
76490 + = 0x01 Do not proceed with authentication during reconnect
76491 +
76492 +Reset Values
76493 + Authentication
76494 +
76495 +Restrictions
76496 + None
76497 +
76498 +=====================================================================
76499 +
76500 +
76501 +Name
76502 + SET_BEACON_INT
76503 +
76504 +Synopsis
76505 + Sets the beacon interval for an ad hoc network. Beacon interval selection may have an
76506 + impact on power savings. To some degree, a longer interval reduces power
76507 + consumption but also decreases throughput. A thorough understanding of IEEE
76508 + 802.11 ad hoc networks is required to use this command effectively.
76509 +
76510 +Command
76511 + wmiconfig eth1 --ibssconintv
76512 +
76513 +Command Parameters
76514 + UINT16 beaconInterval Specifies the beacon interval in TU units (1024 ms)
76515 +
76516 +Command Values
76517 + None
76518 +
76519 +Reset Values
76520 + The default beacon interval is 100 TUs (102.4 ms)
76521 +
76522 +Restrictions
76523 + This command can only be issued before the AR6000 device starts an ad hoc network
76524 +
76525 +See Also
76526 + \93SET_IBSS_PM_CAPS\94
76527 +
76528 +=====================================================================
76529 +
76530 +
76531 +Name
76532 + SET_BIT_RATE
76533 +
76534 +Synopsis
76535 + The host uses this command to set the AR6000 device to a specific fixed rate.
76536 +
76537 +Command
76538 + wmiconfig eth1 --setfixrates <rate_0> ... <rate_n>
76539 +
76540 +Command Parameters
76541 + INT8 rateIndex
76542 + A WMI_BIT_RATE value
76543 + {
76544 + RATE_AUTO = -1
76545 + RATE_1Mb = 0
76546 + RATE_2Mb = 1
76547 + RATE_5_5M = 2
76548 + RATE_11Mb = 3
76549 + RATE_6Mb = 4
76550 + RATE_9Mb = 5
76551 + RATE_12Mb = 6
76552 + RATE_18Mb = 7
76553 + RATE_24Mb = 8
76554 + RATE_36Mb = 9
76555 + RATE_48Mb = 10
76556 + RATE_54Mb = 11
76557 + } WMI_BIT_RATE
76558 +
76559 +
76560 +Command Values
76561 + See command parameters
76562 +
76563 +Reset Values
76564 + The dynamic rate is determined by the AR6000 device
76565 +
76566 +Restrictions
76567 + This command is intended for use only during development/debug; it is not
76568 +intended for use in production
76569 +
76570 +See Also
76571 + \93GET_BIT_RATE\94
76572 +
76573 +=====================================================================
76574 +
76575 +
76576 +Name
76577 + SET_BMISS_TIME
76578 +
76579 +Synopsis
76580 + This command sets the beacon miss (BMISS) time, which the AR6000 hardware use
76581 + to recognize missed beacons. When an excessive number (15) of consecutive beacons
76582 + are missed, the AR6000 consider switching to a different BSS. The time can be
76583 + specified in number of beacons or in TUs.
76584 +
76585 +Command(s)
76586 + wmiconfig eth1 --setbmissbeacons=<val>
76587 + wmiconfig eth1 --setbmisstime=<val>
76588 +
76589 +Command Parameters
76590 + UINT16 bmissTime Specifies the beacon miss time
76591 + [1000...5000] in TUs (1024 ms)
76592 + UINT16 bmissbeacons Specifies the number of beacons [5...50]
76593 +
76594 +Command Values
76595 + None
76596 +
76597 +Reset Values
76598 + bmissTime is 1500 TUs (1536 ms)
76599 +
76600 +Restrictions
76601 + None
76602 +
76603 +=====================================================================
76604 +
76605 +
76606 +Name
76607 + SET_BSS_FILTER
76608 +
76609 +Synopsis
76610 + The host uses this to inform the AR6000 device of the types of networks about which
76611 + it wants to receive information from the \93BSSINFO\94 event. As the device performs
76612 + either foreground or background scans, it applies the filter and sends \93BSSINFO\94
76613 + events only for the networks that pass the filter. If any of the bssFilter or the ieMask
76614 + filter matches, a BSS Info is sent to the host. The ieMask currently is used as a match
76615 + for the IEs in the beacons, probe reponses and channel switch action management
76616 + frame. See also \93Scan and Roam\94 on page C-1.
76617 +
76618 + The BSS filter command has been enhanced to support IE based filtering. The IEs can
76619 + be specified as a bitmask through this command using this enum.
76620 +
76621 +Command
76622 + wmiconfig eth1 \96filter = <filter> --ieMask 0x<mask>
76623 +
76624 +Command Parameters
76625 + UINT8 BssFilter
76626 +
76627 + Command Values
76628 + typedef struct {
76629 + A_UINT8 bssFilter; See WMI_BSS_FILTER
76630 + A_UINT32 ieMask;
76631 + } __ATTRIB_PACK WMI_BSS_FILTER_CMD;
76632 +
76633 + The ieMask can take this combination of values:
76634 +
76635 + enum {
76636 + BSS_ELEMID_CHANSWITCH = 0x01
76637 + BSS_ELEMID_ATHEROS = 0x02,
76638 + }
76639 +
76640 +Reply Value
76641 + None
76642 +
76643 +Reset Value
76644 + BssFilter = NONE_BSS_FILTER (0)
76645 +
76646 +Restrictions
76647 + None
76648 +
76649 +See Also
76650 + \93CONNECT_CMD\94
76651 +
76652 +=====================================================================
76653 +
76654 +
76655 +Name
76656 + SET_BT_PARAMS
76657 +
76658 +Synopsis
76659 + This command is used to set the status of a Bluetooth stream or set Bluetooth
76660 + coexistence register parameters. The stream may be an SCO or an A2DP stream and
76661 + its status can be started/stopped/suspended/resumed.
76662 +
76663 +Command
76664 + wmiconfig \96setBTparams <paramType> <params>
76665 +
76666 +Command Parameters
76667 + struct {
76668 + union {
76669 + BT_PARAMS_SCO scoParams;
76670 + BT_PARAMS_A2DP a2dpParams;
76671 + BT_PARAMS_MISC miscParams;
76672 + BT_COEX_REGS regs;
76673 + } info;
76674 + A_UINT8 paramType;
76675 + struct {
76676 + A_UINT8 noSCOPkts; Number of SCO packets between consecutive PS-POLLs
76677 + A_UINT8 pspollTimeout;
76678 + A_UINT8 stompbt;
76679 + } BT_PARAMS_SCO;
76680 + struct {
76681 + A2DP BT stream parameters
76682 + A_UINT32 period;
76683 + A_UINT32 dutycycle;
76684 + A_UINT8 stompbt;
76685 + } BT_PARAMS_A2DP;
76686 + struct {
76687 + union {
76688 + WLAN_PROTECT_POLICY_TYPE protectParams;
76689 + A_UINT16 wlanCtrlFlags;
76690 + }info;
76691 + A_UINT8 paramType;
76692 + } BT_PARAMS_MISC;
76693 + struct {
76694 + BT coexistence registers values
76695 + A_UINT32 mode; Coexistence mode
76696 + A_UINT32 scoWghts; WLAN and BT weights
76697 + A_UINT32 a2dpWghts;
76698 + A_UINT32 genWghts;
76699 + A_UINT32 mode2; Coexistence mode2
76700 + A_UINT8 setVal;
76701 + } BT_COEX_REGS;
76702 +
76703 +Command Values
76704 + None defined
76705 +
76706 +Reset Value
76707 + None
76708 +
76709 +Restrictions
76710 + None
76711 +
76712 +=====================================================================
76713 +
76714 +
76715 +Name
76716 + SET_BT_STATUS
76717 +
76718 +Synopsis
76719 + Sets the status of a Bluetooth stream. The stream may be a SCO or an A2DP stream
76720 + and its status can be started/stopped/suspended/resumed.
76721 +
76722 +Command
76723 + wmiconfig \96setBTstatus <streamType> <status>
76724 +
76725 +Command Parameters
76726 + {
76727 + A_UINT8 streamType; Stream type
76728 + A_UINT8 status; Stream status
76729 + }WMI_SET_BT_STATUS_CMD;
76730 +
76731 +Command Values
76732 + {
76733 + BT_STREAM_UNDEF = 0
76734 + BT_STREAM_SCO
76735 + SCO stream
76736 + BT_STREAM_A2DP
76737 + A2DP stream
76738 + BT_STREAM_MAX
76739 + } BT_STREAM_TYPE;
76740 +
76741 + {
76742 + BT_STATUS_UNDEF = 0
76743 + BT_STATUS_START
76744 + BT_STATUS_STOP
76745 + BT_STATUS_RESUME
76746 + BT_STATUS_SUSPEND
76747 + BT_STATUS_MAX
76748 + } BT_STREAM_STATUS;
76749 +
76750 +Reset Value
76751 + None defined
76752 +
76753 +Restrictions
76754 + None
76755 +
76756 +=====================================================================
76757 +
76758 +
76759 +Name
76760 + SET_CHANNEL_PARAMETERS
76761 +
76762 +Synopsis
76763 + Configures various WLAN parameters related to channels, sets the wireless mode,
76764 + and can restrict the AR6000 device to a subset of available channels. The list of
76765 + available channels varies depending on the wireless mode and the regulatory
76766 + domain. The device never operates on a channel outside of its regulatory domain. The
76767 + device starts to scan the list of channels right after this command.
76768 +
76769 +Command
76770 + wmiconfig eth1 --wmode <mode> <list>
76771 +
76772 +Command Parameters
76773 + UINT8 phyMode See Values below.
76774 + UINT8 numberOfChannels
76775 + Number of channels in the channel array that
76776 + follows. If = 0, then the device uses all of the
76777 + channels permitted by the regulatory domain
76778 + and by the specified phyMode.
76779 + UINT16 channel[numberOfChannels]
76780 + Array listing the subset of channels (expressed
76781 + as frequencies in MHz) the host wants the
76782 + device to use. Any channel not permitted by
76783 + the specified phyMode or by the specified
76784 + regulatory domain is ignored by the device.
76785 +
76786 +Command Values
76787 + phyMode = {
76788 + Wireless mode
76789 + 11a = 0x01
76790 + 11g = 0x02
76791 + 11ag = 0x03
76792 + 11b = 0x04
76793 + 11g only = 0x05
76794 + }
76795 +
76796 +Reset Values
76797 + phyMode
76798 + 11ag
76799 + 802.11a/g modules
76800 + 11g
76801 + 802.11g module
76802 + channels
76803 + Defaults to all channels permitted by the
76804 + current regulatory domain.
76805 +
76806 +Restrictions
76807 + This command, if issued, should be issued soon after reset and prior to the first
76808 + connection. This command should only be issued in the DISCONNECTED state.
76809 +
76810 +=====================================================================
76811 +
76812 +
76813 +Name
76814 + SET_DISC_TIMEOUT
76815 +
76816 +Synopsis
76817 + The host uses this command to configure the amount of time that the AR6000 should
76818 + spend when it attempts to reestablish a connection after losing link with its current
76819 + BSS. If this time limit is exceeded, the AR6000 send a \93DISCONNECT\94 event. After
76820 + sending the \93DISCONNECT\94 event the AR6000 continues to attempt to reestablish a
76821 + connection, but they do so at the interval corresponding to a foreground scan as
76822 + established by the \93SET_SCAN_PARAMS\94 command.
76823 +
76824 + A timeout value of 0 indicates that the AR6000 will disable all autonomous roaming,
76825 + so that the AR6000 will not perform any scans after sending a \93DISCONNECT\94
76826 + event to the host. The state is maintained until a shutdown or host sets different
76827 + timeout value from 0.
76828 +
76829 +Command
76830 + wmiconfig eth1 --disc=<timeout in seconds>
76831 +
76832 +Command Parameters
76833 + UINT8 disconnectTimeout
76834 + Specifies the time limit (in seconds) after
76835 + which a failure to reestablish a connection
76836 + results in a \93DISCONNECT\94 event
76837 +
76838 +Command Values
76839 + None
76840 +
76841 +Reset Values
76842 + disconnectTimeout is 10 seconds
76843 +
76844 +Restrictions
76845 + This command can only be issued while in a DISCONNECTED state
76846 +
76847 +=====================================================================
76848 +
76849 +
76850 +Name
76851 + SET_FIXRATES
76852 +
76853 +Synopsis
76854 + By default, the AR6000 device uses all PHY rates based on mode of operation. If the
76855 + host application requires the device to use subset of supported rates, it can set those
76856 + rates with this command. In 802.11g mode, the AR6000 device takes the entire
76857 + 802.11g basic rate set and the rates specified with this command and uses it as the
76858 + supported rate set.
76859 +
76860 + This rate set is advertised in the probe request and the assoc/re-assoc request as
76861 + supported rates. Upon successful association, the device modifies the rate set pool
76862 + using the: intersection of AP-supported rates with the union of the 802.11g basic rate
76863 + set and rates set using this command. The device picks transmission rates from this
76864 + pool based on a rate control algorithm.
76865 +
76866 +Command
76867 + TBD
76868 +
76869 +Command Parameters
76870 + A_UINT16 fixRateMask;
76871 + The individual bit is an index for rate table,
76872 + and setting the that index to 1 would set that
76873 + corresponding rate. E.g., fixRateMask = 9
76874 + (1001) sets 1 Mbps and 11 Mbps.
76875 +
76876 +Command Values
76877 + None
76878 +
76879 +Reset Value
76880 + None defined
76881 +
76882 +Restrictions
76883 + None
76884 +
76885 +See Also
76886 + \93GET_FIXRATES\94
76887 +
76888 +=====================================================================
76889 +
76890 +
76891 +Name
76892 + SET_WHAL_PARAM
76893 +
76894 +Synopsis
76895 + An internal AR6000 command that is used to set certain hardware parameters. The
76896 + description of this command is in $WORKAREA/include/halapi.h.
76897 +
76898 +Command
76899 + TBD
76900 +
76901 +Command Parameters
76902 + ATH_HAL_SETCABTO_CMDID
76903 + Sets the timeout waiting for the multicast
76904 + traffic after a DTIM beacon (in TUs).
76905 +
76906 +Command Values
76907 + None
76908 +
76909 +Reset Value
76910 + Default = 10 TUs
76911 +
76912 +Restrictions
76913 + This command should be executed before issuing a connect command.
76914 +
76915 +=====================================================================
76916 +
76917 +
76918 +Name
76919 + SET_HOST_SLEEP_MODE
76920 +
76921 +Synopsis
76922 + The host uses this command to set the host mode to asleep or awake. All packets are
76923 + delivered to the host when the host mode is awake. When host mode is asleep, only if
76924 + WoW is enabled and the incoming packet matches one of the specified WoW
76925 + patterns, will the packet be delivered to the host. The host will also be woken up by
76926 + the target for pattern-matching packets and important events.
76927 +
76928 +Command
76929 + wmiconfig \96sethostmode=<asleep/awake>
76930 +
76931 +Command Parameters
76932 + A_BOOL awake Set the host mode to awake
76933 + A_BOOL asleep Set the host mode to asleep
76934 +
76935 +Command Values
76936 + 1 = awake, 0 = asleep
76937 +
76938 +Reset Value
76939 + None defined (default host mode is awake)
76940 +
76941 +Restrictions
76942 + None
76943 +
76944 +
76945 +=====================================================================
76946 +
76947 +Name
76948 + SET_IBSS_PM_CAPS
76949 +
76950 +Synopsis
76951 + Used to support a non-standard power management scheme for an ad hoc wireless
76952 + network consisting of up to eight stations (STAs) that support this form of power
76953 + saving (e.g., Atheros-based STAs). A thorough understanding of IEEE 802.11 ad hoc
76954 + networks is required to use this command effectively.
76955 +
76956 +Command
76957 + wmiconfig eth1 --ibsspmcaps --ps=<enable/disable>
76958 + --aw=<ATIM Windows in ms>
76959 + --ttl=<Time to live in number of beacon periods>
76960 + --to=<timeout in ms>
76961 +
76962 +Command Parameters
76963 + UINT8 power_saving
76964 + = 0
76965 + The non-standard power saving scheme is
76966 + disabled and maximum throughput (with no
76967 + power saving) is obtained.
76968 +
76969 + = 1
76970 + Ad hoc power saving scheme is enabled (but
76971 + throughput may be decreased)
76972 +
76973 + UINT16 atim_windows
76974 + Specifies the length (in ms) of the ad hoc traffic
76975 + indication message (ATIM) windows used in an ad
76976 + hoc network. All Atheros-based STAs that join the
76977 + network use this duration ATIM window.
76978 +
76979 + The duration is communicated between wireless
76980 + STAs through an IE in beacons and probe responses.
76981 +
76982 + The host sets atim_windows to control trade-offs
76983 + between power use and throughput. The value
76984 + chosen should be based on the beacon interval (see
76985 + the \93SET_BEACON_INT\94 command) on the
76986 + expected number of STAs in the IBSS, and on the
76987 + amount of traffic and traffic patterns between STAs.
76988 +
76989 + UINT16 timeout_value
76990 + Specifies the timeout (in ms). The value is the same
76991 + for all ad hoc connections, but tracks separately for
76992 + each.
76993 +
76994 + Applicable only for a beacon period and used to
76995 + derive actual timeout values on the Tx and Rx sides.
76996 + On the Tx side, the value defines a window during
76997 + which the STA accepts the frame(s) from the host for a
76998 + particular connection. Until closed, the window
76999 + restarts with every frame received from the host. On
77000 + the Rx side, indicates the time until which the STA
77001 + continues accepting frames from a particular
77002 + connection. The value resets with every frame
77003 + received. The value can be used to determine the
77004 + trade off between throughput and power.
77005 + Default = 10 ms
77006 +
77007 + UINT8 ttl
77008 + Specifies the value in number of beacon periods. The
77009 + value is used to set a limit on the time until which a
77010 + frame is kept alive in the AR6001 before being
77011 + discarded. Default = 5
77012 +
77013 +Command Values
77014 + None
77015 +
77016 +Reset Values
77017 + By default, power_saving is enabled with atim_window = 20 ms
77018 +
77019 +Restrictions
77020 + Can only be issued before the AR6000 starts an ad hoc network
77021 +
77022 +See Also
77023 + \93SET_BEACON_INT\94
77024 +
77025 +=====================================================================
77026 +
77027 +
77028 +
77029 +Name
77030 + SET_LISTEN_INT
77031 +
77032 +Synopsis
77033 + The host uses this command to request a listen interval, which determines how often
77034 + the AR6000 device should wake up and listen for traffic. The listen interval can be set
77035 + by the TUs or by the number of beacons. The device may not be able to comply with
77036 + the request (e.g., if the beacon interval is greater than the requested listen interval, the
77037 + device sets the listen interval to the beacon interval). The actual listen interval used
77038 + by the device is available in the \93CONNECT\94 event.
77039 +
77040 +Command
77041 + wmiconfig eth1 --listen=<#of TUs, can range from 15 to 3000>
77042 +
77043 + --listenbeacons=<#of beacons, can range from 1 to 50>
77044 +
77045 +Command Parameters
77046 + UINT16 listenInterval
77047 + Specifies the listen interval in Kms
77048 + (1024 ms), ranging from 100 to 1000
77049 +
77050 + UINT16 listenbeacons
77051 + Specifies the listen interval in beacons,
77052 + ranging from 1 to 50
77053 +
77054 +Command Values
77055 + None
77056 +
77057 +Reset Values
77058 + The device sets the listen interval equal to the beacon interval of the AP it associates
77059 + to.
77060 +
77061 +Restrictions
77062 + None
77063 +
77064 +=====================================================================
77065 +
77066 +
77067 +Name
77068 + SET_LPREAMBLE
77069 +
77070 +Synopsis
77071 + Overrides the short preamble capability of the AR6000 device
77072 +
77073 +Command
77074 + TBD
77075 +
77076 +Command Parameters
77077 + WMI_LPREAMBLE_DISABLED
77078 + The device is short-preamble capable
77079 +
77080 + WMI_LPREAMBLE_ENABLED
77081 + The device supports only the long-
77082 + preamble mode
77083 +
77084 +Command Values
77085 + None
77086 +
77087 +Reset Value
77088 + None defined
77089 +
77090 +Restrictions
77091 + None
77092 +
77093 +
77094 +=====================================================================
77095 +
77096 +Name
77097 + SET_MAX_SP_LEN
77098 +
77099 +Synopsis
77100 + Set the maximum service period; indicates the number of packets the AR6001 can
77101 + receive from the AP when triggered
77102 +
77103 +Command
77104 + wmiconfig eth1 --setMaxSPLength <maxSPLen>
77105 +
77106 +Command Parameters
77107 + UINT8 maxSPLen
77108 + An APSD_SP_LEN_TYPE value
77109 +
77110 +Command Values
77111 + {
77112 + DELIVER_ALL_PKT = 0x0
77113 + DELIVER_2_PKT = 0x1
77114 + DELIVER_4_PKT = 0x2
77115 + DELIVER_6_PKT = 0x3
77116 + }APSD_SP_LEN_TYPE
77117 +
77118 +
77119 +Reset Values
77120 + maxSPLen is DELIVER_ALL_PKT
77121 +
77122 +Restrictions
77123 + None
77124 +
77125 +=====================================================================
77126 +
77127 +
77128 +Name
77129 + SET_OPT_MODE
77130 +
77131 +Synopsis
77132 + Special feature, sets the special mode on/off
77133 +
77134 +Command
77135 + wmiconfig eth1 --mode <mode>
77136 + Set the optional mode, where mode is special or off
77137 +
77138 +Command Parameters
77139 + enum {
77140 + SPECIAL_OFF
77141 + SPECIAL_ON
77142 + } OPT_MODE_TYPE;
77143 +
77144 +Command Values
77145 +
77146 +Reset Value
77147 + Mode = Off
77148 +
77149 +Restrictions
77150 + None
77151 +
77152 +=====================================================================
77153 +
77154 +
77155 +Name
77156 + SET_PMKID
77157 +
77158 +Synopsis
77159 + The host uses this command to enable or disable a pairwise master key ID (PMKID)
77160 + in the AR6000 PMKID cache. The AR6000 clears its PMKID cache on receipt of a
77161 + DISCONNECT command from the host. Individual entries in the cache might be
77162 + deleted as the AR6000 detect new APs and decides to remove old ones.
77163 +
77164 +Command
77165 + wmiconfig eth1 --setbsspmkid --bssid=<aabbccddeeff>
77166 + --bsspmkid=<pmkid>
77167 +
77168 +Command Parameters
77169 + UINT8 bssid[6]
77170 + The MAC address of the AP that the
77171 + PMKID corresponds to (6 bytes in hex
77172 + format)
77173 +
77174 + UINT8 enable
77175 + Either PMKID_DISABLE (0) to disable
77176 + the PMKID or PMKID_ENABLE (1) to
77177 + enable it (16 bytes in hex format)
77178 +
77179 + UINT8 pmkid[16]
77180 + Meaningful only if enable is
77181 + PMKID_ENABLE, when it is the PMKID
77182 + that the AR6000 should use on the next
77183 + reassociation with the specified AP
77184 +
77185 +Command Values
77186 + enable
77187 + = 0 (disable), 1 (enable)
77188 + PKMID enabled/disabled
77189 +
77190 +Reset Values
77191 + None defined
77192 +
77193 +Restrictions
77194 + Only supported in infrastructure networks
77195 +
77196 +=====================================================================
77197 +
77198 +
77199 +Name
77200 + SET_PMKID_LIST_CMD
77201 +
77202 +Synopsis
77203 + Configures the list of PMKIDs on the firmware.
77204 +
77205 +Command
77206 + wmiconfig --setpmkidlist --numpmkid=<n> --pmkid=<pmkid_1>
77207 + ... --pmkid=<pmkid_n>
77208 +
77209 + Where n is the number of pmkids (maximum = 8) and pmkid_i is the ith pmkid (16
77210 + bytes in hex format)
77211 +
77212 +Command Parameters
77213 + {
77214 + A_UINT8 pmkid[WMI_PMKID_LEN];
77215 + } __ATTRIB_PACK WMI_PMKID;
77216 +
77217 + {
77218 + A_UINT32 numPMKID;
77219 + WMI_PMKID pmkidList[WMI_MAX_PMKID_CACHE];
77220 + } __ATTRIB_PACK WMI_SET_PMKID_LIST_CMD;
77221 +
77222 +Command Values
77223 + None
77224 +
77225 +Reset Values
77226 + None
77227 +
77228 +Restrictions
77229 + Supported only in infrastructure modes
77230 +
77231 +=====================================================================
77232 +
77233 +
77234 +Name
77235 + SET_POWER_MODE
77236 +
77237 +Synopsis
77238 + The host uses this command to provide the AR6000 device with guidelines on the
77239 + desired trade-off between power utilization and performance.
77240 +
77241 + In normal power mode, the device enters a sleep state if they have nothing to do,
77242 + which conserves power but may cost performance as it can take up to 2 ms to
77243 + resume operation after leaving sleep state.
77244 +
77245 + In maximum performance mode, the device never enters sleep state, thus no time
77246 + is spent waking up, resulting in higher power consumption and better
77247 + performance.
77248 +
77249 +Command
77250 + TBD
77251 +
77252 +Command Parameters
77253 + UINT8 powerMode
77254 + WMI_POWER_MODE value
77255 + {
77256 + REC_POWER = 1
77257 + (Recommended setting) Tries to conserve
77258 + power without sacrificing performance
77259 + MAX_PERF_POWER = 2
77260 + Setting that maximizes performance at
77261 + the expense of power
77262 +
77263 + All other values are reserved
77264 + } WMI_POWER_MODE
77265 +
77266 +Command Values
77267 + See command parameters
77268 +
77269 +Reset Values
77270 + powerMode is REC_POWER
77271 +
77272 +Restrictions
77273 + This command should only be issued in the DISCONNECTED state for the
77274 + infrastructure network.
77275 +
77276 + For a PM-disabled ad hoc network, the power mode should remain in
77277 + MAX_PERF_POWER.
77278 +
77279 + For a PM-enabled ad hoc network, the device can have REC_POWER or
77280 + MAX_PERF_POWER set, but either way it must follow the power save ad hoc
77281 + protocol. The host can change power modes in the CONNECTED state.
77282 +
77283 + Host changes to the PS setting when the STA is off the home channel take no effect
77284 + and cause a TARGET_PM_FAIL event.
77285 +
77286 +=====================================================================
77287 +
77288 +
77289 +Name
77290 + SET_POWER_PARAMS
77291 +
77292 +Synopsis
77293 + The host uses this command to configure power parameters
77294 +
77295 +Command
77296 + wmiconfig eth1 --pmparams --it=<ms> --np=<number of PS POLL>
77297 + --dp=<DTIM policy: ignore/normal/stick>
77298 +
77299 +Command Parameters
77300 + UINT16 idle_period
77301 + Length of time (in ms) the AR6000 device
77302 + remains awake after frame Rx/Tx before going
77303 + to SLEEP state
77304 +
77305 + UINT16 pspoll_number
77306 + The number of PowerSavePoll (PS-poll)
77307 + messages the device should send before
77308 + notifying the AP it is awake
77309 +
77310 + UINT16 dtim_policy
77311 + A WMI_POWER_PARAMS_CMD value
77312 +
77313 + {
77314 + IGNORE_DTIM =1
77315 + The device does not listen to any content after
77316 + beacon (CAB) traffic
77317 + NORMAL_DTIM = 2
77318 + DTIM period follows the listen interval (e.g., if
77319 + the listen interval is 4 and the DTIM period is 2,
77320 + the device wakes up every fourth beacon)
77321 + STICK_DTIM = 3
77322 + Device attempt to receive all CAB traffic (e.g., if
77323 + the DTIM period is 2 and the listen interval is 4,
77324 + the device wakes up every second beacon)
77325 + } WMI_POWER_PARAMS_CMD
77326 +
77327 +Command Parameters
77328 + See command parameters
77329 +
77330 +Reset Values
77331 + idle_period
77332 + 200 ms
77333 +
77334 + pspoll_number
77335 + = 1
77336 +
77337 + dtim_policy
77338 + = NORMAL_DTIM
77339 +
77340 +Restrictions
77341 + None
77342 +
77343 +=====================================================================
77344 +
77345 +
77346 +Name
77347 + SET_POWERSAVE_PARAMS
77348 +
77349 +Synopsis
77350 + Set the two AR6000 power save timers (PS-POLL timer and APSD trigger timer) and
77351 + the two ASPD TIM policies
77352 +
77353 +Command
77354 + wmiconfig eth1--psparams --psPollTimer=<psPollTimeout in ms>
77355 + --triggerTimer=<triggerTimeout in ms> --apsdTimPolicy=<ignore/
77356 + adhere> --simulatedAPSDTimPolicy=<ignore/adhere>
77357 +
77358 +Command Parameters
77359 + typedef struct {
77360 + A_UINT16 psPollTimeout;
77361 + Timeout (in ms) after sending PS-POLL; the
77362 + AR6000 device sleeps if it does not receive a
77363 + data packet from the AP
77364 +
77365 + A_UINT16 triggerTimeout;
77366 + Timeout (in ms) after sending a trigger; the
77367 + device sleeps if it does not receive any data
77368 + or null frame from the AP
77369 +
77370 + APSD_TIM_POLICY apsdTimPolicy;
77371 + TIM behavior with queue APSD enabled
77372 +
77373 + APSD_TIM_POLICY simulatedAPSD
77374 +
77375 + TimPolicy;
77376 + TIM behavior with simulated APSD
77377 + enabled
77378 +
77379 + typedef enum {
77380 + IGNORE_TIM_ALL_QUEUES_APSD = 0,
77381 + PROCESS_TIM_ALL_QUEUES_APSD = 1,
77382 + IGNORE_TIM_SIMULATED_APSD = 2,
77383 + POWERSAVE_TIMERS_POLICY = 3,
77384 + } APSD_TIM_POLICY;
77385 +
77386 +Command Values
77387 + None
77388 +
77389 +Reset Values
77390 + psPollTimeout is 50 ms; triggerTimeout is 10 ms;
77391 + apsdTimPolicy = IGNORE_TIM_ALL_QUEUES_APSD;
77392 + simulatedAPSDTimPolicy = POWERSAVE_TIMERS_POLICY
77393 +
77394 +Restrictions
77395 + When this command is used, all parameters must be set; this command does not
77396 + allow setting only one parameter.
77397 +
77398 +=====================================================================
77399 +
77400 +
77401 +Name
77402 + SET_PROBED_SSID
77403 +
77404 +Synopsis
77405 + The host uses this command to provide a list of up to MAX_PROBED_SSID_INDEX
77406 + (six) SSIDs that the AR6000 device should actively look for. It lists the active SSID
77407 + table. By default, the device actively looks for only the SSID specified in the
77408 + \93CONNECT_CMD\94 command, and only when the regulatory domain allows active
77409 + probing. With this command, specified SSIDs are probed for, even if they are hidden.
77410 +
77411 +Command
77412 + wmiconfig eth1 --ssid=<ssid> [--num=<index>]
77413 +
77414 +Command Parameters
77415 + {
77416 + A_UINT8 numSsids
77417 + A number from 0 to
77418 + MAX_PROBED_SSID_INDEX indicating
77419 + the active SSID table entry index for this
77420 + command (if the specified entry index
77421 + already has an SSID, the SSID specified in
77422 + this command replaces it)
77423 +
77424 + WMI_PROBED_SSID_INFO probedSSID[1]
77425 + } WMI_PROBED_SSID_CMD
77426 +
77427 + {
77428 + A_UINT8 flag
77429 + WMI_SSID_FLAG indicates the current
77430 + entry in the active SSID table
77431 + A_UINT8 ssidLength
77432 + Length of the specified SSID in bytes.
77433 + If = 0, the entry corresponding to the
77434 + index is erased
77435 + A_UINT8 ssid[32]
77436 + SSID string actively probed for when
77437 + permitted by the regulatory domain
77438 + } WMI_PROBED_SSID_INFO
77439 +
77440 +Command Values
77441 + WMI_SSID_FLAG
77442 + {
77443 + DISABLE_SSID_FLAG = 0
77444 + Disables entry
77445 + SPECIFIC_SSID_FLAG = 1
77446 + Probes specified SSID
77447 + ANY_SSID_FLAG = 2
77448 + Probes for any SSID
77449 + } WMI_SSID_FLAG
77450 +
77451 +Reset Value
77452 + The entries are unused.
77453 +
77454 +Restrictions
77455 + None
77456 +
77457 +=====================================================================
77458 +
77459 +
77460 +Name
77461 + SET_REASSOC_MODE
77462 +
77463 +Synopsis
77464 + Specify whether the disassociated frame should be sent or not upon reassociation.
77465 +
77466 +Command
77467 + wmiconfig eth1 --setreassocmode <mode>
77468 +
77469 +Command Parameters
77470 + UINT8 mode
77471 +
77472 +Command Values
77473 + mode
77474 + = 0x00
77475 + Send disassoc to a previously connected AP
77476 + upon reassociation
77477 + = 0x01
77478 + Do not send disassoc to previously connected
77479 + AP upon reassociation
77480 +
77481 +Reset Values
77482 + None defined
77483 +
77484 +Restrictions
77485 + None
77486 +
77487 +
77488 +=====================================================================
77489 +
77490 +Name
77491 + SET_RETRY_LIMITS
77492 +
77493 +Synopsis
77494 + Allows the host to influence the number of times that the AR6000 device should
77495 + attempt to send a frame before they give up.
77496 +
77497 +Command
77498 + wmiconfig --setretrylimits <frameType> <trafficClass> <maxRetries>
77499 + <enableNotify>
77500 +
77501 +Command Parameters
77502 + {
77503 + UINT8 frameType
77504 + A WMI_FRAMETYPE specifying
77505 + which type of frame is of interest.
77506 + UINT8 trafficClass
77507 + Specifies a traffic class (see
77508 + \93CREATE_PSTREAM\94). This
77509 + parameter is only significant when
77510 + frameType = DATA_FRAMETYPE.
77511 + UINT8 maxRetries
77512 + Maximum number of times the
77513 + device attempts to retry a frame Tx,
77514 + ranging from WMI_MIN_RETRIES
77515 + (2) to WMI_MAX_RETRIES (15). If
77516 + the special value 0 is used,
77517 + maxRetries is set to 15.
77518 + A_UINT8 enableNotify
77519 + Notify when enabled
77520 + } WMI_RETRY_LIMIT_INFO
77521 +
77522 + {
77523 + A_UINT8 numEntries
77524 + WMI_RETRY_LIMIT_INFO retryLimitInfo[1]
77525 + } WMI_SET_RETRY_LIMITS_CMD
77526 +
77527 +Command Values
77528 + {
77529 + MGMT_FRAMETYPE = 0 Management frame
77530 + CONTROL_FRAMETYPE = 1 Control frame
77531 + DATA_FRAMETYPE = 2 Data frame
77532 + } WMI_FRAMETYPE
77533 +
77534 +Reset Values
77535 + Retries are set to 15
77536 +
77537 +Restrictions
77538 + None
77539 +
77540 +=====================================================================
77541 +
77542 +
77543 +Name
77544 + SET_ROAM_CTRL
77545 +
77546 +Synopsis
77547 + Affects how the AR6000 device selects a BSS. The host uses this command to set and
77548 + enable low RSSI scan parameters. The time period of low RSSI background scan is
77549 + mentioned in scan period. Low RSSI scan is triggered when the current RSSI
77550 + threshold (75% of current RSSI) is equal to or less than scan threshold.
77551 +
77552 + Low RSSI roam is triggered when the current RSSI threshold falls below the roam
77553 + threshold and roams to a better AP by the end of the scan cycle. During Low RSSI
77554 + roam, if the STA finds a new AP with an RSSI greater than roam RSSI to floor, during
77555 + scan, it roams immediately to it instead of waiting for the end of the scan cycle. See
77556 + also \93Scan and Roam\94 on page C-1.
77557 +
77558 +Command
77559 + wmiconfig --roam <roamctrl> <info>, where info is <scan period>
77560 + <scan threshold> <roam threshold> <roam rssi floor>
77561 +
77562 +Command Parameters
77563 + A_UINT8 roamCtrlType;
77564 +
77565 +Command Values
77566 + WMI_FORCE_ROAM = 1
77567 + Roam to the specified BSSID
77568 +
77569 + WMI_SET_ROAM_MODE = 2
77570 + Default, progd bias, no roam
77571 +
77572 + WMI_SET_HOST_BIAS = 3
77573 + Set the host bias
77574 +
77575 + WMI_SET_LOWRSSI_SCAN_PARAMS = 4
77576 + Info parameters
77577 +
77578 + A_UINT8 bssid[ATH_MAC_LEN];
77579 + WMI_FORCE_ROAM
77580 +
77581 + A_UINT8 roamMode;
77582 + WMI_SET_ROAM_MODE
77583 +
77584 + A_UINT8 bssBiasInfo;
77585 + WMI_SET_HOST_BIAS
77586 +
77587 + A_UINT16 lowrssi_scan_period;
77588 + WMI_SET_LOWRSSI_SCAN_PARAMS
77589 +
77590 + A_INT16
77591 + lowrssi_scan_threshold;
77592 + WMI_SET_LOWRSSI_SCAN_PARAMS
77593 +
77594 + A_INT16 lowrssi_roam_threshold;
77595 + WMI_SET_LOWRSSI_SCAN_PARAMS
77596 +
77597 + A_UINT8 roam_rssi_floor;
77598 + WMI_SET_LOWRSSI_SCAN_PARAMS
77599 +
77600 +Reset Value
77601 + None defined (default lowrssi scan is disabled. Enabled only when scan period is set.)
77602 +
77603 +Restrictions
77604 + None
77605 +
77606 +=====================================================================
77607 +
77608 +
77609 +Name
77610 + SET_RTS
77611 +
77612 +Synopsis
77613 + Decides when RTS should be sent.
77614 +
77615 +Command
77616 + wmiconfig eth1 --setRTS <pkt length threshold>
77617 +
77618 +Command Parameters
77619 + A_UINT16
77620 + threshold;
77621 + Command parameter threshold in bytes. An RTS is
77622 + sent if the data length is more than this threshold.
77623 + The default is to NOT send RTS.
77624 +
77625 +Command Values
77626 + None
77627 +
77628 +Reset Value
77629 + Not to send RTS.
77630 +
77631 +Restrictions
77632 + None
77633 +
77634 +
77635 +=====================================================================
77636 +
77637 +Name
77638 + SET_SCAN_PARAMS
77639 +
77640 +Synopsis
77641 + The host uses this command to set the AR6000 scan parameters, including the duty
77642 + cycle for both foreground and background scanning. Foreground scanning takes
77643 + place when the AR6000 device is not connected, and discovers all available wireless
77644 + networks to find the best BSS to join. Background scanning takes place when the
77645 + device is already connected to a network and scans for potential roaming candidates
77646 + and maintains them in order of best to worst. A second priority of background
77647 + scanning is to find new wireless networks.
77648 +
77649 + The device initiates a scan when necessary. For example, a foreground scan is always
77650 + started on receipt of a \93CONNECT_CMD\94 command or when the device cannot find
77651 + a BSS to connect to. Foreground scanning is disabled by default until receipt of a
77652 + CONNECT command. Background scanning is enabled by default and occurs every
77653 + 60 seconds after the device is connected.
77654 +
77655 + The device implements a binary backoff interval for foreground scanning when it
77656 + enters the DISCONNECTED state after losing connectivity with an AP or when a
77657 + CONNECT command is received. The first interval is ForegroundScanStartPeriod,
77658 + which doubles after each scan until the interval reaches ForegroundScanEndPeriod.
77659 + If the host terminates a connection with DISCONNECT, the foreground scan period
77660 + is ForegroundScanEndPeriod. All scan intervals are measured from the time a full
77661 + scan ends to the time the next full scan starts. The host starts a scan by issuing a
77662 + \93START_SCAN\94 command. See also \93Scan and Roam\94 on page C-1.
77663 +
77664 +Command
77665 + wmiconfig eth1 --scan --fgstart=<sec> --fgend=<sec> --bg=<sec> --
77666 + act=<msec> --pas=<msec> --sr=<short scan ratio> --scanctrlflags
77667 + <connScan> <scanConnected> <activeScan> <reportBSSINFO>
77668 +
77669 +Command Parameters
77670 + UINT16 fgStartPeriod
77671 + First interval used by the device when it
77672 + disconnects from an AP or receives a
77673 + CONNECT command, specified in seconds (0\96
77674 + 65535). If = 0, the device uses the reset value.
77675 + If = 65535, the device disables foreground
77676 + scanning.
77677 +
77678 + UINT16 fgEndPeriod
77679 + The maximum interval the device waits between
77680 + foreground scans specified in seconds (from
77681 + ForegroundScanStartPeriod to 65535). If = 0, the
77682 + device uses the reset value.
77683 +
77684 + UINT16 bgScanPeriod
77685 + The period of background scan specified in
77686 + seconds (0\9665535). By default, it is set to the reset
77687 + value of 60 seconds. If 0 or 65535 is specified, the
77688 + device disables background scanning.
77689 +
77690 + UINT16 maxactChDwellTime
77691 + The period of time the device stays on a
77692 + particular channel while active scanning. It is
77693 + specified in ms (10\9665535). If the special value of
77694 + 0 is specified, the device uses the reset value.
77695 +
77696 + UINT16 PasChDwellTime
77697 + The period of time the device remains on a
77698 + particular channel while passive scanning. It is
77699 + specified in ms (10\9665535). If the special value of
77700 + 0 is specified, the device uses the reset value.
77701 +
77702 + UINT8 shortScanRatio
77703 + Number of short scans to perform for each
77704 + long scan.
77705 +
77706 + UINT8 scanCtrlFlasgs
77707 +
77708 + UINT16 minactChDwellTime
77709 + Specified in ms
77710 +
77711 + UINT32 maxDFSchActTime
77712 + The maximum time a DFS channel can stay
77713 + active before being marked passive, specified in
77714 + ms.
77715 +
77716 +Command Values
77717 + None
77718 +
77719 +Reset Values
77720 + ForegroundScanStart
77721 +Period
77722 + 1 sec
77723 +
77724 + ForegroundScanEndPeriod
77725 + 60 sec
77726 +
77727 + BackgroundScanPeriod
77728 + 60 sec
77729 +
77730 + ActiveChannelDwellTime
77731 + 105 ms
77732 +
77733 +=====================================================================
77734 +
77735 +
77736 +Name
77737 + SET_TKIP_COUNTERMEASURES
77738 +
77739 +Synopsis
77740 + The host issues this command to tell the target whether to enable or disable TKIP
77741 + countermeasures.
77742 +
77743 +Command
77744 + TBD
77745 +
77746 +Command Parameters
77747 + UINT8 WMI_TKIP_CM_ENABLE
77748 + Enables the countermeasures
77749 +
77750 +
77751 + UINT8 TKIP_CM_DISABLE
77752 + Disables the countermeasures
77753 +
77754 +Command Values
77755 + None
77756 +
77757 +Reset Values
77758 + By default, TKIP MIC reporting is disabled
77759 +
77760 +Restrictions
77761 + None
77762 +
77763 +=====================================================================
77764 +
77765 +
77766 +Name
77767 + SET_TX_PWR
77768 +
77769 +Synopsis
77770 + The host uses this command to specify the Tx power level of the AR6000. Cannot be
77771 + used to exceed the power limit permitted by the regulatory domain. The maximum
77772 + output power is limited in the chip to 31.5 dBm; the range is 0 \96 31.5 dbm.
77773 +
77774 +Command
77775 + wmiconfig --power <dbM>
77776 +
77777 +Command Parameters
77778 + UINT8 dbM
77779 + The desired Tx power specified in dbM.
77780 + If = 0, the device chooses the maximum
77781 + permitted by the regulatory domain.
77782 +
77783 +Command Values
77784 + None
77785 +
77786 +Reset Values
77787 + The maximum permitted by the regulatory domain
77788 +
77789 +Restrictions
77790 + None
77791 +
77792 +See Also
77793 + \93GET_TX_PWR\94
77794 +
77795 +
77796 +=====================================================================
77797 +
77798 +Name
77799 + SET_VOICE_PKT_SIZE
77800 +
77801 +Synopsis
77802 + If an AP does not support WMM, it has no way to differentiate voice from data.
77803 + Because the voice packet is typically small, packet in size less than voicePktSize are
77804 + assumed to be voice, otherwise it is treated as data.
77805 +
77806 +Command
77807 + wmiconfig eth1 --setVoicePktSize <size-in-bytes>
77808 +
77809 +Command Parameters
77810 + UINT16 voicePktSize
77811 + Packet size in octets
77812 +
77813 +Command Values
77814 + None
77815 +
77816 +Reset Values
77817 + voicePktSize default is 400 bytes
77818 +
77819 +Restrictions
77820 + No effect if WMM is unavailable
77821 +
77822 +
77823 +=====================================================================
77824 +
77825 +Name
77826 + SET_WMM
77827 +
77828 +Synopsis
77829 + Overrides the AR6000 device WMM capability
77830 +
77831 +Command
77832 + wmiconfig eth1 --setwmm <enable>
77833 +
77834 +Command Parameters
77835 + WMI_WMM_ENABLED
77836 + Enables WMM
77837 +
77838 + WMI_WMM_DISABLED
77839 + Disables WMM support
77840 +
77841 +Command Values
77842 + 0 = disabled
77843 + 1 = enabled
77844 +
77845 +Reset Value
77846 + WMM Disabled
77847 +
77848 +Restrictions
77849 + None
77850 +
77851 +
77852 +=====================================================================
77853 +
77854 +Name
77855 + SET_WMM_TXOP
77856 +
77857 +Synopsis
77858 + Configures TxOP Bursting when sending traffic to a WMM capable AP
77859 +
77860 +Command
77861 + wmiconfig eth1 --txopbursting <burstEnable>
77862 +
77863 + <burstEnable>
77864 + = 0
77865 + Disallow TxOp bursting
77866 +
77867 + = 1
77868 + Allow TxOp bursting
77869 +
77870 +Command Parameters
77871 + txopEnable
77872 + = WMI_TXOP_DISABLED
77873 + Disabled
77874 +
77875 + = WMI_TXOP_ENABLED
77876 + Enabled
77877 +
77878 +Command Values
77879 + txopEnable
77880 + = 0 Disabled
77881 +
77882 + = 1 Enabled
77883 +
77884 +Reset Value
77885 + Bursting is off by default
77886 +
77887 +Restrictions
77888 + None
77889 +
77890 +=====================================================================
77891 +
77892 +
77893 +Name
77894 + SET_WOW_MODE
77895 +
77896 +Synopsis
77897 + The host uses this command to enable or disable the WoW mode. When WoW mode
77898 + is enabled and the host is asleep, pattern matching takes place at the target level.
77899 + Only packets that match any of the pre-specified WoW filter patterns, will be passed
77900 + up to the host. The host will also be woken up by the target. Packets which do not
77901 + match any of the WoW patterns are discarded.
77902 +
77903 +Command
77904 + wmiconfig \96setwowmode <enable/disable>
77905 +
77906 +Command Parameters
77907 + A_BOOL enable_wow
77908 + Enable or disable WoW:
77909 +
77910 +Command Values
77911 + = 0
77912 + Disable WoW
77913 +
77914 + = 1
77915 + Enable WoW
77916 +
77917 +Reset Value
77918 + None defined (default WoW mode is disabled).
77919 +
77920 +Restrictions
77921 + None
77922 +
77923 +See Also
77924 + \93GET_WOW_LIST\94
77925 +
77926 +
77927 +=====================================================================
77928 +
77929 +Name
77930 + SET_WSC_STATUS
77931 +
77932 +Synopsis
77933 + The supplicant uses this command to inform the target about the status of the WSC
77934 + registration protocol. During the WSC registration protocol, a flag is set so the target
77935 + bypasses some of the checks in the CSERV module. At the end of the registration, this
77936 + flag is reset.
77937 +
77938 +Command
77939 + N/A
77940 +
77941 +Command Parameters
77942 + A_BOOL status
77943 + = 1 WSC registration in progress
77944 + = 0 WSC protocol not running
77945 +
77946 +Reply Parameters
77947 + None
77948 +
77949 +Reset Value
77950 + None defined (default = 0)
77951 +
77952 +Restrictions
77953 + None
77954 +
77955 +
77956 +=====================================================================
77957 +
77958 +Name
77959 + SNR_THRESHOLD_PARAMS
77960 +
77961 +Synopsis
77962 + Configures how the AR6000 device monitors and reports SNR of the connected BSS,
77963 + used as a link quality metric.
77964 +
77965 +Command
77966 + --snrThreshold <weight> <upper_threshold_1> ...
77967 + <upper_threshold_4> <lower_threshold_1> ... <lower_threshold_4>
77968 + <pollTimer>
77969 +
77970 +Command Parameters
77971 + <weight>
77972 + Share with rssiThreshold. Range in [1, 16], used
77973 + in the formula to calculate average RSSI
77974 +
77975 + <upper_threshold_x>
77976 + Above thresholds expressed in db, in ascending
77977 + order
77978 +
77979 + <lower_threshold_x>
77980 + Below thresholds expressed in db, in ascending
77981 + order
77982 +
77983 + <pollTimer>
77984 + The signal strength sampling frequency in
77985 + seconds. If polltime = 0, signal strength
77986 + sampling is disabled
77987 +
77988 +Command Values
77989 + None
77990 +
77991 +Reset Value
77992 + None defined
77993 +
77994 +Restrictions
77995 + None
77996 +
77997 +=====================================================================
77998 +
77999 +
78000 +Name
78001 + START_SCAN
78002 +
78003 +Synopsis
78004 + The host uses this command to start a long or short channel scan. All future scans are
78005 + relative to the time the AR6000 device processes this command. The device performs
78006 + a channel scan on receipt of this command, even if a scan was already in progress.
78007 + The host uses this command when it wishes to refresh its cached database of wireless
78008 + networks. The isLegacy field will be removed (0 for now) because it is achieved by
78009 + setting CONNECT_PROFILE_MATCH_DONE in the CONNECT command. See also
78010 + \93Scan and Roam\94
78011 +
78012 +Command
78013 + wmiconfig eth1 --startscan <scan type> <forcefgscan> 0
78014 + <homeDwellTime> <forceScanInterval>
78015 +
78016 +Command Parameters
78017 + UINT8 scanType
78018 + WMI_SCAN_TYPE
78019 +
78020 +Command Values
78021 + {
78022 + WMI_LONG_SCAN =0x0
78023 + Requests a full scan
78024 + WMI_SHORT_SCAN =0x1
78025 + Requests a short scan
78026 + } WMI_SCAN_TYPE
78027 +
78028 + A_BOOL forceFgScan
78029 + forceFgScan
78030 + = 0
78031 + Disable the foreground scan
78032 +
78033 + forceFgScan
78034 + = 1
78035 + Forces a foreground scan
78036 +
78037 + A_UINT32 homeDwellTime
78038 + Maximum duration in the home
78039 + channel (in ms)
78040 +
78041 + A_UINT32 forceScanInterval
78042 + Time interval between scans (in ms)
78043 +
78044 + A_UINT32 scanType
78045 + WMI_SCAN_TYPE
78046 +
78047 +Reset Value
78048 + Disable forcing foreground scan
78049 +
78050 +Restrictions
78051 + isLegacy field will no longer be supported (pass as 0 for now)
78052 +
78053 +
78054 +=====================================================================
78055 +
78056 +Name
78057 + SYNCHRONIZE
78058 +
78059 +Synopsis
78060 + The host uses this command to force a synchronization point between the command
78061 + and data paths
78062 +
78063 +Command
78064 + TBD
78065 +
78066 +Command Parameters
78067 + None
78068 +
78069 +
78070 +
78071 +Command Values
78072 + None
78073 +
78074 +
78075 +
78076 +Reset Values
78077 + None
78078 +
78079 +
78080 +
78081 +Restrictions
78082 + None
78083 +
78084 +
78085 +=====================================================================
78086 +
78087 +Name
78088 + TARGET_ERROR_REPORT_BITMASK
78089 +
78090 +Synopsis
78091 + Allows the host to control \93ERROR_REPORT\94 events from the AR6000 device.
78092 +
78093 + If error reporting is disabled for an error type, a count of errors of that type is
78094 + maintained by the device.
78095 +
78096 + If error reporting is enabled for an error type, an \93ERROR_REPORT\94 event is
78097 + sent when an error occurs and the error report bit is cleared.
78098 +
78099 + Error counts for each error type are available through the \93GET_TARGET_STATS\94
78100 + command.
78101 +
78102 +Command
78103 + wmiconfig eth1 --setErrorReportingBitmask
78104 +
78105 +Command Parameters
78106 + UINT32 bitmask
78107 + Represents the set of
78108 + WMI_TARGET_ERROR_VAL error types
78109 + enabled for reporting
78110 +
78111 +Command Values
78112 + {
78113 + WMI_TARGET_PM_ERR_FAIL = 0x00000001
78114 + Power save fails (only two cases):
78115 + Retry out of null function/QoS null
78116 + function to associated AP for PS
78117 + indication'
78118 + Host changes the PS setting when
78119 + STA is off home channel
78120 +
78121 + WMI_TARGET_KEY_NOT_FOUND = 0x00000002
78122 + No cipher key
78123 + WMI_TARGET_DECRYPTION_ERR = 0x00000004
78124 + Decryption error
78125 + WMI_TARGET_BMISS = 0x00000008
78126 + Beacon miss
78127 + WMI_PSDISABLE_NODE_JOIN = 0x00000010
78128 + A non-PS-enabled STA joined the
78129 + PS-enabled network
78130 + WMI_TARGET_COM_ERR = 0x00000020
78131 + Host/target communication error
78132 + WMI_TARGET_FATAL_ERR = 0x00000040
78133 + Fatal error
78134 + } WMI_TARGET_ERROR_VAL
78135 +
78136 +Reset Values
78137 + Bitmask is 0, and all error reporting is disabled
78138 +
78139 +Restrictions
78140 + None
78141 +
78142 +
78143 +=====================================================================
78144 +WMI Events
78145 +
78146 +Event
78147 + Description
78148 + Page
78149 +
78150 +
78151 +BSSINFO
78152 + Contains information describing BSSs collected during a scan
78153 +
78154 +CAC_EVENTID
78155 + Indicates signalling events in admission control
78156 +
78157 +CMDERROR
78158 + The AR6000 device encounters an error while attempting to process
78159 + a command
78160 +
78161 +CONNECT
78162 + The device has connected to a wireless network
78163 +
78164 +DISCONNECT
78165 + The device lost connectivity with a wireless network
78166 +
78167 +ERROR_REPORT
78168 + An error has occurred for which the host previously requested
78169 + notification with the command
78170 + \93TARGET_ERROR_REPORT_BITMASK\94
78171 +
78172 +EXTENSION
78173 + WMI extension event
78174 +
78175 +GET_PMKID_LIST_EVENT
78176 + Created in response to a \93GET_PMKID_LIST_CMD\94 command
78177 +
78178 +GET_WOW_LIST_EVENT
78179 + Response to the wmiconfig \93GET_WOW_LIST\94 command to
78180 + retrieve the configured WoW patterns
78181 +
78182 +NEIGHBOR_REPORT
78183 + Neighbor APs that match the current profile were detected
78184 +
78185 +OPT_RX_FRAME_EVENT
78186 + (Special feature) informs the host of the reception of a special frame
78187 +
78188 +PSTREAM_TIMEOUT
78189 + A prioritized stream has been idle for a specified interval
78190 +
78191 +READY
78192 + The AR6000 device is ready to accept commands
78193 +
78194 +REGDOMAIN
78195 + The regulatory domain has changed
78196 +
78197 +REPORT_ROAM_DATA_EVENT
78198 + Reports the roam time calculations made by the device
78199 + (generated with a special build)
78200 + \97
78201 +
78202 +REPORT_STATISTICS
78203 + Reply to a \93GET_TARGET_STATS\94 command
78204 +
78205 +ROAM_TBL_EVENT
78206 + Reports the roam table
78207 +
78208 +RSSI_THRESHOLD
78209 + Signal strength from the connected AP has crossed the threshold
78210 + defined in the \93RSSI_THRESHOLD_PARAMS\94 command
78211 +
78212 +SCAN_COMPLETE_EVENT
78213 + A scan has completed (added status SCAN_ABORTED in release 2.0)
78214 +
78215 +TEST_EVENT
78216 + Event generated by the TCMD
78217 +
78218 +TKIP_MICERROR
78219 + TKIP MIC errors were detected
78220 +
78221 +=====================================================================
78222 +
78223 +Name
78224 + BSSINFO
78225 +
78226 +Synopsis
78227 + Contains information describing one or more BSSs as collected during a scan.
78228 + Information includes the BSSID, SSID, RSSI, network type, channel, supported rates,
78229 + and IEs. BSSINFO events are sent only after the device receives a beacon or probe-
78230 + response frame that pass the filter specified in the \93SET_BSS_FILTER\94 command.
78231 + BSSINFO events consist of a small header followed by a copy of the beacon or probe
78232 + response frame. The 802.11 header is not present. For formats of beacon and probe-
78233 + response frames please consult the IEEE 802.11 specification.
78234 +
78235 + The beacons or probe responses containing the IE specified by the
78236 + WMI_BSS_FILTER_CMD are passed to the host through the
78237 + WMI_BSSINFO_EVENT. The event carries a 32-bit bitmask that indicates the IEs that
78238 + were detected in the management frame. The frame type field has been extended to
78239 + indicate action management frames. This would be helpful to route these frames
78240 + through the same event mechanism as used by the beacon processing function.
78241 +
78242 + If the bssFilter in the SET_BSS_FILTER matches, then the ieMask is not relevant
78243 + because the BSSINFO event is sent to the host. If the bssFilter doesnot match in the
78244 + beacons/probe respones, then the ieMask match dictates whether the BSSINFO
78245 + event is sent to the host. In the case of action management frames, the ieMask is the
78246 + filter that is applied.
78247 +
78248 +Event ID
78249 + 0x1004
78250 +
78251 +Event Parameters
78252 + typedef struct {
78253 + A_UINT16 channel;
78254 + Specifies the frequency (in MHz) where the
78255 + frame was received
78256 + A_UINT8 frameType;
78257 + A WMI_BI_FTYPE value
78258 + A_UINT8 snr;
78259 + A_INT16 rssi;
78260 + Indicates signal strength
78261 + A_UINT8 bssid[ATH_MAC_LEN];
78262 + A_UINT32 ieMask;
78263 + } _ATTRIB_PACK_WMI_BSS_INFO_HDR;
78264 +
78265 + Beacon or Probe Response Frame
78266 +
78267 +Event Values
78268 + {
78269 + BEACON_FTYPE = 0x1
78270 + Indicates a beacon frame
78271 + PROBERESP_FTYPE
78272 + Indicates a probe response frame
78273 + ACTION_MGMT_FTYPE
78274 + } WMI_BI_FTYPE
78275 +
78276 +=====================================================================
78277 +
78278 +Name
78279 + CAC_EVENTID
78280 +
78281 +Synopsis
78282 + Indicates signalling events in admission control. Events are generated when
78283 + admission is accepted, rejected, or deleted by either the host or the AP. If the AP does
78284 + not respond to an admission request within a timeout of 500 ms, an event is
78285 + generated to the host.
78286 +
78287 +Event ID
78288 + 0x1011
78289 +
78290 +Event Parameters
78291 + UINT8
78292 + ac
78293 + Access class pertaining to the
78294 +signalling
78295 +
78296 + UINT8 cac_indication
78297 + Type of indication; indications are
78298 + listed in WMI_CAC_INDICATION
78299 +
78300 + UINT8 statusCode
78301 + AP response status code for a
78302 + request
78303 +
78304 + UINT8 tspecSuggestion[63]
78305 + Suggested TSPEC from AP
78306 +
78307 +Event Values
78308 + {
78309 + CAC_INDICATION_ADMISSION = 0x00
78310 + CAC_INDICATION_ADMISSION_RESP = 0x01
78311 + CAC_INDICATION_DELETE = 0x02
78312 + CAC_INDICATION_NO_RESP = 0x03
78313 + } WMI_CAC_INDICATION
78314 +
78315 +
78316 +=====================================================================
78317 +
78318 +
78319 +Name
78320 + CMDERROR
78321 +
78322 +Synopsis
78323 + Indicates that the AR6000 device encountered an error while attempting to process a
78324 + command. This error is fatal and indicates that the device requires a reset.
78325 +
78326 +Event ID
78327 + 0x1005
78328 +
78329 +Event Parameters
78330 + UINT16 commandId
78331 + Corresponds to the command which generated
78332 + the error
78333 + UINT8 errorCode
78334 + A WMI_ERROR_CODE value
78335 +
78336 +Event Values
78337 + {
78338 + INVALID_PARAM = 1
78339 + Invalid parameter
78340 + ILLEGAL_STATE = 2
78341 + Illegal state
78342 + INTERNAL_ERROR = 3
78343 + Internal Error
78344 + All other values reserved
78345 + } WMI_ERROR_CODE
78346 +
78347 +
78348 +=====================================================================
78349 +
78350 +
78351 +Name
78352 + CONNECT
78353 +
78354 +Synopsis
78355 + Signals that the AR6000 connected to a wireless network. Connection occurs due to a
78356 + \93CONNECT\94 command or roaming to a new AP. For infrastructure networks, shows
78357 + that the AR6000 successfully performed 802.11 authentication and AP association.
78358 +
78359 +Event ID
78360 + 0x1002
78361 +
78362 +Event Parameters
78363 + UINT16 channel
78364 + Channel frequency (in MHz) of the network the
78365 + AR6000 are connected to
78366 +
78367 + UINT8 bssid[6]
78368 + MAC address of the AP the AR6000 are
78369 + connected to or the BSSID of the ad hoc
78370 + network
78371 +
78372 + UINT16 listenInterval
78373 + Listen interval (in Kms) that the AR6000 are
78374 + using
78375 +
78376 + UINT 8 beaconIeLen
78377 + Length (in bytes) of the beacon IEs
78378 +
78379 + UINT8 assocInfo
78380 + Pointer to an array containing beacon IEs,
78381 + followed first by association request IEs then by
78382 + association response IEs
78383 +
78384 + UINT8 assocReqLen
78385 + Length (in bytes) of the assocReqIEs array
78386 +
78387 + UINT8 assocRespLen
78388 + Length (in bytes) of the assocRespIEs array
78389 +
78390 +Event Values
78391 + None defined
78392 +
78393 +=====================================================================
78394 +
78395 +
78396 +Name
78397 + DISCONNECT
78398 +
78399 +Synopsis
78400 + Signals that the AR6000 device lost connectivity with the wireless network.
78401 + DISCONENCT is generated when the device fails to complete a \93CONNECT\94
78402 + command or as a result of a transition from a connected state to disconnected state.
78403 +
78404 + After sending the \93DISCONNECT\94 event the device continually tries to re-establish
78405 + a connection. A LOST_LINK occurs when STA cannot receive beacons within the
78406 + specified time for the SET_BMISS_TIME command.
78407 +
78408 +Event ID
78409 + 0x1003
78410 +
78411 +Event Parameters
78412 + UINT8 disconnect
78413 + Reason
78414 + A WMI_DISCONNECT_REASON value
78415 +
78416 + UINT8 bssid[6]
78417 + Indicates which BSS the device was connected to
78418 +
78419 + UINT8 assocRespLen
78420 + Length of the 802.11 association response frame
78421 + that triggered this event, or 0 if not applicable
78422 +
78423 + UINT8 assocInfo[assocRespLen]
78424 + Copy of the 802.11 association response frame
78425 +
78426 +Event Values
78427 + {
78428 + NO_NETWORK_AVAIL =0x01
78429 + Indicates that the device was unable to
78430 + establish or find the desired network
78431 + LOST_LINK =0x02
78432 + Indicates the devices is no longer receiving
78433 + beacons from the BSS it was previously
78434 + connected to
78435 +
78436 + DISCONNECT_CMD =0x03
78437 + Indicates a \93DISCONNECT\94 command was
78438 + processed
78439 + BSS_DISCONNECTED =0x04
78440 + Indicates the BSS explicitly disconnected the
78441 + device. Possible mechanisms include the AP
78442 + sending 802.11 management frames
78443 + (e.g., disassociate or deauthentication
78444 + messages).
78445 + AUTH_FAILED =0x05
78446 + Indicates that the device failed 802.11
78447 + authentication with the BSS
78448 + ASSOC_FAILED =0x06
78449 + Indicates that the device failed 802.11
78450 + association with the BSS
78451 + NO_RESOURCES_AVAIL =0x07
78452 + Indicates that a connection failed because the
78453 + AP had insufficient resources to complete the
78454 + connection
78455 + CSERV_DISCONNECT =0x08
78456 + Indicates that the device\92s connection services
78457 + module decided to disconnect from a BSS,
78458 + which can happen for a variety of reasons (e.g.,
78459 + the host marks the current connected AP as a
78460 + bad AP).
78461 + INVALID_PROFILE =0x0A
78462 + Indicates that an attempt was made to
78463 + reconnect to a BSS that no longer matches the
78464 + current profile
78465 + All other values are reserved
78466 + } WMI_DISCONNECT_REASON
78467 +
78468 +
78469 +=====================================================================
78470 +
78471 +
78472 +Name
78473 + ERROR_REPORT
78474 +
78475 +Synopsis
78476 + Signals that a type of error has occurred for which the host previously requested
78477 + notification through the \93TARGET_ERROR_REPORT_BITMASK\94 command.
78478 +
78479 +Event ID
78480 + 0x100D
78481 +
78482 +Event Parameters
78483 + UINT32 errorVal
78484 + WMI_TARGET_ERROR_VAL value. See
78485 + \93TARGET_ERROR_REPORT_BITMASK\94.
78486 +
78487 +Event Values
78488 + errorVal
78489 + = 0x00000001
78490 + Power save fails
78491 +
78492 + = 0x00000002
78493 + No cipher key
78494 +
78495 + = 0x00000004
78496 + Decryption error
78497 +
78498 + = 0x00000008
78499 + Beacon miss
78500 +
78501 + = 0x00000010
78502 + A non-power save disabled node has joined
78503 + the PS-enabled network
78504 +
78505 +
78506 +=====================================================================
78507 +
78508 +
78509 +Name
78510 + EXTENSION
78511 +
78512 +Synopsis
78513 + The WMI is used mostly for wireless control messages to a wireless module that
78514 + apply to wireless module management regardless of the target platform
78515 + implementation. However, some events peripherally related to wireless management
78516 + are desired during operation. These wireless extension events may be platform-
78517 + specific or implementation-dependent. See \93WMI Extension Commands\94
78518 +
78519 +
78520 +Event ID
78521 + 0x1010
78522 +
78523 +
78524 +=====================================================================
78525 +
78526 +
78527 +Name
78528 + GET_PMKID_LIST_EVENT
78529 +
78530 +Synopsis
78531 + Generated by firmware in response to a \93GET_PMKID_LIST_CMD\94 command.
78532 +
78533 +Event Parameters
78534 + typedef struct {
78535 + A_UINT32 numPMKID;
78536 + Contains the number of PMKIDs in the reply
78537 + WMI_PMKID pmkidList[1];
78538 + } __ATTRIB_PACK WMI_PMKID_LIST_REPLY;
78539 +
78540 +Event Values
78541 + None
78542 +
78543 +
78544 +=====================================================================
78545 +
78546 +
78547 +Name
78548 + GET_WOW_LIST_EVENT
78549 +
78550 +Synopsis
78551 + Response to the wmiconfig \96getwowlist command to retrieve the configured Wake on
78552 + Wireless patterns
78553 +
78554 +Event ID
78555 + 0x10018
78556 +
78557 +Event Parameters
78558 + {
78559 +
78560 + A_UINT8 num_filters
78561 + Total number of patterns in the list
78562 + A_UINT8 this_filter_num
78563 + The filter number
78564 + A_UINT8 wow_mode
78565 + Shows whether WoW is enabled or disabled
78566 + A_UINT8 host_mode
78567 + Shows whether the host is asleep or awake
78568 + WOW_FILTER wow_filters[1]
78569 + List of WoW filters (pattern and mask data bytes)
78570 + } WMI_GET_WOW_LIST_REPLY;
78571 +
78572 + {
78573 + Each wow_filter_list element shows:
78574 + A_UINT8 wow_valid_filter
78575 + Whether the filter is valid
78576 + A_UINT8 wow_filter_list_id
78577 + Filter List ID (23 = default)
78578 + A_UINT8 wow_filter_size
78579 + Size in bytes of the filter
78580 + A_UINT8 wow_filter_offset
78581 + Offset of the pattern to search in the data packet
78582 + A_UINT8 wow_filter_mask[MASK_SIZE]
78583 + The mask to be applied to the pattern
78584 + A_UINT8 wow_filter_pattern[WOW_PATTERN_SIZE]
78585 + The pattern that to match to wake up the host
78586 + } WOW_FILTER
78587 +
78588 +Event Values
78589 + None
78590 +
78591 +=====================================================================
78592 +
78593 +
78594 +
78595 +Name
78596 + NEIGHBOR_REPORT
78597 +
78598 +Synopsis
78599 + Indicates the existence of neighbor APs that match the current profile. The host uses
78600 + this event to populate the PMKID cache on the AR6000 and/or to perform
78601 + preauthentication. This event is only generated in infrastructure mode.
78602 +
78603 + A total of numberOfAps pairs of bssid/bssFlags exist, one pair for each AP.
78604 +
78605 +Event ID
78606 + 0x1008
78607 +
78608 +Event Parameters
78609 + UINT8 numberOfAps
78610 + The number of APs reported about in
78611 + this event
78612 + {
78613 + UINT8 bssid[6]
78614 + MAC address of a neighbor AP
78615 + UINT8 bssFlags
78616 + A WMI_BSS_FLAGS value
78617 + }[numberOfAps]
78618 +
78619 +
78620 +Event Values
78621 + {
78622 + WMI_DEFAULT_BSS_FLAGS = 0
78623 + Logical OR of 1 or more
78624 + WMI_BSS_FLAGS
78625 + WMI_PREAUTH_CAPABLE_BSS
78626 + = 1
78627 + Indicates that this AP is capable of
78628 + preauthentication
78629 + WMI_PMKID_VALID_BSS
78630 + = 2
78631 + Indicates that the AR6000 have a
78632 + valid pairwise master key for this AP
78633 + } WMI_BSS_FLAGS
78634 +
78635 +
78636 +=====================================================================
78637 +
78638 +
78639 +
78640 +Name
78641 + OPT_RX_FRAME_EVENT
78642 +
78643 +Synopsis
78644 + Special feature, informs host of the reception of a special frame.
78645 +
78646 +Event ID
78647 + 0x100E
78648 +
78649 +Event Parameters
78650 + {
78651 + A_UINT16 channel;
78652 + A_UINT8 frameType;
78653 + A_INT8 snr;
78654 + A_UINT8 srcAddr[ATH_MAC_LEN];
78655 + A_UINT8 bssid[ATH_MAC_LEN];
78656 + }WMI_OPT_RX_INFO_HDR
78657 +
78658 +Event Values
78659 + None
78660 +
78661 +=====================================================================
78662 +
78663 +
78664 +
78665 +Name
78666 + PSTREAM_TIMEOUT
78667 +
78668 +Synopsis
78669 + Indicates that a priority stream that got created as a result of priority-marked data
78670 + flow (priority marked in IP TOS) being idle for the default inactivity interval period
78671 + (specified in the \93CREATE_PSTREAM\94 command) used for priority streams created
78672 + implicitly by the driver. This event is not indicated for user-created priority streams.
78673 + User-created priority streams exist until the users delete them explicitly. They do not
78674 + timeout due to data inactivity.
78675 +
78676 +Event ID
78677 + 0x1007
78678 +
78679 +Event Parameters
78680 + A_UINT8
78681 + trafficClass
78682 + Indicated the traffic class of priority
78683 + stream that timed out
78684 +
78685 +Event Values
78686 + {
78687 + WMM_AC_BE = 0
78688 + Best effort
78689 + WMM_AC_BK = 1
78690 + Background
78691 + WMM_AC_VI = 2
78692 + Video
78693 + WMM_AC_VO = 3
78694 + Voice
78695 + } TRAFFIC CLASS
78696 +
78697 +
78698 +=====================================================================
78699 +
78700 +Name
78701 + READY
78702 +
78703 +Synopsis
78704 + Indicates that the AR6000 device is prepared to accept commands. It is sent once after
78705 + power on or reset. It also indicates the MAC address of the device.
78706 +
78707 +Event ID
78708 + 0x1001
78709 +
78710 +Event Parameters
78711 + UINT8 macAddr[6]
78712 + Device MAC address
78713 + UINT8 phyCapability
78714 + A WMI_PHY_CAPABILITY value. Indicates the
78715 + capabilities of the device wireless module\92s radio
78716 +
78717 +Event Values
78718 + {
78719 + WMI_11A_CAPABILITY = 1
78720 + WMI_11G_CAPABILITY = 2
78721 + WMI_11AG_CAPABILITY = 3
78722 + } WMI_PHY_CAPABILITY
78723 +
78724 +
78725 +=====================================================================
78726 +
78727 +Name
78728 + REGDOMAIN
78729 +
78730 +Synopsis
78731 + Indicates that the regulatory domain has changed. It initially occurs when the
78732 + AR6000 device reads the board data information. The regulatory domain can also
78733 + change when the device is a world-mode SKU. In this case, the regulatory domain is
78734 + based on the country advertised by APs per the IEEE 802.11d specification. A
78735 + potential side effect of a regulatory domain change is a change in the list of available
78736 + channels. Any channel restrictions that exist as a result of a previous
78737 + \93SET_CHANNEL_PARAMETERS\94 command are lifted.
78738 +
78739 +Event ID
78740 + 0x1006
78741 +
78742 +Event Parameters
78743 + UINT32 regDomain
78744 + The range of 0x0000 \96 0x00FF
78745 + corresponds to an ISO country code.
78746 +
78747 + Other regCodes are reserved for world
78748 + mode settings and specific regulatory
78749 + domains.
78750 +
78751 +Event Values
78752 + None
78753 +
78754 +
78755 +=====================================================================
78756 +
78757 +
78758 +
78759 +Name
78760 + REPORT_STATISTICS
78761 +
78762 +Synopsis
78763 + A reply to a \93GET_TARGET_STATS\94 command.
78764 +
78765 +Event ID
78766 + 0x100B
78767 +
78768 +Event Parameters
78769 + When the statistics are sent to the host, the AR6001 clear them so that a new set of
78770 + statistics are collected for the next report.
78771 +
78772 + UINT32 tx_packets
78773 + UINT32 tx_bytes
78774 + UINT32 tx_unicast_pkts
78775 + UINT32 tx_unicast_bytes
78776 + UINT32 tx_multicast_pkts
78777 + UINT32 tx_multicast_bytes
78778 + UINT32 tx_broadcast_pkts
78779 + UINT32 tx_broadcast_bytes
78780 + UINT32 tx_rts_success_cnt
78781 + UINT32 tx_packet_per_ac[4]
78782 + Tx packets per AC: [0] = BE, [1] = BK,
78783 + [2] = VI, [3] = VO
78784 + UINT32 tx_errors
78785 + Number of packets which failed Tx, due
78786 + to all failures
78787 + ... REPORT_STATISTICS, continued
78788 + UINT32 tx_failed_cnt
78789 + Number of data packets that failed Tx
78790 + UINT32 tx_retry_cnt
78791 + Number of Tx retries for all packets
78792 + UINT32 tx_rts_fail_cnt
78793 + Number of RTS Tx failed count
78794 + UINT32 rx_packets
78795 + UINT32 rx_bytes
78796 + UINT32 rx_unicast_pkts
78797 + UINT32 rx_unicast_bytes
78798 + UINT32 rx_multicast_pkts
78799 + UINT32 rx_multicast_bytes
78800 + UINT32 rx_broadcast_pkts
78801 + UINT32 rx_broadcast_bytes
78802 + UINT32 rx_fragment_pkt
78803 + Number of fragmented packets received
78804 + UINT32 rx_errors
78805 + Number of Rx errors due to all failures
78806 + UINT32 rx_crcerr
78807 + Number of Rx errors due to CRC errors
78808 + UINT32 rx_key_cache_miss
78809 + Number of Rx errors due to a key not
78810 + being plumbed
78811 + UINT32 rx_decrypt_err
78812 + Number of Rx errors due to decryption
78813 + failure
78814 + UINT32 rx_duplicate_frames
78815 + Number of duplicate frames received
78816 + UINT32 tkip_local_mic_failure
78817 + Number of TKIP MIC errors detected
78818 + UINT32 tkip_counter_measures_invoked
78819 + Number of times TKIP countermeasures
78820 + were invoked
78821 + UINT32 tkip_replays
78822 + Number of frames that replayed a TKIP
78823 + encrypted frame received earlier
78824 + UINT32 tkip_format_errors
78825 + Number of frames that did not conform
78826 + to the TKIP frame format
78827 + UINT32 ccmp_format_errors
78828 + Number of frames that did not conform
78829 + to the CCMP frame format
78830 + UINT32 ccmp_replays
78831 + Number of frames that replayed a CCMP
78832 + encrypted frame received earlier
78833 + UINT32 power_save_failure_cnt
78834 + Number of failures that occurred when
78835 + the AR6001 could not go to sleep
78836 + UINT32 cs_bmiss_cnt
78837 + Number of BMISS interrupts since
78838 + connection
78839 + UINT32 cs_lowRssi_cnt
78840 + Number of the times the RSSI went below
78841 + the low RSSI threshold
78842 + UINT16 cs_connect_cnt
78843 + Number of connection times
78844 + UINT16 cs_disconnect_cnt
78845 + Number of disconnection times
78846 + UINT8 cs_aveBeacon_rssi
78847 + The current averaged value of the RSSI
78848 + from the beacons of the connected BSS
78849 + UINT8 cs_lastRoam_msec
78850 + Time that the last roaming took, in ms.
78851 + This time is the difference between
78852 + roaming start and actual connection.
78853 +
78854 +Event Values
78855 + None defined
78856 +
78857 +
78858 +=====================================================================
78859 +
78860 +Name
78861 + ROAM_TBL_EVENT
78862 +
78863 +Synopsis
78864 + Reports the roam table, which contains the current roam mode and this information
78865 + for every BSS:
78866 +
78867 +Event ID
78868 + 0x100F
78869 +
78870 +Event Parameters
78871 + A_UINT8 bssid[ATH_MAC_LEN];
78872 + BSSID
78873 + A_UINT8 rssi
78874 + Averaged RSSI
78875 + A_UINT8 rssidt
78876 + Change in RSSI
78877 + A_UINT8 last_rssi
78878 + Last recorded RSSI
78879 + A_UINT8 roam_util
78880 + Utility value used in roaming decision
78881 + A_UINT8 util
78882 + Base utility with the BSS
78883 + A_UINT8 bias
78884 + Host configured for this BSS
78885 +
78886 +Event Values
78887 + roamMode
78888 + Current roam mode
78889 +
78890 + = 1
78891 + RSSI based roam
78892 +
78893 + = 2
78894 + Host bias-based roam
78895 +
78896 + = 3
78897 + Lock to the current BSS
78898 +
78899 + = 4
78900 + Autonomous roaming disabled
78901 +
78902 +
78903 +=====================================================================
78904 +
78905 +Name
78906 + RSSI_THRESHOLD
78907 +
78908 +Synopsis
78909 + Alerts the host that the signal strength from the connected AP has crossed a
78910 + interesting threshold as defined in a previous \93RSSI_THRESHOLD_PARAMS\94
78911 + command.
78912 +
78913 +Event ID
78914 + 0x100C
78915 +
78916 +Event Parameters
78917 + UINT8 range
78918 + A WMI_RSSI_THRESHOLD_VAL
78919 + value, which indicates the range of
78920 + the average signal strength
78921 +
78922 +Event Values
78923 + {
78924 + WMI_RSSI_LOWTHRESHOLD_BELOW_LOWERVAL = 1
78925 + WMI_RSSI_LOWTHRESHOLD_LOWERVAL = 2
78926 + WMI_RSSI_LOWTHRESHOLD_UPPERVAL = 3
78927 + WMI_RSSI_HIGHTHRESHOLD_LOWERVAL = 4
78928 + WMI_RSSI_HIGHTHRESHOLD_HIGHERVAL = 5
78929 + } WMI_RSSI_THRESHOLD_VAL
78930 +
78931 +
78932 +=====================================================================
78933 +
78934 +Name
78935 + SCAN_COMPLETE_EVENT
78936 +
78937 +Synopsis
78938 + Indicates the scan status. if the Scan was not completed, this event is generated with
78939 + the status A_ECANCELED.
78940 +
78941 +Event ID
78942 + 0x100A
78943 +
78944 +Event Parameters
78945 + A_UINT8 scanStatus
78946 +
78947 +Event Values
78948 + {
78949 + #define SCAN_ABORTED 16
78950 + #define SCAN_COMPLETED 0
78951 + A_UINT8 scanStatus
78952 + A_OK or A_ECANCELED
78953 + } WMI_SCAN_COMPLETE_EVENT;
78954 +
78955 +
78956 +=====================================================================
78957 +
78958 +Name
78959 + TEST_EVENT
78960 +
78961 +Synopsis
78962 + The TCMD application uses a single WMI event (WMI_TEST_EVENTID) to
78963 + communicate events from target to host. The events are parsed by the TCMD
78964 + application and WMI layer is oblivious of it.
78965 +
78966 +Event ID
78967 + 0x1016
78968 +
78969 +Event Parameters
78970 + WMI_TEST_EVENTID
78971 +
78972 +
78973 +Event Values
78974 + None
78975 +
78976 +
78977 +=====================================================================
78978 +
78979 +
78980 +
78981 +Name
78982 + TKIP_MICERR
78983 +
78984 +Synopsis
78985 + Indicates that TKIP MIC errors were detected.
78986 +
78987 +Event ID
78988 + 0x1009
78989 +
78990 +Event Parameters
78991 + UINT8 keyid
78992 + Indicates the TKIP key ID
78993 +
78994 + UINT8 ismcast
78995 + 0 = Unicast
78996 + 1 = Multicast
78997 +
78998 +Event Values
78999 + See event parameters
79000 +
79001 +=====================================================================
79002 +
79003 +WMI Extension Commands
79004 +
79005 +The WMI EXTENSION command is used to multiplex a collection of
79006 +commands that:
79007 +
79008 + Are not generic wireless commands
79009 + May be implementation-specific
79010 + May be target platform-specific
79011 + May be optional for a host implementation
79012 +
79013 + An extension command is sent to the AR6000 targets like any other WMI
79014 +command message and uses the WMI_EXTENSION. The first field of the
79015 +payload for this EXTENSION command is another commandId, sometimes
79016 +called the subcommandId, which indicates which extension command is
79017 +being used. A subcommandId-specific payload follows the subcommandId.
79018 +
79019 +All extensions (subcommandIds) are listed in the header file include/wmix.h.
79020 +See also \93WMI Extension Events\94 on page B-58.
79021 +
79022 +
79023 +WMI Extension Commands
79024 +
79025 +
79026 +GPIO_INPUT_GET
79027 + Read GPIO pins configured for input
79028 +
79029 +GPIO_INTR_ACK
79030 + Acknowledge and re-arm GPIO interrupts reported earlier
79031 +
79032 +GPIO_OUTPUT_SET
79033 + Manage output on GPIO pins configured for output
79034 +
79035 +GPIO_REGISTER_GET
79036 + Read an arbitrary GPIO register
79037 +
79038 +GPIO_REGISTER_SET
79039 + Dynamically change GPIO configuration
79040 +
79041 +SET_LQTHRESHOLD
79042 + Set link quality thresholds; the sampling happens at every unicast
79043 + data frame Tx, if certain thresholds are met, and corresponding
79044 + events are sent to the host
79045 +
79046 +
79047 +=====================================================================
79048 +
79049 +Name
79050 + GPIO_INPUT_GET
79051 +
79052 +Synopsis
79053 + Allows the host to read GPIO pins that are configured for input. The values read are
79054 + returned through a \93GPIO_DATA\94 extension event.
79055 +
79056 +NOTE: Support for GPIO is optional.
79057 +
79058 +Command
79059 + N/A
79060 +
79061 +Command Parameters
79062 + None
79063 +
79064 +
79065 +
79066 +Reply Parameters
79067 + None
79068 +
79069 +
79070 +Reset Value
79071 + None
79072 +
79073 +
79074 +
79075 +Restrictions
79076 + None
79077 +
79078 +=====================================================================
79079 +
79080 +
79081 +Name
79082 + GPIO_INTR_ACK
79083 +
79084 +Synopsis
79085 + The host uses this command to acknowledge and to re-arm GPIO interrupts reported
79086 + through an earlier \93GPIO_INTR\94 extension event. A single \93GPIO_INTR_ACK\94
79087 + command should be used to acknowledge all GPIO interrupts that the host knows to
79088 + be outstanding (if pending interrupts are not acknowledged through
79089 + \93GPIO_INTR_ACK\94, another \93GPIO_INTR\94 extension event is raised).
79090 +
79091 +NOTE: Support for GPIO is optional.
79092 +
79093 +Command
79094 + N/A
79095 +
79096 +Command Parameters
79097 + UINT32 ack_mask
79098 + A mask of interrupting GPIO pins (e.g., ack_mask
79099 + bit [3] acknowledges an interrupt from the pin GPIO3).
79100 +
79101 +Command Values
79102 + None
79103 +
79104 +Reset Value
79105 + None
79106 +
79107 +Restrictions
79108 + The host should acknowledge only interrupts about which it was notified.
79109 +
79110 +
79111 +=====================================================================
79112 +
79113 +Name
79114 + GPIO_OUTPUT_SET
79115 +
79116 +Synopsis
79117 + Manages output on GPIO pins configured for output.
79118 +
79119 + Conflicts between set_mask and clear_mask or enable_mask and disable_mask result
79120 + in undefined behavior.
79121 +
79122 +NOTE: Support for GPIO is optional.
79123 +
79124 +Command
79125 + N/A
79126 +
79127 +Command Parameters
79128 + UINT32 set_mask
79129 + Specifies which pins should drive a 1 out
79130 + UINT32 clear_mask
79131 + Specifies which pins should drive a 0 out
79132 + UINT32 enable_mask
79133 + Specifies which pins should be enabled for output
79134 + UINT32 disable_mask
79135 + Specifies which pins should be disabled for output
79136 +
79137 +Command Values
79138 + None
79139 +
79140 +
79141 +Reset Value
79142 + None
79143 +
79144 +
79145 +Restrictions
79146 + None
79147 +
79148 +
79149 +
79150 +=====================================================================
79151 +
79152 +
79153 +Name
79154 + GPIO_REGISTER_GET
79155 +
79156 +Synopsis
79157 + Allows the host to read an arbitrary GPIO register. It is intended for use during
79158 + bringup/debug. The target responds to this command with a \93GPIO_DATA\94 event.
79159 +
79160 +NOTE: Support for GPIO is optional.
79161 +
79162 +Command
79163 + N/A
79164 +
79165 +Command Parameters
79166 + UINT32
79167 + gpioreg_id
79168 + Specifies a GPIO register identifier, as defined
79169 +in include/AR6000/AR6000_gpio.h
79170 +
79171 +Reply Parameters
79172 + None
79173 +
79174 +Reset Value
79175 + N/A
79176 +
79177 +Restrictions
79178 + None
79179 +
79180 +
79181 +=====================================================================
79182 +
79183 +Name
79184 + GPIO_REGISTER_SET
79185 +
79186 +Synopsis
79187 + Allows the host to dynamically change GPIO configuration (usually handled
79188 + statically through the GPIO configuration DataSet).
79189 +
79190 +NOTE: Support for GPIO is optional.
79191 +
79192 +Command
79193 + N/A
79194 +
79195 +Command Parameters
79196 + UINT32 gpioreg_id
79197 + Specifies a GPIO register identifier, as defined in
79198 + include/AR6000/AR6000_gpio.h
79199 + UINT32 value
79200 + Specifies a value to write to the specified
79201 + GPIO register
79202 +
79203 +Command Values
79204 + None
79205 +
79206 +
79207 +Reset Value
79208 + Initial hardware configuration is as defined in the AR6001 or AR6002 ROCmTM
79209 + Single-Chip MAC/BB/Radio for 2.4/5 GHz Embedded WLAN Applications data sheet. This
79210 + configuration is modified by the GPIO Configuration DataSet, if one exists.
79211 +
79212 +Restrictions
79213 + None
79214 +
79215 +
79216 +=====================================================================
79217 +
79218 +
79219 +Name
79220 + SET_LQTHRESHOLD
79221 +
79222 +Synopsis
79223 + Set link quality thresholds, the sampling happens at every unicast data frame Tx, if
79224 + certain threshold is met, corresponding event will be sent to host.
79225 +
79226 +Command
79227 + wmiconfig eth1 --lqThreshold <enable> <upper_threshold_1>...
79228 + <upper_threshold_4> <lower_threshold_1>... <lower_threshold_4>
79229 +
79230 +Command Parameters
79231 + A_UINT8 enable;
79232 + A_UINT8 thresholdAbove1_Val;
79233 + A_UINT8 thresholdAbove2_Val;
79234 + A_UINT8 thresholdAbove3_Val;
79235 + A_UINT8 thresholdAbove4_Val;
79236 + A_UINT8 thresholdBelow1_Val;
79237 + A_UINT8 thresholdBelow2_Val;
79238 + A_UINT8 thresholdBelow3_Val;
79239 + A_UINT8 thresholdBelow4_Val;
79240 +
79241 +Command Values
79242 + enable
79243 + = 0
79244 + Disable link quality sampling
79245 +
79246 + = 1
79247 + Enable link quality sampling
79248 +
79249 +
79250 + thresholdAbove_Val
79251 + [1...4]
79252 + Above thresholds (value in [0,100]), in ascending
79253 + order threshold
79254 +
79255 + Below_Val [1...4] = below thresholds (value
79256 + in [0,100]), in ascending order
79257 +
79258 +Reset Values
79259 + None
79260 +
79261 +Restrictions
79262 + None
79263 +
79264 +=====================================================================
79265 +WMI Extension Events
79266 +
79267 +The WMI EXTENSION event is used for a collection of events that:
79268 +
79269 + Are not generic wireless events
79270 + May be implementation-specific
79271 + May be target platform-specific
79272 + May be optional for a host implementation
79273 +
79274 + An extension event is sent from the AR6000 device targets to the host just like
79275 +any other WMI event message, using the WMI_EXTENSION_EVENTID. The
79276 +first field of the payload for this \93EXTENSION\94 event is another commandId
79277 +(sometimes called the subcommandId) that indicates which \93EXTENSION\94
79278 +event is being used. A subcommandId-specific payload follows the
79279 +subcommandId.
79280 +
79281 +All extensions (subcommandIds) are listed in the header file include/wmix.h.
79282 +See also \93WMI Extension Commands\94 on page B-55.
79283 +
79284 +
79285 +WMI Extension Events
79286 +
79287 +
79288 +GPIO_ACK
79289 + Acknowledges a host set command has been processed by the device
79290 +
79291 +GPIO_DATA
79292 + Response to a host\92s request for data
79293 +
79294 +GPIO_INTR
79295 + Signals that GPIO interrupts are pending
79296 +
79297 +
79298 +=====================================================================
79299 +
79300 +Name
79301 + GPIO_ACK
79302 +
79303 +Synopsis
79304 + Acknowledges that a host set command (either \93GPIO_OUTPUT_SET\94 or
79305 + \93GPIO_REGISTER_SET\94) has been processed by the AR6000 device.
79306 +
79307 +NOTE: Support for GPIO is optional.
79308 +
79309 +Event ID
79310 + N/A
79311 +
79312 +Event Parameters
79313 + None
79314 +
79315 +
79316 +Event Values
79317 + None
79318 +
79319 +=====================================================================
79320 +
79321 +
79322 +Name
79323 + GPIO_DATA
79324 +
79325 +Synopsis
79326 + The AR6000 device uses this event to respond to the host\92s earlier request for data
79327 + (through either a \93GPIO_REGISTER_GET\94 or a \93GPIO_INPUT_GET\94 command).
79328 +
79329 +NOTE: Support for GPIO is optional.
79330 +
79331 +Event ID
79332 + N/A
79333 +
79334 +Event Parameters
79335 + UINT32 value
79336 + Holds the data of interest, which is either a register value
79337 + (in the case of \93GPIO_REGISTER_GET\94) or a mask of
79338 + pin inputs (in the case of \93GPIO_INPUT_GET\94).
79339 + UINT32 reg_id
79340 + Indicates which register was read (in the case of
79341 + \93GPIO_REGISTER_GET\94) or is GPIO_ID_NONE (in the
79342 + case of \93GPIO_INPUT_GET\94)
79343 +
79344 +Event Values
79345 + None
79346 +
79347 +
79348 +=====================================================================
79349 +
79350 +
79351 +
79352 +Name
79353 + GPIO_INTR
79354 +
79355 +Synopsis
79356 + The AR6000 device raises this event to signal that GPIO interrupts are pending.
79357 + These GPIOs may be interrupts that occurred after the last \93GPIO_INTR_ACK\94
79358 + command was issued, or may be GPIO interrupts that the host failed to acknowledge
79359 + in the last \93GPIO_INTR_ACK\94. The AR6000 will not raise another GPIO_INTR
79360 + event until this event is acknowledged through a \93GPIO_INTR_ACK\94 command.
79361 +
79362 +NOTE: Support for GPIO is optional.
79363 +
79364 +Event ID
79365 + N/A
79366 +
79367 +Event Parameters
79368 + UINT32 intr_mask
79369 + Indicates which GPIO interrupts are currently pending
79370 +
79371 + UINT32 input_values
79372 + A recent copy of the GPIO input values, taken at the
79373 + time the most recent GPIO interrupt was processed
79374 +
79375 +Event Values
79376 + None
79377 +
79378 +
79379 +
79380 +=====================================================================
79381 +#endif
79382 Index: linux-2.6.28/drivers/ar6000/wmi/wmi_host.h
79383 ===================================================================
79384 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
79385 +++ linux-2.6.28/drivers/ar6000/wmi/wmi_host.h 2009-01-02 00:01:56.000000000 +0100
79386 @@ -0,0 +1,71 @@
79387 +#ifndef _WMI_HOST_H_
79388 +#define _WMI_HOST_H_
79389 +/*
79390 + * Copyright (c) 2004-2006 Atheros Communications Inc.
79391 + * All rights reserved.
79392 + *
79393 + * This file contains local definitios for the wmi host module.
79394 + *
79395 + * $Id: //depot/sw/releases/olca2.0-GPL/host/wmi/wmi_host.h#1 $
79396 + *
79397 + *
79398 + * This program is free software; you can redistribute it and/or modify
79399 + * it under the terms of the GNU General Public License version 2 as
79400 + * published by the Free Software Foundation;
79401 + *
79402 + * Software distributed under the License is distributed on an "AS
79403 + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
79404 + * implied. See the License for the specific language governing
79405 + * rights and limitations under the License.
79406 + *
79407 + *
79408 + *
79409 + */
79410 +
79411 +#ifdef __cplusplus
79412 +extern "C" {
79413 +#endif
79414 +
79415 +struct wmi_stats {
79416 + A_UINT32 cmd_len_err;
79417 + A_UINT32 cmd_id_err;
79418 +};
79419 +
79420 +struct wmi_t {
79421 + A_BOOL wmi_ready;
79422 + A_BOOL wmi_numQoSStream;
79423 + A_UINT8 wmi_wmiStream2AcMapping[WMI_PRI_MAX_COUNT];
79424 + WMI_PRI_STREAM_ID wmi_ac2WmiStreamMapping[WMM_NUM_AC];
79425 + A_UINT16 wmi_streamExistsForAC[WMM_NUM_AC];
79426 + A_UINT8 wmi_fatPipeExists;
79427 + void *wmi_devt;
79428 + struct wmi_stats wmi_stats;
79429 + struct ieee80211_node_table wmi_scan_table;
79430 + A_UINT8 wmi_bssid[ATH_MAC_LEN];
79431 + A_UINT8 wmi_powerMode;
79432 + A_UINT8 wmi_phyMode;
79433 + A_UINT8 wmi_keepaliveInterval;
79434 + A_MUTEX_T wmi_lock;
79435 +};
79436 +
79437 +#define WMI_INIT_WMISTREAM_AC_MAP(w) \
79438 +{ (w)->wmi_wmiStream2AcMapping[WMI_BEST_EFFORT_PRI] = WMM_AC_BE; \
79439 + (w)->wmi_wmiStream2AcMapping[WMI_LOW_PRI] = WMM_AC_BK; \
79440 + (w)->wmi_wmiStream2AcMapping[WMI_HIGH_PRI] = WMM_AC_VI; \
79441 + (w)->wmi_wmiStream2AcMapping[WMI_HIGHEST_PRI] = WMM_AC_VO; \
79442 + (w)->wmi_ac2WmiStreamMapping[WMM_AC_BE] = WMI_BEST_EFFORT_PRI; \
79443 + (w)->wmi_ac2WmiStreamMapping[WMM_AC_BK] = WMI_LOW_PRI; \
79444 + (w)->wmi_ac2WmiStreamMapping[WMM_AC_VI] = WMI_HIGH_PRI; \
79445 + (w)->wmi_ac2WmiStreamMapping[WMM_AC_VO] = WMI_HIGHEST_PRI; }
79446 +
79447 +#define WMI_WMISTREAM_ACCESSCATEGORY(w,s) (w)->wmi_wmiStream2AcMapping[s]
79448 +#define WMI_ACCESSCATEGORY_WMISTREAM(w,ac) (w)->wmi_ac2WmiStreamMapping[ac]
79449 +
79450 +#define LOCK_WMI(w) A_MUTEX_LOCK(&(w)->wmi_lock);
79451 +#define UNLOCK_WMI(w) A_MUTEX_UNLOCK(&(w)->wmi_lock);
79452 +
79453 +#ifdef __cplusplus
79454 +}
79455 +#endif
79456 +
79457 +#endif /* _WMI_HOST_H_ */
79458 Index: linux-2.6.28/drivers/base/bus.c
79459 ===================================================================
79460 --- linux-2.6.28.orig/drivers/base/bus.c 2008-12-25 00:26:37.000000000 +0100
79461 +++ linux-2.6.28/drivers/base/bus.c 2009-01-02 00:01:56.000000000 +0100
79462 @@ -141,6 +141,29 @@ void bus_remove_file(struct bus_type *bu
79463 }
79464 EXPORT_SYMBOL_GPL(bus_remove_file);
79465
79466 +int bus_create_device_link(struct bus_type *bus, struct kobject *target,
79467 + const char *name)
79468 +{
79469 + int error;
79470 + if (bus_get(bus)) {
79471 + error = sysfs_create_link(&bus->p->devices_kset->kobj, target,
79472 + name);
79473 + bus_put(bus);
79474 + } else
79475 + error = -EINVAL;
79476 + return error;
79477 +}
79478 +EXPORT_SYMBOL_GPL(bus_create_device_link);
79479 +
79480 +void bus_remove_device_link(struct bus_type *bus, const char *name)
79481 +{
79482 + if (bus_get(bus)) {
79483 + sysfs_remove_link(&bus->p->devices_kset->kobj, name);
79484 + bus_put(bus);
79485 + }
79486 +}
79487 +EXPORT_SYMBOL_GPL(bus_remove_device_link);
79488 +
79489 static struct kobj_type bus_ktype = {
79490 .sysfs_ops = &bus_sysfs_ops,
79491 };
79492 Index: linux-2.6.28/drivers/base/core.c
79493 ===================================================================
79494 --- linux-2.6.28.orig/drivers/base/core.c 2008-12-25 00:26:37.000000000 +0100
79495 +++ linux-2.6.28/drivers/base/core.c 2009-01-02 00:01:56.000000000 +0100
79496 @@ -55,6 +55,11 @@ static inline int device_is_not_partitio
79497 */
79498 const char *dev_driver_string(const struct device *dev)
79499 {
79500 + if (!dev) {
79501 + printk(KERN_ERR"Null dev to dev_driver_string\n");
79502 + dump_stack();
79503 + return "*NULL*";
79504 + }
79505 return dev->driver ? dev->driver->name :
79506 (dev->bus ? dev->bus->name :
79507 (dev->class ? dev->class->name : ""));
79508 Index: linux-2.6.28/drivers/base/power/main.c
79509 ===================================================================
79510 --- linux-2.6.28.orig/drivers/base/power/main.c 2008-12-25 00:26:37.000000000 +0100
79511 +++ linux-2.6.28/drivers/base/power/main.c 2009-01-02 00:01:56.000000000 +0100
79512 @@ -69,9 +69,9 @@ void device_pm_unlock(void)
79513 */
79514 void device_pm_add(struct device *dev)
79515 {
79516 - pr_debug("PM: Adding info for %s:%s\n",
79517 + /* pr_debug("PM: Adding info for %s:%s\n",
79518 dev->bus ? dev->bus->name : "No Bus",
79519 - kobject_name(&dev->kobj));
79520 + kobject_name(&dev->kobj)); */
79521 mutex_lock(&dpm_list_mtx);
79522 if (dev->parent) {
79523 if (dev->parent->power.status >= DPM_SUSPENDING)
79524 Index: linux-2.6.28/drivers/char/Kconfig
79525 ===================================================================
79526 --- linux-2.6.28.orig/drivers/char/Kconfig 2009-01-02 00:00:02.000000000 +0100
79527 +++ linux-2.6.28/drivers/char/Kconfig 2009-01-02 00:01:56.000000000 +0100
79528 @@ -66,6 +66,18 @@ config VT_CONSOLE
79529
79530 If unsure, say Y.
79531
79532 +config NR_TTY_DEVICES
79533 + int "Maximum tty device number"
79534 + depends on VT
79535 + default 63
79536 + ---help---
79537 + This is the highest numbered device created in /dev. You will actually have
79538 + NR_TTY_DEVICES+1 devices in /dev. The default is 63, which will result in
79539 + 64 /dev entries. The lowest number you can set is 11, anything below that,
79540 + and it will default to 11. 63 is also the upper limit so we don't overrun
79541 + the serial consoles.
79542 +
79543 +
79544 config HW_CONSOLE
79545 bool
79546 depends on VT && !S390 && !UML
79547 Index: linux-2.6.28/drivers/gpio/gpiolib.c
79548 ===================================================================
79549 --- linux-2.6.28.orig/drivers/gpio/gpiolib.c 2008-12-25 00:26:37.000000000 +0100
79550 +++ linux-2.6.28/drivers/gpio/gpiolib.c 2009-01-02 00:01:56.000000000 +0100
79551 @@ -6,8 +6,7 @@
79552 #include <linux/err.h>
79553 #include <linux/debugfs.h>
79554 #include <linux/seq_file.h>
79555 -#include <linux/gpio.h>
79556 -
79557 +#include <mach/gpio.h>
79558
79559 /* Optional implementation infrastructure for GPIO interfaces.
79560 *
79561 Index: linux-2.6.28/drivers/i2c/busses/i2c-s3c2410.c
79562 ===================================================================
79563 --- linux-2.6.28.orig/drivers/i2c/busses/i2c-s3c2410.c 2008-12-25 00:26:37.000000000 +0100
79564 +++ linux-2.6.28/drivers/i2c/busses/i2c-s3c2410.c 2009-01-02 00:51:37.000000000 +0100
79565 @@ -34,14 +34,12 @@
79566 #include <linux/platform_device.h>
79567 #include <linux/clk.h>
79568 #include <linux/cpufreq.h>
79569 +#include <linux/io.h>
79570
79571 -#include <mach/hardware.h>
79572 #include <asm/irq.h>
79573 -#include <asm/io.h>
79574
79575 -#include <mach/regs-gpio.h>
79576 -#include <asm/plat-s3c/regs-iic.h>
79577 -#include <asm/plat-s3c/iic.h>
79578 +#include <plat/regs-iic.h>
79579 +#include <plat/iic.h>
79580
79581 /* i2c controller state */
79582
79583 @@ -64,6 +62,7 @@ struct s3c24xx_i2c {
79584 unsigned int msg_ptr;
79585
79586 unsigned int tx_setup;
79587 + unsigned int irq;
79588
79589 enum s3c24xx_i2c_state state;
79590 unsigned long clkrate;
79591 @@ -71,7 +70,6 @@ struct s3c24xx_i2c {
79592 void __iomem *regs;
79593 struct clk *clk;
79594 struct device *dev;
79595 - struct resource *irq;
79596 struct resource *ioarea;
79597 struct i2c_adapter adap;
79598
79599 @@ -80,16 +78,7 @@ struct s3c24xx_i2c {
79600 #endif
79601 };
79602
79603 -/* default platform data to use if not supplied in the platform_device
79604 -*/
79605 -
79606 -static struct s3c2410_platform_i2c s3c24xx_i2c_default_platform = {
79607 - .flags = 0,
79608 - .slave_addr = 0x10,
79609 - .bus_freq = 100*1000,
79610 - .max_freq = 400*1000,
79611 - .sda_delay = S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
79612 -};
79613 +/* default platform data removed, dev should always carry data. */
79614
79615 /* s3c24xx_i2c_is2440()
79616 *
79617 @@ -103,21 +92,6 @@ static inline int s3c24xx_i2c_is2440(str
79618 return !strcmp(pdev->name, "s3c2440-i2c");
79619 }
79620
79621 -
79622 -/* s3c24xx_i2c_get_platformdata
79623 - *
79624 - * get the platform data associated with the given device, or return
79625 - * the default if there is none
79626 -*/
79627 -
79628 -static inline struct s3c2410_platform_i2c *s3c24xx_i2c_get_platformdata(struct device *dev)
79629 -{
79630 - if (dev->platform_data != NULL)
79631 - return (struct s3c2410_platform_i2c *)dev->platform_data;
79632 -
79633 - return &s3c24xx_i2c_default_platform;
79634 -}
79635 -
79636 /* s3c24xx_i2c_master_complete
79637 *
79638 * complete the message and wake up the caller, using the given return code,
79639 @@ -130,7 +104,7 @@ static inline void s3c24xx_i2c_master_co
79640
79641 i2c->msg_ptr = 0;
79642 i2c->msg = NULL;
79643 - i2c->msg_idx ++;
79644 + i2c->msg_idx++;
79645 i2c->msg_num = 0;
79646 if (ret)
79647 i2c->msg_idx = ret;
79648 @@ -141,19 +115,17 @@ static inline void s3c24xx_i2c_master_co
79649 static inline void s3c24xx_i2c_disable_ack(struct s3c24xx_i2c *i2c)
79650 {
79651 unsigned long tmp;
79652 -
79653 +
79654 tmp = readl(i2c->regs + S3C2410_IICCON);
79655 writel(tmp & ~S3C2410_IICCON_ACKEN, i2c->regs + S3C2410_IICCON);
79656 -
79657 }
79658
79659 static inline void s3c24xx_i2c_enable_ack(struct s3c24xx_i2c *i2c)
79660 {
79661 unsigned long tmp;
79662 -
79663 +
79664 tmp = readl(i2c->regs + S3C2410_IICCON);
79665 writel(tmp | S3C2410_IICCON_ACKEN, i2c->regs + S3C2410_IICCON);
79666 -
79667 }
79668
79669 /* irq enable/disable functions */
79670 @@ -161,15 +133,23 @@ static inline void s3c24xx_i2c_enable_ac
79671 static inline void s3c24xx_i2c_disable_irq(struct s3c24xx_i2c *i2c)
79672 {
79673 unsigned long tmp;
79674 -
79675 +
79676 tmp = readl(i2c->regs + S3C2410_IICCON);
79677 +
79678 +/* S3c2442 datasheet
79679 + *
79680 + * If the IICCON[5]=0, IICCON[4] does not operate correctly.
79681 + * So, It is recommended that you should set IICCON[5]=1,
79682 + * although you does not use the IIC interrupt.
79683 + */
79684 +
79685 writel(tmp & ~S3C2410_IICCON_IRQEN, i2c->regs + S3C2410_IICCON);
79686 }
79687
79688 static inline void s3c24xx_i2c_enable_irq(struct s3c24xx_i2c *i2c)
79689 {
79690 unsigned long tmp;
79691 -
79692 +
79693 tmp = readl(i2c->regs + S3C2410_IICCON);
79694 writel(tmp | S3C2410_IICCON_IRQEN, i2c->regs + S3C2410_IICCON);
79695 }
79696 @@ -177,10 +157,10 @@ static inline void s3c24xx_i2c_enable_ir
79697
79698 /* s3c24xx_i2c_message_start
79699 *
79700 - * put the start of a message onto the bus
79701 + * put the start of a message onto the bus
79702 */
79703
79704 -static void s3c24xx_i2c_message_start(struct s3c24xx_i2c *i2c,
79705 +static void s3c24xx_i2c_message_start(struct s3c24xx_i2c *i2c,
79706 struct i2c_msg *msg)
79707 {
79708 unsigned int addr = (msg->addr & 0x7f) << 1;
79709 @@ -199,15 +179,15 @@ static void s3c24xx_i2c_message_start(st
79710 if (msg->flags & I2C_M_REV_DIR_ADDR)
79711 addr ^= 1;
79712
79713 - // todo - check for wether ack wanted or not
79714 + /* todo - check for wether ack wanted or not */
79715 s3c24xx_i2c_enable_ack(i2c);
79716
79717 iiccon = readl(i2c->regs + S3C2410_IICCON);
79718 writel(stat, i2c->regs + S3C2410_IICSTAT);
79719 -
79720 +
79721 dev_dbg(i2c->dev, "START: %08lx to IICSTAT, %02x to DS\n", stat, addr);
79722 writeb(addr, i2c->regs + S3C2410_IICDS);
79723 -
79724 +
79725 /* delay here to ensure the data byte has gotten onto the bus
79726 * before the transaction is started */
79727
79728 @@ -215,8 +195,8 @@ static void s3c24xx_i2c_message_start(st
79729
79730 dev_dbg(i2c->dev, "iiccon, %08lx\n", iiccon);
79731 writel(iiccon, i2c->regs + S3C2410_IICCON);
79732 -
79733 - stat |= S3C2410_IICSTAT_START;
79734 +
79735 + stat |= S3C2410_IICSTAT_START;
79736 writel(stat, i2c->regs + S3C2410_IICSTAT);
79737 }
79738
79739 @@ -227,11 +207,11 @@ static inline void s3c24xx_i2c_stop(stru
79740 dev_dbg(i2c->dev, "STOP\n");
79741
79742 /* stop the transfer */
79743 - iicstat &= ~ S3C2410_IICSTAT_START;
79744 + iicstat &= ~S3C2410_IICSTAT_START;
79745 writel(iicstat, i2c->regs + S3C2410_IICSTAT);
79746 -
79747 +
79748 i2c->state = STATE_STOP;
79749 -
79750 +
79751 s3c24xx_i2c_master_complete(i2c, ret);
79752 s3c24xx_i2c_disable_irq(i2c);
79753 }
79754 @@ -241,7 +221,7 @@ static inline void s3c24xx_i2c_stop(stru
79755
79756 /* is_lastmsg()
79757 *
79758 - * returns TRUE if the current message is the last in the set
79759 + * returns TRUE if the current message is the last in the set
79760 */
79761
79762 static inline int is_lastmsg(struct s3c24xx_i2c *i2c)
79763 @@ -289,14 +269,14 @@ static int i2s_s3c_irq_nextbyte(struct s
79764
79765 case STATE_STOP:
79766 dev_err(i2c->dev, "%s: called in STATE_STOP\n", __func__);
79767 - s3c24xx_i2c_disable_irq(i2c);
79768 + s3c24xx_i2c_disable_irq(i2c);
79769 goto out_ack;
79770
79771 case STATE_START:
79772 /* last thing we did was send a start condition on the
79773 * bus, or started a new i2c message
79774 */
79775 -
79776 +
79777 if (iicstat & S3C2410_IICSTAT_LASTBIT &&
79778 !(i2c->msg->flags & I2C_M_IGNORE_NAK)) {
79779 /* ack was not received... */
79780 @@ -322,7 +302,7 @@ static int i2s_s3c_irq_nextbyte(struct s
79781 if (i2c->state == STATE_READ)
79782 goto prepare_read;
79783
79784 - /* fall through to the write state, as we will need to
79785 + /* fall through to the write state, as we will need to
79786 * send a byte as well */
79787
79788 case STATE_WRITE:
79789 @@ -339,7 +319,7 @@ static int i2s_s3c_irq_nextbyte(struct s
79790 }
79791 }
79792
79793 - retry_write:
79794 + retry_write:
79795
79796 if (!is_msgend(i2c)) {
79797 byte = i2c->msg->buf[i2c->msg_ptr++];
79798 @@ -359,9 +339,9 @@ static int i2s_s3c_irq_nextbyte(struct s
79799 dev_dbg(i2c->dev, "WRITE: Next Message\n");
79800
79801 i2c->msg_ptr = 0;
79802 - i2c->msg_idx ++;
79803 + i2c->msg_idx++;
79804 i2c->msg++;
79805 -
79806 +
79807 /* check to see if we need to do another message */
79808 if (i2c->msg->flags & I2C_M_NOSTART) {
79809
79810 @@ -375,7 +355,6 @@ static int i2s_s3c_irq_nextbyte(struct s
79811
79812 goto retry_write;
79813 } else {
79814 -
79815 /* send the new start */
79816 s3c24xx_i2c_message_start(i2c, i2c->msg);
79817 i2c->state = STATE_START;
79818 @@ -389,7 +368,7 @@ static int i2s_s3c_irq_nextbyte(struct s
79819 break;
79820
79821 case STATE_READ:
79822 - /* we have a byte of data in the data register, do
79823 + /* we have a byte of data in the data register, do
79824 * something with it, and then work out wether we are
79825 * going to do any more read/write
79826 */
79827 @@ -397,13 +376,13 @@ static int i2s_s3c_irq_nextbyte(struct s
79828 byte = readb(i2c->regs + S3C2410_IICDS);
79829 i2c->msg->buf[i2c->msg_ptr++] = byte;
79830
79831 - prepare_read:
79832 + prepare_read:
79833 if (is_msglast(i2c)) {
79834 /* last byte of buffer */
79835
79836 if (is_lastmsg(i2c))
79837 s3c24xx_i2c_disable_ack(i2c);
79838 -
79839 +
79840 } else if (is_msgend(i2c)) {
79841 /* ok, we've read the entire buffer, see if there
79842 * is anything else we need to do */
79843 @@ -429,7 +408,7 @@ static int i2s_s3c_irq_nextbyte(struct s
79844 /* acknowlegde the IRQ and get back on with the work */
79845
79846 out_ack:
79847 - tmp = readl(i2c->regs + S3C2410_IICCON);
79848 + tmp = readl(i2c->regs + S3C2410_IICCON);
79849 tmp &= ~S3C2410_IICCON_IRQPEND;
79850 writel(tmp, i2c->regs + S3C2410_IICCON);
79851 out:
79852 @@ -450,19 +429,19 @@ static irqreturn_t s3c24xx_i2c_irq(int i
79853 status = readl(i2c->regs + S3C2410_IICSTAT);
79854
79855 if (status & S3C2410_IICSTAT_ARBITR) {
79856 - // deal with arbitration loss
79857 + /* deal with arbitration loss */
79858 dev_err(i2c->dev, "deal with arbitration loss\n");
79859 }
79860
79861 if (i2c->state == STATE_IDLE) {
79862 dev_dbg(i2c->dev, "IRQ: error i2c->state == IDLE\n");
79863
79864 - tmp = readl(i2c->regs + S3C2410_IICCON);
79865 + tmp = readl(i2c->regs + S3C2410_IICCON);
79866 tmp &= ~S3C2410_IICCON_IRQPEND;
79867 writel(tmp, i2c->regs + S3C2410_IICCON);
79868 goto out;
79869 }
79870 -
79871 +
79872 /* pretty much this leaves us with the fact that we've
79873 * transmitted or received whatever byte we last sent */
79874
79875 @@ -485,16 +464,13 @@ static int s3c24xx_i2c_set_master(struct
79876
79877 while (timeout-- > 0) {
79878 iicstat = readl(i2c->regs + S3C2410_IICSTAT);
79879 -
79880 +
79881 if (!(iicstat & S3C2410_IICSTAT_BUSBUSY))
79882 return 0;
79883
79884 msleep(1);
79885 }
79886
79887 - dev_dbg(i2c->dev, "timeout: GPEDAT is %08x\n",
79888 - __raw_readl(S3C2410_GPEDAT));
79889 -
79890 return -ETIMEDOUT;
79891 }
79892
79893 @@ -503,7 +479,8 @@ static int s3c24xx_i2c_set_master(struct
79894 * this starts an i2c transfer
79895 */
79896
79897 -static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c, struct i2c_msg *msgs, int num)
79898 +static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c,
79899 + struct i2c_msg *msgs, int num)
79900 {
79901 unsigned long timeout;
79902 int ret;
79903 @@ -511,6 +488,15 @@ static int s3c24xx_i2c_doxfer(struct s3c
79904 if (i2c->suspended)
79905 return -EIO;
79906
79907 + if (i2c->suspended) {
79908 + dev_err(i2c->dev,
79909 + "Hey I am still asleep (suspended: %d), retry later\n",
79910 + i2c->suspended);
79911 + dump_stack();
79912 + ret = -EAGAIN;
79913 + goto out;
79914 + }
79915 +
79916 ret = s3c24xx_i2c_set_master(i2c);
79917 if (ret != 0) {
79918 dev_err(i2c->dev, "cannot get bus (error %d)\n", ret);
79919 @@ -529,12 +515,12 @@ static int s3c24xx_i2c_doxfer(struct s3c
79920 s3c24xx_i2c_enable_irq(i2c);
79921 s3c24xx_i2c_message_start(i2c, msgs);
79922 spin_unlock_irq(&i2c->lock);
79923 -
79924 +
79925 timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 5);
79926
79927 ret = i2c->msg_idx;
79928
79929 - /* having these next two as dev_err() makes life very
79930 + /* having these next two as dev_err() makes life very
79931 * noisy when doing an i2cdetect */
79932
79933 if (timeout == 0)
79934 @@ -591,19 +577,6 @@ static const struct i2c_algorithm s3c24x
79935 .functionality = s3c24xx_i2c_func,
79936 };
79937
79938 -static struct s3c24xx_i2c s3c24xx_i2c = {
79939 - .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_i2c.lock),
79940 - .wait = __WAIT_QUEUE_HEAD_INITIALIZER(s3c24xx_i2c.wait),
79941 - .tx_setup = 50,
79942 - .adap = {
79943 - .name = "s3c2410-i2c",
79944 - .owner = THIS_MODULE,
79945 - .algo = &s3c24xx_i2c_algorithm,
79946 - .retries = 2,
79947 - .class = I2C_CLASS_HWMON | I2C_CLASS_SPD,
79948 - },
79949 -};
79950 -
79951 /* s3c24xx_i2c_calcdivisor
79952 *
79953 * return the divisor settings for a given frequency
79954 @@ -643,7 +616,7 @@ static inline int freq_acceptable(unsign
79955 {
79956 int diff = freq - wanted;
79957
79958 - return (diff >= -2 && diff <= 2);
79959 + return diff >= -2 && diff <= 2;
79960 }
79961
79962 /* s3c24xx_i2c_clockrate
79963 @@ -655,7 +628,7 @@ static inline int freq_acceptable(unsign
79964
79965 static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got)
79966 {
79967 - struct s3c2410_platform_i2c *pdata;
79968 + struct s3c2410_platform_i2c *pdata = i2c->dev->platform_data;
79969 unsigned long clkin = clk_get_rate(i2c->clk);
79970 unsigned int divs, div1;
79971 u32 iiccon;
79972 @@ -663,10 +636,8 @@ static int s3c24xx_i2c_clockrate(struct
79973 int start, end;
79974
79975 i2c->clkrate = clkin;
79976 -
79977 - pdata = s3c24xx_i2c_get_platformdata(i2c->adap.dev.parent);
79978 clkin /= 1000; /* clkin now in KHz */
79979 -
79980 +
79981 dev_dbg(i2c->dev, "pdata %p, freq %lu %lu..%lu\n",
79982 pdata, pdata->bus_freq, pdata->min_freq, pdata->max_freq);
79983
79984 @@ -774,7 +745,7 @@ static inline void s3c24xx_i2c_deregiste
79985
79986 /* s3c24xx_i2c_init
79987 *
79988 - * initialise the controller, set the IO lines and frequency
79989 + * initialise the controller, set the IO lines and frequency
79990 */
79991
79992 static int s3c24xx_i2c_init(struct s3c24xx_i2c *i2c)
79993 @@ -785,15 +756,15 @@ static int s3c24xx_i2c_init(struct s3c24
79994
79995 /* get the plafrom data */
79996
79997 - pdata = s3c24xx_i2c_get_platformdata(i2c->adap.dev.parent);
79998 + pdata = i2c->dev->platform_data;
79999
80000 /* inititalise the gpio */
80001
80002 - s3c2410_gpio_cfgpin(S3C2410_GPE15, S3C2410_GPE15_IICSDA);
80003 - s3c2410_gpio_cfgpin(S3C2410_GPE14, S3C2410_GPE14_IICSCL);
80004 + if (pdata->cfg_gpio)
80005 + pdata->cfg_gpio(to_platform_device(i2c->dev));
80006
80007 /* write slave address */
80008 -
80009 +
80010 writeb(pdata->slave_addr, i2c->regs + S3C2410_IICADD);
80011
80012 dev_info(i2c->dev, "slave address 0x%02x\n", pdata->slave_addr);
80013 @@ -831,12 +802,32 @@ static int s3c24xx_i2c_init(struct s3c24
80014
80015 static int s3c24xx_i2c_probe(struct platform_device *pdev)
80016 {
80017 - struct s3c24xx_i2c *i2c = &s3c24xx_i2c;
80018 + struct s3c24xx_i2c *i2c;
80019 struct s3c2410_platform_i2c *pdata;
80020 struct resource *res;
80021 int ret;
80022
80023 - pdata = s3c24xx_i2c_get_platformdata(&pdev->dev);
80024 + pdata = pdev->dev.platform_data;
80025 + if (!pdata) {
80026 + dev_err(&pdev->dev, "no platform data\n");
80027 + return -EINVAL;
80028 + }
80029 +
80030 + i2c = kzalloc(sizeof(struct s3c24xx_i2c), GFP_KERNEL);
80031 + if (!i2c) {
80032 + dev_err(&pdev->dev, "no memory for state\n");
80033 + return -ENOMEM;
80034 + }
80035 +
80036 + strlcpy(i2c->adap.name, "s3c2410-i2c", sizeof(i2c->adap.name));
80037 + i2c->adap.owner = THIS_MODULE;
80038 + i2c->adap.algo = &s3c24xx_i2c_algorithm;
80039 + i2c->adap.retries = 2;
80040 + i2c->adap.class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
80041 + i2c->tx_setup = 50;
80042 +
80043 + spin_lock_init(&i2c->lock);
80044 + init_waitqueue_head(&i2c->wait);
80045
80046 /* find the clock and enable it */
80047
80048 @@ -878,7 +869,8 @@ static int s3c24xx_i2c_probe(struct plat
80049 goto err_ioarea;
80050 }
80051
80052 - dev_dbg(&pdev->dev, "registers %p (%p, %p)\n", i2c->regs, i2c->ioarea, res);
80053 + dev_dbg(&pdev->dev, "registers %p (%p, %p)\n",
80054 + i2c->regs, i2c->ioarea, res);
80055
80056 /* setup info block for the i2c core */
80057
80058 @@ -892,29 +884,23 @@ static int s3c24xx_i2c_probe(struct plat
80059 goto err_iomap;
80060
80061 /* find the IRQ for this unit (note, this relies on the init call to
80062 - * ensure no current IRQs pending
80063 + * ensure no current IRQs pending
80064 */
80065
80066 - res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
80067 - if (res == NULL) {
80068 + i2c->irq = ret = platform_get_irq(pdev, 0);
80069 + if (ret <= 0) {
80070 dev_err(&pdev->dev, "cannot find IRQ\n");
80071 - ret = -ENOENT;
80072 goto err_iomap;
80073 }
80074
80075 - ret = request_irq(res->start, s3c24xx_i2c_irq, IRQF_DISABLED,
80076 - pdev->name, i2c);
80077 + ret = request_irq(i2c->irq, s3c24xx_i2c_irq, IRQF_DISABLED,
80078 + dev_name(&pdev->dev), i2c);
80079
80080 if (ret != 0) {
80081 - dev_err(&pdev->dev, "cannot claim IRQ\n");
80082 + dev_err(&pdev->dev, "cannot claim IRQ %d\n", i2c->irq);
80083 goto err_iomap;
80084 }
80085
80086 - i2c->irq = res;
80087 -
80088 - dev_dbg(&pdev->dev, "irq resource %p (%lu)\n", res,
80089 - (unsigned long)res->start);
80090 -
80091 ret = s3c24xx_i2c_register_cpufreq(i2c);
80092 if (ret < 0) {
80093 dev_err(&pdev->dev, "failed to register cpufreq notifier\n");
80094 @@ -944,7 +930,7 @@ static int s3c24xx_i2c_probe(struct plat
80095 s3c24xx_i2c_deregister_cpufreq(i2c);
80096
80097 err_irq:
80098 - free_irq(i2c->irq->start, i2c);
80099 + free_irq(i2c->irq, i2c);
80100
80101 err_iomap:
80102 iounmap(i2c->regs);
80103 @@ -958,6 +944,7 @@ static int s3c24xx_i2c_probe(struct plat
80104 clk_put(i2c->clk);
80105
80106 err_noclk:
80107 + kfree(i2c);
80108 return ret;
80109 }
80110
80111 @@ -973,7 +960,7 @@ static int s3c24xx_i2c_remove(struct pla
80112 s3c24xx_i2c_deregister_cpufreq(i2c);
80113
80114 i2c_del_adapter(&i2c->adap);
80115 - free_irq(i2c->irq->start, i2c);
80116 + free_irq(i2c->irq, i2c);
80117
80118 clk_disable(i2c->clk);
80119 clk_put(i2c->clk);
80120 @@ -982,6 +969,7 @@ static int s3c24xx_i2c_remove(struct pla
80121
80122 release_resource(i2c->ioarea);
80123 kfree(i2c->ioarea);
80124 + kfree(i2c);
80125
80126 return 0;
80127 }
80128 Index: linux-2.6.28/drivers/i2c/busses/Kconfig
80129 ===================================================================
80130 --- linux-2.6.28.orig/drivers/i2c/busses/Kconfig 2008-12-25 00:26:37.000000000 +0100
80131 +++ linux-2.6.28/drivers/i2c/busses/Kconfig 2009-01-02 00:01:56.000000000 +0100
80132 @@ -455,11 +455,12 @@ config I2C_PXA_SLAVE
80133 I2C bus.
80134
80135 config I2C_S3C2410
80136 - tristate "S3C2410 I2C Driver"
80137 - depends on ARCH_S3C2410
80138 + tristate "Samsung SoC I2C Driver (S3C24XX and S3C64XX series)"
80139 + depends on ARCH_S3C2410 || ARCH_S3C64XX
80140 help
80141 Say Y here to include support for I2C controller in the
80142 - Samsung S3C2410 based System-on-Chip devices.
80143 + Samsung S3C based System-on-Chip devices such as the S3C2410,
80144 + S3C2440, S3C2442, S3C2443 and S3C6410.
80145
80146 config I2C_SH7760
80147 tristate "Renesas SH7760 I2C Controller"
80148 Index: linux-2.6.28/drivers/i2c/chips/Kconfig
80149 ===================================================================
80150 --- linux-2.6.28.orig/drivers/i2c/chips/Kconfig 2008-12-25 00:26:37.000000000 +0100
80151 +++ linux-2.6.28/drivers/i2c/chips/Kconfig 2009-01-02 00:01:56.000000000 +0100
80152 @@ -53,6 +53,26 @@ config SENSORS_EEPROM
80153 This driver can also be built as a module. If so, the module
80154 will be called eeprom.
80155
80156 +config SENSORS_PCF50606
80157 + tristate "Philips/NXP PCF50606"
80158 + depends on I2C
80159 + help
80160 + If you say yes here you get support for Philips/NXP PCF50606
80161 + PMU (Power Management Unit) chips.
80162 +
80163 + This driver can also be built as a module. If so, the module
80164 + will be called pcf50606.
80165 +
80166 +config SENSORS_PCF50633
80167 + tristate "Philips PCF50633"
80168 + depends on I2C
80169 + help
80170 + If you say yes here you get support for Philips PCF50633
80171 + PMU (Power Management Unit) chips.
80172 +
80173 + This driver can also be built as a module. If so, the module
80174 + will be called pcf50633.
80175 +
80176 config SENSORS_PCF8574
80177 tristate "Philips PCF8574 and PCF8574A (DEPRECATED)"
80178 depends on EXPERIMENTAL && GPIO_PCF857X = "n"
80179 @@ -185,4 +205,23 @@ config MCU_MPC8349EMITX
80180 also register MCU GPIOs with the generic GPIO API, so you'll able
80181 to use MCU pins as GPIOs.
80182
80183 +config SENSORS_TSL256X
80184 + tristate "Texas TSL256X Ambient Light Sensor"
80185 + depends on I2C
80186 + help
80187 + If you say yes here you get support for the Texas TSL256X
80188 + ambient light sensor chip.
80189 +
80190 + This driver can also be built as a module. If so, the module
80191 + will be called tsl256x.
80192 +
80193 +config PCA9632
80194 + tristate "Philips/NXP PCA9632 low power LED driver"
80195 + depends on I2C
80196 + help
80197 + If you say yes here you get support for the Philips/NXP PCA9632
80198 + LED driver.
80199 +
80200 + This driver can also be built as a module. If so, the module
80201 + will be called pca9632.
80202 endmenu
80203 Index: linux-2.6.28/drivers/i2c/chips/Makefile
80204 ===================================================================
80205 --- linux-2.6.28.orig/drivers/i2c/chips/Makefile 2008-12-25 00:26:37.000000000 +0100
80206 +++ linux-2.6.28/drivers/i2c/chips/Makefile 2009-01-02 00:01:56.000000000 +0100
80207 @@ -15,6 +15,8 @@ obj-$(CONFIG_AT24) += at24.o
80208 obj-$(CONFIG_SENSORS_EEPROM) += eeprom.o
80209 obj-$(CONFIG_SENSORS_MAX6875) += max6875.o
80210 obj-$(CONFIG_SENSORS_PCA9539) += pca9539.o
80211 +obj-$(CONFIG_SENSORS_PCF50606) += pcf50606.o
80212 +obj-$(CONFIG_SENSORS_PCF50633) += pcf50633.o
80213 obj-$(CONFIG_SENSORS_PCF8574) += pcf8574.o
80214 obj-$(CONFIG_PCF8575) += pcf8575.o
80215 obj-$(CONFIG_SENSORS_PCF8591) += pcf8591.o
80216 @@ -23,6 +25,8 @@ obj-$(CONFIG_TPS65010) += tps65010.o
80217 obj-$(CONFIG_MENELAUS) += menelaus.o
80218 obj-$(CONFIG_SENSORS_TSL2550) += tsl2550.o
80219 obj-$(CONFIG_MCU_MPC8349EMITX) += mcu_mpc8349emitx.o
80220 +obj-$(CONFIG_SENSORS_TSL256X) += tsl256x.o
80221 +obj-$(CONFIG_PCA9632) += pca9632.o
80222
80223 ifeq ($(CONFIG_I2C_DEBUG_CHIP),y)
80224 EXTRA_CFLAGS += -DDEBUG
80225 Index: linux-2.6.28/drivers/i2c/chips/pca9632.c
80226 ===================================================================
80227 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
80228 +++ linux-2.6.28/drivers/i2c/chips/pca9632.c 2009-01-02 00:01:56.000000000 +0100
80229 @@ -0,0 +1,551 @@
80230 +/*
80231 + * Philips/NXP PCA9632 low power LED driver.
80232 + * Copyright (C) 2008 Matt Hsu <matt_hsu@openmoko.org>
80233 + *
80234 + * low_level implementation are based on pcf50606 driver
80235 + *
80236 + * This program is free software; you can redistribute it and/or modify
80237 + * it under the terms of the GNU General Public License as published by
80238 + * the Free Software Foundation; version 2 of the License.
80239 + *
80240 + * TODO:
80241 + * - attach ledclass??
80242 + * - add platform data
80243 + *
80244 + */
80245 +
80246 +#include <linux/module.h>
80247 +#include <linux/init.h>
80248 +#include <linux/i2c.h>
80249 +#include <linux/platform_device.h>
80250 +
80251 +#include "pca9632.h"
80252 +
80253 +/* Addresses to scan */
80254 +static unsigned short normal_i2c[] = { 0x62, I2C_CLIENT_END };
80255 +
80256 +/* Insmod parameters */
80257 +I2C_CLIENT_INSMOD_1(pca9632);
80258 +
80259 +enum pca9632_pwr_state {
80260 + PCA9632_NORMAL,
80261 + PCA9632_SLEEP,
80262 +};
80263 +
80264 +enum pca9632_led_output {
80265 + PCA9632_OFF,
80266 + PCA9632_ON,
80267 + PCA9632_CTRL_BY_PWM,
80268 + PCA9632_CTRL_BY_PWM_GRPPWM,
80269 +};
80270 +
80271 +static const char *led_output_name[] = {
80272 + [PCA9632_OFF] = "off",
80273 + [PCA9632_ON] = "fully-on",
80274 + [PCA9632_CTRL_BY_PWM] = "ctrl-by-pwm",
80275 + [PCA9632_CTRL_BY_PWM_GRPPWM] = "ctrl-by-pwm-grppwm",
80276 +};
80277 +
80278 +struct pca9632_data {
80279 + struct i2c_client client;
80280 + struct mutex lock;
80281 +};
80282 +
80283 +static struct i2c_driver pca9632_driver;
80284 +static struct platform_device *pca9632_pdev;
80285 +
80286 +static int pca9632_attach_adapter(struct i2c_adapter *adapter);
80287 +static int pca9632_detach_client(struct i2c_client *client);
80288 +
80289 +static int __reg_write(struct pca9632_data *pca, u_int8_t reg, u_int8_t val)
80290 +{
80291 + return i2c_smbus_write_byte_data(&pca->client, reg, val);
80292 +}
80293 +
80294 +static int reg_write(struct pca9632_data *pca, u_int8_t reg, u_int8_t val)
80295 +{
80296 + int ret;
80297 +
80298 + mutex_lock(&pca->lock);
80299 + ret = __reg_write(pca, reg, val);
80300 + mutex_unlock(&pca->lock);
80301 +
80302 + return ret;
80303 +}
80304 +
80305 +static int32_t __reg_read(struct pca9632_data *pca, u_int8_t reg)
80306 +{
80307 + int32_t ret;
80308 +
80309 + ret = i2c_smbus_read_byte_data(&pca->client, reg);
80310 +
80311 + return ret;
80312 +}
80313 +
80314 +static u_int8_t reg_read(struct pca9632_data *pca, u_int8_t reg)
80315 +{
80316 + int32_t ret;
80317 +
80318 + mutex_lock(&pca->lock);
80319 + ret = __reg_read(pca, reg);
80320 + mutex_unlock(&pca->lock);
80321 +
80322 + return ret & 0xff;
80323 +}
80324 +
80325 +static int reg_set_bit_mask(struct pca9632_data *pca,
80326 + u_int8_t reg, u_int8_t mask, u_int8_t val)
80327 +{
80328 + int ret;
80329 + u_int8_t tmp;
80330 +
80331 + val &= mask;
80332 +
80333 + mutex_lock(&pca->lock);
80334 +
80335 + tmp = __reg_read(pca, reg);
80336 + tmp &= ~mask;
80337 + tmp |= val;
80338 + ret = __reg_write(pca, reg, tmp);
80339 +
80340 + mutex_unlock(&pca->lock);
80341 +
80342 + return ret;
80343 +}
80344 +
80345 +static inline int calc_dc(uint8_t idc)
80346 +{
80347 + return (idc * 100) / 256;
80348 +}
80349 +
80350 +/*
80351 + * Software reset
80352 + */
80353 +static int software_rst(struct i2c_adapter *adapter)
80354 +{
80355 + u8 buf[] = { 0xa5, 0x5a };
80356 +
80357 + struct i2c_msg msg[] = {
80358 + {
80359 + .addr = 0x3,
80360 + .flags = 0,
80361 + .buf = &buf,
80362 + .len = sizeof(buf)
80363 + }
80364 + };
80365 +
80366 + return i2c_transfer(adapter, msg, 1);
80367 +}
80368 +
80369 +/*
80370 + * Group dmblnk control
80371 + */
80372 +static void config_group_dmblnk(struct pca9632_data *pca, int group_dmblnk_mode)
80373 +{
80374 + reg_set_bit_mask(pca, PCA9632_REG_MODE2, 0x20,
80375 + group_dmblnk_mode << PCA9632_DMBLNK_SHIFT);
80376 +}
80377 +
80378 +static int get_group_dmblnk(struct pca9632_data *pca)
80379 +{
80380 + return reg_read(pca, PCA9632_REG_MODE2) >> PCA9632_DMBLNK_SHIFT;
80381 +}
80382 +
80383 +static ssize_t show_group_dmblnk(struct device *dev, struct device_attribute
80384 + *attr, char *buf)
80385 +{
80386 + struct i2c_client *client = to_i2c_client(dev);
80387 + struct pca9632_data *pca = i2c_get_clientdata(client);
80388 +
80389 + if (get_group_dmblnk(pca))
80390 + return sprintf(buf, "blinking\n");
80391 + else
80392 + return sprintf(buf, "dimming\n");
80393 +}
80394 +
80395 +static ssize_t set_group_dmblnk(struct device *dev, struct device_attribute
80396 + *attr, const char *buf, size_t count)
80397 +{
80398 + struct i2c_client *client = to_i2c_client(dev);
80399 + struct pca9632_data *pca = i2c_get_clientdata(client);
80400 + unsigned int mode = simple_strtoul(buf, NULL, 10);
80401 +
80402 + if (mode)
80403 + dev_info(&pca->client.dev, "blinking\n");
80404 + else
80405 + dev_info(&pca->client.dev, "dimming\n");
80406 +
80407 + config_group_dmblnk(pca, mode);
80408 +
80409 + return count;
80410 +}
80411 +
80412 +static DEVICE_ATTR(group_dmblnk, S_IRUGO | S_IWUSR, show_group_dmblnk,
80413 + set_group_dmblnk);
80414 +
80415 +static int reg_id_by_name(const char *name)
80416 +{
80417 + int reg_id = -1;
80418 +
80419 + if (!strncmp(name, "led0", 4))
80420 + reg_id = PCA9632_REG_PWM0;
80421 + else if (!strncmp(name, "led1", 4))
80422 + reg_id = PCA9632_REG_PWM1;
80423 + else if (!strncmp(name, "led2", 4))
80424 + reg_id = PCA9632_REG_PWM2;
80425 + else if (!strncmp(name, "led3", 4))
80426 + reg_id = PCA9632_REG_PWM3;
80427 +
80428 + return reg_id;
80429 +}
80430 +
80431 +static int get_led_output(struct pca9632_data *pca, int ldrx)
80432 +{
80433 + u_int8_t led_state;
80434 +
80435 + ldrx = ldrx - 2;
80436 + led_state = reg_read(pca, PCA9632_REG_LEDOUT);
80437 + led_state = (led_state >> (2 * ldrx)) & 0x03;
80438 +
80439 + return led_state;
80440 +}
80441 +
80442 +static void config_led_output(struct pca9632_data *pca, int ldrx,
80443 + enum pca9632_led_output led_output)
80444 +{
80445 + u_int8_t mask;
80446 + int tmp;
80447 +
80448 + ldrx = ldrx - 2;
80449 + mask = 0x03 << (2 * ldrx);
80450 + tmp = reg_set_bit_mask(pca, PCA9632_REG_LEDOUT,
80451 + mask, led_output << (2 * ldrx));
80452 +}
80453 +
80454 +/*
80455 + * Individual brightness control
80456 + */
80457 +static ssize_t show_brightness(struct device *dev, struct device_attribute
80458 + *attr, char *buf)
80459 +{
80460 + struct i2c_client *client = to_i2c_client(dev);
80461 + struct pca9632_data *pca = i2c_get_clientdata(client);
80462 + int ldrx;
80463 +
80464 + ldrx = reg_id_by_name(attr->attr.name);
80465 +
80466 + switch (get_led_output(pca, ldrx)) {
80467 +
80468 + case PCA9632_OFF:
80469 + case PCA9632_ON:
80470 + return sprintf(buf, "%s",
80471 + led_output_name[get_led_output(pca, ldrx)]);
80472 +
80473 + case PCA9632_CTRL_BY_PWM:
80474 + return sprintf(buf, "%d%% \n", calc_dc(reg_read(pca, ldrx)));
80475 +
80476 + case PCA9632_CTRL_BY_PWM_GRPPWM:
80477 + /* check group dmblnk */
80478 + if (get_group_dmblnk(pca))
80479 + return sprintf(buf, "%d%% \n",
80480 + calc_dc(reg_read(pca, ldrx)));
80481 + return sprintf(buf, "%d%% \n",
80482 + calc_dc((reg_read(pca, ldrx) & 0xfc)));
80483 + default:
80484 + break;
80485 + }
80486 +
80487 + return sprintf(buf, "invalid argument\n");
80488 +}
80489 +
80490 +static ssize_t set_brightness(struct device *dev, struct device_attribute *attr,
80491 + const char *buf, size_t count)
80492 +{
80493 + struct i2c_client *client = to_i2c_client(dev);
80494 + struct pca9632_data *pca = i2c_get_clientdata(client);
80495 + unsigned int pwm = simple_strtoul(buf, NULL, 10);
80496 + int ldrx;
80497 +
80498 + ldrx = reg_id_by_name(attr->attr.name);
80499 + reg_set_bit_mask(pca, ldrx, 0xff, pwm);
80500 +
80501 + return count;
80502 +}
80503 +
80504 +static
80505 +DEVICE_ATTR(led0_pwm, S_IRUGO | S_IWUSR, show_brightness, set_brightness);
80506 +static
80507 +DEVICE_ATTR(led1_pwm, S_IRUGO | S_IWUSR, show_brightness, set_brightness);
80508 +static
80509 +DEVICE_ATTR(led2_pwm, S_IRUGO | S_IWUSR, show_brightness, set_brightness);
80510 +static
80511 +DEVICE_ATTR(led3_pwm, S_IRUGO | S_IWUSR, show_brightness, set_brightness);
80512 +
80513 +/*
80514 + * Group frequency control
80515 + */
80516 +static ssize_t show_group_freq(struct device *dev, struct device_attribute
80517 + *attr, char *buf)
80518 +{
80519 + uint32_t period;
80520 + struct i2c_client *client = to_i2c_client(dev);
80521 + struct pca9632_data *pca = i2c_get_clientdata(client);
80522 +
80523 + period = ((reg_read(pca, PCA9632_REG_GRPFREQ) + 1) * 1000) / 24;
80524 +
80525 + return sprintf(buf, "%d ms\n", period);
80526 +}
80527 +
80528 +static ssize_t set_group_freq(struct device *dev, struct device_attribute *attr,
80529 + const char *buf, size_t count)
80530 +{
80531 + struct i2c_client *client = to_i2c_client(dev);
80532 + struct pca9632_data *pca = i2c_get_clientdata(client);
80533 +
80534 + unsigned int freq = simple_strtoul(buf, NULL, 10);
80535 + reg_write(pca, PCA9632_REG_GRPFREQ, freq);
80536 + return count;
80537 +}
80538 +
80539 +static
80540 +DEVICE_ATTR(group_freq, S_IRUGO | S_IWUSR, show_group_freq, set_group_freq);
80541 +
80542 +/*
80543 + * Group duty cycle tonrol*
80544 + */
80545 +static ssize_t show_group_dc(struct device *dev, struct device_attribute *attr,
80546 + char *buf)
80547 +{
80548 + struct i2c_client *client = to_i2c_client(dev);
80549 + struct pca9632_data *pca = i2c_get_clientdata(client);
80550 +
80551 + if (get_group_dmblnk(pca)) {
80552 +
80553 + if (reg_read(pca, PCA9632_REG_GRPFREQ) <= 0x03)
80554 + return sprintf(buf, "%d%% \n",
80555 + calc_dc(reg_read(pca, PCA9632_REG_GRPPWM) & 0xfc));
80556 +
80557 + return sprintf(buf, "%d%% \n", calc_dc(reg_read(pca,
80558 + PCA9632_REG_GRPPWM)));
80559 + }
80560 +
80561 + return sprintf(buf, "%d%% \n", calc_dc(reg_read(pca,
80562 + PCA9632_REG_GRPPWM) & 0xf0));
80563 +}
80564 +
80565 +static ssize_t set_group_dc(struct device *dev, struct device_attribute *attr,
80566 + const char *buf, size_t count)
80567 +{
80568 + struct i2c_client *client = to_i2c_client(dev);
80569 + struct pca9632_data *pca = i2c_get_clientdata(client);
80570 +
80571 + unsigned int dc = simple_strtoul(buf, NULL, 10);
80572 +
80573 + reg_set_bit_mask(pca, PCA9632_REG_GRPPWM, 0xff, dc);
80574 +
80575 + return count;
80576 +}
80577 +
80578 +static DEVICE_ATTR(group_dc, S_IRUGO | S_IWUSR, show_group_dc, set_group_dc);
80579 +
80580 +/*
80581 + * LED driver output
80582 + */
80583 +static ssize_t show_led_output(struct device *dev, struct device_attribute
80584 + *attr, char *buf)
80585 +{
80586 + struct i2c_client *client = to_i2c_client(dev);
80587 + struct pca9632_data *pca = i2c_get_clientdata(client);
80588 + int ldrx;
80589 +
80590 + ldrx = reg_id_by_name(attr->attr.name);
80591 +
80592 + return sprintf(buf, "%s \n",
80593 + led_output_name[get_led_output(pca, ldrx)]);
80594 +
80595 +}
80596 +static ssize_t set_led_output(struct device *dev, struct device_attribute *attr,
80597 + const char *buf, size_t count)
80598 +{
80599 + struct i2c_client *client = to_i2c_client(dev);
80600 + struct pca9632_data *pca = i2c_get_clientdata(client);
80601 + enum pca9632_led_output led_output;
80602 + int ldrx;
80603 +
80604 + led_output = simple_strtoul(buf, NULL, 10);
80605 + ldrx = reg_id_by_name(attr->attr.name);
80606 + config_led_output(pca, ldrx, led_output);
80607 +
80608 + return count;
80609 +}
80610 +
80611 +static
80612 +DEVICE_ATTR(led0_output, S_IRUGO | S_IWUSR, show_led_output, set_led_output);
80613 +static
80614 +DEVICE_ATTR(led1_output, S_IRUGO | S_IWUSR, show_led_output, set_led_output);
80615 +static
80616 +DEVICE_ATTR(led2_output, S_IRUGO | S_IWUSR, show_led_output, set_led_output);
80617 +static
80618 +DEVICE_ATTR(led3_output, S_IRUGO | S_IWUSR, show_led_output, set_led_output);
80619 +
80620 +static struct attribute *pca_sysfs_entries[] = {
80621 + &dev_attr_group_dmblnk.attr,
80622 + &dev_attr_led0_pwm.attr,
80623 + &dev_attr_led1_pwm.attr,
80624 + &dev_attr_led2_pwm.attr,
80625 + &dev_attr_led3_pwm.attr,
80626 + &dev_attr_group_dc.attr,
80627 + &dev_attr_group_freq.attr,
80628 + &dev_attr_led0_output.attr,
80629 + &dev_attr_led1_output.attr,
80630 + &dev_attr_led2_output.attr,
80631 + &dev_attr_led3_output.attr,
80632 + NULL
80633 +};
80634 +
80635 +static struct attribute_group pca_attr_group = {
80636 + .name = NULL, /* put in device directory */
80637 + .attrs = pca_sysfs_entries,
80638 +};
80639 +
80640 +#ifdef CONFIG_PM
80641 +static int pca9632_suspend(struct device *dev, pm_message_t state)
80642 +{
80643 + /* FIXME: Not implemented */
80644 + return 0;
80645 +}
80646 +
80647 +static int pca9632_resume(struct device *dev)
80648 +{
80649 + /* FIXME: Not implemented */
80650 + return 0;
80651 +}
80652 +#else
80653 +#define pca9632_suspend NULL
80654 +#define pca9632_resume NULL
80655 +#endif
80656 +
80657 +static struct i2c_driver pca9632_driver = {
80658 + .driver = {
80659 + .name = "pca9632",
80660 + .suspend = pca9632_suspend,
80661 + .resume = pca9632_resume,
80662 + },
80663 + .id = I2C_DRIVERID_PCA9632,
80664 + .attach_adapter = pca9632_attach_adapter,
80665 + .detach_client = pca9632_detach_client,
80666 +};
80667 +
80668 +static int pca9632_detect(struct i2c_adapter *adapter, int address, int kind)
80669 +{
80670 + struct i2c_client *new_client;
80671 + struct pca9632_data *pca;
80672 + int err;
80673 +
80674 + pca = kzalloc(sizeof(struct pca9632_data), GFP_KERNEL);
80675 + if (!pca)
80676 + return -ENOMEM;
80677 +
80678 + mutex_init(&pca->lock);
80679 +
80680 + new_client = &pca->client;
80681 + i2c_set_clientdata(new_client, pca);
80682 + new_client->addr = address;
80683 + new_client->adapter = adapter;
80684 + new_client->driver = &pca9632_driver;
80685 + new_client->flags = 0;
80686 +
80687 + strlcpy(new_client->name, "pca9632", I2C_NAME_SIZE);
80688 +
80689 + /* register with i2c core */
80690 + err = i2c_attach_client(new_client);
80691 + if (err)
80692 + goto exit_kfree;
80693 +
80694 + err = sysfs_create_group(&new_client->dev.kobj, &pca_attr_group);
80695 + if (err)
80696 + goto exit_detach;
80697 +
80698 + /* software reset */
80699 + if (!software_rst(adapter))
80700 + dev_info(&pca->client.dev, "pca9632 sw-rst done\n");
80701 +
80702 + /* enter normal mode */
80703 + reg_set_bit_mask(pca, PCA9632_REG_MODE1, 0x10, PCA9632_NORMAL);
80704 +
80705 + return 0;
80706 +
80707 +exit_detach:
80708 + i2c_detach_client(new_client);
80709 +exit_kfree:
80710 + kfree(pca);
80711 +
80712 + return err;
80713 +}
80714 +
80715 +static int pca9632_attach_adapter(struct i2c_adapter *adapter)
80716 +{
80717 + return i2c_probe(adapter, &addr_data, pca9632_detect);
80718 +}
80719 +
80720 +static int pca9632_detach_client(struct i2c_client *client)
80721 +{
80722 + int err;
80723 +
80724 + sysfs_remove_group(&client->dev.kobj, &pca_attr_group);
80725 + err = i2c_detach_client(client);
80726 +
80727 + if (err)
80728 + return err;
80729 +
80730 + kfree(i2c_get_clientdata(client));
80731 +
80732 + return 0;
80733 +}
80734 +
80735 +static int __init pca9632_plat_probe(struct platform_device *pdev)
80736 +{
80737 + /* FIXME: platform data should be attached here */
80738 + pca9632_pdev = pdev;
80739 +
80740 + return 0;
80741 +}
80742 +
80743 +static int pca9632_plat_remove(struct platform_device *pdev)
80744 +{
80745 + return 0;
80746 +}
80747 +
80748 +static struct platform_driver pca9632_plat_driver = {
80749 + .probe = pca9632_plat_probe,
80750 + .remove = pca9632_plat_remove,
80751 + .driver = {
80752 + .owner = THIS_MODULE,
80753 + .name = "pca9632",
80754 + },
80755 +};
80756 +
80757 +static int __init pca9632_init(void)
80758 +{
80759 + int rc;
80760 +
80761 + rc = platform_driver_register(&pca9632_plat_driver);
80762 + if (!rc)
80763 + i2c_add_driver(&pca9632_driver);
80764 +
80765 + return rc;
80766 +}
80767 +
80768 +static void __exit pca9632_exit(void)
80769 +{
80770 + i2c_del_driver(&pca9632_driver);
80771 +
80772 + platform_driver_unregister(&pca9632_plat_driver);
80773 +}
80774 +
80775 +MODULE_AUTHOR("Matt Hsu <matt_hsu@openmoko.org>");
80776 +MODULE_DESCRIPTION("NXP PCA9632 driver");
80777 +MODULE_LICENSE("GPL");
80778 +
80779 +module_init(pca9632_init);
80780 +module_exit(pca9632_exit);
80781 Index: linux-2.6.28/drivers/i2c/chips/pca9632.h
80782 ===================================================================
80783 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
80784 +++ linux-2.6.28/drivers/i2c/chips/pca9632.h 2009-01-02 00:01:56.000000000 +0100
80785 @@ -0,0 +1,24 @@
80786 +#ifndef _PCA9632_H
80787 +#define _PCA9632_H
80788 +
80789 +
80790 +enum pca9632_regs{
80791 +
80792 + PCA9632_REG_MODE1 = 0x00,
80793 + PCA9632_REG_MODE2 = 0x01,
80794 + PCA9632_REG_PWM0 = 0x02,
80795 + PCA9632_REG_PWM1 = 0x03,
80796 + PCA9632_REG_PWM2 = 0x04,
80797 + PCA9632_REG_PWM3 = 0x05,
80798 + PCA9632_REG_GRPPWM = 0x06,
80799 + PCA9632_REG_GRPFREQ = 0x07,
80800 + PCA9632_REG_LEDOUT = 0x08,
80801 + PCA9632_REG_SUBADDR1 = 0x09,
80802 + PCA9632_REG_SUBADDR2 = 0x0a,
80803 + PCA9632_REG_SUBADDR3 = 0x0b,
80804 + PCA9632_REG_ALLCALLADR1 = 0x0c,
80805 +};
80806 +
80807 +#define PCA9632_DMBLNK_SHIFT 5
80808 +
80809 +#endif /* _PCA9632_H */
80810 Index: linux-2.6.28/drivers/i2c/chips/pcf50606.c
80811 ===================================================================
80812 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
80813 +++ linux-2.6.28/drivers/i2c/chips/pcf50606.c 2009-01-02 00:01:56.000000000 +0100
80814 @@ -0,0 +1,2193 @@
80815 +/* Philips/NXP PCF50606 Power Management Unit (PMU) driver
80816 + *
80817 + * (C) 2006-2007 by Openmoko, Inc.
80818 + * Authors: Harald Welte <laforge@openmoko.org>,
80819 + * Matt Hsu <matt@openmoko.org>
80820 + * All rights reserved.
80821 + *
80822 + * This program is free software; you can redistribute it and/or
80823 + * modify it under the terms of the GNU General Public License as
80824 + * published by the Free Software Foundation; either version 2 of
80825 + * the License, or (at your option) any later version.
80826 + *
80827 + * This program is distributed in the hope that it will be useful,
80828 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
80829 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
80830 + * GNU General Public License for more details.
80831 + *
80832 + * You should have received a copy of the GNU General Public License
80833 + * along with this program; if not, write to the Free Software
80834 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
80835 + * MA 02111-1307 USA
80836 + *
80837 + * This driver is a monster ;) It provides the following features
80838 + * - voltage control for a dozen different voltage domains
80839 + * - charging control for main and backup battery
80840 + * - rtc / alarm
80841 + * - watchdog
80842 + * - adc driver (hw_sensors like)
80843 + * - pwm driver
80844 + * - backlight
80845 + *
80846 + */
80847 +
80848 +#include <linux/module.h>
80849 +#include <linux/init.h>
80850 +#include <linux/i2c.h>
80851 +#include <linux/types.h>
80852 +#include <linux/interrupt.h>
80853 +#include <linux/irq.h>
80854 +#include <linux/workqueue.h>
80855 +#include <linux/delay.h>
80856 +#include <linux/rtc.h>
80857 +#include <linux/bcd.h>
80858 +#include <linux/watchdog.h>
80859 +#include <linux/miscdevice.h>
80860 +#include <linux/input.h>
80861 +#include <linux/fb.h>
80862 +#include <linux/backlight.h>
80863 +#include <linux/sched.h>
80864 +#include <linux/platform_device.h>
80865 +#include <linux/pcf50606.h>
80866 +#include <linux/apm-emulation.h>
80867 +
80868 +#include <asm/mach-types.h>
80869 +#include <mach/gta01.h>
80870 +
80871 +#include "pcf50606.h"
80872 +
80873 +/* we use dev_dbg() throughout the code, but sometimes don't want to
80874 + * write an entire line of debug related information. This DEBUGPC
80875 + * macro is a continuation for dev_dbg() */
80876 +#ifdef DEBUG
80877 +#define DEBUGPC(x, args ...) printk(x, ## args)
80878 +#else
80879 +#define DEBUGPC(x, args ...)
80880 +#endif
80881 +
80882 +/***********************************************************************
80883 + * Static data / structures
80884 + ***********************************************************************/
80885 +
80886 +static unsigned short normal_i2c[] = { 0x08, I2C_CLIENT_END };
80887 +
80888 +I2C_CLIENT_INSMOD_1(pcf50606);
80889 +
80890 +#define PCF50606_B_CHG_FAST 0 /* Charger Fast allowed */
80891 +#define PCF50606_B_CHG_PRESENT 1 /* Charger present */
80892 +#define PCF50606_B_CHG_FOK 2 /* Fast OK for battery */
80893 +#define PCF50606_B_CHG_ERR 3 /* Charger Error */
80894 +#define PCF50606_B_CHG_PROT 4 /* Charger Protection */
80895 +#define PCF50606_B_CHG_READY 5 /* Charging completed */
80896 +
80897 +#define PCF50606_F_CHG_FAST (1<<PCF50606_B_CHG_FAST)
80898 +#define PCF50606_F_CHG_PRESENT (1<<PCF50606_B_CHG_PRESENT)
80899 +#define PCF50606_F_CHG_FOK (1<<PCF50606_B_CHG_FOK)
80900 +#define PCF50606_F_CHG_ERR (1<<PCF50606_B_CHG_ERR)
80901 +#define PCF50606_F_CHG_PROT (1<<PCF50606_B_CHG_PROT)
80902 +#define PCF50606_F_CHG_READY (1<<PCF50606_B_CHG_READY)
80903 +#define PCF50606_F_CHG_MASK 0x000000fc
80904 +
80905 +#define PCF50606_F_PWR_PRESSED 0x00000100
80906 +#define PCF50606_F_RTC_SECOND 0x00000200
80907 +
80908 +enum close_state {
80909 + CLOSE_STATE_NOT,
80910 + CLOSE_STATE_ALLOW = 0x2342,
80911 +};
80912 +
80913 +enum pcf50606_suspend_states {
80914 + PCF50606_SS_RUNNING,
80915 + PCF50606_SS_STARTING_SUSPEND,
80916 + PCF50606_SS_COMPLETED_SUSPEND,
80917 + PCF50606_SS_RESUMING_BUT_NOT_US_YET,
80918 + PCF50606_SS_STARTING_RESUME,
80919 + PCF50606_SS_COMPLETED_RESUME,
80920 +};
80921 +
80922 +struct pcf50606_data {
80923 + struct i2c_client client;
80924 + struct pcf50606_platform_data *pdata;
80925 + struct backlight_device *backlight;
80926 + struct mutex lock;
80927 + unsigned int flags;
80928 + unsigned int working;
80929 + struct mutex working_lock;
80930 + struct work_struct work;
80931 + struct rtc_device *rtc;
80932 + struct input_dev *input_dev;
80933 + int allow_close;
80934 + int onkey_seconds;
80935 + int irq;
80936 + int coldplug_done;
80937 + int suppress_onkey_events;
80938 + enum pcf50606_suspend_states suspend_state;
80939 +#ifdef CONFIG_PM
80940 + struct {
80941 + u_int8_t dcdc1, dcdc2;
80942 + u_int8_t dcdec1;
80943 + u_int8_t dcudc1;
80944 + u_int8_t ioregc;
80945 + u_int8_t d1regc1;
80946 + u_int8_t d2regc1;
80947 + u_int8_t d3regc1;
80948 + u_int8_t lpregc1;
80949 + u_int8_t adcc1, adcc2;
80950 + u_int8_t pwmc1;
80951 + u_int8_t int1m, int2m, int3m;
80952 + } standby_regs;
80953 +#endif
80954 +};
80955 +
80956 +static struct i2c_driver pcf50606_driver;
80957 +
80958 +/* This is an ugly construct on how to access the (currently single/global)
80959 + * pcf50606 handle from other code in the kernel. I didn't really come up with
80960 + * a more decent method of dynamically resolving this */
80961 +struct pcf50606_data *pcf50606_global;
80962 +EXPORT_SYMBOL_GPL(pcf50606_global);
80963 +
80964 +static struct platform_device *pcf50606_pdev;
80965 +
80966 +/* This is a 10k, B=3370 NTC Thermistor -10..79 centigrade */
80967 +/* Table entries are offset by +0.5C so a properly rounded value is generated */
80968 +static const u_int16_t ntc_table_10k_3370B[] = {
80969 + /* -10 */
80970 + 43888, 41819, 39862, 38010, 36257, 34596, 33024, 31534, 30121, 28781,
80971 + 27510, 26304, 25159, 24071, 23038, 22056, 21122, 20234, 19390, 18586,
80972 + 17821, 17093, 16399, 15738, 15107, 14506, 13933, 13387, 12865, 12367,
80973 + 11891, 11437, 11003, 10588, 10192, 9813, 9450, 9103, 8771, 8453,
80974 + 8149, 7857, 7578, 7310, 7054, 6808, 6572, 6346, 6129, 5920,
80975 + 5720, 5528, 5344, 5167, 4996, 4833, 4675, 4524, 4379, 4239,
80976 + 4104, 3975, 3850, 3730, 3614, 3503, 3396, 3292, 3193, 3097,
80977 + 3004, 2915, 2829, 2745, 2665, 2588, 2513, 2441, 2371, 2304,
80978 + 2239, 2176, 2116, 2057, 2000, 1945, 1892, 1841, 1791, 1743,
80979 +};
80980 +
80981 +
80982 +/***********************************************************************
80983 + * Low-Level routines
80984 + ***********************************************************************/
80985 +
80986 +static inline int __reg_write(struct pcf50606_data *pcf, u_int8_t reg,
80987 + u_int8_t val)
80988 +{
80989 + if (pcf->suspend_state == PCF50606_SS_COMPLETED_SUSPEND) {
80990 + dev_err(&pcf->client.dev, "__reg_write while suspended.\n");
80991 + dump_stack();
80992 + }
80993 + return i2c_smbus_write_byte_data(&pcf->client, reg, val);
80994 +}
80995 +
80996 +static int reg_write(struct pcf50606_data *pcf, u_int8_t reg, u_int8_t val)
80997 +{
80998 + int ret;
80999 +
81000 + mutex_lock(&pcf->lock);
81001 + ret = __reg_write(pcf, reg, val);
81002 + mutex_unlock(&pcf->lock);
81003 +
81004 + return ret;
81005 +}
81006 +
81007 +static inline int32_t __reg_read(struct pcf50606_data *pcf, u_int8_t reg)
81008 +{
81009 + int32_t ret;
81010 +
81011 + if (pcf->suspend_state == PCF50606_SS_COMPLETED_SUSPEND) {
81012 + dev_err(&pcf->client.dev, "__reg_read while suspended.\n");
81013 + dump_stack();
81014 + }
81015 + ret = i2c_smbus_read_byte_data(&pcf->client, reg);
81016 +
81017 + return ret;
81018 +}
81019 +
81020 +static u_int8_t reg_read(struct pcf50606_data *pcf, u_int8_t reg)
81021 +{
81022 + int32_t ret;
81023 +
81024 + mutex_lock(&pcf->lock);
81025 + ret = __reg_read(pcf, reg);
81026 + mutex_unlock(&pcf->lock);
81027 +
81028 + return ret & 0xff;
81029 +}
81030 +
81031 +static int reg_set_bit_mask(struct pcf50606_data *pcf,
81032 + u_int8_t reg, u_int8_t mask, u_int8_t val)
81033 +{
81034 + int ret;
81035 + u_int8_t tmp;
81036 +
81037 + val &= mask;
81038 +
81039 + mutex_lock(&pcf->lock);
81040 +
81041 + tmp = __reg_read(pcf, reg);
81042 + tmp &= ~mask;
81043 + tmp |= val;
81044 + ret = __reg_write(pcf, reg, tmp);
81045 +
81046 + mutex_unlock(&pcf->lock);
81047 +
81048 + return ret;
81049 +}
81050 +
81051 +static int reg_clear_bits(struct pcf50606_data *pcf, u_int8_t reg, u_int8_t val)
81052 +{
81053 + int ret;
81054 + u_int8_t tmp;
81055 +
81056 + mutex_lock(&pcf->lock);
81057 +
81058 + tmp = __reg_read(pcf, reg);
81059 + tmp &= ~val;
81060 + ret = __reg_write(pcf, reg, tmp);
81061 +
81062 + mutex_unlock(&pcf->lock);
81063 +
81064 + return ret;
81065 +}
81066 +
81067 +/* synchronously read one ADC channel (busy-wait for result to be complete) */
81068 +static u_int16_t adc_read(struct pcf50606_data *pcf, int channel,
81069 + u_int16_t *data2)
81070 +{
81071 + u_int8_t adcs2, adcs1;
81072 + u_int16_t ret;
81073 +
81074 + dev_dbg(&pcf->client.dev, "entering (pcf=%p, channel=%u, data2=%p)\n",
81075 + pcf, channel, data2);
81076 +
81077 + channel &= PCF50606_ADCC2_ADCMUX_MASK;
81078 +
81079 + mutex_lock(&pcf->lock);
81080 +
81081 + /* start ADC conversion of selected channel */
81082 + __reg_write(pcf, PCF50606_REG_ADCC2, channel |
81083 + PCF50606_ADCC2_ADCSTART | PCF50606_ADCC2_RES_10BIT);
81084 +
81085 + do {
81086 + adcs2 = __reg_read(pcf, PCF50606_REG_ADCS2);
81087 + } while (!(adcs2 & PCF50606_ADCS2_ADCRDY));
81088 +
81089 + adcs1 = __reg_read(pcf, PCF50606_REG_ADCS1);
81090 + ret = (adcs1 << 2) | (adcs2 & 0x03);
81091 +
81092 + if (data2) {
81093 + adcs1 = __reg_read(pcf, PCF50606_REG_ADCS3);
81094 + *data2 = (adcs1 << 2) | ((adcs2 & 0x0c) >> 2);
81095 + }
81096 +
81097 + mutex_unlock(&pcf->lock);
81098 +
81099 + dev_dbg(&pcf->client.dev, "returning %u %u\n", ret,
81100 + data2 ? *data2 : 0);
81101 +
81102 + return ret;
81103 +}
81104 +
81105 +/***********************************************************************
81106 + * Voltage / ADC
81107 + ***********************************************************************/
81108 +
81109 +static u_int8_t dcudc_voltage(unsigned int millivolts)
81110 +{
81111 + if (millivolts < 900)
81112 + return 0;
81113 + if (millivolts > 5500)
81114 + return 0x1f;
81115 + if (millivolts <= 3300) {
81116 + millivolts -= 900;
81117 + return millivolts/300;
81118 + }
81119 + if (millivolts < 4000)
81120 + return 0x0f;
81121 + else {
81122 + millivolts -= 4000;
81123 + return millivolts/100;
81124 + }
81125 +}
81126 +
81127 +static unsigned int dcudc_2voltage(u_int8_t bits)
81128 +{
81129 + bits &= 0x1f;
81130 + if (bits < 0x08)
81131 + return 900 + bits * 300;
81132 + else if (bits < 0x10)
81133 + return 3300;
81134 + else
81135 + return 4000 + bits * 100;
81136 +}
81137 +
81138 +static u_int8_t dcdec_voltage(unsigned int millivolts)
81139 +{
81140 + if (millivolts < 900)
81141 + return 0;
81142 + else if (millivolts > 3300)
81143 + return 0x0f;
81144 +
81145 + millivolts -= 900;
81146 + return millivolts/300;
81147 +}
81148 +
81149 +static unsigned int dcdec_2voltage(u_int8_t bits)
81150 +{
81151 + bits &= 0x0f;
81152 + return 900 + bits*300;
81153 +}
81154 +
81155 +static u_int8_t dcdc_voltage(unsigned int millivolts)
81156 +{
81157 + if (millivolts < 900)
81158 + return 0;
81159 + else if (millivolts > 3600)
81160 + return 0x1f;
81161 +
81162 + if (millivolts < 1500) {
81163 + millivolts -= 900;
81164 + return millivolts/25;
81165 + } else {
81166 + millivolts -= 1500;
81167 + return 0x18 + millivolts/300;
81168 + }
81169 +}
81170 +
81171 +static unsigned int dcdc_2voltage(u_int8_t bits)
81172 +{
81173 + bits &= 0x1f;
81174 + if ((bits & 0x18) == 0x18)
81175 + return 1500 + ((bits & 0x7) * 300);
81176 + else
81177 + return 900 + (bits * 25);
81178 +}
81179 +
81180 +static u_int8_t dx_voltage(unsigned int millivolts)
81181 +{
81182 + if (millivolts < 900)
81183 + return 0;
81184 + else if (millivolts > 3300)
81185 + return 0x18;
81186 +
81187 + millivolts -= 900;
81188 + return millivolts/100;
81189 +}
81190 +
81191 +static unsigned int dx_2voltage(u_int8_t bits)
81192 +{
81193 + bits &= 0x1f;
81194 + return 900 + (bits * 100);
81195 +}
81196 +
81197 +static const u_int8_t regulator_registers[__NUM_PCF50606_REGULATORS] = {
81198 + [PCF50606_REGULATOR_DCD] = PCF50606_REG_DCDC1,
81199 + [PCF50606_REGULATOR_DCDE] = PCF50606_REG_DCDEC1,
81200 + [PCF50606_REGULATOR_DCUD] = PCF50606_REG_DCUDC1,
81201 + [PCF50606_REGULATOR_D1REG] = PCF50606_REG_D1REGC1,
81202 + [PCF50606_REGULATOR_D2REG] = PCF50606_REG_D2REGC1,
81203 + [PCF50606_REGULATOR_D3REG] = PCF50606_REG_D3REGC1,
81204 + [PCF50606_REGULATOR_LPREG] = PCF50606_REG_LPREGC1,
81205 + [PCF50606_REGULATOR_IOREG] = PCF50606_REG_IOREGC,
81206 +};
81207 +
81208 +int pcf50606_onoff_set(struct pcf50606_data *pcf,
81209 + enum pcf50606_regulator_id reg, int on)
81210 +{
81211 + u_int8_t addr;
81212 +
81213 + if (reg >= __NUM_PCF50606_REGULATORS)
81214 + return -EINVAL;
81215 +
81216 + /* IOREG cannot be powered off since it powers the PMU I2C */
81217 + if (reg == PCF50606_REGULATOR_IOREG)
81218 + return -EIO;
81219 +
81220 + addr = regulator_registers[reg];
81221 +
81222 + if (on == 0)
81223 + reg_set_bit_mask(pcf, addr, 0xe0, 0x00);
81224 + else
81225 + reg_set_bit_mask(pcf, addr, 0xe0, 0xe0);
81226 +
81227 + return 0;
81228 +}
81229 +EXPORT_SYMBOL_GPL(pcf50606_onoff_set);
81230 +
81231 +int pcf50606_onoff_get(struct pcf50606_data *pcf,
81232 + enum pcf50606_regulator_id reg)
81233 +{
81234 + u_int8_t val, addr;
81235 +
81236 + if (reg >= __NUM_PCF50606_REGULATORS)
81237 + return -EINVAL;
81238 +
81239 + addr = regulator_registers[reg];
81240 + val = (reg_read(pcf, addr) & 0xe0) >> 5;
81241 +
81242 + /* PWREN1 = 1, PWREN2 = 1, see table 16 of datasheet */
81243 + switch (val) {
81244 + case 0:
81245 + case 5:
81246 + return 0;
81247 + default:
81248 + return 1;
81249 + }
81250 +}
81251 +EXPORT_SYMBOL_GPL(pcf50606_onoff_get);
81252 +
81253 +int pcf50606_voltage_set(struct pcf50606_data *pcf,
81254 + enum pcf50606_regulator_id reg,
81255 + unsigned int millivolts)
81256 +{
81257 + u_int8_t volt_bits;
81258 + u_int8_t regnr;
81259 + int rc;
81260 +
81261 + dev_dbg(&pcf->client.dev, "pcf=%p, reg=%d, mvolts=%d\n", pcf, reg,
81262 + millivolts);
81263 +
81264 + if (reg >= __NUM_PCF50606_REGULATORS)
81265 + return -EINVAL;
81266 +
81267 + if (millivolts > pcf->pdata->rails[reg].voltage.max)
81268 + return -EINVAL;
81269 +
81270 + switch (reg) {
81271 + case PCF50606_REGULATOR_DCD:
81272 + volt_bits = dcdc_voltage(millivolts);
81273 + rc = reg_set_bit_mask(pcf, PCF50606_REG_DCDC1, 0x1f,
81274 + volt_bits);
81275 + break;
81276 + case PCF50606_REGULATOR_DCDE:
81277 + volt_bits = dcdec_voltage(millivolts);
81278 + rc = reg_set_bit_mask(pcf, PCF50606_REG_DCDEC1, 0x0f,
81279 + volt_bits);
81280 + break;
81281 + case PCF50606_REGULATOR_DCUD:
81282 + volt_bits = dcudc_voltage(millivolts);
81283 + rc = reg_set_bit_mask(pcf, PCF50606_REG_DCUDC1, 0x1f,
81284 + volt_bits);
81285 + break;
81286 + case PCF50606_REGULATOR_D1REG:
81287 + case PCF50606_REGULATOR_D2REG:
81288 + case PCF50606_REGULATOR_D3REG:
81289 + regnr = PCF50606_REG_D1REGC1 + (reg - PCF50606_REGULATOR_D1REG);
81290 + volt_bits = dx_voltage(millivolts);
81291 + rc = reg_set_bit_mask(pcf, regnr, 0x1f, volt_bits);
81292 + break;
81293 + case PCF50606_REGULATOR_LPREG:
81294 + volt_bits = dx_voltage(millivolts);
81295 + rc = reg_set_bit_mask(pcf, PCF50606_REG_LPREGC1, 0x1f,
81296 + volt_bits);
81297 + break;
81298 + case PCF50606_REGULATOR_IOREG:
81299 + if (millivolts < 1800)
81300 + return -EINVAL;
81301 + volt_bits = dx_voltage(millivolts);
81302 + rc = reg_set_bit_mask(pcf, PCF50606_REG_IOREGC, 0x1f,
81303 + volt_bits);
81304 + break;
81305 + default:
81306 + return -EINVAL;
81307 + }
81308 +
81309 + return rc;
81310 +}
81311 +EXPORT_SYMBOL_GPL(pcf50606_voltage_set);
81312 +
81313 +unsigned int pcf50606_voltage_get(struct pcf50606_data *pcf,
81314 + enum pcf50606_regulator_id reg)
81315 +{
81316 + u_int8_t volt_bits;
81317 + u_int8_t regnr;
81318 + unsigned int rc = 0;
81319 +
81320 + if (reg >= __NUM_PCF50606_REGULATORS)
81321 + return -EINVAL;
81322 +
81323 + switch (reg) {
81324 + case PCF50606_REGULATOR_DCD:
81325 + volt_bits = reg_read(pcf, PCF50606_REG_DCDC1) & 0x1f;
81326 + rc = dcdc_2voltage(volt_bits);
81327 + break;
81328 + case PCF50606_REGULATOR_DCDE:
81329 + volt_bits = reg_read(pcf, PCF50606_REG_DCDEC1) & 0x0f;
81330 + rc = dcdec_2voltage(volt_bits);
81331 + break;
81332 + case PCF50606_REGULATOR_DCUD:
81333 + volt_bits = reg_read(pcf, PCF50606_REG_DCUDC1) & 0x1f;
81334 + rc = dcudc_2voltage(volt_bits);
81335 + break;
81336 + case PCF50606_REGULATOR_D1REG:
81337 + case PCF50606_REGULATOR_D2REG:
81338 + case PCF50606_REGULATOR_D3REG:
81339 + regnr = PCF50606_REG_D1REGC1 + (reg - PCF50606_REGULATOR_D1REG);
81340 + volt_bits = reg_read(pcf, regnr) & 0x1f;
81341 + if (volt_bits > 0x18)
81342 + volt_bits = 0x18;
81343 + rc = dx_2voltage(volt_bits);
81344 + break;
81345 + case PCF50606_REGULATOR_LPREG:
81346 + volt_bits = reg_read(pcf, PCF50606_REG_LPREGC1) & 0x1f;
81347 + if (volt_bits > 0x18)
81348 + volt_bits = 0x18;
81349 + rc = dx_2voltage(volt_bits);
81350 + break;
81351 + case PCF50606_REGULATOR_IOREG:
81352 + volt_bits = reg_read(pcf, PCF50606_REG_IOREGC) & 0x1f;
81353 + if (volt_bits > 0x18)
81354 + volt_bits = 0x18;
81355 + rc = dx_2voltage(volt_bits);
81356 + break;
81357 + default:
81358 + return -EINVAL;
81359 + }
81360 +
81361 + return rc;
81362 +}
81363 +EXPORT_SYMBOL_GPL(pcf50606_voltage_get);
81364 +
81365 +/* go into 'STANDBY' mode, i.e. power off the main CPU and peripherals */
81366 +void pcf50606_go_standby(void)
81367 +{
81368 + reg_write(pcf50606_global, PCF50606_REG_OOCC1,
81369 + PCF50606_OOCC1_GOSTDBY);
81370 +}
81371 +EXPORT_SYMBOL_GPL(pcf50606_go_standby);
81372 +
81373 +void pcf50606_gpo0_set(struct pcf50606_data *pcf, int on)
81374 +{
81375 + u_int8_t val;
81376 +
81377 + if (on)
81378 + val = 0x07;
81379 + else
81380 + val = 0x0f;
81381 +
81382 + reg_set_bit_mask(pcf, PCF50606_REG_GPOC1, 0x0f, val);
81383 +}
81384 +EXPORT_SYMBOL_GPL(pcf50606_gpo0_set);
81385 +
81386 +int pcf50606_gpo0_get(struct pcf50606_data *pcf)
81387 +{
81388 + u_int8_t reg = reg_read(pcf, PCF50606_REG_GPOC1) & 0x0f;
81389 +
81390 + if (reg == 0x07 || reg == 0x08)
81391 + return 1;
81392 +
81393 + return 0;
81394 +}
81395 +EXPORT_SYMBOL_GPL(pcf50606_gpo0_get);
81396 +
81397 +static void pcf50606_work(struct work_struct *work)
81398 +{
81399 + struct pcf50606_data *pcf =
81400 + container_of(work, struct pcf50606_data, work);
81401 + u_int8_t pcfirq[3];
81402 + int ret;
81403 +
81404 + mutex_lock(&pcf->working_lock);
81405 + pcf->working = 1;
81406 +
81407 + /* sanity */
81408 + if (!&pcf->client.dev)
81409 + goto bail;
81410 +
81411 + /*
81412 + * if we are presently suspending, we are not in a position to deal
81413 + * with pcf50606 interrupts at all.
81414 + *
81415 + * Because we didn't clear the int pending registers, there will be
81416 + * no edge / interrupt waiting for us when we wake. But it is OK
81417 + * because at the end of our resume, we call this workqueue function
81418 + * gratuitously, clearing the pending register and re-enabling
81419 + * servicing this interrupt.
81420 + */
81421 +
81422 + if ((pcf->suspend_state == PCF50606_SS_STARTING_SUSPEND) ||
81423 + (pcf->suspend_state == PCF50606_SS_COMPLETED_SUSPEND))
81424 + goto bail;
81425 +
81426 + /*
81427 + * If we are inside suspend -> resume completion time we don't attempt
81428 + * service until we have fully resumed. Although we could talk to the
81429 + * device as soon as I2C is up, the regs in the device which we might
81430 + * choose to modify as part of the service action have not been
81431 + * reloaded with their pre-suspend states yet. Therefore we will
81432 + * defer our service if we are called like that until our resume has
81433 + * completed.
81434 + *
81435 + * This shouldn't happen any more because we disable servicing this
81436 + * interrupt in suspend and don't re-enable it until resume is
81437 + * completed.
81438 + */
81439 +
81440 + if (pcf->suspend_state &&
81441 + (pcf->suspend_state != PCF50606_SS_COMPLETED_RESUME))
81442 + goto reschedule;
81443 +
81444 + /* this is the case early in resume! Sanity check! */
81445 + if (i2c_get_clientdata(&pcf->client) == NULL)
81446 + goto reschedule;
81447 +
81448 + /*
81449 + * p35 pcf50606 datasheet rev 2.2:
81450 + * ''The system controller shall read all interrupt registers in
81451 + * one I2C read action''
81452 + * because if you don't INT# gets stuck asserted forever after a
81453 + * while
81454 + */
81455 + ret = i2c_smbus_read_i2c_block_data(&pcf->client, PCF50606_REG_INT1,
81456 + sizeof(pcfirq), pcfirq);
81457 + if (ret != sizeof(pcfirq)) {
81458 + DEBUGPC("Oh crap PMU IRQ register read failed %d\n", ret);
81459 + /*
81460 + * it shouldn't fail, we no longer attempt to use
81461 + * I2C while it can be suspended. But we don't have
81462 + * much option but to retry if if it ever did fail,
81463 + * because if we don't service the interrupt to clear
81464 + * it, we will never see another PMU interrupt edge.
81465 + */
81466 + goto reschedule;
81467 + }
81468 +
81469 + /* hey did we just resume? (because we don't get here unless we are
81470 + * running normally or the first call after resumption)
81471 + *
81472 + * pcf50606 resume is really really over now then.
81473 + */
81474 + if (pcf->suspend_state != PCF50606_SS_RUNNING) {
81475 + pcf->suspend_state = PCF50606_SS_RUNNING;
81476 +
81477 + /* peek at the IRQ reason, if power button then set a flag
81478 + * so that we do not signal the event to userspace
81479 + */
81480 + if (pcfirq[0] & (PCF50606_INT1_ONKEYF | PCF50606_INT1_ONKEYR)) {
81481 + pcf->suppress_onkey_events = 1;
81482 + dev_dbg(&pcf->client.dev,
81483 + "Wake by ONKEY, suppressing ONKEY events");
81484 + } else {
81485 + pcf->suppress_onkey_events = 0;
81486 + }
81487 + }
81488 +
81489 + if (!pcf->coldplug_done) {
81490 + DEBUGPC("PMU Coldplug init\n");
81491 +
81492 + /* we used SECOND to kick ourselves started -- turn it off */
81493 + pcfirq[0] &= ~PCF50606_INT1_SECOND;
81494 + reg_set_bit_mask(pcf, PCF50606_REG_INT1M, PCF50606_INT1_SECOND,
81495 + PCF50606_INT1_SECOND);
81496 +
81497 + /* coldplug the USB if present */
81498 + if (__reg_read(pcf, PCF50606_REG_OOCS) & PCF50606_OOCS_EXTON) {
81499 + /* Charger inserted */
81500 + DEBUGPC("COLD CHGINS ");
81501 + input_report_key(pcf->input_dev, KEY_BATTERY, 1);
81502 + apm_queue_event(APM_POWER_STATUS_CHANGE);
81503 + pcf->flags |= PCF50606_F_CHG_PRESENT;
81504 + if (pcf->pdata->cb)
81505 + pcf->pdata->cb(&pcf->client.dev,
81506 + PCF50606_FEAT_MBC,
81507 + PMU_EVT_INSERT);
81508 + }
81509 +
81510 + pcf->coldplug_done = 1;
81511 + }
81512 +
81513 +
81514 + dev_dbg(&pcf->client.dev, "INT1=0x%02x INT2=0x%02x INT3=0x%02x:",
81515 + pcfirq[0], pcfirq[1], pcfirq[2]);
81516 +
81517 + if (pcfirq[0] & PCF50606_INT1_ONKEYF) {
81518 + /* ONKEY falling edge (start of button press) */
81519 + pcf->flags |= PCF50606_F_PWR_PRESSED;
81520 + if (!pcf->suppress_onkey_events) {
81521 + DEBUGPC("ONKEYF ");
81522 + input_report_key(pcf->input_dev, KEY_POWER, 1);
81523 + } else {
81524 + DEBUGPC("ONKEYF(unreported) ");
81525 + }
81526 + }
81527 + if (pcfirq[0] & PCF50606_INT1_ONKEY1S) {
81528 + /* ONKEY pressed for more than 1 second */
81529 + pcf->onkey_seconds = 0;
81530 + DEBUGPC("ONKEY1S ");
81531 + /* Tell PMU we are taking care of this */
81532 + reg_set_bit_mask(pcf, PCF50606_REG_OOCC1,
81533 + PCF50606_OOCC1_TOTRST,
81534 + PCF50606_OOCC1_TOTRST);
81535 + /* enable SECOND interrupt (hz tick) */
81536 + reg_clear_bits(pcf, PCF50606_REG_INT1M, PCF50606_INT1_SECOND);
81537 + }
81538 + if (pcfirq[0] & PCF50606_INT1_ONKEYR) {
81539 + /* ONKEY rising edge (end of button press) */
81540 + pcf->flags &= ~PCF50606_F_PWR_PRESSED;
81541 + pcf->onkey_seconds = -1;
81542 + if (!pcf->suppress_onkey_events) {
81543 + DEBUGPC("ONKEYR ");
81544 + input_report_key(pcf->input_dev, KEY_POWER, 0);
81545 + } else {
81546 + DEBUGPC("ONKEYR(suppressed) ");
81547 + /* don't suppress any more power button events */
81548 + pcf->suppress_onkey_events = 0;
81549 + }
81550 + /* disable SECOND interrupt in case RTC didn't
81551 + * request it */
81552 + if (!(pcf->flags & PCF50606_F_RTC_SECOND))
81553 + reg_set_bit_mask(pcf, PCF50606_REG_INT1M,
81554 + PCF50606_INT1_SECOND,
81555 + PCF50606_INT1_SECOND);
81556 + }
81557 + if (pcfirq[0] & PCF50606_INT1_EXTONR) {
81558 + DEBUGPC("EXTONR ");
81559 + input_report_key(pcf->input_dev, KEY_POWER2, 1);
81560 + }
81561 + if (pcfirq[0] & PCF50606_INT1_EXTONF) {
81562 + DEBUGPC("EXTONF ");
81563 + input_report_key(pcf->input_dev, KEY_POWER2, 0);
81564 + }
81565 + if (pcfirq[0] & PCF50606_INT1_SECOND) {
81566 + DEBUGPC("SECOND ");
81567 + if (pcf->flags & PCF50606_F_RTC_SECOND)
81568 + rtc_update_irq(pcf->rtc, 1,
81569 + RTC_PF | RTC_IRQF);
81570 +
81571 + if (pcf->onkey_seconds >= 0 &&
81572 + pcf->flags & PCF50606_F_PWR_PRESSED) {
81573 + DEBUGPC("ONKEY_SECONDS(%u, OOCC1=0x%02x) ",
81574 + pcf->onkey_seconds,
81575 + reg_read(pcf, PCF50606_REG_OOCC1));
81576 + pcf->onkey_seconds++;
81577 + if (pcf->onkey_seconds >=
81578 + pcf->pdata->onkey_seconds_required) {
81579 + /* Ask init to do 'ctrlaltdel' */
81580 + /*
81581 + * currently Linux reacts badly to issuing a
81582 + * signal to PID #1 before init is started.
81583 + * What happens is that the next kernel thread
81584 + * to start, which is the JFFS2 Garbage
81585 + * collector in our case, gets the signal
81586 + * instead and proceeds to fail to fork --
81587 + * which is very bad. Therefore we confirm
81588 + * PID #1 exists before issuing the signal
81589 + */
81590 + if (find_task_by_pid_ns(1, &init_pid_ns)) {
81591 + kill_pid(task_pid(find_task_by_pid_ns(1,
81592 + &init_pid_ns)), SIGINT, 1);
81593 + DEBUGPC("SIGINT(init) ");
81594 + }
81595 + /* FIXME: what to do if userspace doesn't
81596 + * shut down? Do we want to force it? */
81597 + }
81598 + }
81599 + }
81600 + if (pcfirq[0] & PCF50606_INT1_ALARM) {
81601 + DEBUGPC("ALARM ");
81602 + if (pcf->pdata->used_features & PCF50606_FEAT_RTC)
81603 + rtc_update_irq(pcf->rtc, 1,
81604 + RTC_AF | RTC_IRQF);
81605 + }
81606 +
81607 + if (pcfirq[1] & PCF50606_INT2_CHGINS) {
81608 + /* Charger inserted */
81609 + DEBUGPC("CHGINS ");
81610 + input_report_key(pcf->input_dev, KEY_BATTERY, 1);
81611 + apm_queue_event(APM_POWER_STATUS_CHANGE);
81612 + pcf->flags |= PCF50606_F_CHG_PRESENT;
81613 + if (pcf->pdata->cb)
81614 + pcf->pdata->cb(&pcf->client.dev,
81615 + PCF50606_FEAT_MBC, PMU_EVT_INSERT);
81616 + /* FIXME: how to signal this to userspace */
81617 + }
81618 + if (pcfirq[1] & PCF50606_INT2_CHGRM) {
81619 + /* Charger removed */
81620 + DEBUGPC("CHGRM ");
81621 + input_report_key(pcf->input_dev, KEY_BATTERY, 0);
81622 + apm_queue_event(APM_POWER_STATUS_CHANGE);
81623 + pcf->flags &= ~(PCF50606_F_CHG_MASK|PCF50606_F_CHG_PRESENT);
81624 + if (pcf->pdata->cb)
81625 + pcf->pdata->cb(&pcf->client.dev,
81626 + PCF50606_FEAT_MBC, PMU_EVT_INSERT);
81627 + /* FIXME: how signal this to userspace */
81628 + }
81629 + if (pcfirq[1] & PCF50606_INT2_CHGFOK) {
81630 + /* Battery ready for fast charging */
81631 + DEBUGPC("CHGFOK ");
81632 + pcf->flags |= PCF50606_F_CHG_FOK;
81633 + /* FIXME: how to signal this to userspace */
81634 + }
81635 + if (pcfirq[1] & PCF50606_INT2_CHGERR) {
81636 + /* Error in charge mode */
81637 + DEBUGPC("CHGERR ");
81638 + pcf->flags |= PCF50606_F_CHG_ERR;
81639 + pcf->flags &= ~(PCF50606_F_CHG_FOK|PCF50606_F_CHG_READY);
81640 + /* FIXME: how to signal this to userspace */
81641 + }
81642 + if (pcfirq[1] & PCF50606_INT2_CHGFRDY) {
81643 + /* Fast charge completed */
81644 + DEBUGPC("CHGFRDY ");
81645 + pcf->flags |= PCF50606_F_CHG_READY;
81646 + pcf->flags &= ~PCF50606_F_CHG_FOK;
81647 + /* FIXME: how to signal this to userspace */
81648 + }
81649 + if (pcfirq[1] & PCF50606_INT2_CHGPROT) {
81650 + /* Charging protection interrupt */
81651 + DEBUGPC("CHGPROT ");
81652 + pcf->flags &= ~(PCF50606_F_CHG_FOK|PCF50606_F_CHG_READY);
81653 + /* FIXME: signal this to userspace */
81654 + }
81655 + if (pcfirq[1] & PCF50606_INT2_CHGWD10S) {
81656 + /* Charger watchdog will expire in 10 seconds */
81657 + DEBUGPC("CHGWD10S ");
81658 + reg_set_bit_mask(pcf, PCF50606_REG_OOCC1,
81659 + PCF50606_OOCC1_WDTRST,
81660 + PCF50606_OOCC1_WDTRST);
81661 + }
81662 + if (pcfirq[1] & PCF50606_INT2_CHGWDEXP) {
81663 + /* Charger watchdog expires */
81664 + DEBUGPC("CHGWDEXP ");
81665 + /* FIXME: how to signal this to userspace */
81666 + }
81667 +
81668 + if (pcfirq[2] & PCF50606_INT3_ADCRDY) {
81669 + /* ADC result ready */
81670 + DEBUGPC("ADCRDY ");
81671 + }
81672 + if (pcfirq[2] & PCF50606_INT3_ACDINS) {
81673 + /* Accessory insertion detected */
81674 + DEBUGPC("ACDINS ");
81675 + if (pcf->pdata->cb)
81676 + pcf->pdata->cb(&pcf->client.dev,
81677 + PCF50606_FEAT_ACD, PMU_EVT_INSERT);
81678 + }
81679 + if (pcfirq[2] & PCF50606_INT3_ACDREM) {
81680 + /* Accessory removal detected */
81681 + DEBUGPC("ACDREM ");
81682 + if (pcf->pdata->cb)
81683 + pcf->pdata->cb(&pcf->client.dev,
81684 + PCF50606_FEAT_ACD, PMU_EVT_REMOVE);
81685 + }
81686 + /* FIXME: TSCPRES */
81687 + if (pcfirq[2] & PCF50606_INT3_LOWBAT) {
81688 + if (__reg_read(pcf, PCF50606_REG_OOCS) & PCF50606_OOCS_EXTON) {
81689 + /*
81690 + * hey no need to freak out, we have some kind of
81691 + * valid charger power
81692 + */
81693 + DEBUGPC("(NO)BAT ");
81694 + } else {
81695 + /* Really low battery voltage, we have 8 seconds left */
81696 + DEBUGPC("LOWBAT ");
81697 + /*
81698 + * currently Linux reacts badly to issuing a signal to
81699 + * PID #1 before init is started. What happens is that
81700 + * the next kernel thread to start, which is the JFFS2
81701 + * Garbage collector in our case, gets the signal
81702 + * instead and proceeds to fail to fork -- which is
81703 + * very bad. Therefore we confirm PID #1 exists
81704 + * before issuing SPIGPWR
81705 + */
81706 + if (find_task_by_pid_ns(1, &init_pid_ns)) {
81707 + apm_queue_event(APM_LOW_BATTERY);
81708 + DEBUGPC("SIGPWR(init) ");
81709 + kill_pid(task_pid(find_task_by_pid_ns(1, &init_pid_ns)), SIGPWR, 1);
81710 + } else
81711 + /*
81712 + * well, our situation is like this: we do not
81713 + * have any external power, we have a low
81714 + * battery and since PID #1 doesn't exist yet,
81715 + * we are early in the boot, likely before
81716 + * rootfs mount. We should just call it a day
81717 + */
81718 + apm_queue_event(APM_CRITICAL_SUSPEND);
81719 + }
81720 + /* Tell PMU we are taking care of this */
81721 + reg_set_bit_mask(pcf, PCF50606_REG_OOCC1,
81722 + PCF50606_OOCC1_TOTRST,
81723 + PCF50606_OOCC1_TOTRST);
81724 + }
81725 + if (pcfirq[2] & PCF50606_INT3_HIGHTMP) {
81726 + /* High temperature */
81727 + DEBUGPC("HIGHTMP ");
81728 + apm_queue_event(APM_CRITICAL_SUSPEND);
81729 + }
81730 +
81731 + DEBUGPC("\n");
81732 +
81733 +bail:
81734 + pcf->working = 0;
81735 + input_sync(pcf->input_dev);
81736 + put_device(&pcf->client.dev);
81737 + mutex_unlock(&pcf->working_lock);
81738 +
81739 + return;
81740 +
81741 +reschedule:
81742 +
81743 + if ((pcf->suspend_state != PCF50606_SS_STARTING_SUSPEND) &&
81744 + (pcf->suspend_state != PCF50606_SS_COMPLETED_SUSPEND)) {
81745 + msleep(10);
81746 + dev_info(&pcf->client.dev, "rescheduling interrupt service\n");
81747 + }
81748 + if (!schedule_work(&pcf->work))
81749 + dev_err(&pcf->client.dev, "int service reschedule failed\n");
81750 +
81751 + /* we don't put the device here, hold it for next time */
81752 + mutex_unlock(&pcf->working_lock);
81753 +}
81754 +
81755 +static irqreturn_t pcf50606_irq(int irq, void *_pcf)
81756 +{
81757 + struct pcf50606_data *pcf = _pcf;
81758 +
81759 + dev_dbg(&pcf->client.dev, "entering(irq=%u, pcf=%p): scheduling work\n",
81760 + irq, _pcf);
81761 + get_device(&pcf->client.dev);
81762 + if (!schedule_work(&pcf->work) && !pcf->working)
81763 + dev_err(&pcf->client.dev, "pcf irq work already queued.\n");
81764 +
81765 + return IRQ_HANDLED;
81766 +}
81767 +
81768 +static u_int16_t adc_to_batt_millivolts(u_int16_t adc)
81769 +{
81770 + u_int16_t mvolts;
81771 +
81772 + mvolts = (adc * 6000) / 1024;
81773 +
81774 + return mvolts;
81775 +}
81776 +
81777 +#define BATTVOLT_SCALE_START 2800
81778 +#define BATTVOLT_SCALE_END 4200
81779 +#define BATTVOLT_SCALE_DIVIDER ((BATTVOLT_SCALE_END - BATTVOLT_SCALE_START)/100)
81780 +
81781 +static u_int8_t battvolt_scale(u_int16_t battvolt)
81782 +{
81783 + /* FIXME: this linear scale is completely bogus */
81784 + u_int16_t battvolt_relative = battvolt - BATTVOLT_SCALE_START;
81785 + unsigned int percent = battvolt_relative / BATTVOLT_SCALE_DIVIDER;
81786 +
81787 + return percent;
81788 +}
81789 +
81790 +u_int16_t pcf50606_battvolt(struct pcf50606_data *pcf)
81791 +{
81792 + u_int16_t adc;
81793 + adc = adc_read(pcf, PCF50606_ADCMUX_BATVOLT_RES, NULL);
81794 +
81795 + return adc_to_batt_millivolts(adc);
81796 +}
81797 +EXPORT_SYMBOL_GPL(pcf50606_battvolt);
81798 +
81799 +static ssize_t show_battvolt(struct device *dev, struct device_attribute *attr,
81800 + char *buf)
81801 +{
81802 + struct i2c_client *client = to_i2c_client(dev);
81803 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
81804 +
81805 + return sprintf(buf, "%u\n", pcf50606_battvolt(pcf));
81806 +}
81807 +static DEVICE_ATTR(battvolt, S_IRUGO | S_IWUSR, show_battvolt, NULL);
81808 +
81809 +static int reg_id_by_name(const char *name)
81810 +{
81811 + int reg_id;
81812 +
81813 + if (!strcmp(name, "voltage_dcd"))
81814 + reg_id = PCF50606_REGULATOR_DCD;
81815 + else if (!strcmp(name, "voltage_dcde"))
81816 + reg_id = PCF50606_REGULATOR_DCDE;
81817 + else if (!strcmp(name, "voltage_dcud"))
81818 + reg_id = PCF50606_REGULATOR_DCUD;
81819 + else if (!strcmp(name, "voltage_d1reg"))
81820 + reg_id = PCF50606_REGULATOR_D1REG;
81821 + else if (!strcmp(name, "voltage_d2reg"))
81822 + reg_id = PCF50606_REGULATOR_D2REG;
81823 + else if (!strcmp(name, "voltage_d3reg"))
81824 + reg_id = PCF50606_REGULATOR_D3REG;
81825 + else if (!strcmp(name, "voltage_lpreg"))
81826 + reg_id = PCF50606_REGULATOR_LPREG;
81827 + else if (!strcmp(name, "voltage_ioreg"))
81828 + reg_id = PCF50606_REGULATOR_IOREG;
81829 + else
81830 + reg_id = -1;
81831 +
81832 + return reg_id;
81833 +}
81834 +
81835 +static ssize_t show_vreg(struct device *dev, struct device_attribute *attr,
81836 + char *buf)
81837 +{
81838 + struct i2c_client *client = to_i2c_client(dev);
81839 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
81840 + unsigned int reg_id;
81841 +
81842 + reg_id = reg_id_by_name(attr->attr.name);
81843 + if (reg_id < 0)
81844 + return 0;
81845 +
81846 + if (pcf50606_onoff_get(pcf, reg_id) > 0)
81847 + return sprintf(buf, "%u\n", pcf50606_voltage_get(pcf, reg_id));
81848 + else
81849 + return strlcpy(buf, "0\n", PAGE_SIZE);
81850 +}
81851 +
81852 +static ssize_t set_vreg(struct device *dev, struct device_attribute *attr,
81853 + const char *buf, size_t count)
81854 +{
81855 + struct i2c_client *client = to_i2c_client(dev);
81856 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
81857 + unsigned long mvolts = simple_strtoul(buf, NULL, 10);
81858 + unsigned int reg_id;
81859 +
81860 + reg_id = reg_id_by_name(attr->attr.name);
81861 + if (reg_id < 0)
81862 + return -EIO;
81863 +
81864 + dev_dbg(dev, "attempting to set %s(%d) to %lu mvolts\n",
81865 + attr->attr.name, reg_id, mvolts);
81866 +
81867 + if (mvolts == 0) {
81868 + pcf50606_onoff_set(pcf, reg_id, 0);
81869 + } else {
81870 + if (pcf50606_voltage_set(pcf, reg_id, mvolts) < 0) {
81871 + dev_warn(dev, "refusing to set %s(%d) to %lu mvolts "
81872 + "(max=%u)\n", attr->attr.name, reg_id, mvolts,
81873 + pcf->pdata->rails[reg_id].voltage.max);
81874 + return -EINVAL;
81875 + }
81876 + pcf50606_onoff_set(pcf, reg_id, 1);
81877 + }
81878 +
81879 + return count;
81880 +}
81881 +
81882 +static DEVICE_ATTR(voltage_dcd, S_IRUGO | S_IWUSR, show_vreg, set_vreg);
81883 +static DEVICE_ATTR(voltage_dcde, S_IRUGO | S_IWUSR, show_vreg, set_vreg);
81884 +static DEVICE_ATTR(voltage_dcud, S_IRUGO | S_IWUSR, show_vreg, set_vreg);
81885 +static DEVICE_ATTR(voltage_d1reg, S_IRUGO | S_IWUSR, show_vreg, set_vreg);
81886 +static DEVICE_ATTR(voltage_d2reg, S_IRUGO | S_IWUSR, show_vreg, set_vreg);
81887 +static DEVICE_ATTR(voltage_d3reg, S_IRUGO | S_IWUSR, show_vreg, set_vreg);
81888 +static DEVICE_ATTR(voltage_lpreg, S_IRUGO | S_IWUSR, show_vreg, set_vreg);
81889 +static DEVICE_ATTR(voltage_ioreg, S_IRUGO | S_IWUSR, show_vreg, set_vreg);
81890 +
81891 +/***********************************************************************
81892 + * Charger Control
81893 + ***********************************************************************/
81894 +
81895 +/* Enable/disable fast charging (500mA in the GTA01) */
81896 +void pcf50606_charge_fast(struct pcf50606_data *pcf, int on)
81897 +{
81898 + if (!(pcf->pdata->used_features & PCF50606_FEAT_MBC))
81899 + return;
81900 +
81901 + if (on) {
81902 + /* We can allow PCF to automatically charge
81903 + * using Ifast */
81904 + pcf->flags |= PCF50606_F_CHG_FAST;
81905 + reg_set_bit_mask(pcf, PCF50606_REG_MBCC1,
81906 + PCF50606_MBCC1_AUTOFST,
81907 + PCF50606_MBCC1_AUTOFST);
81908 + } else {
81909 + pcf->flags &= ~PCF50606_F_CHG_FAST;
81910 + /* disable automatic fast-charge */
81911 + reg_clear_bits(pcf, PCF50606_REG_MBCC1,
81912 + PCF50606_MBCC1_AUTOFST);
81913 + /* switch to idle mode to abort existing charge
81914 + * process */
81915 + reg_set_bit_mask(pcf, PCF50606_REG_MBCC1,
81916 + PCF50606_MBCC1_CHGMOD_MASK,
81917 + PCF50606_MBCC1_CHGMOD_IDLE);
81918 + }
81919 +}
81920 +EXPORT_SYMBOL_GPL(pcf50606_charge_fast);
81921 +
81922 +static inline u_int16_t adc_to_rntc(struct pcf50606_data *pcf, u_int16_t adc)
81923 +{
81924 + u_int32_t r_ntc = (adc * (u_int32_t)pcf->pdata->r_fix_batt)
81925 + / (1023 - adc);
81926 +
81927 + return r_ntc;
81928 +}
81929 +
81930 +static inline int16_t rntc_to_temp(u_int16_t rntc)
81931 +{
81932 + int i;
81933 +
81934 + for (i = 0; i < ARRAY_SIZE(ntc_table_10k_3370B); i++) {
81935 + if (rntc > ntc_table_10k_3370B[i])
81936 + return i - 10; /* First element is -10 */
81937 + }
81938 + return -99; /* Below our range */
81939 +}
81940 +
81941 +static ssize_t show_battemp(struct device *dev, struct device_attribute *attr,
81942 + char *buf)
81943 +{
81944 + struct i2c_client *client = to_i2c_client(dev);
81945 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
81946 + u_int16_t adc;
81947 +
81948 + adc = adc_read(pcf, PCF50606_ADCMUX_BATTEMP, NULL);
81949 +
81950 + return sprintf(buf, "%d\n", rntc_to_temp(adc_to_rntc(pcf, adc)));
81951 +}
81952 +static DEVICE_ATTR(battemp, S_IRUGO | S_IWUSR, show_battemp, NULL);
81953 +
81954 +static inline int16_t adc_to_chg_milliamps(struct pcf50606_data *pcf,
81955 + u_int16_t adc_adcin1,
81956 + u_int16_t adc_batvolt)
81957 +{
81958 + int32_t res = (adc_adcin1 - adc_batvolt) * 2400;
81959 + return (res * 1000) / (pcf->pdata->r_sense_milli * 1024);
81960 +}
81961 +
81962 +static ssize_t show_chgcur(struct device *dev, struct device_attribute *attr,
81963 + char *buf)
81964 +{
81965 + struct i2c_client *client = to_i2c_client(dev);
81966 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
81967 + u_int16_t adc_batvolt, adc_adcin1;
81968 + int16_t ma;
81969 +
81970 + adc_batvolt = adc_read(pcf, PCF50606_ADCMUX_BATVOLT_ADCIN1,
81971 + &adc_adcin1);
81972 + ma = adc_to_chg_milliamps(pcf, adc_adcin1, adc_batvolt);
81973 +
81974 + return sprintf(buf, "%d\n", ma);
81975 +}
81976 +static DEVICE_ATTR(chgcur, S_IRUGO | S_IWUSR, show_chgcur, NULL);
81977 +
81978 +static const char *chgmode_names[] = {
81979 + [PCF50606_MBCC1_CHGMOD_QUAL] = "qualification",
81980 + [PCF50606_MBCC1_CHGMOD_PRE] = "pre",
81981 + [PCF50606_MBCC1_CHGMOD_TRICKLE] = "trickle",
81982 + [PCF50606_MBCC1_CHGMOD_FAST_CCCV] = "fast_cccv",
81983 + [PCF50606_MBCC1_CHGMOD_FAST_NOCC] = "fast_nocc",
81984 + [PCF50606_MBCC1_CHGMOD_FAST_NOCV] = "fast_nocv",
81985 + [PCF50606_MBCC1_CHGMOD_FAST_SW] = "fast_switch",
81986 + [PCF50606_MBCC1_CHGMOD_IDLE] = "idle",
81987 +};
81988 +
81989 +static ssize_t show_chgmode(struct device *dev, struct device_attribute *attr,
81990 + char *buf)
81991 +{
81992 + struct i2c_client *client = to_i2c_client(dev);
81993 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
81994 + u_int8_t mbcc1 = reg_read(pcf, PCF50606_REG_MBCC1);
81995 + u_int8_t chgmod = (mbcc1 & PCF50606_MBCC1_CHGMOD_MASK);
81996 +
81997 + return sprintf(buf, "%s\n", chgmode_names[chgmod]);
81998 +}
81999 +
82000 +static ssize_t set_chgmode(struct device *dev, struct device_attribute *attr,
82001 + const char *buf, size_t count)
82002 +{
82003 + struct i2c_client *client = to_i2c_client(dev);
82004 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82005 + u_int8_t mbcc1 = reg_read(pcf, PCF50606_REG_MBCC1);
82006 +
82007 + mbcc1 &= ~PCF50606_MBCC1_CHGMOD_MASK;
82008 +
82009 + if (!strcmp(buf, "qualification"))
82010 + mbcc1 |= PCF50606_MBCC1_CHGMOD_QUAL;
82011 + else if (!strcmp(buf, "pre"))
82012 + mbcc1 |= PCF50606_MBCC1_CHGMOD_PRE;
82013 + else if (!strcmp(buf, "trickle"))
82014 + mbcc1 |= PCF50606_MBCC1_CHGMOD_TRICKLE;
82015 + else if (!strcmp(buf, "fast_cccv"))
82016 + mbcc1 |= PCF50606_MBCC1_CHGMOD_FAST_CCCV;
82017 + /* We don't allow the other fast modes for security reasons */
82018 + else if (!strcmp(buf, "idle"))
82019 + mbcc1 |= PCF50606_MBCC1_CHGMOD_IDLE;
82020 + else
82021 + return -EINVAL;
82022 +
82023 + reg_write(pcf, PCF50606_REG_MBCC1, mbcc1);
82024 +
82025 + return count;
82026 +}
82027 +
82028 +static DEVICE_ATTR(chgmode, S_IRUGO | S_IWUSR, show_chgmode, set_chgmode);
82029 +
82030 +static const char *chgstate_names[] = {
82031 + [PCF50606_B_CHG_FAST] = "fast_enabled",
82032 + [PCF50606_B_CHG_PRESENT] = "present",
82033 + [PCF50606_B_CHG_FOK] = "fast_ok",
82034 + [PCF50606_B_CHG_ERR] = "error",
82035 + [PCF50606_B_CHG_PROT] = "protection",
82036 + [PCF50606_B_CHG_READY] = "ready",
82037 +};
82038 +
82039 +static ssize_t show_chgstate(struct device *dev, struct device_attribute *attr,
82040 + char *buf)
82041 +{
82042 + struct i2c_client *client = to_i2c_client(dev);
82043 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82044 + char *b = buf;
82045 + int i;
82046 +
82047 + for (i = 0; i < 32; i++)
82048 + if (pcf->flags & (1 << i) && i < ARRAY_SIZE(chgstate_names))
82049 + b += sprintf(b, "%s ", chgstate_names[i]);
82050 +
82051 + if (b > buf)
82052 + b += sprintf(b, "\n");
82053 +
82054 + return b - buf;
82055 +}
82056 +static DEVICE_ATTR(chgstate, S_IRUGO | S_IWUSR, show_chgstate, NULL);
82057 +
82058 +/***********************************************************************
82059 + * APM emulation
82060 + ***********************************************************************/
82061 +
82062 +static void pcf50606_get_power_status(struct apm_power_info *info)
82063 +{
82064 + struct pcf50606_data *pcf = pcf50606_global;
82065 + u_int8_t mbcc1 = reg_read(pcf, PCF50606_REG_MBCC1);
82066 + u_int8_t chgmod = mbcc1 & PCF50606_MBCC1_CHGMOD_MASK;
82067 + u_int16_t battvolt = pcf50606_battvolt(pcf);
82068 +
82069 + if (reg_read(pcf, PCF50606_REG_OOCS) & PCF50606_OOCS_EXTON)
82070 + info->ac_line_status = APM_AC_ONLINE;
82071 + else
82072 + info->ac_line_status = APM_AC_OFFLINE;
82073 +
82074 + switch (chgmod) {
82075 + case PCF50606_MBCC1_CHGMOD_QUAL:
82076 + case PCF50606_MBCC1_CHGMOD_PRE:
82077 + case PCF50606_MBCC1_CHGMOD_IDLE:
82078 + info->battery_life = battvolt_scale(battvolt);
82079 + break;
82080 + default:
82081 + info->battery_status = APM_BATTERY_STATUS_CHARGING;
82082 + info->battery_flag = APM_BATTERY_FLAG_CHARGING;
82083 + break;
82084 + }
82085 +}
82086 +
82087 +/***********************************************************************
82088 + * RTC
82089 + ***********************************************************************/
82090 +
82091 +struct pcf50606_time {
82092 + u_int8_t sec;
82093 + u_int8_t min;
82094 + u_int8_t hour;
82095 + u_int8_t wkday;
82096 + u_int8_t day;
82097 + u_int8_t month;
82098 + u_int8_t year;
82099 +};
82100 +
82101 +static void pcf2rtc_time(struct rtc_time *rtc, struct pcf50606_time *pcf)
82102 +{
82103 + rtc->tm_sec = bcd2bin(pcf->sec);
82104 + rtc->tm_min = bcd2bin(pcf->min);
82105 + rtc->tm_hour = bcd2bin(pcf->hour);
82106 + rtc->tm_wday = bcd2bin(pcf->wkday);
82107 + rtc->tm_mday = bcd2bin(pcf->day);
82108 + rtc->tm_mon = bcd2bin(pcf->month);
82109 + rtc->tm_year = bcd2bin(pcf->year) + 100;
82110 +}
82111 +
82112 +static void rtc2pcf_time(struct pcf50606_time *pcf, struct rtc_time *rtc)
82113 +{
82114 + pcf->sec = bin2bcd(rtc->tm_sec);
82115 + pcf->min = bin2bcd(rtc->tm_min);
82116 + pcf->hour = bin2bcd(rtc->tm_hour);
82117 + pcf->wkday = bin2bcd(rtc->tm_wday);
82118 + pcf->day = bin2bcd(rtc->tm_mday);
82119 + pcf->month = bin2bcd(rtc->tm_mon);
82120 + pcf->year = bin2bcd(rtc->tm_year - 100);
82121 +}
82122 +
82123 +static int pcf50606_rtc_ioctl(struct device *dev, unsigned int cmd,
82124 + unsigned long arg)
82125 +{
82126 + struct i2c_client *client = to_i2c_client(dev);
82127 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82128 +
82129 + switch (cmd) {
82130 + case RTC_AIE_OFF:
82131 + /* disable the alarm interrupt */
82132 + reg_set_bit_mask(pcf, PCF50606_REG_INT1M,
82133 + PCF50606_INT1_ALARM, PCF50606_INT1_ALARM);
82134 + return 0;
82135 + case RTC_AIE_ON:
82136 + /* enable the alarm interrupt */
82137 + reg_clear_bits(pcf, PCF50606_REG_INT1M, PCF50606_INT1_ALARM);
82138 + return 0;
82139 + case RTC_PIE_OFF:
82140 + /* disable periodic interrupt (hz tick) */
82141 + pcf->flags &= ~PCF50606_F_RTC_SECOND;
82142 + reg_set_bit_mask(pcf, PCF50606_REG_INT1M,
82143 + PCF50606_INT1_SECOND, PCF50606_INT1_SECOND);
82144 + return 0;
82145 + case RTC_PIE_ON:
82146 + /* ensable periodic interrupt (hz tick) */
82147 + pcf->flags |= PCF50606_F_RTC_SECOND;
82148 + reg_clear_bits(pcf, PCF50606_REG_INT1M, PCF50606_INT1_SECOND);
82149 + return 0;
82150 + }
82151 + return -ENOIOCTLCMD;
82152 +}
82153 +
82154 +static int pcf50606_rtc_read_time(struct device *dev, struct rtc_time *tm)
82155 +{
82156 + struct i2c_client *client = to_i2c_client(dev);
82157 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82158 + struct pcf50606_time pcf_tm;
82159 +
82160 + mutex_lock(&pcf->lock);
82161 + pcf_tm.sec = __reg_read(pcf, PCF50606_REG_RTCSC);
82162 + pcf_tm.min = __reg_read(pcf, PCF50606_REG_RTCMN);
82163 + pcf_tm.hour = __reg_read(pcf, PCF50606_REG_RTCHR);
82164 + pcf_tm.wkday = __reg_read(pcf, PCF50606_REG_RTCWD);
82165 + pcf_tm.day = __reg_read(pcf, PCF50606_REG_RTCDT);
82166 + pcf_tm.month = __reg_read(pcf, PCF50606_REG_RTCMT);
82167 + pcf_tm.year = __reg_read(pcf, PCF50606_REG_RTCYR);
82168 + mutex_unlock(&pcf->lock);
82169 +
82170 + dev_dbg(dev, "PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x\n",
82171 + pcf_tm.day, pcf_tm.month, pcf_tm.year,
82172 + pcf_tm.hour, pcf_tm.min, pcf_tm.sec);
82173 +
82174 + pcf2rtc_time(tm, &pcf_tm);
82175 +
82176 + dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n",
82177 + tm->tm_mday, tm->tm_mon, tm->tm_year,
82178 + tm->tm_hour, tm->tm_min, tm->tm_sec);
82179 +
82180 + return 0;
82181 +}
82182 +
82183 +static int pcf50606_rtc_set_time(struct device *dev, struct rtc_time *tm)
82184 +{
82185 + struct i2c_client *client = to_i2c_client(dev);
82186 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82187 + struct pcf50606_time pcf_tm;
82188 + u_int8_t int1m;
82189 +
82190 + dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n",
82191 + tm->tm_mday, tm->tm_mon, tm->tm_year,
82192 + tm->tm_hour, tm->tm_min, tm->tm_sec);
82193 + rtc2pcf_time(&pcf_tm, tm);
82194 + dev_dbg(dev, "PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x\n",
82195 + pcf_tm.day, pcf_tm.month, pcf_tm.year,
82196 + pcf_tm.hour, pcf_tm.min, pcf_tm.sec);
82197 +
82198 + mutex_lock(&pcf->lock);
82199 +
82200 + /* disable SECOND interrupt */
82201 + int1m = __reg_read(pcf, PCF50606_REG_INT1M);
82202 + __reg_write(pcf, PCF50606_REG_INT1M, int1m | PCF50606_INT1_SECOND);
82203 +
82204 + __reg_write(pcf, PCF50606_REG_RTCSC, pcf_tm.sec);
82205 + __reg_write(pcf, PCF50606_REG_RTCMN, pcf_tm.min);
82206 + __reg_write(pcf, PCF50606_REG_RTCHR, pcf_tm.hour);
82207 + __reg_write(pcf, PCF50606_REG_RTCWD, pcf_tm.wkday);
82208 + __reg_write(pcf, PCF50606_REG_RTCDT, pcf_tm.day);
82209 + __reg_write(pcf, PCF50606_REG_RTCMT, pcf_tm.month);
82210 + __reg_write(pcf, PCF50606_REG_RTCYR, pcf_tm.year);
82211 +
82212 + /* restore INT1M, potentially re-enable SECOND interrupt */
82213 + __reg_write(pcf, PCF50606_REG_INT1M, int1m);
82214 +
82215 + mutex_unlock(&pcf->lock);
82216 +
82217 + return 0;
82218 +}
82219 +
82220 +static int pcf50606_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
82221 +{
82222 + struct i2c_client *client = to_i2c_client(dev);
82223 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82224 + struct pcf50606_time pcf_tm;
82225 +
82226 + mutex_lock(&pcf->lock);
82227 + alrm->enabled =
82228 + __reg_read(pcf, PCF50606_REG_INT1M) & PCF50606_INT1_ALARM
82229 + ? 0 : 1;
82230 + pcf_tm.sec = __reg_read(pcf, PCF50606_REG_RTCSCA);
82231 + pcf_tm.min = __reg_read(pcf, PCF50606_REG_RTCMNA);
82232 + pcf_tm.hour = __reg_read(pcf, PCF50606_REG_RTCHRA);
82233 + pcf_tm.wkday = __reg_read(pcf, PCF50606_REG_RTCWDA);
82234 + pcf_tm.day = __reg_read(pcf, PCF50606_REG_RTCDTA);
82235 + pcf_tm.month = __reg_read(pcf, PCF50606_REG_RTCMTA);
82236 + pcf_tm.year = __reg_read(pcf, PCF50606_REG_RTCYRA);
82237 + mutex_unlock(&pcf->lock);
82238 +
82239 + pcf2rtc_time(&alrm->time, &pcf_tm);
82240 +
82241 + return 0;
82242 +}
82243 +
82244 +static int pcf50606_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
82245 +{
82246 + struct i2c_client *client = to_i2c_client(dev);
82247 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82248 + struct pcf50606_time pcf_tm;
82249 + u_int8_t irqmask;
82250 +
82251 + rtc2pcf_time(&pcf_tm, &alrm->time);
82252 +
82253 + mutex_lock(&pcf->lock);
82254 +
82255 + /* disable alarm interrupt */
82256 + irqmask = __reg_read(pcf, PCF50606_REG_INT1M);
82257 + irqmask |= PCF50606_INT1_ALARM;
82258 + __reg_write(pcf, PCF50606_REG_INT1M, irqmask);
82259 +
82260 + __reg_write(pcf, PCF50606_REG_RTCSCA, pcf_tm.sec);
82261 + __reg_write(pcf, PCF50606_REG_RTCMNA, pcf_tm.min);
82262 + __reg_write(pcf, PCF50606_REG_RTCHRA, pcf_tm.hour);
82263 + __reg_write(pcf, PCF50606_REG_RTCWDA, pcf_tm.wkday);
82264 + __reg_write(pcf, PCF50606_REG_RTCDTA, pcf_tm.day);
82265 + __reg_write(pcf, PCF50606_REG_RTCMTA, pcf_tm.month);
82266 + __reg_write(pcf, PCF50606_REG_RTCYRA, pcf_tm.year);
82267 +
82268 + if (alrm->enabled) {
82269 + /* (re-)enaable alarm interrupt */
82270 + irqmask = __reg_read(pcf, PCF50606_REG_INT1M);
82271 + irqmask &= ~PCF50606_INT1_ALARM;
82272 + __reg_write(pcf, PCF50606_REG_INT1M, irqmask);
82273 + }
82274 +
82275 + mutex_unlock(&pcf->lock);
82276 +
82277 + /* FIXME */
82278 + return 0;
82279 +}
82280 +
82281 +static struct rtc_class_ops pcf50606_rtc_ops = {
82282 + .ioctl = pcf50606_rtc_ioctl,
82283 + .read_time = pcf50606_rtc_read_time,
82284 + .set_time = pcf50606_rtc_set_time,
82285 + .read_alarm = pcf50606_rtc_read_alarm,
82286 + .set_alarm = pcf50606_rtc_set_alarm,
82287 +};
82288 +
82289 +/***********************************************************************
82290 + * Watchdog
82291 + ***********************************************************************/
82292 +
82293 +static void pcf50606_wdt_start(struct pcf50606_data *pcf)
82294 +{
82295 + reg_set_bit_mask(pcf, PCF50606_REG_OOCC1, PCF50606_OOCC1_WDTRST,
82296 + PCF50606_OOCC1_WDTRST);
82297 +}
82298 +
82299 +static void pcf50606_wdt_stop(struct pcf50606_data *pcf)
82300 +{
82301 + reg_clear_bits(pcf, PCF50606_REG_OOCS, PCF50606_OOCS_WDTEXP);
82302 +}
82303 +
82304 +static void pcf50606_wdt_keepalive(struct pcf50606_data *pcf)
82305 +{
82306 + pcf50606_wdt_start(pcf);
82307 +}
82308 +
82309 +static int pcf50606_wdt_open(struct inode *inode, struct file *file)
82310 +{
82311 + struct pcf50606_data *pcf = pcf50606_global;
82312 +
82313 + file->private_data = pcf;
82314 +
82315 + /* start the timer */
82316 + pcf50606_wdt_start(pcf);
82317 +
82318 + return nonseekable_open(inode, file);
82319 +}
82320 +
82321 +static int pcf50606_wdt_release(struct inode *inode, struct file *file)
82322 +{
82323 + struct pcf50606_data *pcf = file->private_data;
82324 +
82325 + if (pcf->allow_close == CLOSE_STATE_ALLOW)
82326 + pcf50606_wdt_stop(pcf);
82327 + else {
82328 + printk(KERN_CRIT "Unexpected close, not stopping watchdog!\n");
82329 + pcf50606_wdt_keepalive(pcf);
82330 + }
82331 +
82332 + pcf->allow_close = CLOSE_STATE_NOT;
82333 +
82334 + return 0;
82335 +}
82336 +
82337 +static ssize_t pcf50606_wdt_write(struct file *file, const char __user *data,
82338 + size_t len, loff_t *ppos)
82339 +{
82340 + struct pcf50606_data *pcf = file->private_data;
82341 + if (len) {
82342 + size_t i;
82343 +
82344 + for (i = 0; i != len; i++) {
82345 + char c;
82346 + if (get_user(c, data + i))
82347 + return -EFAULT;
82348 + if (c == 'V')
82349 + pcf->allow_close = CLOSE_STATE_ALLOW;
82350 + }
82351 + pcf50606_wdt_keepalive(pcf);
82352 + }
82353 +
82354 + return len;
82355 +}
82356 +
82357 +static struct watchdog_info pcf50606_wdt_ident = {
82358 + .options = WDIOF_MAGICCLOSE,
82359 + .firmware_version = 0,
82360 + .identity = "PCF50606 Watchdog",
82361 +};
82362 +
82363 +static int pcf50606_wdt_ioctl(struct inode *inode, struct file *file,
82364 + unsigned int cmd, unsigned long arg)
82365 +{
82366 + struct pcf50606_data *pcf = file->private_data;
82367 + void __user *argp = (void __user *)arg;
82368 + int __user *p = argp;
82369 +
82370 + switch (cmd) {
82371 + case WDIOC_GETSUPPORT:
82372 + return copy_to_user(argp, &pcf50606_wdt_ident,
82373 + sizeof(pcf50606_wdt_ident)) ? -EFAULT : 0;
82374 + break;
82375 + case WDIOC_GETSTATUS:
82376 + case WDIOC_GETBOOTSTATUS:
82377 + return put_user(0, p);
82378 + case WDIOC_KEEPALIVE:
82379 + pcf50606_wdt_keepalive(pcf);
82380 + return 0;
82381 + case WDIOC_GETTIMEOUT:
82382 + return put_user(8, p);
82383 + default:
82384 + return -ENOIOCTLCMD;
82385 + }
82386 +}
82387 +
82388 +static struct file_operations pcf50606_wdt_fops = {
82389 + .owner = THIS_MODULE,
82390 + .llseek = no_llseek,
82391 + .write = &pcf50606_wdt_write,
82392 + .ioctl = &pcf50606_wdt_ioctl,
82393 + .open = &pcf50606_wdt_open,
82394 + .release = &pcf50606_wdt_release,
82395 +};
82396 +
82397 +static struct miscdevice pcf50606_wdt_miscdev = {
82398 + .minor = WATCHDOG_MINOR,
82399 + .name = "watchdog",
82400 + .fops = &pcf50606_wdt_fops,
82401 +};
82402 +
82403 +/***********************************************************************
82404 + * PWM
82405 + ***********************************************************************/
82406 +
82407 +static const char *pwm_dc_table[] = {
82408 + "0/16", "1/16", "2/16", "3/16",
82409 + "4/16", "5/16", "6/16", "7/16",
82410 + "8/16", "9/16", "10/16", "11/16",
82411 + "12/16", "13/16", "14/16", "15/16",
82412 +};
82413 +
82414 +static ssize_t show_pwm_dc(struct device *dev, struct device_attribute *attr,
82415 + char *buf)
82416 +{
82417 + struct i2c_client *client = to_i2c_client(dev);
82418 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82419 + u_int8_t val;
82420 +
82421 + val = reg_read(pcf, PCF50606_REG_PWMC1) >> PCF50606_PWMC1_DC_SHIFT;
82422 + val &= 0xf;
82423 +
82424 + return sprintf(buf, "%s\n", pwm_dc_table[val]);
82425 +}
82426 +
82427 +static ssize_t set_pwm_dc(struct device *dev, struct device_attribute *attr,
82428 + const char *buf, size_t count)
82429 +{
82430 + struct i2c_client *client = to_i2c_client(dev);
82431 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82432 + u_int8_t i;
82433 +
82434 + for (i = 0; i < ARRAY_SIZE(pwm_dc_table); i++) {
82435 + if (!strncmp(buf, pwm_dc_table[i], strlen(pwm_dc_table[i]))) {
82436 + dev_dbg(dev, "setting pwm dc %s\n\r", pwm_dc_table[i]);
82437 + reg_set_bit_mask(pcf, PCF50606_REG_PWMC1, 0x1e,
82438 + (i << PCF50606_PWMC1_DC_SHIFT));
82439 + }
82440 + }
82441 + return count;
82442 +}
82443 +
82444 +static DEVICE_ATTR(pwm_dc, S_IRUGO | S_IWUSR, show_pwm_dc, set_pwm_dc);
82445 +
82446 +static const char *pwm_clk_table[] = {
82447 + "512", "256", "128", "64",
82448 + "56300", "28100", "14100", "7000",
82449 +};
82450 +
82451 +static ssize_t show_pwm_clk(struct device *dev, struct device_attribute *attr,
82452 + char *buf)
82453 +{
82454 + struct i2c_client *client = to_i2c_client(dev);
82455 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82456 + u_int8_t val;
82457 +
82458 + val = reg_read(pcf, PCF50606_REG_PWMC1) >> PCF50606_PWMC1_CLK_SHIFT;
82459 + val &= 0x7;
82460 +
82461 + return sprintf(buf, "%s\n", pwm_clk_table[val]);
82462 +}
82463 +
82464 +static ssize_t set_pwm_clk(struct device *dev, struct device_attribute *attr,
82465 + const char *buf, size_t count)
82466 +{
82467 + struct i2c_client *client = to_i2c_client(dev);
82468 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82469 + u_int8_t i;
82470 +
82471 + for (i = 0; i < ARRAY_SIZE(pwm_clk_table); i++) {
82472 + if (!strncmp(buf, pwm_clk_table[i], strlen(pwm_clk_table[i]))) {
82473 + dev_dbg(dev, "setting pwm clk %s\n\r",
82474 + pwm_clk_table[i]);
82475 + reg_set_bit_mask(pcf, PCF50606_REG_PWMC1, 0xe0,
82476 + (i << PCF50606_PWMC1_CLK_SHIFT));
82477 + }
82478 + }
82479 + return count;
82480 +}
82481 +
82482 +static DEVICE_ATTR(pwm_clk, S_IRUGO | S_IWUSR, show_pwm_clk, set_pwm_clk);
82483 +
82484 +static int pcf50606bl_get_intensity(struct backlight_device *bd)
82485 +{
82486 + struct pcf50606_data *pcf = bl_get_data(bd);
82487 + int intensity = reg_read(pcf, PCF50606_REG_PWMC1);
82488 + intensity = (intensity >> PCF50606_PWMC1_DC_SHIFT);
82489 +
82490 + return intensity & 0xf;
82491 +}
82492 +
82493 +static int pcf50606bl_set_intensity(struct backlight_device *bd)
82494 +{
82495 + struct pcf50606_data *pcf = bl_get_data(bd);
82496 + int intensity = bd->props.brightness;
82497 +
82498 + if (bd->props.power != FB_BLANK_UNBLANK)
82499 + intensity = 0;
82500 + if (bd->props.fb_blank != FB_BLANK_UNBLANK)
82501 + intensity = 0;
82502 +
82503 + return reg_set_bit_mask(pcf, PCF50606_REG_PWMC1, 0x1e,
82504 + (intensity << PCF50606_PWMC1_DC_SHIFT));
82505 +}
82506 +
82507 +static struct backlight_ops pcf50606bl_ops = {
82508 + .get_brightness = pcf50606bl_get_intensity,
82509 + .update_status = pcf50606bl_set_intensity,
82510 +};
82511 +
82512 +/***********************************************************************
82513 + * Driver initialization
82514 + ***********************************************************************/
82515 +
82516 +#ifdef CONFIG_MACH_NEO1973_GTA01
82517 +/* We currently place those platform devices here to make sure the device
82518 + * suspend/resume order is correct */
82519 +static struct platform_device gta01_pm_gps_dev = {
82520 + .name = "neo1973-pm-gps",
82521 +};
82522 +
82523 +static struct platform_device gta01_pm_bt_dev = {
82524 + .name = "neo1973-pm-bt",
82525 +};
82526 +#endif
82527 +
82528 +static struct attribute *pcf_sysfs_entries[16] = {
82529 + &dev_attr_voltage_dcd.attr,
82530 + &dev_attr_voltage_dcde.attr,
82531 + &dev_attr_voltage_dcud.attr,
82532 + &dev_attr_voltage_d1reg.attr,
82533 + &dev_attr_voltage_d2reg.attr,
82534 + &dev_attr_voltage_d3reg.attr,
82535 + &dev_attr_voltage_lpreg.attr,
82536 + &dev_attr_voltage_ioreg.attr,
82537 + NULL
82538 +};
82539 +
82540 +static struct attribute_group pcf_attr_group = {
82541 + .name = NULL, /* put in device directory */
82542 + .attrs = pcf_sysfs_entries,
82543 +};
82544 +
82545 +static void populate_sysfs_group(struct pcf50606_data *pcf)
82546 +{
82547 + int i = 0;
82548 + struct attribute **attr;
82549 +
82550 + for (attr = pcf_sysfs_entries; *attr; attr++)
82551 + i++;
82552 +
82553 + if (pcf->pdata->used_features & PCF50606_FEAT_MBC) {
82554 + pcf_sysfs_entries[i++] = &dev_attr_chgstate.attr;
82555 + pcf_sysfs_entries[i++] = &dev_attr_chgmode.attr;
82556 + }
82557 +
82558 + if (pcf->pdata->used_features & PCF50606_FEAT_CHGCUR)
82559 + pcf_sysfs_entries[i++] = &dev_attr_chgcur.attr;
82560 +
82561 + if (pcf->pdata->used_features & PCF50606_FEAT_BATVOLT)
82562 + pcf_sysfs_entries[i++] = &dev_attr_battvolt.attr;
82563 +
82564 + if (pcf->pdata->used_features & PCF50606_FEAT_BATTEMP)
82565 + pcf_sysfs_entries[i++] = &dev_attr_battemp.attr;
82566 +
82567 + if (pcf->pdata->used_features & PCF50606_FEAT_PWM) {
82568 + pcf_sysfs_entries[i++] = &dev_attr_pwm_dc.attr;
82569 + pcf_sysfs_entries[i++] = &dev_attr_pwm_clk.attr;
82570 + }
82571 +}
82572 +
82573 +static int pcf50606_detect(struct i2c_adapter *adapter, int address, int kind)
82574 +{
82575 + struct i2c_client *new_client;
82576 + struct pcf50606_data *data;
82577 + int err = 0;
82578 + int irq;
82579 +
82580 + if (!pcf50606_pdev) {
82581 + printk(KERN_ERR "pcf50606: driver needs a platform_device!\n");
82582 + return -EIO;
82583 + }
82584 +
82585 + irq = platform_get_irq(pcf50606_pdev, 0);
82586 + if (irq < 0) {
82587 + dev_err(&pcf50606_pdev->dev, "no irq in platform resources!\n");
82588 + return -EIO;
82589 + }
82590 +
82591 + /* At the moment, we only support one PCF50606 in a system */
82592 + if (pcf50606_global) {
82593 + dev_err(&pcf50606_pdev->dev,
82594 + "currently only one chip supported\n");
82595 + return -EBUSY;
82596 + }
82597 +
82598 + data = kzalloc(sizeof(*data), GFP_KERNEL);
82599 + if (!data)
82600 + return -ENOMEM;
82601 +
82602 + mutex_init(&data->lock);
82603 + mutex_init(&data->working_lock);
82604 + INIT_WORK(&data->work, pcf50606_work);
82605 + data->irq = irq;
82606 + data->working = 0;
82607 + data->suppress_onkey_events = 0;
82608 + data->onkey_seconds = -1;
82609 + data->pdata = pcf50606_pdev->dev.platform_data;
82610 +
82611 + new_client = &data->client;
82612 + i2c_set_clientdata(new_client, data);
82613 + new_client->addr = address;
82614 + new_client->adapter = adapter;
82615 + new_client->driver = &pcf50606_driver;
82616 + new_client->flags = 0;
82617 + strlcpy(new_client->name, "pcf50606", I2C_NAME_SIZE);
82618 +
82619 + /* now we try to detect the chip */
82620 +
82621 + /* register with i2c core */
82622 + err = i2c_attach_client(new_client);
82623 + if (err) {
82624 + dev_err(&new_client->dev,
82625 + "error during i2c_attach_client()\n");
82626 + goto exit_free;
82627 + }
82628 +
82629 + populate_sysfs_group(data);
82630 +
82631 + err = sysfs_create_group(&new_client->dev.kobj, &pcf_attr_group);
82632 + if (err) {
82633 + dev_err(&new_client->dev, "error creating sysfs group\n");
82634 + goto exit_detach;
82635 + }
82636 +
82637 + /* create virtual charger 'device' */
82638 +
82639 + /* input device registration */
82640 + data->input_dev = input_allocate_device();
82641 + if (!data->input_dev)
82642 + goto exit_sysfs;
82643 +
82644 + data->input_dev->name = "FIC Neo1973 PMU events";
82645 + data->input_dev->phys = "I2C";
82646 + data->input_dev->id.bustype = BUS_I2C;
82647 +
82648 + data->input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
82649 + set_bit(KEY_POWER, data->input_dev->keybit);
82650 + set_bit(KEY_POWER2, data->input_dev->keybit);
82651 + set_bit(KEY_BATTERY, data->input_dev->keybit);
82652 +
82653 + err = input_register_device(data->input_dev);
82654 + if (err)
82655 + goto exit_sysfs;
82656 +
82657 + /* register power off handler with core power management */
82658 + pm_power_off = &pcf50606_go_standby;
82659 +
82660 + /* configure interrupt mask */
82661 + /* we don't mask SECOND here, because we want one to do coldplug with */
82662 + reg_write(data, PCF50606_REG_INT1M, 0x00);
82663 + reg_write(data, PCF50606_REG_INT2M, 0x00);
82664 + reg_write(data, PCF50606_REG_INT3M, PCF50606_INT3_TSCPRES);
82665 +
82666 + err = request_irq(irq, pcf50606_irq, IRQF_TRIGGER_FALLING,
82667 + "pcf50606", data);
82668 + if (err < 0)
82669 + goto exit_input;
82670 +
82671 + if (enable_irq_wake(irq) < 0)
82672 + dev_err(&new_client->dev, "IRQ %u cannot be enabled as wake-up"
82673 + "source in this hardware revision!", irq);
82674 +
82675 + pcf50606_global = data;
82676 +
82677 + if (data->pdata->used_features & PCF50606_FEAT_RTC) {
82678 + data->rtc = rtc_device_register("pcf50606", &new_client->dev,
82679 + &pcf50606_rtc_ops, THIS_MODULE);
82680 + if (IS_ERR(data->rtc)) {
82681 + err = PTR_ERR(data->rtc);
82682 + goto exit_irq;
82683 + }
82684 + }
82685 +
82686 + if (data->pdata->used_features & PCF50606_FEAT_WDT) {
82687 + err = misc_register(&pcf50606_wdt_miscdev);
82688 + if (err) {
82689 + dev_err(&new_client->dev, "cannot register miscdev on "
82690 + "minor=%d (%d)\n", WATCHDOG_MINOR, err);
82691 + goto exit_rtc;
82692 + }
82693 + }
82694 +
82695 + if (data->pdata->used_features & PCF50606_FEAT_PWM) {
82696 + /* enable PWM controller */
82697 + reg_set_bit_mask(data, PCF50606_REG_PWMC1,
82698 + PCF50606_PWMC1_ACTSET,
82699 + PCF50606_PWMC1_ACTSET);
82700 + }
82701 +
82702 + if (data->pdata->used_features & PCF50606_FEAT_PWM_BL) {
82703 + data->backlight = backlight_device_register("pcf50606-bl",
82704 + &new_client->dev,
82705 + data,
82706 + &pcf50606bl_ops);
82707 + if (!data->backlight)
82708 + goto exit_misc;
82709 + data->backlight->props.max_brightness = 16;
82710 + data->backlight->props.power = FB_BLANK_UNBLANK;
82711 + data->backlight->props.brightness =
82712 + data->pdata->init_brightness;
82713 + backlight_update_status(data->backlight);
82714 + }
82715 +
82716 + apm_get_power_status = pcf50606_get_power_status;
82717 +
82718 +#ifdef CONFIG_MACH_NEO1973_GTA01
82719 + if (machine_is_neo1973_gta01()) {
82720 + gta01_pm_gps_dev.dev.parent = &new_client->dev;
82721 + switch (system_rev) {
82722 + case GTA01Bv2_SYSTEM_REV:
82723 + case GTA01Bv3_SYSTEM_REV:
82724 + case GTA01Bv4_SYSTEM_REV:
82725 + gta01_pm_bt_dev.dev.parent = &new_client->dev;
82726 + platform_device_register(&gta01_pm_bt_dev);
82727 + break;
82728 + }
82729 + platform_device_register(&gta01_pm_gps_dev);
82730 + /* a link for gllin compatibility */
82731 + err = bus_create_device_link(&platform_bus_type,
82732 + &gta01_pm_gps_dev.dev.kobj, "gta01-pm-gps.0");
82733 + if (err)
82734 + printk(KERN_ERR
82735 + "sysfs_create_link (gta01-pm-gps.0): %d\n", err);
82736 + }
82737 +#endif
82738 +
82739 + if (data->pdata->used_features & PCF50606_FEAT_ACD)
82740 + reg_set_bit_mask(data, PCF50606_REG_ACDC1,
82741 + PCF50606_ACDC1_ACDAPE, PCF50606_ACDC1_ACDAPE);
82742 + else
82743 + reg_clear_bits(data, PCF50606_REG_ACDC1,
82744 + PCF50606_ACDC1_ACDAPE);
82745 +
82746 + return 0;
82747 +
82748 +exit_misc:
82749 + if (data->pdata->used_features & PCF50606_FEAT_WDT)
82750 + misc_deregister(&pcf50606_wdt_miscdev);
82751 +exit_rtc:
82752 + if (data->pdata->used_features & PCF50606_FEAT_RTC)
82753 + rtc_device_unregister(pcf50606_global->rtc);
82754 +exit_irq:
82755 + free_irq(pcf50606_global->irq, pcf50606_global);
82756 + pcf50606_global = NULL;
82757 +exit_input:
82758 + pm_power_off = NULL;
82759 + input_unregister_device(data->input_dev);
82760 +exit_sysfs:
82761 + sysfs_remove_group(&new_client->dev.kobj, &pcf_attr_group);
82762 +exit_detach:
82763 + i2c_detach_client(new_client);
82764 +exit_free:
82765 + kfree(data);
82766 + return err;
82767 +}
82768 +
82769 +static int pcf50606_attach_adapter(struct i2c_adapter *adapter)
82770 +{
82771 + return i2c_probe(adapter, &addr_data, &pcf50606_detect);
82772 +}
82773 +
82774 +static int pcf50606_detach_client(struct i2c_client *client)
82775 +{
82776 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82777 +
82778 + apm_get_power_status = NULL;
82779 + input_unregister_device(pcf->input_dev);
82780 +
82781 + if (pcf->pdata->used_features & PCF50606_FEAT_PWM_BL)
82782 + backlight_device_unregister(pcf->backlight);
82783 +
82784 + if (pcf->pdata->used_features & PCF50606_FEAT_WDT)
82785 + misc_deregister(&pcf50606_wdt_miscdev);
82786 +
82787 + if (pcf->pdata->used_features & PCF50606_FEAT_RTC)
82788 + rtc_device_unregister(pcf->rtc);
82789 +
82790 + free_irq(pcf->irq, pcf);
82791 +
82792 + sysfs_remove_group(&client->dev.kobj, &pcf_attr_group);
82793 +
82794 + pm_power_off = NULL;
82795 +
82796 + kfree(pcf);
82797 +
82798 + return 0;
82799 +}
82800 +
82801 +#ifdef CONFIG_PM
82802 +#define INT1M_RESUMERS (PCF50606_INT1_ALARM | \
82803 + PCF50606_INT1_ONKEYF | \
82804 + PCF50606_INT1_EXTONR)
82805 +#define INT2M_RESUMERS (PCF50606_INT2_CHGWD10S | \
82806 + PCF50606_INT2_CHGPROT | \
82807 + PCF50606_INT2_CHGERR)
82808 +#define INT3M_RESUMERS (PCF50606_INT3_LOWBAT | \
82809 + PCF50606_INT3_HIGHTMP | \
82810 + PCF50606_INT3_ACDINS)
82811 +static int pcf50606_suspend(struct device *dev, pm_message_t state)
82812 +{
82813 + struct i2c_client *client = to_i2c_client(dev);
82814 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82815 + int i;
82816 +
82817 + /* we suspend once (!) as late as possible in the suspend sequencing */
82818 +
82819 + if ((state.event != PM_EVENT_SUSPEND) ||
82820 + (pcf->suspend_state != PCF50606_SS_RUNNING))
82821 + return -EBUSY;
82822 +
82823 + /* The general idea is to power down all unused power supplies,
82824 + * and then mask all PCF50606 interrup sources but EXTONR, ONKEYF
82825 + * and ALARM */
82826 +
82827 + mutex_lock(&pcf->lock);
82828 +
82829 + pcf->suspend_state = PCF50606_SS_STARTING_SUSPEND;
82830 +
82831 + /* we are not going to service any further interrupts until we
82832 + * resume. If the IRQ workqueue is still pending in the background,
82833 + * it will bail when it sees we set suspend state above.
82834 + */
82835 +
82836 + disable_irq(pcf->irq);
82837 +
82838 + /* Save all registers that don't "survive" standby state */
82839 + pcf->standby_regs.dcdc1 = __reg_read(pcf, PCF50606_REG_DCDC1);
82840 + pcf->standby_regs.dcdc2 = __reg_read(pcf, PCF50606_REG_DCDC2);
82841 + pcf->standby_regs.dcdec1 = __reg_read(pcf, PCF50606_REG_DCDEC1);
82842 + pcf->standby_regs.dcudc1 = __reg_read(pcf, PCF50606_REG_DCUDC1);
82843 + pcf->standby_regs.ioregc = __reg_read(pcf, PCF50606_REG_IOREGC);
82844 + pcf->standby_regs.d1regc1 = __reg_read(pcf, PCF50606_REG_D1REGC1);
82845 + pcf->standby_regs.d2regc1 = __reg_read(pcf, PCF50606_REG_D2REGC1);
82846 + pcf->standby_regs.d3regc1 = __reg_read(pcf, PCF50606_REG_D3REGC1);
82847 + pcf->standby_regs.lpregc1 = __reg_read(pcf, PCF50606_REG_LPREGC1);
82848 + pcf->standby_regs.adcc1 = __reg_read(pcf, PCF50606_REG_ADCC1);
82849 + pcf->standby_regs.adcc2 = __reg_read(pcf, PCF50606_REG_ADCC2);
82850 + pcf->standby_regs.pwmc1 = __reg_read(pcf, PCF50606_REG_PWMC1);
82851 +
82852 + /* switch off power supplies that are not needed during suspend */
82853 + for (i = 0; i < __NUM_PCF50606_REGULATORS; i++) {
82854 + if (!(pcf->pdata->rails[i].flags & PMU_VRAIL_F_SUSPEND_ON)) {
82855 + u_int8_t tmp;
82856 +
82857 + /* IOREG powers the I@C interface so we cannot switch
82858 + * it off */
82859 + if (i == PCF50606_REGULATOR_IOREG)
82860 + continue;
82861 +
82862 + dev_dbg(dev, "disabling pcf50606 regulator %u\n", i);
82863 + /* we cannot use pcf50606_onoff_set() because we're
82864 + * already under the mutex */
82865 + tmp = __reg_read(pcf, regulator_registers[i]);
82866 + tmp &= 0x1f;
82867 + __reg_write(pcf, regulator_registers[i], tmp);
82868 + }
82869 + }
82870 +
82871 + pcf->standby_regs.int1m = __reg_read(pcf, PCF50606_REG_INT1M);
82872 + pcf->standby_regs.int2m = __reg_read(pcf, PCF50606_REG_INT2M);
82873 + pcf->standby_regs.int3m = __reg_read(pcf, PCF50606_REG_INT3M);
82874 + __reg_write(pcf, PCF50606_REG_INT1M, ~INT1M_RESUMERS & 0xff);
82875 + __reg_write(pcf, PCF50606_REG_INT2M, ~INT2M_RESUMERS & 0xff);
82876 + __reg_write(pcf, PCF50606_REG_INT3M, ~INT3M_RESUMERS & 0xff);
82877 +
82878 + pcf->suspend_state = PCF50606_SS_COMPLETED_SUSPEND;
82879 +
82880 + mutex_unlock(&pcf->lock);
82881 +
82882 + return 0;
82883 +}
82884 +
82885 +static int pcf50606_resume(struct device *dev)
82886 +{
82887 + struct i2c_client *client = to_i2c_client(dev);
82888 + struct pcf50606_data *pcf = i2c_get_clientdata(client);
82889 +
82890 + mutex_lock(&pcf->lock);
82891 +
82892 + pcf->suspend_state = PCF50606_SS_STARTING_RESUME;
82893 +
82894 + /* Resume all saved registers that don't "survive" standby state */
82895 + __reg_write(pcf, PCF50606_REG_INT1M, pcf->standby_regs.int1m);
82896 + __reg_write(pcf, PCF50606_REG_INT2M, pcf->standby_regs.int2m);
82897 + __reg_write(pcf, PCF50606_REG_INT3M, pcf->standby_regs.int3m);
82898 +
82899 + __reg_write(pcf, PCF50606_REG_DCDC1, pcf->standby_regs.dcdc1);
82900 + __reg_write(pcf, PCF50606_REG_DCDC2, pcf->standby_regs.dcdc2);
82901 + __reg_write(pcf, PCF50606_REG_DCDEC1, pcf->standby_regs.dcdec1);
82902 + __reg_write(pcf, PCF50606_REG_DCUDC1, pcf->standby_regs.dcudc1);
82903 + __reg_write(pcf, PCF50606_REG_IOREGC, pcf->standby_regs.ioregc);
82904 + __reg_write(pcf, PCF50606_REG_D1REGC1, pcf->standby_regs.d1regc1);
82905 + __reg_write(pcf, PCF50606_REG_D2REGC1, pcf->standby_regs.d2regc1);
82906 + __reg_write(pcf, PCF50606_REG_D3REGC1, pcf->standby_regs.d3regc1);
82907 + __reg_write(pcf, PCF50606_REG_LPREGC1, pcf->standby_regs.lpregc1);
82908 + __reg_write(pcf, PCF50606_REG_ADCC1, pcf->standby_regs.adcc1);
82909 + __reg_write(pcf, PCF50606_REG_ADCC2, pcf->standby_regs.adcc2);
82910 + __reg_write(pcf, PCF50606_REG_PWMC1, pcf->standby_regs.pwmc1);
82911 +
82912 + pcf->suspend_state = PCF50606_SS_COMPLETED_RESUME;
82913 +
82914 + enable_irq(pcf->irq);
82915 +
82916 + mutex_unlock(&pcf->lock);
82917 +
82918 + /* Call PCF work function; this fixes an issue on the gta01 where
82919 + * the power button "goes away" if it is used to wake the device.
82920 + */
82921 + get_device(&pcf->client.dev);
82922 + pcf50606_work(&pcf->work);
82923 +
82924 + return 0;
82925 +}
82926 +#else
82927 +#define pcf50606_suspend NULL
82928 +#define pcf50606_resume NULL
82929 +#endif
82930 +
82931 +static struct i2c_driver pcf50606_driver = {
82932 + .driver = {
82933 + .name = "pcf50606",
82934 + .suspend = pcf50606_suspend,
82935 + .resume = pcf50606_resume,
82936 + },
82937 + .id = I2C_DRIVERID_PCF50606,
82938 + .attach_adapter = pcf50606_attach_adapter,
82939 + .detach_client = pcf50606_detach_client,
82940 +};
82941 +
82942 +/* platform driver, since i2c devices don't have platform_data */
82943 +static int __init pcf50606_plat_probe(struct platform_device *pdev)
82944 +{
82945 + struct pcf50606_platform_data *pdata = pdev->dev.platform_data;
82946 +
82947 + if (!pdata)
82948 + return -ENODEV;
82949 +
82950 + pcf50606_pdev = pdev;
82951 +
82952 + return 0;
82953 +}
82954 +
82955 +static int pcf50606_plat_remove(struct platform_device *pdev)
82956 +{
82957 + return 0;
82958 +}
82959 +
82960 +/* We have this purely to capture an early indication that we are coming out
82961 + * of suspend, before our device resume got called; async interrupt service is
82962 + * interested in this.
82963 + */
82964 +
82965 +static int pcf50606_plat_resume(struct platform_device *pdev)
82966 +{
82967 + /* i2c_get_clientdata(to_i2c_client(&pdev->dev)) returns NULL at this
82968 + * early resume time so we have to use pcf50606_global
82969 + */
82970 + pcf50606_global->suspend_state = PCF50606_SS_RESUMING_BUT_NOT_US_YET;
82971 +
82972 + return 0;
82973 +}
82974 +
82975 +static struct platform_driver pcf50606_plat_driver = {
82976 + .probe = pcf50606_plat_probe,
82977 + .remove = pcf50606_plat_remove,
82978 + .resume_early = pcf50606_plat_resume,
82979 + .driver = {
82980 + .owner = THIS_MODULE,
82981 + .name = "pcf50606",
82982 + },
82983 +};
82984 +
82985 +static int __init pcf50606_init(void)
82986 +{
82987 + int rc;
82988 +
82989 + rc = platform_driver_register(&pcf50606_plat_driver);
82990 + if (!rc)
82991 + rc = i2c_add_driver(&pcf50606_driver);
82992 +
82993 + return rc;
82994 +}
82995 +
82996 +static void pcf50606_exit(void)
82997 +{
82998 + i2c_del_driver(&pcf50606_driver);
82999 + platform_driver_unregister(&pcf50606_plat_driver);
83000 +}
83001 +
83002 +MODULE_DESCRIPTION("I2C chip driver for NXP PCF50606 power management unit");
83003 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
83004 +MODULE_LICENSE("GPL");
83005 +
83006 +module_init(pcf50606_init);
83007 +module_exit(pcf50606_exit);
83008 Index: linux-2.6.28/drivers/i2c/chips/pcf50606.h
83009 ===================================================================
83010 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
83011 +++ linux-2.6.28/drivers/i2c/chips/pcf50606.h 2009-01-02 00:01:56.000000000 +0100
83012 @@ -0,0 +1,302 @@
83013 +#ifndef _PCF50606_H
83014 +#define _PCF50606_H
83015 +
83016 +/* Philips PCF50606 Power Managemnt Unit (PMU) driver
83017 + * (C) 2006-2007 by Openmoko, Inc.
83018 + * Author: Harald Welte <laforge@openmoko.org>
83019 + *
83020 + */
83021 +
83022 +enum pfc50606_regs {
83023 + PCF50606_REG_ID = 0x00,
83024 + PCF50606_REG_OOCS = 0x01,
83025 + PCF50606_REG_INT1 = 0x02, /* Interrupt Status */
83026 + PCF50606_REG_INT2 = 0x03, /* Interrupt Status */
83027 + PCF50606_REG_INT3 = 0x04, /* Interrupt Status */
83028 + PCF50606_REG_INT1M = 0x05, /* Interrupt Mask */
83029 + PCF50606_REG_INT2M = 0x06, /* Interrupt Mask */
83030 + PCF50606_REG_INT3M = 0x07, /* Interrupt Mask */
83031 + PCF50606_REG_OOCC1 = 0x08,
83032 + PCF50606_REG_OOCC2 = 0x09,
83033 + PCF50606_REG_RTCSC = 0x0a, /* Second */
83034 + PCF50606_REG_RTCMN = 0x0b, /* Minute */
83035 + PCF50606_REG_RTCHR = 0x0c, /* Hour */
83036 + PCF50606_REG_RTCWD = 0x0d, /* Weekday */
83037 + PCF50606_REG_RTCDT = 0x0e, /* Day */
83038 + PCF50606_REG_RTCMT = 0x0f, /* Month */
83039 + PCF50606_REG_RTCYR = 0x10, /* Year */
83040 + PCF50606_REG_RTCSCA = 0x11, /* Alarm Second */
83041 + PCF50606_REG_RTCMNA = 0x12, /* Alarm Minute */
83042 + PCF50606_REG_RTCHRA = 0x13, /* Alarm Hour */
83043 + PCF50606_REG_RTCWDA = 0x14, /* Alarm Weekday */
83044 + PCF50606_REG_RTCDTA = 0x15, /* Alarm Day */
83045 + PCF50606_REG_RTCMTA = 0x16, /* Alarm Month */
83046 + PCF50606_REG_RTCYRA = 0x17, /* Alarm Year */
83047 + PCF50606_REG_PSSC = 0x18, /* Power sequencing */
83048 + PCF50606_REG_PWROKM = 0x19, /* PWROK mask */
83049 + PCF50606_REG_PWROKS = 0x1a, /* PWROK status */
83050 + PCF50606_REG_DCDC1 = 0x1b,
83051 + PCF50606_REG_DCDC2 = 0x1c,
83052 + PCF50606_REG_DCDC3 = 0x1d,
83053 + PCF50606_REG_DCDC4 = 0x1e,
83054 + PCF50606_REG_DCDEC1 = 0x1f,
83055 + PCF50606_REG_DCDEC2 = 0x20,
83056 + PCF50606_REG_DCUDC1 = 0x21,
83057 + PCF50606_REG_DCUDC2 = 0x22,
83058 + PCF50606_REG_IOREGC = 0x23,
83059 + PCF50606_REG_D1REGC1 = 0x24,
83060 + PCF50606_REG_D2REGC1 = 0x25,
83061 + PCF50606_REG_D3REGC1 = 0x26,
83062 + PCF50606_REG_LPREGC1 = 0x27,
83063 + PCF50606_REG_LPREGC2 = 0x28,
83064 + PCF50606_REG_MBCC1 = 0x29,
83065 + PCF50606_REG_MBCC2 = 0x2a,
83066 + PCF50606_REG_MBCC3 = 0x2b,
83067 + PCF50606_REG_MBCS1 = 0x2c,
83068 + PCF50606_REG_BBCC = 0x2d,
83069 + PCF50606_REG_ADCC1 = 0x2e,
83070 + PCF50606_REG_ADCC2 = 0x2f,
83071 + PCF50606_REG_ADCS1 = 0x30,
83072 + PCF50606_REG_ADCS2 = 0x31,
83073 + PCF50606_REG_ADCS3 = 0x32,
83074 + PCF50606_REG_ACDC1 = 0x33,
83075 + PCF50606_REG_BVMC = 0x34,
83076 + PCF50606_REG_PWMC1 = 0x35,
83077 + PCF50606_REG_LEDC1 = 0x36,
83078 + PCF50606_REG_LEDC2 = 0x37,
83079 + PCF50606_REG_GPOC1 = 0x38,
83080 + PCF50606_REG_GPOC2 = 0x39,
83081 + PCF50606_REG_GPOC3 = 0x3a,
83082 + PCF50606_REG_GPOC4 = 0x3b,
83083 + PCF50606_REG_GPOC5 = 0x3c,
83084 + __NUM_PCF50606_REGS
83085 +};
83086 +
83087 +enum pcf50606_reg_oocs {
83088 + PFC50606_OOCS_ONKEY = 0x01,
83089 + PCF50606_OOCS_EXTON = 0x02,
83090 + PCF50606_OOCS_PWROKRST = 0x04,
83091 + PCF50606_OOCS_BATOK = 0x08,
83092 + PCF50606_OOCS_BACKOK = 0x10,
83093 + PCF50606_OOCS_CHGOK = 0x20,
83094 + PCF50606_OOCS_TEMPOK = 0x40,
83095 + PCF50606_OOCS_WDTEXP = 0x80,
83096 +};
83097 +
83098 +enum pcf50606_reg_oocc1 {
83099 + PCF50606_OOCC1_GOSTDBY = 0x01,
83100 + PCF50606_OOCC1_TOTRST = 0x02,
83101 + PCF50606_OOCC1_CLK32ON = 0x04,
83102 + PCF50606_OOCC1_WDTRST = 0x08,
83103 + PCF50606_OOCC1_RTCWAK = 0x10,
83104 + PCF50606_OOCC1_CHGWAK = 0x20,
83105 + PCF50606_OOCC1_EXTONWAK_HIGH = 0x40,
83106 + PCF50606_OOCC1_EXTONWAK_LOW = 0x80,
83107 +};
83108 +
83109 +enum pcf50606_reg_oocc2 {
83110 + PCF50606_OOCC2_ONKEYDB_NONE = 0x00,
83111 + PCF50606_OOCC2_ONKEYDB_14ms = 0x01,
83112 + PCF50606_OOCC2_ONKEYDB_62ms = 0x02,
83113 + PCF50606_OOCC2_ONKEYDB_500ms = 0x03,
83114 + PCF50606_OOCC2_EXTONDB_NONE = 0x00,
83115 + PCF50606_OOCC2_EXTONDB_14ms = 0x04,
83116 + PCF50606_OOCC2_EXTONDB_62ms = 0x08,
83117 + PCF50606_OOCC2_EXTONDB_500ms = 0x0c,
83118 +};
83119 +
83120 +enum pcf50606_reg_int1 {
83121 + PCF50606_INT1_ONKEYR = 0x01, /* ONKEY rising edge */
83122 + PCF50606_INT1_ONKEYF = 0x02, /* ONKEY falling edge */
83123 + PCF50606_INT1_ONKEY1S = 0x04, /* OMKEY at least 1sec low */
83124 + PCF50606_INT1_EXTONR = 0x08, /* EXTON rising edge */
83125 + PCF50606_INT1_EXTONF = 0x10, /* EXTON falling edge */
83126 + PCF50606_INT1_SECOND = 0x40, /* RTC periodic second interrupt */
83127 + PCF50606_INT1_ALARM = 0x80, /* RTC alarm time is reached */
83128 +};
83129 +
83130 +enum pcf50606_reg_int2 {
83131 + PCF50606_INT2_CHGINS = 0x01, /* Charger inserted */
83132 + PCF50606_INT2_CHGRM = 0x02, /* Charger removed */
83133 + PCF50606_INT2_CHGFOK = 0x04, /* Fast charging OK */
83134 + PCF50606_INT2_CHGERR = 0x08, /* Error in charging mode */
83135 + PCF50606_INT2_CHGFRDY = 0x10, /* Fast charge completed */
83136 + PCF50606_INT2_CHGPROT = 0x20, /* Charging protection interrupt */
83137 + PCF50606_INT2_CHGWD10S = 0x40, /* Charger watchdig expires in 10s */
83138 + PCF50606_INT2_CHGWDEXP = 0x80, /* Charger watchdog expires */
83139 +};
83140 +
83141 +enum pcf50606_reg_int3 {
83142 + PCF50606_INT3_ADCRDY = 0x01, /* ADC conversion finished */
83143 + PCF50606_INT3_ACDINS = 0x02, /* Accessory inserted */
83144 + PCF50606_INT3_ACDREM = 0x04, /* Accessory removed */
83145 + PCF50606_INT3_TSCPRES = 0x08, /* Touch screen pressed */
83146 + PCF50606_INT3_LOWBAT = 0x40, /* Low battery voltage */
83147 + PCF50606_INT3_HIGHTMP = 0x80, /* High temperature */
83148 +};
83149 +
83150 +/* used by PSSC, PWROKM, PWROKS, */
83151 +enum pcf50606_regu {
83152 + PCF50606_REGU_DCD = 0x01, /* DCD in phase 2 */
83153 + PCF50606_REGU_DCDE = 0x02, /* DCDE in phase 2 */
83154 + PCF50606_REGU_DCUD = 0x04, /* DCDU in phase 2 */
83155 + PCF50606_REGU_IO = 0x08, /* IO in phase 2 */
83156 + PCF50606_REGU_D1 = 0x10, /* D1 in phase 2 */
83157 + PCF50606_REGU_D2 = 0x20, /* D2 in phase 2 */
83158 + PCF50606_REGU_D3 = 0x40, /* D3 in phase 2 */
83159 + PCF50606_REGU_LP = 0x80, /* LP in phase 2 */
83160 +};
83161 +
83162 +enum pcf50606_reg_dcdc4 {
83163 + PCF50606_DCDC4_MODE_AUTO = 0x00,
83164 + PCF50606_DCDC4_MODE_PWM = 0x01,
83165 + PCF50606_DCDC4_MODE_PCF = 0x02,
83166 + PCF50606_DCDC4_OFF_FLOAT = 0x00,
83167 + PCF50606_DCDC4_OFF_BYPASS = 0x04,
83168 + PCF50606_DCDC4_OFF_PULLDOWN = 0x08,
83169 + PCF50606_DCDC4_CURLIM_500mA = 0x00,
83170 + PCF50606_DCDC4_CURLIM_750mA = 0x10,
83171 + PCF50606_DCDC4_CURLIM_1000mA = 0x20,
83172 + PCF50606_DCDC4_CURLIM_1250mA = 0x30,
83173 + PCF50606_DCDC4_TOGGLE = 0x40,
83174 + PCF50606_DCDC4_REGSEL_DCDC2 = 0x80,
83175 +};
83176 +
83177 +enum pcf50606_reg_dcdec2 {
83178 + PCF50606_DCDEC2_MODE_AUTO = 0x00,
83179 + PCF50606_DCDEC2_MODE_PWM = 0x01,
83180 + PCF50606_DCDEC2_MODE_PCF = 0x02,
83181 + PCF50606_DCDEC2_OFF_FLOAT = 0x00,
83182 + PCF50606_DCDEC2_OFF_BYPASS = 0x04,
83183 +};
83184 +
83185 +enum pcf50606_reg_dcudc2 {
83186 + PCF50606_DCUDC2_MODE_AUTO = 0x00,
83187 + PCF50606_DCUDC2_MODE_PWM = 0x01,
83188 + PCF50606_DCUDC2_MODE_PCF = 0x02,
83189 + PCF50606_DCUDC2_OFF_FLOAT = 0x00,
83190 + PCF50606_DCUDC2_OFF_BYPASS = 0x04,
83191 +};
83192 +
83193 +enum pcf50606_reg_adcc1 {
83194 + PCF50606_ADCC1_TSCMODACT = 0x01,
83195 + PCF50606_ADCC1_TSCMODSTB = 0x02,
83196 + PCF50606_ADCC1_TRATSET = 0x04,
83197 + PCF50606_ADCC1_NTCSWAPE = 0x08,
83198 + PCF50606_ADCC1_NTCSWAOFF = 0x10,
83199 + PCF50606_ADCC1_EXTSYNCBREAK = 0x20,
83200 + /* reserved */
83201 + PCF50606_ADCC1_TSCINT = 0x80,
83202 +};
83203 +
83204 +enum pcf50606_reg_adcc2 {
83205 + PCF50606_ADCC2_ADCSTART = 0x01,
83206 + /* see enum pcf50606_adcc2_adcmux */
83207 + PCF50606_ADCC2_SYNC_NONE = 0x00,
83208 + PCF50606_ADCC2_SYNC_TXON = 0x20,
83209 + PCF50606_ADCC2_SYNC_PWREN1 = 0x40,
83210 + PCF50606_ADCC2_SYNC_PWREN2 = 0x60,
83211 + PCF50606_ADCC2_RES_10BIT = 0x00,
83212 + PCF50606_ADCC2_RES_8BIT = 0x80,
83213 +};
83214 +
83215 +#define PCF50606_ADCC2_ADCMUX_MASK (0xf << 1)
83216 +
83217 +#define ADCMUX_SHIFT 1
83218 +enum pcf50606_adcc2_adcmux {
83219 + PCF50606_ADCMUX_BATVOLT_RES = 0x0 << ADCMUX_SHIFT,
83220 + PCF50606_ADCMUX_BATVOLT_SUBTR = 0x1 << ADCMUX_SHIFT,
83221 + PCF50606_ADCMUX_ADCIN1_RES = 0x2 << ADCMUX_SHIFT,
83222 + PCF50606_ADCMUX_ADCIN1_SUBTR = 0x3 << ADCMUX_SHIFT,
83223 + PCF50606_ADCMUX_BATTEMP = 0x4 << ADCMUX_SHIFT,
83224 + PCF50606_ADCMUX_ADCIN2 = 0x5 << ADCMUX_SHIFT,
83225 + PCF50606_ADCMUX_ADCIN3 = 0x6 << ADCMUX_SHIFT,
83226 + PCF50606_ADCMUX_ADCIN3_RATIO = 0x7 << ADCMUX_SHIFT,
83227 + PCF50606_ADCMUX_XPOS = 0x8 << ADCMUX_SHIFT,
83228 + PCF50606_ADCMUX_YPOS = 0x9 << ADCMUX_SHIFT,
83229 + PCF50606_ADCMUX_P1 = 0xa << ADCMUX_SHIFT,
83230 + PCF50606_ADCMUX_P2 = 0xb << ADCMUX_SHIFT,
83231 + PCF50606_ADCMUX_BATVOLT_ADCIN1 = 0xc << ADCMUX_SHIFT,
83232 + PCF50606_ADCMUX_XY_SEQUENCE = 0xe << ADCMUX_SHIFT,
83233 + PCF50606_P1_P2_RESISTANCE = 0xf << ADCMUX_SHIFT,
83234 +};
83235 +
83236 +enum pcf50606_adcs2 {
83237 + PCF50606_ADCS2_ADCRDY = 0x80,
83238 +};
83239 +
83240 +enum pcf50606_reg_mbcc1 {
83241 + PCF50606_MBCC1_CHGAPE = 0x01,
83242 + PCF50606_MBCC1_AUTOFST = 0x02,
83243 +#define PCF50606_MBCC1_CHGMOD_MASK 0x1c
83244 +#define PCF50606_MBCC1_CHGMOD_SHIFT 2
83245 + PCF50606_MBCC1_CHGMOD_QUAL = 0x00,
83246 + PCF50606_MBCC1_CHGMOD_PRE = 0x04,
83247 + PCF50606_MBCC1_CHGMOD_TRICKLE = 0x08,
83248 + PCF50606_MBCC1_CHGMOD_FAST_CCCV = 0x0c,
83249 + PCF50606_MBCC1_CHGMOD_FAST_NOCC = 0x10,
83250 + PCF50606_MBCC1_CHGMOD_FAST_NOCV = 0x14,
83251 + PCF50606_MBCC1_CHGMOD_FAST_SW = 0x18,
83252 + PCF50606_MBCC1_CHGMOD_IDLE = 0x1c,
83253 + PCF50606_MBCC1_DETMOD_LOWCHG = 0x20,
83254 + PCF50606_MBCC1_DETMOD_WDRST = 0x40,
83255 +};
83256 +
83257 +enum pcf50606_reg_acdc1 {
83258 + PCF50606_ACDC1_ACDDET = 0x01,
83259 + PCF50606_ACDC1_THRSHLD_1V0 = 0x00,
83260 + PCF50606_ACDC1_THRSHLD_1V2 = 0x02,
83261 + PCF50606_ACDC1_THRSHLD_1V4 = 0x04,
83262 + PCF50606_ACDC1_THRSHLD_1V6 = 0x06,
83263 + PCF50606_ACDC1_THRSHLD_1V8 = 0x08,
83264 + PCF50606_ACDC1_THRSHLD_2V0 = 0x0a,
83265 + PCF50606_ACDC1_THRSHLD_2V2 = 0x0c,
83266 + PCF50606_ACDC1_THRSHLD_2V4 = 0x0e,
83267 + PCF50606_ACDC1_DISDB = 0x10,
83268 + PCF50606_ACDC1_ACDAPE = 0x80,
83269 +};
83270 +
83271 +enum pcf50606_reg_bvmc {
83272 + PCF50606_BVMC_LOWBAT = 0x01,
83273 + PCF50606_BVMC_THRSHLD_NULL = 0x00,
83274 + PCF50606_BVMC_THRSHLD_2V8 = 0x02,
83275 + PCF50606_BVMC_THRSHLD_2V9 = 0x04,
83276 + PCF50606_BVMC_THRSHLD_3V = 0x08,
83277 + PCF50606_BVMC_THRSHLD_3V1 = 0x08,
83278 + PCF50606_BVMC_THRSHLD_3V2 = 0x0a,
83279 + PCF50606_BVMC_THRSHLD_3V3 = 0x0c,
83280 + PCF50606_BVMC_THRSHLD_3V4 = 0x0e,
83281 + PCF50606_BVMC_DISDB = 0x10,
83282 +};
83283 +
83284 +enum pcf50606_reg_pwmc1 {
83285 + PCF50606_PWMC1_ACTSET = 0x01,
83286 + PCF50606_PWMC1_PWMDC_0_16 = 0x00,
83287 + PCF50606_PWMC1_PWMDC_1_16 = 0x02,
83288 + PCF50606_PWMC1_PWMDC_2_16 = 0x04,
83289 + PCF50606_PWMC1_PWMDC_3_16 = 0x06,
83290 + PCF50606_PWMC1_PWMDC_4_16 = 0x08,
83291 + PCF50606_PWMC1_PWMDC_5_16 = 0x0a,
83292 + PCF50606_PWMC1_PWMDC_6_16 = 0x0c,
83293 + PCF50606_PWMC1_PWMDC_7_16 = 0x0e,
83294 + PCF50606_PWMC1_PWMDC_8_16 = 0x10,
83295 + PCF50606_PWMC1_PWMDC_9_16 = 0x12,
83296 + PCF50606_PWMC1_PWMDC_10_16 = 0x14,
83297 + PCF50606_PWMC1_PWMDC_11_16 = 0x16,
83298 + PCF50606_PWMC1_PWMDC_12_16 = 0x18,
83299 + PCF50606_PWMC1_PWMDC_13_16 = 0x1a,
83300 + PCF50606_PWMC1_PWMDC_14_16 = 0x1c,
83301 + PCF50606_PWMC1_PWMDC_15_16 = 0x1e,
83302 + PCF50606_PWMC1_PRESC_512Hz = 0x20,
83303 + PCF50606_PWMC1_PRESC_256Hz = 0x40,
83304 + PCF50606_PWMC1_PRESC_64Hz = 0x60,
83305 + PCF50606_PWMC1_PRESC_56kHz = 0x80,
83306 + PCF50606_PWMC1_PRESC_28kHz = 0xa0,
83307 + PCF50606_PWMC1_PRESC_14kHz = 0xc0,
83308 + PCF50606_PWMC1_PRESC_7kHz = 0xe0,
83309 +};
83310 +#define PCF50606_PWMC1_CLK_SHIFT 5
83311 +#define PCF50606_PWMC1_DC_SHIFT 1
83312 +
83313 +#endif /* _PCF50606_H */
83314 +
83315 Index: linux-2.6.28/drivers/i2c/chips/pcf50633.c
83316 ===================================================================
83317 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
83318 +++ linux-2.6.28/drivers/i2c/chips/pcf50633.c 2009-01-02 00:01:56.000000000 +0100
83319 @@ -0,0 +1,1883 @@
83320 +/* Philips PCF50633 Power Management Unit (PMU) driver
83321 + *
83322 + * (C) 2006-2007 by Openmoko, Inc.
83323 + * Author: Harald Welte <laforge@openmoko.org>
83324 + * All rights reserved.
83325 + *
83326 + * This program is free software; you can redistribute it and/or
83327 + * modify it under the terms of the GNU General Public License as
83328 + * published by the Free Software Foundation; either version 2 of
83329 + * the License, or (at your option) any later version.
83330 + *
83331 + * This program is distributed in the hope that it will be useful,
83332 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
83333 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
83334 + * GNU General Public License for more details.
83335 + *
83336 + * You should have received a copy of the GNU General Public License
83337 + * along with this program; if not, write to the Free Software
83338 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
83339 + * MA 02111-1307 USA
83340 + *
83341 + * This driver is a monster ;) It provides the following features
83342 + * - voltage control for a dozen different voltage domains
83343 + * - charging control for main and backup battery
83344 + * - adc driver (hw_sensors like)
83345 + *
83346 + */
83347 +
83348 +#include <linux/module.h>
83349 +#include <linux/init.h>
83350 +#include <linux/i2c.h>
83351 +#include <linux/types.h>
83352 +#include <linux/interrupt.h>
83353 +#include <linux/irq.h>
83354 +#include <linux/workqueue.h>
83355 +#include <linux/delay.h>
83356 +#include <linux/rtc.h>
83357 +#include <linux/bcd.h>
83358 +#include <linux/watchdog.h>
83359 +#include <linux/miscdevice.h>
83360 +#include <linux/input.h>
83361 +#include <linux/fb.h>
83362 +#include <linux/sched.h>
83363 +#include <linux/platform_device.h>
83364 +#include <linux/pcf50633.h>
83365 +#include <linux/apm-emulation.h>
83366 +#include <linux/jiffies.h>
83367 +
83368 +#include <asm/mach-types.h>
83369 +
83370 +#include <linux/pcf50633.h>
83371 +#include <linux/regulator/pcf50633.h>
83372 +#include <linux/rtc/pcf50633.h>
83373 +
83374 +#if 0
83375 +#define DEBUGP(x, args ...) printk("%s: " x, __FUNCTION__, ## args)
83376 +#define DEBUGPC(x, args ...) printk(x, ## args)
83377 +#else
83378 +#define DEBUGP(x, args ...)
83379 +#define DEBUGPC(x, args ...)
83380 +#endif
83381 +
83382 +/***********************************************************************
83383 + * Static data / structures
83384 + ***********************************************************************/
83385 +
83386 +static unsigned short normal_i2c[] = { 0x73, I2C_CLIENT_END };
83387 +
83388 +I2C_CLIENT_INSMOD_1(pcf50633);
83389 +
83390 +enum close_state {
83391 + CLOSE_STATE_NOT,
83392 + CLOSE_STATE_ALLOW = 0x2342,
83393 +};
83394 +
83395 +static struct i2c_driver pcf50633_driver;
83396 +
83397 +static void pcf50633_usb_curlim_set(struct pcf50633_data *pcf, int ma);
83398 +static void pcf50633_charge_enable(struct pcf50633_data *pcf, int on);
83399 +
83400 +
83401 +/***********************************************************************
83402 + * Low-Level routines
83403 + ***********************************************************************/
83404 +
83405 +/* Read a block of upto 32 regs
83406 + *
83407 + * Locks assumed to be held by caller
83408 + */
83409 +int pcf50633_read(struct pcf50633_data *pcf, u_int8_t reg, int nr_regs, u_int8_t *data)
83410 +{
83411 + return i2c_smbus_read_i2c_block_data(pcf->client, reg, nr_regs, data);
83412 +}
83413 +EXPORT_SYMBOL(pcf50633_read);
83414 +
83415 +/* Read a block of upto 32 regs
83416 + *
83417 + * Locks assumed to be held by caller
83418 + */
83419 +int pcf50633_write(struct pcf50633_data *pcf, u_int8_t reg, int nr_regs, u_int8_t *data)
83420 +{
83421 + return i2c_smbus_write_i2c_block_data(pcf->client, reg, nr_regs, data);
83422 +}
83423 +EXPORT_SYMBOL(pcf50633_write);
83424 +
83425 +static int __reg_write(struct pcf50633_data *pcf, u_int8_t reg, u_int8_t val)
83426 +{
83427 + if (pcf->suspend_state == PCF50633_SS_COMPLETED_SUSPEND) {
83428 + dev_err(&pcf->client->dev, "__reg_write while suspended\n");
83429 + dump_stack();
83430 + }
83431 + return i2c_smbus_write_byte_data(pcf->client, reg, val);
83432 +}
83433 +
83434 +int pcf50633_reg_write(struct pcf50633_data *pcf, u_int8_t reg, u_int8_t val)
83435 +{
83436 + int ret;
83437 +
83438 + mutex_lock(&pcf->lock);
83439 + ret = __reg_write(pcf, reg, val);
83440 + mutex_unlock(&pcf->lock);
83441 +
83442 + return ret;
83443 +}
83444 +EXPORT_SYMBOL(pcf50633_reg_write);
83445 +
83446 +static int32_t __reg_read(struct pcf50633_data *pcf, u_int8_t reg)
83447 +{
83448 + int32_t ret;
83449 +
83450 + if (pcf->suspend_state == PCF50633_SS_COMPLETED_SUSPEND) {
83451 + dev_err(&pcf->client->dev, "__reg_read while suspended\n");
83452 + dump_stack();
83453 + }
83454 + ret = i2c_smbus_read_byte_data(pcf->client, reg);
83455 +
83456 + return ret;
83457 +}
83458 +
83459 +u_int8_t pcf50633_reg_read(struct pcf50633_data *pcf, u_int8_t reg)
83460 +{
83461 + int32_t ret;
83462 +
83463 + mutex_lock(&pcf->lock);
83464 + ret = __reg_read(pcf, reg);
83465 + mutex_unlock(&pcf->lock);
83466 +
83467 + return ret & 0xff;
83468 +}
83469 +EXPORT_SYMBOL(pcf50633_reg_read);
83470 +
83471 +int pcf50633_reg_set_bit_mask(struct pcf50633_data *pcf,
83472 + u_int8_t reg, u_int8_t mask, u_int8_t val)
83473 +{
83474 + int ret;
83475 + u_int8_t tmp;
83476 +
83477 + val &= mask;
83478 +
83479 + mutex_lock(&pcf->lock);
83480 +
83481 + tmp = __reg_read(pcf, reg);
83482 + tmp &= ~mask;
83483 + tmp |= val;
83484 + ret = __reg_write(pcf, reg, tmp);
83485 +
83486 + mutex_unlock(&pcf->lock);
83487 +
83488 + return ret;
83489 +}
83490 +EXPORT_SYMBOL(pcf50633_reg_set_bit_mask);
83491 +
83492 +int pcf50633_reg_clear_bits(struct pcf50633_data *pcf, u_int8_t reg, u_int8_t val)
83493 +{
83494 + int ret;
83495 + u_int8_t tmp;
83496 +
83497 + mutex_lock(&pcf->lock);
83498 +
83499 + tmp = __reg_read(pcf, reg);
83500 + tmp &= ~val;
83501 + ret = __reg_write(pcf, reg, tmp);
83502 +
83503 + mutex_unlock(&pcf->lock);
83504 +
83505 + return ret;
83506 +}
83507 +EXPORT_SYMBOL(pcf50633_reg_clear_bits);
83508 +
83509 +/* asynchronously setup reading one ADC channel */
83510 +static void async_adc_read_setup(struct pcf50633_data *pcf,
83511 + int channel, int avg)
83512 +{
83513 + channel &= PCF50633_ADCC1_ADCMUX_MASK;
83514 +
83515 + /* kill ratiometric, but enable ACCSW biasing */
83516 + __reg_write(pcf, PCF50633_REG_ADCC2, 0x00);
83517 + __reg_write(pcf, PCF50633_REG_ADCC3, 0x01);
83518 +
83519 + /* start ADC conversion of selected channel */
83520 + __reg_write(pcf, PCF50633_REG_ADCC1, channel | avg |
83521 + PCF50633_ADCC1_ADCSTART | PCF50633_ADCC1_RES_10BIT);
83522 +
83523 +}
83524 +
83525 +static u_int16_t adc_read_result(struct pcf50633_data *pcf)
83526 +{
83527 + u_int16_t ret = (__reg_read(pcf, PCF50633_REG_ADCS1) << 2) |
83528 + (__reg_read(pcf, PCF50633_REG_ADCS3) &
83529 + PCF50633_ADCS3_ADCDAT1L_MASK);
83530 +
83531 + DEBUGPC("adc result = %d\n", ret);
83532 +
83533 + return ret;
83534 +}
83535 +
83536 +/* go into 'STANDBY' mode, i.e. power off the main CPU and peripherals */
83537 +void pcf50633_go_standby(struct pcf50633_data *pcf)
83538 +{
83539 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_OOCSHDWN,
83540 + PCF50633_OOCSHDWN_GOSTDBY, PCF50633_OOCSHDWN_GOSTDBY);
83541 +}
83542 +EXPORT_SYMBOL_GPL(pcf50633_go_standby);
83543 +
83544 +void pcf50633_gpio_set(struct pcf50633_data *pcf, enum pcf50633_gpio gpio,
83545 + int on)
83546 +{
83547 + u_int8_t reg = gpio - PCF50633_GPIO1 + PCF50633_REG_GPIO1CFG;
83548 +
83549 + if (on)
83550 + pcf50633_reg_set_bit_mask(pcf, reg, 0x0f, 0x07);
83551 + else
83552 + pcf50633_reg_set_bit_mask(pcf, reg, 0x0f, 0x00);
83553 +}
83554 +EXPORT_SYMBOL_GPL(pcf50633_gpio_set);
83555 +
83556 +int pcf50633_gpio_get(struct pcf50633_data *pcf, enum pcf50633_gpio gpio)
83557 +{
83558 + u_int8_t reg = gpio - PCF50633_GPIO1 + PCF50633_REG_GPIO1CFG;
83559 + u_int8_t val = pcf50633_reg_read(pcf, reg) & 0x0f;
83560 +
83561 + if (val == PCF50633_GPOCFG_GPOSEL_1 ||
83562 + val == (PCF50633_GPOCFG_GPOSEL_0|PCF50633_GPOCFG_GPOSEL_INVERSE))
83563 + return 1;
83564 +
83565 + return 0;
83566 +}
83567 +EXPORT_SYMBOL_GPL(pcf50633_gpio_get);
83568 +
83569 +static int interpret_charger_type_from_adc(struct pcf50633_data *pcf,
83570 + int sample)
83571 +{
83572 + /* 1A capable charger? */
83573 +
83574 + if (sample < ((ADC_NOM_CHG_DETECT_NONE + ADC_NOM_CHG_DETECT_1A) / 2))
83575 + return CHARGER_TYPE_1A;
83576 +
83577 + /* well then, nothing in the USB hole, or USB host / unk adapter */
83578 +
83579 + if (pcf->flags & PCF50633_F_USB_PRESENT) /* ooh power is in there */
83580 + return CHARGER_TYPE_HOSTUSB; /* HOSTUSB is the catchall */
83581 +
83582 + return CHARGER_TYPE_NONE; /* no really -- nothing in there */
83583 +}
83584 +
83585 +
83586 +
83587 +static void
83588 +configure_pmu_for_charger(struct pcf50633_data *pcf,
83589 + void *unused, int adc_result_raw)
83590 +{
83591 + int type;
83592 +
83593 + type = interpret_charger_type_from_adc(
83594 + pcf, adc_result_raw);
83595 + switch (type) {
83596 + case CHARGER_TYPE_NONE:
83597 + pcf50633_usb_curlim_set(pcf, 0);
83598 + break;
83599 + /*
83600 + * the PCF50633 has a feature that it will supply only excess current
83601 + * from the charger that is not used to power the device. So this
83602 + * 500mA setting is "up to 500mA" according to that.
83603 + */
83604 + case CHARGER_TYPE_HOSTUSB:
83605 + /* USB subsystem should call pcf50633_usb_curlim_set to set
83606 + * what was negotiated with the host when it is enumerated
83607 + * successfully. If we get called again after a good
83608 + * negotiation, we keep what was negotiated. (Removal of
83609 + * USB plug destroys pcf->last_curlim_set to 0)
83610 + */
83611 + if (pcf->last_curlim_set > 100)
83612 + pcf50633_usb_curlim_set(pcf, pcf->last_curlim_set);
83613 + else
83614 + pcf50633_usb_curlim_set(pcf, 100);
83615 + break;
83616 + case CHARGER_TYPE_1A:
83617 + pcf50633_usb_curlim_set(pcf, 1000);
83618 + /*
83619 + * stop GPO / EN_HOSTUSB power driving out on the same
83620 + * USB power pins we have a 1A charger on right now!
83621 + */
83622 + dev_dbg(&pcf->client->dev, "Charger -> CHARGER_TYPE_1A\n");
83623 + __reg_write(pcf, PCF50633_GPO - PCF50633_GPIO1 +
83624 + PCF50633_REG_GPIO1CFG,
83625 + __reg_read(pcf, PCF50633_GPO - PCF50633_GPIO1 +
83626 + PCF50633_REG_GPIO1CFG) & 0xf0);
83627 + break;
83628 + }
83629 +
83630 + /* max out USB fast charge current -- actual current drawn is
83631 + * additionally limited by USB limit so no worries
83632 + */
83633 + __reg_write(pcf, PCF50633_REG_MBCC5, 0xff);
83634 +
83635 +}
83636 +
83637 +static void trigger_next_adc_job_if_any(struct pcf50633_data *pcf)
83638 +{
83639 + if (pcf->adc_queue_head == pcf->adc_queue_tail)
83640 + return;
83641 + async_adc_read_setup(pcf,
83642 + pcf->adc_queue[pcf->adc_queue_tail]->mux,
83643 + pcf->adc_queue[pcf->adc_queue_tail]->avg);
83644 +}
83645 +
83646 +
83647 +static void
83648 +adc_add_request_to_queue(struct pcf50633_data *pcf, struct adc_request *req)
83649 +{
83650 + int old_head = pcf->adc_queue_head;
83651 + pcf->adc_queue[pcf->adc_queue_head] = req;
83652 +
83653 + pcf->adc_queue_head = (pcf->adc_queue_head + 1) &
83654 + (MAX_ADC_FIFO_DEPTH - 1);
83655 +
83656 + /* it was idle before we just added this? we need to kick it then */
83657 + if (old_head == pcf->adc_queue_tail)
83658 + trigger_next_adc_job_if_any(pcf);
83659 +}
83660 +
83661 +static void
83662 +__pcf50633_adc_sync_read_callback(struct pcf50633_data *pcf, void *param, int result)
83663 +{
83664 + struct adc_request *req;
83665 +
83666 + /*We know here that the passed param is an adc_request object */
83667 + req = (struct adc_request *)param;
83668 +
83669 + req->result = result;
83670 + complete(&req->completion);
83671 +}
83672 +
83673 +int pcf50633_adc_sync_read(struct pcf50633_data *pcf, int mux, int avg)
83674 +{
83675 +
83676 + struct adc_request *req;
83677 + int result;
83678 +
83679 + /* req is freed when the result is ready, in pcf50633_work*/
83680 + req = kmalloc(sizeof(*req), GFP_KERNEL);
83681 + if (!req)
83682 + return -ENOMEM;
83683 +
83684 + req->mux = mux;
83685 + req->avg = avg;
83686 + req->callback = __pcf50633_adc_sync_read_callback;
83687 + req->callback_param = req;
83688 + init_completion(&req->completion);
83689 +
83690 + adc_add_request_to_queue(pcf, req);
83691 +
83692 + wait_for_completion(&req->completion);
83693 + result = req->result;
83694 +
83695 + return result;
83696 +}
83697 +
83698 +int pcf50633_adc_async_read(struct pcf50633_data *pcf, int mux, int avg,
83699 + void (*callback)(struct pcf50633_data *, void *,int),
83700 + void *callback_param)
83701 +{
83702 + struct adc_request *req;
83703 +
83704 + /* req is freed when the result is ready, in pcf50633_work*/
83705 + req = kmalloc(sizeof(*req), GFP_KERNEL);
83706 + if (!req)
83707 + return -ENOMEM;
83708 +
83709 + req->mux = mux;
83710 + req->avg = avg;
83711 + req->callback = callback;
83712 + req->callback_param = callback_param;
83713 +
83714 + adc_add_request_to_queue(pcf, req);
83715 +
83716 + return 0;
83717 +}
83718 +
83719 +/*
83720 + * we get run to handle servicing the async notification from USB stack that
83721 + * we got enumerated and allowed to draw a particular amount of current
83722 + */
83723 +
83724 +static void pcf50633_work_usbcurlim(struct work_struct *work)
83725 +{
83726 + struct pcf50633_data *pcf =
83727 + container_of(work, struct pcf50633_data, work_usb_curlimit);
83728 +
83729 + mutex_lock(&pcf->working_lock_usb_curlimit);
83730 +
83731 + /* just can't cope with it if we are suspending, don't reschedule */
83732 + if ((pcf->suspend_state == PCF50633_SS_STARTING_SUSPEND) ||
83733 + (pcf->suspend_state == PCF50633_SS_COMPLETED_SUSPEND))
83734 + goto bail;
83735 +
83736 + dev_dbg(&pcf->client->dev, "pcf50633_work_usbcurlim\n");
83737 +
83738 + if (!pcf->probe_completed)
83739 + goto reschedule;
83740 +
83741 + /* we got a notification from USB stack before we completed resume...
83742 + * that can only make trouble, reschedule for a retry
83743 + */
83744 + if (pcf->suspend_state &&
83745 + (pcf->suspend_state < PCF50633_SS_COMPLETED_RESUME))
83746 + goto reschedule;
83747 +
83748 + /*
83749 + * did he pull USB before we managed to set the limit?
83750 + */
83751 + if (pcf->usb_removal_count_usb_curlimit != pcf->usb_removal_count)
83752 + goto bail;
83753 +
83754 + /* OK let's set the requested limit and finish */
83755 +
83756 + dev_dbg(&pcf->client->dev, "pcf50633_work_usbcurlim setting %dmA\n",
83757 + pcf->pending_curlimit);
83758 + pcf50633_usb_curlim_set(pcf, pcf->pending_curlimit);
83759 +
83760 +bail:
83761 + mutex_unlock(&pcf->working_lock_usb_curlimit);
83762 + return;
83763 +
83764 +reschedule:
83765 + dev_dbg(&pcf->client->dev, "pcf50633_work_usbcurlim rescheduling\n");
83766 + if (!schedule_work(&pcf->work_usb_curlimit))
83767 + dev_err(&pcf->client->dev, "curlim reschedule work "
83768 + "already queued\n");
83769 +
83770 + mutex_unlock(&pcf->working_lock_usb_curlimit);
83771 + /* don't spew, delaying whatever else is happening */
83772 + msleep(1);
83773 +}
83774 +
83775 +
83776 +/* this is an export to allow machine to set USB current limit according to
83777 + * notifications of USB stack about enumeration state. We spawn a work
83778 + * function to handle the actual setting, because suspend / resume and such
83779 + * can be in a bad state since this gets called externally asychronous to
83780 + * anything else going on in pcf50633.
83781 + */
83782 +
83783 +int pcf50633_notify_usb_current_limit_change(struct pcf50633_data *pcf,
83784 + unsigned int ma)
83785 +{
83786 + /* can happen if he calls before probe
83787 + * have to bail with error since we can't even schedule the work
83788 + */
83789 + if (!pcf) {
83790 + printk(KERN_ERR "pcf50633_notify_usb_current_limit called with NULL pcf\n");
83791 + return -EBUSY;
83792 + }
83793 +
83794 + dev_dbg(&pcf->client->dev,
83795 + "pcf50633_notify_usb_current_limit_change %dmA\n", ma);
83796 +
83797 + /* prepare to detect USB power removal before we complete */
83798 + pcf->usb_removal_count_usb_curlimit = pcf->usb_removal_count;
83799 +
83800 + pcf->pending_curlimit = ma;
83801 +
83802 + if (!schedule_work(&pcf->work_usb_curlimit))
83803 + dev_err(&pcf->client->dev, "curlim work item already queued\n");
83804 +
83805 + return 0;
83806 +}
83807 +EXPORT_SYMBOL_GPL(pcf50633_notify_usb_current_limit_change);
83808 +
83809 +
83810 +/* we are run when we see a NOBAT situation, because there is no interrupt
83811 + * source in pcf50633 that triggers on resuming charging. It watches to see
83812 + * if charging resumes, it reassesses the charging source if it does. If the
83813 + * USB power disappears, it is also a sign there must be a battery and it is
83814 + * NOT being charged, so it exits since the next move must be USB insertion for
83815 + * change of charger state
83816 + */
83817 +
83818 +static void pcf50633_work_nobat(struct work_struct *work)
83819 +{
83820 + struct pcf50633_data *pcf =
83821 + container_of(work, struct pcf50633_data, work_nobat);
83822 +
83823 + mutex_lock(&pcf->working_lock_nobat);
83824 + pcf->working_nobat = 1;
83825 + mutex_unlock(&pcf->working_lock_nobat);
83826 +
83827 + while (1) {
83828 + msleep(1000);
83829 +
83830 + if (pcf->suspend_state != PCF50633_SS_RUNNING)
83831 + continue;
83832 +
83833 + /* there's a battery in there now? */
83834 + if (pcf50633_reg_read(pcf, PCF50633_REG_MBCS3) & 0x40) {
83835 +
83836 + pcf->jiffies_last_bat_ins = jiffies;
83837 +
83838 + /* figure out our charging stance */
83839 + (void)pcf50633_adc_async_read(pcf, PCF50633_ADCC1_MUX_ADCIN1,
83840 + PCF50633_ADCC1_AVERAGE_16,
83841 + configure_pmu_for_charger,
83842 + NULL);
83843 + goto bail;
83844 + }
83845 +
83846 + /* he pulled USB cable since we were started? exit then */
83847 + if (pcf->usb_removal_count_nobat != pcf->usb_removal_count)
83848 + goto bail;
83849 + }
83850 +
83851 +bail:
83852 + mutex_lock(&pcf->working_lock_nobat);
83853 + pcf->working_nobat = 0;
83854 + mutex_unlock(&pcf->working_lock_nobat);
83855 +}
83856 +
83857 +
83858 +static void pcf50633_work(struct work_struct *work)
83859 +{
83860 + struct pcf50633_data *pcf =
83861 + container_of(work, struct pcf50633_data, work);
83862 + u_int8_t pcfirq[5];
83863 + int ret;
83864 + int tail;
83865 + struct adc_request *req;
83866 +
83867 + mutex_lock(&pcf->working_lock);
83868 + pcf->working = 1;
83869 +
83870 + /* sanity */
83871 + if (!&pcf->client->dev)
83872 + goto bail;
83873 +
83874 + /*
83875 + * if we are presently suspending, we are not in a position to deal
83876 + * with pcf50633 interrupts at all.
83877 + *
83878 + * Because we didn't clear the int pending registers, there will be
83879 + * no edge / interrupt waiting for us when we wake. But it is OK
83880 + * because at the end of our resume, we call this workqueue function
83881 + * gratuitously, clearing the pending register and re-enabling
83882 + * servicing this interrupt.
83883 + */
83884 +
83885 + if ((pcf->suspend_state == PCF50633_SS_STARTING_SUSPEND) ||
83886 + (pcf->suspend_state == PCF50633_SS_COMPLETED_SUSPEND))
83887 + goto bail;
83888 +
83889 + /*
83890 + * If we are inside suspend -> resume completion time we don't attempt
83891 + * service until we have fully resumed. Although we could talk to the
83892 + * device as soon as I2C is up, the regs in the device which we might
83893 + * choose to modify as part of the service action have not been
83894 + * reloaded with their pre-suspend states yet. Therefore we will
83895 + * defer our service if we are called like that until our resume has
83896 + * completed.
83897 + *
83898 + * This shouldn't happen any more because we disable servicing this
83899 + * interrupt in suspend and don't re-enable it until resume is
83900 + * completed.
83901 + */
83902 +
83903 + if (pcf->suspend_state &&
83904 + (pcf->suspend_state != PCF50633_SS_COMPLETED_RESUME))
83905 + goto reschedule;
83906 +
83907 + /* this is the case early in resume! Sanity check! */
83908 + if (i2c_get_clientdata(pcf->client) == NULL)
83909 + goto reschedule;
83910 +
83911 + /*
83912 + * datasheet says we have to read the five IRQ
83913 + * status regs in one transaction
83914 + */
83915 + ret = pcf50633_read(pcf, PCF50633_REG_INT1,
83916 + sizeof(pcfirq), pcfirq);
83917 + if (ret != sizeof(pcfirq)) {
83918 + dev_info(&pcf->client->dev,
83919 + "Oh crap PMU IRQ register read failed -- "
83920 + "retrying later %d\n", ret);
83921 + /*
83922 + * it shouldn't fail, we no longer attempt to use
83923 + * I2C while it can be suspended. But we don't have
83924 + * much option but to retry if if it ever did fail,
83925 + * because if we don't service the interrupt to clear
83926 + * it, we will never see another PMU interrupt edge.
83927 + */
83928 + goto reschedule;
83929 + }
83930 +
83931 + /* hey did we just resume? (because we don't get here unless we are
83932 + * running normally or the first call after resumption)
83933 + */
83934 +
83935 + if (pcf->suspend_state != PCF50633_SS_RUNNING) {
83936 + /*
83937 + * grab a copy of resume interrupt reasons
83938 + * from pcf50633 POV
83939 + */
83940 + memcpy(pcf->pcfirq_resume, pcfirq, sizeof(pcf->pcfirq_resume));
83941 +
83942 + /* pcf50633 resume is really really over now then */
83943 + pcf->suspend_state = PCF50633_SS_RUNNING;
83944 +
83945 + /* peek at the IRQ reason, if power button then set a flag
83946 + * so that we do not signal the event to userspace
83947 + */
83948 + if (pcfirq[1] & (PCF50633_INT2_ONKEYF | PCF50633_INT2_ONKEYR)) {
83949 + pcf->suppress_onkey_events = 1;
83950 + DEBUGP("Wake by ONKEY, suppressing ONKEY event");
83951 + } else {
83952 + pcf->suppress_onkey_events = 0;
83953 + }
83954 + }
83955 +
83956 + if (!pcf->coldplug_done) {
83957 + DEBUGP("PMU Coldplug init\n");
83958 +
83959 + /* we used SECOND to kick ourselves started -- turn it off */
83960 + pcfirq[0] &= ~PCF50633_INT1_SECOND;
83961 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_INT1M,
83962 + PCF50633_INT1_SECOND,
83963 + PCF50633_INT1_SECOND);
83964 +
83965 + /* coldplug the USB if present */
83966 + if ((__reg_read(pcf, PCF50633_REG_MBCS1) &
83967 + (PCF50633_MBCS1_USBPRES | PCF50633_MBCS1_USBOK)) ==
83968 + (PCF50633_MBCS1_USBPRES | PCF50633_MBCS1_USBOK)) {
83969 + DEBUGPC("COLD USBINS\n");
83970 + input_report_key(pcf->input_dev, KEY_POWER2, 1);
83971 + apm_queue_event(APM_POWER_STATUS_CHANGE);
83972 + pcf->flags |= PCF50633_F_USB_PRESENT;
83973 + if (pcf->pdata->cb)
83974 + pcf->pdata->cb(&pcf->client->dev,
83975 + PCF50633_FEAT_MBC, PMU_EVT_USB_INSERT);
83976 + }
83977 +
83978 + /* figure out our initial charging stance */
83979 + (void)pcf50633_adc_async_read(pcf, PCF50633_ADCC1_MUX_ADCIN1,
83980 + PCF50633_ADCC1_AVERAGE_16,
83981 + configure_pmu_for_charger, NULL);
83982 +
83983 + pcf->coldplug_done = 1;
83984 + }
83985 +
83986 + DEBUGP("INT1=0x%02x INT2=0x%02x INT3=0x%02x INT4=0x%02x INT5=0x%02x\n",
83987 + pcfirq[0], pcfirq[1], pcfirq[2], pcfirq[3], pcfirq[4]);
83988 +
83989 + if (pcfirq[0] & PCF50633_INT1_ADPINS) {
83990 + /* Charger inserted */
83991 + DEBUGPC("ADPINS ");
83992 + input_report_key(pcf->input_dev, KEY_BATTERY, 1);
83993 + apm_queue_event(APM_POWER_STATUS_CHANGE);
83994 + pcf->flags |= PCF50633_F_CHG_PRESENT;
83995 + if (pcf->pdata->cb)
83996 + pcf->pdata->cb(&pcf->client->dev,
83997 + PCF50633_FEAT_MBC, PMU_EVT_INSERT);
83998 + }
83999 + if (pcfirq[0] & PCF50633_INT1_ADPREM) {
84000 + /* Charger removed */
84001 + DEBUGPC("ADPREM ");
84002 + input_report_key(pcf->input_dev, KEY_BATTERY, 0);
84003 + apm_queue_event(APM_POWER_STATUS_CHANGE);
84004 + pcf->flags &= ~PCF50633_F_CHG_PRESENT;
84005 + if (pcf->pdata->cb)
84006 + pcf->pdata->cb(&pcf->client->dev,
84007 + PCF50633_FEAT_MBC, PMU_EVT_REMOVE);
84008 + }
84009 + if (pcfirq[0] & PCF50633_INT1_USBINS) {
84010 + DEBUGPC("USBINS ");
84011 + input_report_key(pcf->input_dev, KEY_POWER2, 1);
84012 + apm_queue_event(APM_POWER_STATUS_CHANGE);
84013 + pcf->flags |= PCF50633_F_USB_PRESENT;
84014 + if (pcf->pdata->cb)
84015 + pcf->pdata->cb(&pcf->client->dev,
84016 + PCF50633_FEAT_MBC, PMU_EVT_USB_INSERT);
84017 + msleep(500); /* debounce, allow to see any ID resistor */
84018 + /* completion irq will figure out our charging stance */
84019 + (void)pcf50633_adc_async_read(pcf, PCF50633_ADCC1_MUX_ADCIN1,
84020 + PCF50633_ADCC1_AVERAGE_16,
84021 + configure_pmu_for_charger, NULL);
84022 + }
84023 + if (pcfirq[0] & PCF50633_INT1_USBREM &&
84024 + !(pcfirq[0] & PCF50633_INT1_USBINS)) {
84025 + /* the occurrence of USBINS and USBREM
84026 + * should be exclusive in one schedule work
84027 + */
84028 + DEBUGPC("USBREM ");
84029 +
84030 + pcf->usb_removal_count++;
84031 +
84032 + /* only deal if we had understood it was in */
84033 + if (pcf->flags & PCF50633_F_USB_PRESENT) {
84034 + input_report_key(pcf->input_dev, KEY_POWER2, 0);
84035 + apm_queue_event(APM_POWER_STATUS_CHANGE);
84036 + pcf->flags &= ~PCF50633_F_USB_PRESENT;
84037 +
84038 + if (pcf->pdata->cb)
84039 + pcf->pdata->cb(&pcf->client->dev,
84040 + PCF50633_FEAT_MBC, PMU_EVT_USB_REMOVE);
84041 +
84042 + /* destroy any memory of grant of power from host */
84043 + pcf->last_curlim_set = 0;
84044 +
84045 + /* completion irq will figure out our charging stance */
84046 + (void)pcf50633_adc_async_read(pcf, PCF50633_ADCC1_MUX_ADCIN1,
84047 + PCF50633_ADCC1_AVERAGE_16,
84048 + configure_pmu_for_charger, NULL);
84049 + }
84050 + }
84051 + if (pcfirq[0] & PCF50633_INT1_ALARM) {
84052 + DEBUGPC("ALARM ");
84053 + if (pcf->pdata->used_features & PCF50633_FEAT_RTC)
84054 + pcf50633_rtc_handle_event(pcf,
84055 + PCF50633_RTC_EVENT_ALARM);
84056 + }
84057 + if (pcfirq[0] & PCF50633_INT1_SECOND) {
84058 + DEBUGPC("SECOND ");
84059 + if (pcf->flags & PCF50633_F_RTC_SECOND)
84060 + pcf50633_rtc_handle_event(pcf,
84061 + PCF50633_RTC_EVENT_SECOND);
84062 +
84063 + if (pcf->onkey_seconds >= 0 &&
84064 + pcf->flags & PCF50633_F_PWR_PRESSED) {
84065 + DEBUGP("ONKEY_SECONDS(%u, OOCSTAT=0x%02x) ",
84066 + pcf->onkey_seconds,
84067 + pcf50633_reg_read(pcf, PCF50633_REG_OOCSTAT));
84068 + pcf->onkey_seconds++;
84069 + if (pcf->onkey_seconds >=
84070 + pcf->pdata->onkey_seconds_sig_init) {
84071 + /* Ask init to do 'ctrlaltdel' */
84072 + /*
84073 + * currently Linux reacts badly to issuing a
84074 + * signal to PID #1 before init is started.
84075 + * What happens is that the next kernel thread
84076 + * to start, which is the JFFS2 Garbage
84077 + * collector in our case, gets the signal
84078 + * instead and proceeds to fail to fork --
84079 + * which is very bad. Therefore we confirm
84080 + * PID #1 exists before issuing the signal
84081 + */
84082 + if (find_task_by_pid_ns(1, &init_pid_ns)) {
84083 + kill_pid(task_pid(find_task_by_pid_ns(1,
84084 + &init_pid_ns)), SIGPWR, 1);
84085 + DEBUGPC("SIGINT(init) ");
84086 + }
84087 + /* FIXME: what if userspace doesn't shut down? */
84088 + }
84089 + if (pcf->onkey_seconds >=
84090 + pcf->pdata->onkey_seconds_shutdown) {
84091 + DEBUGPC("Power Off ");
84092 + pcf50633_go_standby(pcf);
84093 + }
84094 + }
84095 + }
84096 +
84097 + if (pcfirq[1] & PCF50633_INT2_ONKEYF) {
84098 + /* ONKEY falling edge (start of button press) */
84099 + pcf->flags |= PCF50633_F_PWR_PRESSED;
84100 + if (!pcf->suppress_onkey_events) {
84101 + DEBUGPC("ONKEYF ");
84102 + input_report_key(pcf->input_dev, KEY_POWER, 1);
84103 + } else {
84104 + DEBUGPC("ONKEYF(unreported) ");
84105 + }
84106 + }
84107 + if (pcfirq[1] & PCF50633_INT2_ONKEYR) {
84108 + /* ONKEY rising edge (end of button press) */
84109 + pcf->flags &= ~PCF50633_F_PWR_PRESSED;
84110 + pcf->onkey_seconds = -1;
84111 + if (!pcf->suppress_onkey_events) {
84112 + DEBUGPC("ONKEYR ");
84113 + input_report_key(pcf->input_dev, KEY_POWER, 0);
84114 + } else {
84115 + DEBUGPC("ONKEYR(unreported) ");
84116 + /* don't suppress any more power button events */
84117 + pcf->suppress_onkey_events = 0;
84118 + }
84119 + /* disable SECOND interrupt in case RTC didn't
84120 + * request it */
84121 + if (!(pcf->flags & PCF50633_F_RTC_SECOND))
84122 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_INT1M,
84123 + PCF50633_INT1_SECOND,
84124 + PCF50633_INT1_SECOND);
84125 + }
84126 + /* FIXME: we don't use EXTON1/2/3. thats why we skip it */
84127 +
84128 + if (pcfirq[2] & PCF50633_INT3_BATFULL) {
84129 + DEBUGPC("BATFULL ");
84130 +
84131 + /* the problem is, we get a false BATFULL if we inserted battery
84132 + * while USB powered. Defeat BATFULL if we recently inserted
84133 + * battery
84134 + */
84135 +
84136 + if ((jiffies - pcf->jiffies_last_bat_ins) < (HZ * 2)) {
84137 +
84138 + DEBUGPC("*** Ignoring BATFULL ***\n");
84139 +
84140 + ret = pcf50633_reg_read(pcf, PCF50633_REG_MBCC7) &
84141 + PCF56033_MBCC7_USB_MASK;
84142 +
84143 +
84144 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC7,
84145 + PCF56033_MBCC7_USB_MASK,
84146 + PCF50633_MBCC7_USB_SUSPEND);
84147 +
84148 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC7,
84149 + PCF56033_MBCC7_USB_MASK,
84150 + ret);
84151 + } else {
84152 + if (pcf->pdata->cb)
84153 + pcf->pdata->cb(&pcf->client->dev,
84154 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_IDLE);
84155 + }
84156 +
84157 + /* FIXME: signal this to userspace */
84158 + }
84159 + if (pcfirq[2] & PCF50633_INT3_CHGHALT) {
84160 + DEBUGPC("CHGHALT ");
84161 + /*
84162 + * this is really "battery not pulling current" -- it can
84163 + * appear with no battery attached
84164 + */
84165 + if (pcf->pdata->cb)
84166 + pcf->pdata->cb(&pcf->client->dev,
84167 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_CHANGE);
84168 + }
84169 + if (pcfirq[2] & PCF50633_INT3_THLIMON) {
84170 + DEBUGPC("THLIMON ");
84171 + pcf->flags |= PCF50633_F_CHG_PROT;
84172 + if (pcf->pdata->cb)
84173 + pcf->pdata->cb(&pcf->client->dev,
84174 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_CHANGE);
84175 + }
84176 + if (pcfirq[2] & PCF50633_INT3_THLIMOFF) {
84177 + DEBUGPC("THLIMOFF ");
84178 + pcf->flags &= ~PCF50633_F_CHG_PROT;
84179 + if (pcf->pdata->cb)
84180 + pcf->pdata->cb(&pcf->client->dev,
84181 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_CHANGE);
84182 + }
84183 + if (pcfirq[2] & PCF50633_INT3_USBLIMON) {
84184 + DEBUGPC("USBLIMON ");
84185 + if (pcf->pdata->cb)
84186 + pcf->pdata->cb(&pcf->client->dev,
84187 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_CHANGE);
84188 + }
84189 + if (pcfirq[2] & PCF50633_INT3_USBLIMOFF) {
84190 + DEBUGPC("USBLIMOFF ");
84191 + if (pcf->pdata->cb)
84192 + pcf->pdata->cb(&pcf->client->dev,
84193 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_CHANGE);
84194 + }
84195 + if (pcfirq[2] & PCF50633_INT3_ADCRDY) {
84196 + /* ADC result ready */
84197 + DEBUGPC("ADCRDY ");
84198 + tail = pcf->adc_queue_tail;
84199 + pcf->adc_queue_tail = (pcf->adc_queue_tail + 1) &
84200 + (MAX_ADC_FIFO_DEPTH - 1);
84201 + req = pcf->adc_queue[tail];
84202 + req->callback(pcf, req->callback_param,
84203 + adc_read_result(pcf));
84204 + kfree(req);
84205 +
84206 + trigger_next_adc_job_if_any(pcf);
84207 + }
84208 + if (pcfirq[2] & PCF50633_INT3_ONKEY1S) {
84209 + /* ONKEY pressed for more than 1 second */
84210 + pcf->onkey_seconds = 0;
84211 + DEBUGPC("ONKEY1S ");
84212 + /* Tell PMU we are taking care of this */
84213 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_OOCSHDWN,
84214 + PCF50633_OOCSHDWN_TOTRST,
84215 + PCF50633_OOCSHDWN_TOTRST);
84216 + /* enable SECOND interrupt (hz tick) */
84217 + pcf50633_reg_clear_bits(pcf, PCF50633_REG_INT1M, PCF50633_INT1_SECOND);
84218 + }
84219 +
84220 + if (pcfirq[3] & (PCF50633_INT4_LOWBAT|PCF50633_INT4_LOWSYS)) {
84221 + if ((__reg_read(pcf, PCF50633_REG_MBCS1) &
84222 + (PCF50633_MBCS1_USBPRES | PCF50633_MBCS1_USBOK)) ==
84223 + (PCF50633_MBCS1_USBPRES | PCF50633_MBCS1_USBOK)) {
84224 + /*
84225 + * hey no need to freak out, we have some kind of
84226 + * valid charger power to keep us going -- but note that
84227 + * we are not actually charging anything
84228 + */
84229 + if (pcf->pdata->cb)
84230 + pcf->pdata->cb(&pcf->client->dev,
84231 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_IDLE);
84232 +
84233 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC1,
84234 + PCF50633_MBCC1_RESUME,
84235 + PCF50633_MBCC1_RESUME);
84236 +
84237 + /*
84238 + * Well, we are not charging anything right this second
84239 + * ... however in the next ~30s before we get the next
84240 + * NOBAT, he might insert a battery. So we schedule a
84241 + * work function checking to see if
84242 + * we started charging something during that time.
84243 + * USB removal as well as charging terminates the work
84244 + * function so we can't get terminally confused
84245 + */
84246 + mutex_lock(&pcf->working_lock_nobat);
84247 + if (!pcf->working_nobat) {
84248 + pcf->usb_removal_count_nobat =
84249 + pcf->usb_removal_count;
84250 +
84251 + if (!schedule_work(&pcf->work_nobat))
84252 + DEBUGPC("failed to schedule nobat\n");
84253 + }
84254 + mutex_unlock(&pcf->working_lock_nobat);
84255 +
84256 +
84257 + DEBUGPC("(NO)BAT ");
84258 + } else {
84259 + /* Really low battery voltage, we have 8 seconds left */
84260 + DEBUGPC("LOWBAT ");
84261 + /*
84262 + * currently Linux reacts badly to issuing a signal to
84263 + * PID #1 before init is started. What happens is that
84264 + * the next kernel thread to start, which is the JFFS2
84265 + * Garbage collector in our case, gets the signal
84266 + * instead and proceeds to fail to fork -- which is
84267 + * very bad. Therefore we confirm PID #1 exists
84268 + * before issuing SPIGPWR
84269 + */
84270 +
84271 + if (find_task_by_pid_ns(1, &init_pid_ns)) {
84272 + apm_queue_event(APM_LOW_BATTERY);
84273 + DEBUGPC("SIGPWR(init) ");
84274 + kill_pid(task_pid(find_task_by_pid_ns(1, &init_pid_ns)), SIGPWR, 1);
84275 + } else
84276 + /*
84277 + * well, our situation is like this: we do not
84278 + * have any external power, we have a low
84279 + * battery and since PID #1 doesn't exist yet,
84280 + * we are early in the boot, likely before
84281 + * rootfs mount. We should just call it a day
84282 + */
84283 + apm_queue_event(APM_CRITICAL_SUSPEND);
84284 + }
84285 +
84286 + /* Tell PMU we are taking care of this */
84287 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_OOCSHDWN,
84288 + PCF50633_OOCSHDWN_TOTRST,
84289 + PCF50633_OOCSHDWN_TOTRST);
84290 + }
84291 + if (pcfirq[3] & PCF50633_INT4_HIGHTMP) {
84292 + /* High temperature */
84293 + DEBUGPC("HIGHTMP ");
84294 + apm_queue_event(APM_CRITICAL_SUSPEND);
84295 + }
84296 + if (pcfirq[3] & PCF50633_INT4_AUTOPWRFAIL) {
84297 + DEBUGPC("PCF50633_INT4_AUTOPWRFAIL ");
84298 + /* FIXME: deal with this */
84299 + }
84300 + if (pcfirq[3] & PCF50633_INT4_DWN1PWRFAIL) {
84301 + DEBUGPC("PCF50633_INT4_DWN1PWRFAIL ");
84302 + /* FIXME: deal with this */
84303 + }
84304 + if (pcfirq[3] & PCF50633_INT4_DWN2PWRFAIL) {
84305 + DEBUGPC("PCF50633_INT4_DWN2PWRFAIL ");
84306 + /* FIXME: deal with this */
84307 + }
84308 + if (pcfirq[3] & PCF50633_INT4_LEDPWRFAIL) {
84309 + DEBUGPC("PCF50633_INT4_LEDPWRFAIL ");
84310 + /* FIXME: deal with this */
84311 + }
84312 + if (pcfirq[3] & PCF50633_INT4_LEDOVP) {
84313 + DEBUGPC("PCF50633_INT4_LEDOVP ");
84314 + /* FIXME: deal with this */
84315 + }
84316 +
84317 + DEBUGPC("\n");
84318 +
84319 +bail:
84320 + pcf->working = 0;
84321 + input_sync(pcf->input_dev);
84322 + put_device(&pcf->client->dev);
84323 + mutex_unlock(&pcf->working_lock);
84324 +
84325 + return;
84326 +
84327 +reschedule:
84328 + /* don't spew, delaying whatever else is happening */
84329 + /* EXCEPTION: if we are in the middle of suspending, we don't have
84330 + * time to hang around since we may be turned off core 1V3 already
84331 + */
84332 + if ((pcf->suspend_state != PCF50633_SS_STARTING_SUSPEND) &&
84333 + (pcf->suspend_state != PCF50633_SS_COMPLETED_SUSPEND)) {
84334 + msleep(10);
84335 + dev_dbg(&pcf->client->dev, "rescheduling interrupt service\n");
84336 + }
84337 + if (!schedule_work(&pcf->work))
84338 + dev_err(&pcf->client->dev, "int service reschedule failed\n");
84339 +
84340 + /* we don't put the device here, hold it for next time */
84341 + mutex_unlock(&pcf->working_lock);
84342 +}
84343 +
84344 +static irqreturn_t pcf50633_irq(int irq, void *_pcf)
84345 +{
84346 + struct pcf50633_data *pcf = _pcf;
84347 +
84348 + DEBUGP("entering(irq=%u, pcf=%p): scheduling work\n", irq, _pcf);
84349 + dev_dbg(&pcf->client->dev, "pcf50633_irq scheduling work\n");
84350 +
84351 + get_device(&pcf->client->dev);
84352 + if (!schedule_work(&pcf->work) && !pcf->working)
84353 + dev_err(&pcf->client->dev, "pcf irq work already queued\n");
84354 +
84355 + return IRQ_HANDLED;
84356 +}
84357 +
84358 +static u_int16_t adc_to_batt_millivolts(u_int16_t adc)
84359 +{
84360 + u_int16_t mvolts;
84361 +
84362 + mvolts = (adc * 6000) / 1024;
84363 +
84364 + return mvolts;
84365 +}
84366 +
84367 +#define BATTVOLT_SCALE_START 2800
84368 +#define BATTVOLT_SCALE_END 4200
84369 +#define BATTVOLT_SCALE_DIVIDER ((BATTVOLT_SCALE_END - BATTVOLT_SCALE_START)/100)
84370 +
84371 +static u_int8_t battvolt_scale(u_int16_t battvolt)
84372 +{
84373 + /* FIXME: this linear scale is completely bogus */
84374 + u_int16_t battvolt_relative = battvolt - BATTVOLT_SCALE_START;
84375 + unsigned int percent = battvolt_relative / BATTVOLT_SCALE_DIVIDER;
84376 +
84377 + return percent;
84378 +}
84379 +
84380 +u_int16_t pcf50633_battvolt(struct pcf50633_data *pcf)
84381 +{
84382 + int ret;
84383 +
84384 + ret = pcf50633_adc_sync_read(pcf, PCF50633_ADCC1_MUX_BATSNS_RES,
84385 + PCF50633_ADCC1_AVERAGE_16);
84386 +
84387 + if (ret < 0)
84388 + return ret;
84389 +
84390 + return adc_to_batt_millivolts(ret);
84391 +}
84392 +
84393 +EXPORT_SYMBOL_GPL(pcf50633_battvolt);
84394 +
84395 +static ssize_t show_battvolt(struct device *dev, struct device_attribute *attr,
84396 + char *buf)
84397 +{
84398 + struct i2c_client *client = to_i2c_client(dev);
84399 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84400 +
84401 + return sprintf(buf, "%u\n", pcf50633_battvolt(pcf));
84402 +}
84403 +static DEVICE_ATTR(battvolt, S_IRUGO | S_IWUSR, show_battvolt, NULL);
84404 +
84405 +/***********************************************************************
84406 + * Charger Control
84407 + ***********************************************************************/
84408 +
84409 +/* Set maximum USB current limit */
84410 +static void pcf50633_usb_curlim_set(struct pcf50633_data *pcf, int ma)
84411 +{
84412 + u_int8_t bits;
84413 + int active = 0;
84414 +
84415 + pcf->last_curlim_set = ma;
84416 +
84417 + dev_dbg(&pcf->client->dev, "setting usb current limit to %d ma", ma);
84418 +
84419 + if (ma >= 1000) {
84420 + bits = PCF50633_MBCC7_USB_1000mA;
84421 + }
84422 + else if (ma >= 500)
84423 + bits = PCF50633_MBCC7_USB_500mA;
84424 + else if (ma >= 100)
84425 + bits = PCF50633_MBCC7_USB_100mA;
84426 + else
84427 + bits = PCF50633_MBCC7_USB_SUSPEND;
84428 +
84429 + /* set the nearest charging limit */
84430 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC7, PCF56033_MBCC7_USB_MASK,
84431 + bits);
84432 +
84433 + /* with this charging limit, is charging actually meaningful? */
84434 + switch (bits) {
84435 + case PCF50633_MBCC7_USB_500mA:
84436 + case PCF50633_MBCC7_USB_1000mA:
84437 + /* yes with this charging limit, we can do real charging */
84438 + active = 1;
84439 + break;
84440 + default: /* right charging context that if there is power, we charge */
84441 + if (pcf->flags & PCF50633_F_USB_PRESENT)
84442 + pcf->pdata->cb(&pcf->client->dev,
84443 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_ACTIVE);
84444 + break;
84445 + }
84446 + /*
84447 + * enable or disable charging according to current limit -- this will
84448 + * also throw a platform notification callback about it
84449 + */
84450 + pcf50633_charge_enable(pcf, active);
84451 +
84452 + /* clear batfull */
84453 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC1,
84454 + PCF50633_MBCC1_AUTORES,
84455 + 0);
84456 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC1,
84457 + PCF50633_MBCC1_RESUME,
84458 + PCF50633_MBCC1_RESUME);
84459 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC1,
84460 + PCF50633_MBCC1_AUTORES,
84461 + PCF50633_MBCC1_AUTORES);
84462 +
84463 +}
84464 +
84465 +static ssize_t show_usblim(struct device *dev, struct device_attribute *attr,
84466 + char *buf)
84467 +{
84468 + struct i2c_client *client = to_i2c_client(dev);
84469 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84470 + u_int8_t usblim = pcf50633_reg_read(pcf, PCF50633_REG_MBCC7) &
84471 + PCF56033_MBCC7_USB_MASK;
84472 + unsigned int ma;
84473 +
84474 + if (usblim == PCF50633_MBCC7_USB_1000mA)
84475 + ma = 1000;
84476 + else if (usblim == PCF50633_MBCC7_USB_500mA)
84477 + ma = 500;
84478 + else if (usblim == PCF50633_MBCC7_USB_100mA)
84479 + ma = 100;
84480 + else
84481 + ma = 0;
84482 +
84483 + return sprintf(buf, "%u\n", ma);
84484 +}
84485 +static DEVICE_ATTR(usb_curlim, S_IRUGO | S_IWUSR, show_usblim, NULL);
84486 +
84487 +/* Enable/disable charging */
84488 +static void pcf50633_charge_enable(struct pcf50633_data *pcf, int on)
84489 +{
84490 + u_int8_t bits;
84491 + u_int8_t usblim;
84492 +
84493 + if (!(pcf->pdata->used_features & PCF50633_FEAT_MBC))
84494 + return;
84495 +
84496 + DEBUGPC("pcf50633_charge_enable %d\n", on);
84497 +
84498 + if (on) {
84499 + pcf->flags |= PCF50633_F_CHG_ENABLED;
84500 + bits = PCF50633_MBCC1_CHGENA;
84501 + usblim = pcf50633_reg_read(pcf, PCF50633_REG_MBCC7) &
84502 + PCF56033_MBCC7_USB_MASK;
84503 + switch (usblim) {
84504 + case PCF50633_MBCC7_USB_1000mA:
84505 + case PCF50633_MBCC7_USB_500mA:
84506 + if (pcf->flags & PCF50633_F_USB_PRESENT)
84507 + if (pcf->pdata->cb)
84508 + pcf->pdata->cb(&pcf->client->dev,
84509 + PCF50633_FEAT_MBC,
84510 + PMU_EVT_CHARGER_ACTIVE);
84511 + break;
84512 + default:
84513 + break;
84514 + }
84515 + } else {
84516 + pcf->flags &= ~PCF50633_F_CHG_ENABLED;
84517 + bits = 0;
84518 + if (pcf->pdata->cb)
84519 + pcf->pdata->cb(&pcf->client->dev,
84520 + PCF50633_FEAT_MBC, PMU_EVT_CHARGER_IDLE);
84521 + }
84522 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC1, PCF50633_MBCC1_CHGENA,
84523 + bits);
84524 +}
84525 +
84526 +#if 0
84527 +#define ONE 1000000
84528 +static u_int16_t adc_to_rntc(struct pcf50633_data *pcf, u_int16_t adc)
84529 +{
84530 + u_int32_t r_batt = (adc * pcf->pdata->r_fix_batt) / (1023 - adc);
84531 + u_int16_t r_ntc;
84532 +
84533 + /* The battery NTC has a parallell 10kOhms resistor */
84534 + r_ntc = ONE / ((ONE/r_batt) - (ONE/pcf->pdata->r_fix_batt_par));
84535 +
84536 + return r_ntc;
84537 +}
84538 +#endif
84539 +static ssize_t show_battemp(struct device *dev, struct device_attribute *attr,
84540 + char *buf)
84541 +{
84542 + return sprintf(buf, "\n");
84543 +}
84544 +static DEVICE_ATTR(battemp, S_IRUGO | S_IWUSR, show_battemp, NULL);
84545 +#if 0
84546 +static u_int16_t adc_to_chg_milliamps(struct pcf50633_data *pcf,
84547 + u_int16_t adc_adcin1,
84548 + u_int16_t adc_batvolt)
84549 +{
84550 + u_int32_t res = ((adc_adcin1 - adc_batvolt) * 6000);
84551 + return res / (pcf->pdata->r_sense_milli * 1024 / 1000);
84552 +}
84553 +#endif
84554 +static ssize_t show_chgcur(struct device *dev, struct device_attribute *attr,
84555 + char *buf)
84556 +{
84557 + return sprintf(buf, "\n");
84558 +}
84559 +static DEVICE_ATTR(chgcur, S_IRUGO | S_IWUSR, show_chgcur, NULL);
84560 +
84561 +static const char *chgmode_names[] = {
84562 + [PCF50633_MBCS2_MBC_PLAY] = "play-only",
84563 + [PCF50633_MBCS2_MBC_USB_PRE] = "pre",
84564 + [PCF50633_MBCS2_MBC_ADP_PRE] = "pre",
84565 + [PCF50633_MBCS2_MBC_USB_PRE_WAIT] = "pre-wait",
84566 + [PCF50633_MBCS2_MBC_ADP_PRE_WAIT] = "pre-wait",
84567 + [PCF50633_MBCS2_MBC_USB_FAST] = "fast",
84568 + [PCF50633_MBCS2_MBC_ADP_FAST] = "fast",
84569 + [PCF50633_MBCS2_MBC_USB_FAST_WAIT] = "fast-wait",
84570 + [PCF50633_MBCS2_MBC_ADP_FAST_WAIT] = "fast-wait",
84571 + [PCF50633_MBCS2_MBC_ADP_FAST_WAIT] = "bat-full",
84572 +};
84573 +
84574 +static ssize_t show_chgmode(struct device *dev, struct device_attribute *attr,
84575 + char *buf)
84576 +{
84577 + struct i2c_client *client = to_i2c_client(dev);
84578 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84579 + u_int8_t mbcs2 = pcf50633_reg_read(pcf, PCF50633_REG_MBCS2);
84580 + u_int8_t chgmod = (mbcs2 & PCF50633_MBCS2_MBC_MASK);
84581 +
84582 + return sprintf(buf, "%s\n", chgmode_names[chgmod]);
84583 +}
84584 +
84585 +static ssize_t set_chgmode(struct device *dev, struct device_attribute *attr,
84586 + const char *buf, size_t count)
84587 +{
84588 + struct i2c_client *client = to_i2c_client(dev);
84589 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84590 +
84591 + /* As opposed to the PCF50606, we can only enable or disable
84592 + * charging and not directly jump into a certain mode! */
84593 +
84594 + if (!strcmp(buf, "0\n"))
84595 + pcf50633_charge_enable(pcf, 0);
84596 + else
84597 + pcf50633_charge_enable(pcf, 1);
84598 +
84599 + return count;
84600 +}
84601 +
84602 +static DEVICE_ATTR(chgmode, S_IRUGO | S_IWUSR, show_chgmode, set_chgmode);
84603 +
84604 +static const char *chgstate_names[] = {
84605 + [PCF50633_FIDX_CHG_ENABLED] = "enabled",
84606 + [PCF50633_FIDX_CHG_PRESENT] = "charger_present",
84607 + [PCF50633_FIDX_USB_PRESENT] = "usb_present",
84608 + [PCF50633_FIDX_CHG_ERR] = "error",
84609 + [PCF50633_FIDX_CHG_PROT] = "protection",
84610 + [PCF50633_FIDX_CHG_READY] = "ready",
84611 +};
84612 +
84613 +static ssize_t show_chgstate(struct device *dev, struct device_attribute *attr,
84614 + char *buf)
84615 +{
84616 + struct i2c_client *client = to_i2c_client(dev);
84617 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84618 +
84619 + char *b = buf;
84620 + int i;
84621 +
84622 + for (i = 0; i < 32; i++)
84623 + if (pcf->flags & (1 << i) && i < ARRAY_SIZE(chgstate_names))
84624 + b += sprintf(b, "%s ", chgstate_names[i]);
84625 +
84626 + if (b > buf)
84627 + b += sprintf(b, "\n");
84628 +
84629 + return b - buf;
84630 +}
84631 +static DEVICE_ATTR(chgstate, S_IRUGO | S_IWUSR, show_chgstate, NULL);
84632 +
84633 +/*
84634 + * Charger type
84635 + */
84636 +
84637 +static ssize_t show_charger_type(struct device *dev,
84638 + struct device_attribute *attr, char *buf)
84639 +{
84640 + struct i2c_client *client = to_i2c_client(dev);
84641 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84642 + int adc_raw_result, charger_type;
84643 +
84644 + static const char *names_charger_type[] = {
84645 + [CHARGER_TYPE_NONE] = "none",
84646 + [CHARGER_TYPE_HOSTUSB] = "host/500mA usb",
84647 + [CHARGER_TYPE_1A] = "charger 1A",
84648 + };
84649 + static const char *names_charger_modes[] = {
84650 + [PCF50633_MBCC7_USB_1000mA] = "1A",
84651 + [PCF50633_MBCC7_USB_500mA] = "500mA",
84652 + [PCF50633_MBCC7_USB_100mA] = "100mA",
84653 + [PCF50633_MBCC7_USB_SUSPEND] = "suspend",
84654 + };
84655 + int mode = pcf50633_reg_read(pcf, PCF50633_REG_MBCC7) & PCF56033_MBCC7_USB_MASK;
84656 +
84657 + adc_raw_result = pcf50633_adc_sync_read(pcf, PCF50633_ADCC1_MUX_ADCIN1,
84658 + PCF50633_ADCC1_AVERAGE_16);
84659 + charger_type = interpret_charger_type_from_adc(pcf, adc_raw_result);
84660 + return sprintf(buf, "%s mode %s\n",
84661 + names_charger_type[charger_type],
84662 + names_charger_modes[mode]);
84663 +}
84664 +
84665 +static DEVICE_ATTR(charger_type, 0444, show_charger_type, NULL);
84666 +
84667 +static ssize_t force_usb_limit_dangerous(struct device *dev,
84668 + struct device_attribute *attr, const char *buf, size_t count)
84669 +{
84670 + struct i2c_client *client = to_i2c_client(dev);
84671 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84672 + int ma = simple_strtoul(buf, NULL, 10);
84673 +
84674 + pcf50633_usb_curlim_set(pcf, ma);
84675 + return count;
84676 +}
84677 +
84678 +static DEVICE_ATTR(force_usb_limit_dangerous, 0600,
84679 + NULL, force_usb_limit_dangerous);
84680 +
84681 +/*
84682 + * Charger adc
84683 + */
84684 +
84685 +static ssize_t show_charger_adc(struct device *dev,
84686 + struct device_attribute *attr, char *buf)
84687 +{
84688 + struct i2c_client *client = to_i2c_client(dev);
84689 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84690 + int result;
84691 +
84692 + result = pcf50633_adc_sync_read(pcf, PCF50633_ADCC1_MUX_ADCIN1,
84693 + PCF50633_ADCC1_AVERAGE_16);
84694 + if (result < 0)
84695 + return result;
84696 +
84697 + return sprintf(buf, "%d\n", result);
84698 +}
84699 +
84700 +static DEVICE_ATTR(charger_adc, 0444, show_charger_adc, NULL);
84701 +
84702 +/*
84703 + * Dump regs
84704 + */
84705 +
84706 +static ssize_t show_dump_regs(struct device *dev, struct device_attribute *attr,
84707 + char *buf)
84708 +{
84709 + struct i2c_client *client = to_i2c_client(dev);
84710 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84711 + u8 dump[16];
84712 + int n, n1, idx = 0;
84713 + char *buf1 = buf;
84714 + static u8 address_no_read[] = { /* must be ascending */
84715 + PCF50633_REG_INT1,
84716 + PCF50633_REG_INT2,
84717 + PCF50633_REG_INT3,
84718 + PCF50633_REG_INT4,
84719 + PCF50633_REG_INT5,
84720 + 0 /* terminator */
84721 + };
84722 +
84723 + for (n = 0; n < 256; n += sizeof(dump)) {
84724 +
84725 + for (n1 = 0; n1 < sizeof(dump); n1++)
84726 + if (n == address_no_read[idx]) {
84727 + idx++;
84728 + dump[n1] = 0x00;
84729 + } else
84730 + dump[n1] = pcf50633_reg_read(pcf, n + n1);
84731 +
84732 + hex_dump_to_buffer(dump, sizeof(dump), 16, 1, buf1, 128, 0);
84733 + buf1 += strlen(buf1);
84734 + *buf1++ = '\n';
84735 + *buf1 = '\0';
84736 + }
84737 +
84738 + return buf1 - buf;
84739 +}
84740 +
84741 +static DEVICE_ATTR(dump_regs, 0400, show_dump_regs, NULL);
84742 +
84743 +
84744 +/***********************************************************************
84745 + * Driver initialization
84746 + ***********************************************************************/
84747 +
84748 +/*
84749 + * CARE! This table is modified at runtime!
84750 + */
84751 +static struct attribute *pcf_sysfs_entries[] = {
84752 + &dev_attr_charger_type.attr,
84753 + &dev_attr_force_usb_limit_dangerous.attr,
84754 + &dev_attr_charger_adc.attr,
84755 + &dev_attr_dump_regs.attr,
84756 + NULL, /* going to add things at this point! */
84757 + NULL,
84758 + NULL,
84759 + NULL,
84760 + NULL,
84761 + NULL,
84762 + NULL,
84763 +};
84764 +
84765 +static struct attribute_group pcf_attr_group = {
84766 + .name = NULL, /* put in device directory */
84767 + .attrs = pcf_sysfs_entries,
84768 +};
84769 +
84770 +static void populate_sysfs_group(struct pcf50633_data *pcf)
84771 +{
84772 + int i = 0;
84773 + struct attribute **attr;
84774 +
84775 + for (attr = pcf_sysfs_entries; *attr; attr++)
84776 + i++;
84777 +
84778 + if (pcf->pdata->used_features & PCF50633_FEAT_MBC) {
84779 + pcf_sysfs_entries[i++] = &dev_attr_chgstate.attr;
84780 + pcf_sysfs_entries[i++] = &dev_attr_chgmode.attr;
84781 + pcf_sysfs_entries[i++] = &dev_attr_usb_curlim.attr;
84782 + }
84783 +
84784 + if (pcf->pdata->used_features & PCF50633_FEAT_CHGCUR)
84785 + pcf_sysfs_entries[i++] = &dev_attr_chgcur.attr;
84786 +
84787 + if (pcf->pdata->used_features & PCF50633_FEAT_BATVOLT)
84788 + pcf_sysfs_entries[i++] = &dev_attr_battvolt.attr;
84789 +
84790 + if (pcf->pdata->used_features & PCF50633_FEAT_BATTEMP)
84791 + pcf_sysfs_entries[i++] = &dev_attr_battemp.attr;
84792 +
84793 +}
84794 +
84795 +static struct platform_device pcf50633_rtc_pdev = {
84796 + .name = "pcf50633-rtc",
84797 + .id = -1,
84798 +};
84799 +
84800 +static int pcf50633_probe(struct i2c_client *client, const struct i2c_device_id *ids)
84801 +{
84802 + struct pcf50633_data *pcf;
84803 + struct pcf50633_platform_data *pdata;
84804 + int err = 0;
84805 + int irq;
84806 + int i;
84807 +
84808 + DEBUGP("entering probe\n");
84809 +
84810 + pdata = client->dev.platform_data;
84811 +
84812 + pcf = kzalloc(sizeof(*pcf), GFP_KERNEL);
84813 + if (!pcf)
84814 + return -ENOMEM;
84815 +
84816 + i2c_set_clientdata(client, pcf);
84817 + irq = client->irq;
84818 + mutex_init(&pcf->lock);
84819 + mutex_init(&pcf->working_lock);
84820 + mutex_init(&pcf->working_lock_nobat);
84821 + mutex_init(&pcf->working_lock_usb_curlimit);
84822 + INIT_WORK(&pcf->work, pcf50633_work);
84823 + INIT_WORK(&pcf->work_nobat, pcf50633_work_nobat);
84824 + INIT_WORK(&pcf->work_usb_curlimit, pcf50633_work_usbcurlim);
84825 +
84826 + pcf->client = client;
84827 + pcf->irq = irq;
84828 + pcf->working = 0;
84829 + pcf->suppress_onkey_events = 0;
84830 + pcf->onkey_seconds = -1;
84831 + pcf->pdata = pdata;
84832 +
84833 + /* FIXME: now we try to detect the chip */
84834 +
84835 + populate_sysfs_group(pcf);
84836 +
84837 + err = sysfs_create_group(&client->dev.kobj, &pcf_attr_group);
84838 + if (err) {
84839 + dev_err(&client->dev, "error creating sysfs group\n");
84840 + goto exit_free;
84841 + }
84842 +
84843 + /* create virtual charger 'device' */
84844 +
84845 + /* register power off handler with core power management */
84846 + /* FIXME : pm_power_off = &pcf50633_go_standby; */
84847 +
84848 + pcf->input_dev = input_allocate_device();
84849 + if (!pcf->input_dev)
84850 + goto exit_sysfs;
84851 +
84852 + pcf->input_dev->name = "GTA02 PMU events";
84853 + pcf->input_dev->phys = "FIXME";
84854 + pcf->input_dev->id.bustype = BUS_I2C;
84855 +
84856 + pcf->input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
84857 + set_bit(KEY_POWER, pcf->input_dev->keybit);
84858 + set_bit(KEY_POWER2, pcf->input_dev->keybit);
84859 + set_bit(KEY_BATTERY, pcf->input_dev->keybit);
84860 +
84861 + err = input_register_device(pcf->input_dev);
84862 + if (err)
84863 + goto exit_sysfs;
84864 +
84865 + /* configure interrupt mask */
84866 +
84867 + /* we want SECOND to kick for the coldplug initialisation */
84868 + pcf50633_reg_write(pcf, PCF50633_REG_INT1M, 0x00);
84869 +
84870 + pcf50633_reg_write(pcf, PCF50633_REG_INT2M, 0x00);
84871 + pcf50633_reg_write(pcf, PCF50633_REG_INT3M, 0x00);
84872 + pcf50633_reg_write(pcf, PCF50633_REG_INT4M, 0x00);
84873 + pcf50633_reg_write(pcf, PCF50633_REG_INT5M, 0x00);
84874 +
84875 + /* force the backlight up, Qi does not do this for us */
84876 +
84877 + /* pcf50633 manual p60
84878 + * "led_out should never be set to 000000, as this would result
84879 + * in a deadlock making it impossible to program another value.
84880 + * If led_out should be inadvertently set to 000000, the
84881 + * LEDOUT register can be reset by disabling and enabling the
84882 + * LED converter via control bit led_on in the LEDENA register"
84883 + */
84884 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0x00);
84885 + pcf50633_reg_write(pcf, PCF50633_REG_LEDDIM, 0x01);
84886 + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0x01);
84887 + pcf50633_reg_write(pcf, PCF50633_REG_LEDOUT, 0x3f);
84888 +
84889 + err = request_irq(irq, pcf50633_irq, IRQF_TRIGGER_FALLING,
84890 + "pcf50633", pcf);
84891 + if (err < 0)
84892 + goto exit_input;
84893 +
84894 + if (enable_irq_wake(irq) < 0)
84895 + dev_err(&client->dev, "IRQ %u cannot be enabled as wake-up"
84896 + "source in this hardware revision!\n", irq);
84897 +
84898 + if (pcf->pdata->used_features & PCF50633_FEAT_RTC) {
84899 + pcf50633_rtc_pdev.dev.platform_data = pcf;
84900 +
84901 + err = platform_device_register(&pcf50633_rtc_pdev);
84902 + if (err)
84903 + goto exit_irq;
84904 + }
84905 +
84906 + if (pcf->pdata->flag_use_apm_emulation)
84907 + apm_get_power_status = NULL;
84908 +
84909 + pdata->pcf = pcf;
84910 +
84911 + /* Create platform regulator devices from the platform data */
84912 + for (i = 0; i < __NUM_PCF50633_REGULATORS; i++) {
84913 + struct platform_device *pdev;
84914 +
84915 + pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
84916 + /* FIXME : Handle failure */
84917 +
84918 + pdev->name = "pcf50633-regltr";
84919 + pdev->id = i;
84920 + pdev->dev.parent = &client->dev;
84921 + pdev->dev.platform_data = &pdata->reg_init_data[i];
84922 + pdev->dev.driver_data = pcf;
84923 + pcf->regulator_pdev[i] = pdev;
84924 +
84925 + platform_device_register(pdev);
84926 + }
84927 +
84928 + pcf->probe_completed = 1;
84929 +
84930 + /* if platform was interested, give him a chance to register
84931 + * platform devices that switch power with us as the parent
84932 + * at registration time -- ensures suspend / resume ordering
84933 + */
84934 + if (pcf->pdata->attach_child_devices)
84935 + (pcf->pdata->attach_child_devices)(&client->dev);
84936 +
84937 + dev_info(&client->dev, "probe completed\n");
84938 +
84939 + return 0;
84940 +exit_irq:
84941 + free_irq(pcf->irq, pcf);
84942 +exit_input:
84943 + input_unregister_device(pcf->input_dev);
84944 +exit_sysfs:
84945 + pm_power_off = NULL;
84946 + sysfs_remove_group(&client->dev.kobj, &pcf_attr_group);
84947 +exit_free:
84948 + kfree(pcf);
84949 + return err;
84950 +}
84951 +
84952 +static int pcf50633_remove(struct i2c_client *client)
84953 +{
84954 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
84955 +
84956 + DEBUGP("entering\n");
84957 +
84958 + apm_get_power_status = NULL;
84959 +
84960 + free_irq(pcf->irq, pcf);
84961 +
84962 + input_unregister_device(pcf->input_dev);
84963 +
84964 + if (pcf->pdata->used_features & PCF50633_FEAT_RTC)
84965 + rtc_device_unregister(pcf->rtc);
84966 +
84967 + sysfs_remove_group(&client->dev.kobj, &pcf_attr_group);
84968 +
84969 + pm_power_off = NULL;
84970 +
84971 + kfree(pcf);
84972 +
84973 + return 0;
84974 +}
84975 +
84976 +/* you're going to need >300 bytes in buf */
84977 +
84978 +int pcf50633_report_resumers(struct pcf50633_data *pcf, char *buf)
84979 +{
84980 + static char *int_names[] = {
84981 + "adpins",
84982 + "adprem",
84983 + "usbins",
84984 + "usbrem",
84985 + NULL,
84986 + NULL,
84987 + "rtcalarm",
84988 + "second",
84989 +
84990 + "onkeyr",
84991 + "onkeyf",
84992 + "exton1r",
84993 + "exton1f",
84994 + "exton2r",
84995 + "exton2f",
84996 + "exton3r",
84997 + "exton3f",
84998 +
84999 + "batfull",
85000 + "chghalt",
85001 + "thlimon",
85002 + "thlimoff",
85003 + "usblimon",
85004 + "usblimoff",
85005 + "adcrdy",
85006 + "onkey1s",
85007 +
85008 + "lowsys",
85009 + "lowbat",
85010 + "hightmp",
85011 + "autopwrfail",
85012 + "dwn1pwrfail",
85013 + "dwn2pwrfail",
85014 + "ledpwrfail",
85015 + "ledovp",
85016 +
85017 + "ldo1pwrfail",
85018 + "ldo2pwrfail",
85019 + "ldo3pwrfail",
85020 + "ldo4pwrfail",
85021 + "ldo5pwrfail",
85022 + "ldo6pwrfail",
85023 + "hcidopwrfail",
85024 + "hcidoovl"
85025 + };
85026 + char *end = buf;
85027 + int n;
85028 +
85029 + for (n = 0; n < ARRAY_SIZE(int_names); n++)
85030 + if (int_names[n]) {
85031 + if (pcf->pcfirq_resume[n >> 3] & (1 >> (n & 7)))
85032 + end += sprintf(end, " * %s\n", int_names[n]);
85033 + else
85034 + end += sprintf(end, " %s\n", int_names[n]);
85035 + }
85036 +
85037 + return end - buf;
85038 +}
85039 +
85040 +
85041 +#ifdef CONFIG_PM
85042 +
85043 +static int pcf50633_suspend(struct device *dev, pm_message_t state)
85044 +{
85045 + struct i2c_client *client = to_i2c_client(dev);
85046 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
85047 + int i;
85048 + int ret;
85049 + u_int8_t res[5];
85050 +
85051 + dev_err(dev, "pcf50633_suspend\n");
85052 +
85053 + /* we suspend once (!) as late as possible in the suspend sequencing */
85054 +
85055 + if ((state.event != PM_EVENT_SUSPEND) ||
85056 + (pcf->suspend_state != PCF50633_SS_RUNNING))
85057 + return -EBUSY;
85058 +
85059 + /* The general idea is to power down all unused power supplies,
85060 + * and then mask all PCF50633 interrupt sources but EXTONR, ONKEYF
85061 + * and ALARM */
85062 +
85063 + mutex_lock(&pcf->lock);
85064 +
85065 + pcf->suspend_state = PCF50633_SS_STARTING_SUSPEND;
85066 +
85067 + /* we are not going to service any further interrupts until we
85068 + * resume. If the IRQ workqueue is still pending in the background,
85069 + * it will bail when it sees we set suspend state above
85070 + */
85071 +
85072 + disable_irq(pcf->irq);
85073 +
85074 + /* set interrupt masks so only those sources we want to wake
85075 + * us are able to
85076 + */
85077 + for (i = 0; i < 5; i++)
85078 + res[i] = ~pcf->pdata->resumers[i];
85079 +
85080 + ret = pcf50633_write(pcf, PCF50633_REG_INT1M, 5, &res[0]);
85081 + if (ret)
85082 + dev_err(dev, "Failed to set wake masks :-( %d\n", ret);
85083 +
85084 + pcf->suspend_state = PCF50633_SS_COMPLETED_SUSPEND;
85085 +
85086 + mutex_unlock(&pcf->lock);
85087 +
85088 + return 0;
85089 +}
85090 +
85091 +
85092 +int pcf50633_ready(struct pcf50633_data *pcf)
85093 +{
85094 + if (!pcf)
85095 + return -EACCES;
85096 +
85097 + /* this was seen during boot with Qi, mmc_rescan racing us */
85098 + if (!pcf->probe_completed)
85099 + return -EACCES;
85100 +
85101 + if ((pcf->suspend_state != PCF50633_SS_RUNNING) &&
85102 + (pcf->suspend_state < PCF50633_SS_COMPLETED_RESUME))
85103 + return -EBUSY;
85104 +
85105 + return 0;
85106 +}
85107 +EXPORT_SYMBOL_GPL(pcf50633_ready);
85108 +
85109 +int pcf50633_wait_for_ready(struct pcf50633_data *pcf, int timeout_ms,
85110 + char *name)
85111 +{
85112 + /* so we always go once */
85113 + timeout_ms += 5;
85114 +
85115 + while ((timeout_ms >= 5) && (pcf50633_ready(pcf))) {
85116 + timeout_ms -= 5; /* well, it isn't very accurate, but OK */
85117 + msleep(5);
85118 + }
85119 +
85120 + if (timeout_ms < 5) {
85121 + printk(KERN_ERR"pcf50633_wait_for_ready: "
85122 + "%s BAILING on timeout\n", name);
85123 + return -EBUSY;
85124 + }
85125 +
85126 + return 0;
85127 +}
85128 +EXPORT_SYMBOL_GPL(pcf50633_wait_for_ready);
85129 +
85130 +static int pcf50633_resume(struct device *dev)
85131 +{
85132 + struct i2c_client *client = to_i2c_client(dev);
85133 + struct pcf50633_data *pcf = i2c_get_clientdata(client);
85134 + int ret;
85135 + u8 res[5];
85136 +
85137 + dev_dbg(dev, "pcf50633_resume suspended on entry = %d\n",
85138 + (int)pcf->suspend_state);
85139 + mutex_lock(&pcf->lock);
85140 +
85141 + pcf->suspend_state = PCF50633_SS_STARTING_RESUME;
85142 +
85143 + memset(res, 0, sizeof(res));
85144 + /* not interested in second on resume */
85145 + res[0] = PCF50633_INT1_SECOND;
85146 + ret = pcf50633_write(pcf, PCF50633_REG_INT1M, 5, &res[0]);
85147 + if (ret)
85148 + dev_err(dev, "Failed to set int masks :-( %d\n", ret);
85149 +
85150 + pcf->suspend_state = PCF50633_SS_COMPLETED_RESUME;
85151 +
85152 + enable_irq(pcf->irq);
85153 +
85154 + mutex_unlock(&pcf->lock);
85155 +
85156 + /* gratuitous call to PCF work function, in the case that the PCF
85157 + * interrupt edge was missed during resume, this forces the pending
85158 + * register clear and lifts the interrupt back high again. In the
85159 + * case nothing is waiting for service, no harm done.
85160 + */
85161 +
85162 + get_device(&pcf->client->dev);
85163 + pcf50633_work(&pcf->work);
85164 +
85165 + return 0;
85166 +}
85167 +#else
85168 +#define pcf50633_suspend NULL
85169 +#define pcf50633_resume NULL
85170 +#endif
85171 +
85172 +static struct i2c_device_id pcf50633_id_table[] = {
85173 + {"pcf50633", 0x73},
85174 +};
85175 +
85176 +static struct i2c_driver pcf50633_driver = {
85177 + .driver = {
85178 + .name = "pcf50633",
85179 + .suspend= pcf50633_suspend,
85180 + .resume = pcf50633_resume,
85181 + },
85182 + .id_table = pcf50633_id_table,
85183 + .probe = pcf50633_probe,
85184 + .remove = pcf50633_remove,
85185 +};
85186 +
85187 +static int __init pcf50633_init(void)
85188 +{
85189 + return i2c_add_driver(&pcf50633_driver);
85190 +}
85191 +
85192 +static void pcf50633_exit(void)
85193 +{
85194 + i2c_del_driver(&pcf50633_driver);
85195 +}
85196 +
85197 +MODULE_DESCRIPTION("I2C chip driver for NXP PCF50633 power management unit");
85198 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
85199 +MODULE_LICENSE("GPL");
85200 +
85201 +module_init(pcf50633_init);
85202 +module_exit(pcf50633_exit);
85203 Index: linux-2.6.28/drivers/i2c/i2c-core.c
85204 ===================================================================
85205 --- linux-2.6.28.orig/drivers/i2c/i2c-core.c 2008-12-25 00:26:37.000000000 +0100
85206 +++ linux-2.6.28/drivers/i2c/i2c-core.c 2009-01-02 00:01:56.000000000 +0100
85207 @@ -1,4 +1,3 @@
85208 -/* i2c-core.c - a device driver for the iic-bus interface */
85209 /* ------------------------------------------------------------------------- */
85210 /* Copyright (C) 1995-99 Simon G. Vogl
85211
85212 @@ -158,10 +157,16 @@ static int i2c_device_suspend(struct dev
85213
85214 if (!dev->driver)
85215 return 0;
85216 +#if 0
85217 driver = to_i2c_driver(dev->driver);
85218 if (!driver->suspend)
85219 return 0;
85220 return driver->suspend(to_i2c_client(dev), mesg);
85221 +#else
85222 + if (!dev->driver->suspend)
85223 + return 0;
85224 + return dev->driver->suspend(dev, mesg);
85225 +#endif
85226 }
85227
85228 static int i2c_device_resume(struct device * dev)
85229 @@ -170,10 +175,16 @@ static int i2c_device_resume(struct devi
85230
85231 if (!dev->driver)
85232 return 0;
85233 +#if 0
85234 driver = to_i2c_driver(dev->driver);
85235 if (!driver->resume)
85236 return 0;
85237 return driver->resume(to_i2c_client(dev));
85238 +#else
85239 + if (!dev->driver->resume)
85240 + return 0;
85241 + return dev->driver->resume(dev);
85242 +#endif
85243 }
85244
85245 static void i2c_client_release(struct device *dev)
85246 @@ -1129,11 +1140,11 @@ static int i2c_probe_address(struct i2c_
85247 int err;
85248
85249 /* Make sure the address is valid */
85250 - if (addr < 0x03 || addr > 0x77) {
85251 + /*if (addr < 0x03 || addr > 0x77) {
85252 dev_warn(&adapter->dev, "Invalid probe address 0x%02x\n",
85253 addr);
85254 return -EINVAL;
85255 - }
85256 + }*/
85257
85258 /* Skip if already in use */
85259 if (i2c_check_addr(adapter, addr))
85260 Index: linux-2.6.28/drivers/input/keyboard/gpio_keys.c
85261 ===================================================================
85262 --- linux-2.6.28.orig/drivers/input/keyboard/gpio_keys.c 2008-12-25 00:26:37.000000000 +0100
85263 +++ linux-2.6.28/drivers/input/keyboard/gpio_keys.c 2009-01-02 00:01:56.000000000 +0100
85264 @@ -23,7 +23,7 @@
85265 #include <linux/input.h>
85266 #include <linux/gpio_keys.h>
85267
85268 -#include <asm/gpio.h>
85269 +#include <mach/gpio.h>
85270
85271 struct gpio_button_data {
85272 struct gpio_keys_button *button;
85273 Index: linux-2.6.28/drivers/input/keyboard/Kconfig
85274 ===================================================================
85275 --- linux-2.6.28.orig/drivers/input/keyboard/Kconfig 2008-12-25 00:26:37.000000000 +0100
85276 +++ linux-2.6.28/drivers/input/keyboard/Kconfig 2009-01-02 00:01:56.000000000 +0100
85277 @@ -323,4 +323,21 @@ config KEYBOARD_SH_KEYSC
85278
85279 To compile this driver as a module, choose M here: the
85280 module will be called sh_keysc.
85281 +config KEYBOARD_NEO1973
85282 + tristate "FIC Neo1973 buttons"
85283 + depends on MACH_NEO1973
85284 + default y
85285 + help
85286 + Say Y here to enable the buttons on the FIC Neo1973
85287 + GSM phone.
85288 +
85289 + To compile this driver as a module, choose M here: the
85290 + module will be called neo1973kbd.
85291 +
85292 +config KEYBOARD_QT2410
85293 + tristate "QT2410 buttons"
85294 + depends on MACH_QT2410
85295 + default y
85296 +
85297 +
85298 endif
85299 Index: linux-2.6.28/drivers/input/keyboard/Makefile
85300 ===================================================================
85301 --- linux-2.6.28.orig/drivers/input/keyboard/Makefile 2008-12-25 00:26:37.000000000 +0100
85302 +++ linux-2.6.28/drivers/input/keyboard/Makefile 2009-01-02 00:01:56.000000000 +0100
85303 @@ -14,6 +14,8 @@ obj-$(CONFIG_KEYBOARD_LOCOMO) += locomo
85304 obj-$(CONFIG_KEYBOARD_NEWTON) += newtonkbd.o
85305 obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
85306 obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o
85307 +obj-$(CONFIG_KEYBOARD_NEO1973) += neo1973kbd.o
85308 +obj-$(CONFIG_KEYBOARD_QT2410) += qt2410kbd.o
85309 obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
85310 obj-$(CONFIG_KEYBOARD_TOSA) += tosakbd.o
85311 obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
85312 Index: linux-2.6.28/drivers/input/keyboard/neo1973kbd.c
85313 ===================================================================
85314 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
85315 +++ linux-2.6.28/drivers/input/keyboard/neo1973kbd.c 2009-01-02 00:01:56.000000000 +0100
85316 @@ -0,0 +1,465 @@
85317 +/*
85318 + * Keyboard driver for FIC Neo1973 GSM phone
85319 + *
85320 + * (C) 2006-2007 by Openmoko, Inc.
85321 + * Author: Harald Welte <laforge@openmoko.org>
85322 + * All rights reserved.
85323 + *
85324 + * inspired by corkgbd.c by Richard Purdie
85325 + *
85326 + * This program is free software; you can redistribute it and/or modify
85327 + * it under the terms of the GNU General Public License version 2 as
85328 + * published by the Free Software Foundation.
85329 + *
85330 + */
85331 +
85332 +#include <linux/delay.h>
85333 +#include <linux/platform_device.h>
85334 +#include <linux/init.h>
85335 +#include <linux/input.h>
85336 +#include <linux/interrupt.h>
85337 +#include <linux/jiffies.h>
85338 +#include <linux/module.h>
85339 +#include <linux/slab.h>
85340 +#include <linux/workqueue.h>
85341 +
85342 +#include <mach/gpio.h>
85343 +#include <asm/mach-types.h>
85344 +
85345 +extern int global_inside_suspend;
85346 +
85347 +struct neo1973kbd {
85348 + struct platform_device *pdev;
85349 + struct input_dev *input;
85350 + struct device *cdev;
85351 + struct work_struct work;
85352 + int aux_state;
85353 + int work_in_progress;
85354 + int hp_irq_count_in_work;
85355 + int hp_irq_count;
85356 + int jack_irq;
85357 +};
85358 +
85359 +static struct class *neo1973kbd_switch_class;
85360 +
85361 +enum keys {
85362 + NEO1973_KEY_AUX, /* GTA01 / 02 only */
85363 + NEO1973_KEY_HOLD,
85364 + NEO1973_KEY_JACK,
85365 + NEO1973_KEY_PLUS, /* GTA03 only */
85366 + NEO1973_KEY_MINUS, /* GTA03 only */
85367 +};
85368 +
85369 +struct neo1973kbd_key {
85370 + const char * name;
85371 + irqreturn_t (*isr)(int irq, void *dev_id);
85372 + int irq;
85373 + int input_key;
85374 +};
85375 +
85376 +static irqreturn_t neo1973kbd_aux_irq(int irq, void *dev_id);
85377 +static irqreturn_t neo1973kbd_headphone_irq(int irq, void *dev_id);
85378 +static irqreturn_t neo1973kbd_default_key_irq(int irq, void *dev_id);
85379 +
85380 +
85381 +static struct neo1973kbd_key keys[] = {
85382 + [NEO1973_KEY_AUX] = {
85383 + .name = "Neo1973 AUX button",
85384 + .isr = neo1973kbd_aux_irq,
85385 + .input_key = KEY_PHONE,
85386 + },
85387 + [NEO1973_KEY_HOLD] = {
85388 + .name = "Neo1973 HOLD button",
85389 + .isr = neo1973kbd_default_key_irq,
85390 + .input_key = KEY_PAUSE,
85391 + },
85392 + [NEO1973_KEY_JACK] = {
85393 + .name = "Neo1973 Headphone jack",
85394 + .isr = neo1973kbd_headphone_irq,
85395 + },
85396 + [NEO1973_KEY_PLUS] = {
85397 + .name = "GTA03 PLUS button",
85398 + .isr = neo1973kbd_default_key_irq,
85399 + .input_key = KEY_KPPLUS,
85400 + },
85401 + [NEO1973_KEY_MINUS] = {
85402 + .name = "GTA03 MINUS button",
85403 + .isr = neo1973kbd_default_key_irq,
85404 + .input_key = KEY_KPMINUS,
85405 + },
85406 +};
85407 +
85408 +/* This timer section filters AUX button IRQ bouncing */
85409 +
85410 +static void aux_key_timer_f(unsigned long data);
85411 +
85412 +static struct timer_list aux_key_timer =
85413 + TIMER_INITIALIZER(aux_key_timer_f, 0, 0);
85414 +
85415 +#define AUX_TIMER_TIMEOUT (HZ >> 7)
85416 +#define AUX_TIMER_ALLOWED_NOOP 2
85417 +#define AUX_TIMER_CONSECUTIVE_EVENTS 5
85418 +
85419 +struct neo1973kbd *timer_kbd;
85420 +
85421 +static void aux_key_timer_f(unsigned long data)
85422 +{
85423 + static int noop_counter;
85424 + static int last_key = -1;
85425 + static int last_count;
85426 + int key_pressed;
85427 +
85428 + key_pressed =
85429 + !gpio_get_value(timer_kbd->pdev->resource[NEO1973_KEY_AUX].start);
85430 + if (machine_is_neo1973_gta02())
85431 + key_pressed = !key_pressed;
85432 +
85433 + if (likely(key_pressed == last_key))
85434 + last_count++;
85435 + else {
85436 + last_count = 1;
85437 + last_key = key_pressed;
85438 + }
85439 +
85440 + if (unlikely(last_count >= AUX_TIMER_CONSECUTIVE_EVENTS)) {
85441 + if (timer_kbd->aux_state != last_key) {
85442 + input_report_key(timer_kbd->input, KEY_PHONE, last_key);
85443 + input_sync(timer_kbd->input);
85444 +
85445 + timer_kbd->aux_state = last_key;
85446 + noop_counter = 0;
85447 + }
85448 + last_count = 0;
85449 + if (unlikely(++noop_counter > AUX_TIMER_ALLOWED_NOOP)) {
85450 + noop_counter = 0;
85451 + return;
85452 + }
85453 + }
85454 +
85455 + mod_timer(&aux_key_timer, jiffies + AUX_TIMER_TIMEOUT);
85456 +}
85457 +
85458 +static irqreturn_t neo1973kbd_aux_irq(int irq, void *dev)
85459 +{
85460 + int *p = NULL;
85461 +
85462 + /* if you stall inside resume then AUX will force a panic,
85463 + which in turn forces a dump of the pending syslog */
85464 +
85465 + if (global_inside_suspend)
85466 + printk(KERN_ERR "death %d\n", *p);
85467 +
85468 + mod_timer(&aux_key_timer, jiffies + AUX_TIMER_TIMEOUT);
85469 +
85470 + return IRQ_HANDLED;
85471 +}
85472 +
85473 +static irqreturn_t neo1973kbd_default_key_irq(int irq, void *dev_id)
85474 +{
85475 + struct neo1973kbd *kbd = dev_id;
85476 + int n;
85477 +
85478 + for (n = 0; n < ARRAY_SIZE(keys); n++) {
85479 +
85480 + if (irq != keys[n].irq)
85481 + continue;
85482 +
85483 + input_report_key(kbd->input, keys[n].input_key,
85484 + gpio_get_value(kbd->pdev->resource[n].start));
85485 + input_sync(kbd->input);
85486 + }
85487 +
85488 + return IRQ_HANDLED;
85489 +}
85490 +
85491 +
85492 +static const char *event_array_jack[2][4] = {
85493 + [0] = {
85494 + "SWITCH_NAME=headset",
85495 + "SWITCH_STATE=0",
85496 + "EVENT=remove",
85497 + NULL
85498 + },
85499 + [1] = {
85500 + "SWITCH_NAME=headset",
85501 + "SWITCH_STATE=1",
85502 + "EVENT=insert",
85503 + NULL
85504 + },
85505 +};
85506 +
85507 +static void neo1973kbd_jack_event(struct device *dev, int num)
85508 +{
85509 + kobject_uevent_env(&dev->kobj, KOBJ_CHANGE, (char **)event_array_jack[!!num]);
85510 +}
85511 +
85512 +
85513 +static void neo1973kbd_debounce_jack(struct work_struct *work)
85514 +{
85515 + struct neo1973kbd *kbd = container_of(work, struct neo1973kbd, work);
85516 + unsigned long flags;
85517 + int loop = 0;
85518 + int level;
85519 +
85520 + do {
85521 + /*
85522 + * we wait out any multiple interrupt
85523 + * stuttering in 100ms lumps
85524 + */
85525 + do {
85526 + kbd->hp_irq_count_in_work = kbd->hp_irq_count;
85527 + msleep(100);
85528 + } while (kbd->hp_irq_count != kbd->hp_irq_count_in_work);
85529 + /*
85530 + * no new interrupts on jack for 100ms...
85531 + * ok we will report it
85532 + */
85533 + level = gpio_get_value(kbd->pdev->resource[NEO1973_KEY_JACK].start);
85534 + input_report_switch(kbd->input, SW_HEADPHONE_INSERT, level);
85535 + input_sync(kbd->input);
85536 + neo1973kbd_jack_event(kbd->cdev, level);
85537 + /*
85538 + * we go around the outer loop again if we detect that more
85539 + * interrupts came while we are servicing here. But we have
85540 + * to sequence it carefully with interrupts off
85541 + */
85542 + local_save_flags(flags);
85543 + /* no interrupts during this work means we can exit the work */
85544 + loop = !!(kbd->hp_irq_count != kbd->hp_irq_count_in_work);
85545 + if (!loop)
85546 + kbd->work_in_progress = 0;
85547 + local_irq_restore(flags);
85548 + /*
85549 + * interrupt that comes here will either queue a new work action
85550 + * since work_in_progress is cleared now, or be dealt with
85551 + * when we loop.
85552 + */
85553 + } while (loop);
85554 +}
85555 +
85556 +
85557 +static irqreturn_t neo1973kbd_headphone_irq(int irq, void *dev_id)
85558 +{
85559 + struct neo1973kbd *neo1973kbd_data = dev_id;
85560 +
85561 + /*
85562 + * this interrupt is prone to bouncing and userspace doesn't like
85563 + * to have to deal with that kind of thing. So we do not accept
85564 + * that a jack interrupt is equal to a jack event. Instead we fire
85565 + * some work on the first interrupt, and it hangs about in 100ms units
85566 + * until no more interrupts come. Then it accepts the state it finds
85567 + * for jack insert and reports it once
85568 + */
85569 +
85570 + neo1973kbd_data->hp_irq_count++;
85571 + /*
85572 + * the first interrupt we see for a while, we fire the work item
85573 + * and record the interrupt count when we did that. If more interrupts
85574 + * come in the meanwhile, we can tell by the difference in that
85575 + * stored count and hp_irq_count which increments every interrupt
85576 + */
85577 + if (!neo1973kbd_data->work_in_progress) {
85578 + neo1973kbd_data->jack_irq = irq;
85579 + neo1973kbd_data->hp_irq_count_in_work =
85580 + neo1973kbd_data->hp_irq_count;
85581 + if (!schedule_work(&neo1973kbd_data->work))
85582 + printk(KERN_ERR
85583 + "Unable to schedule headphone debounce\n");
85584 + else
85585 + neo1973kbd_data->work_in_progress = 1;
85586 + }
85587 +
85588 + return IRQ_HANDLED;
85589 +}
85590 +
85591 +#ifdef CONFIG_PM
85592 +static int neo1973kbd_suspend(struct platform_device *dev, pm_message_t state)
85593 +{
85594 + return 0;
85595 +}
85596 +
85597 +static int neo1973kbd_resume(struct platform_device *dev)
85598 +{
85599 + return 0;
85600 +}
85601 +#else
85602 +#define neo1973kbd_suspend NULL
85603 +#define neo1973kbd_resume NULL
85604 +#endif
85605 +
85606 +static ssize_t neo1973kbd_switch_name_show(struct device *dev,
85607 + struct device_attribute *attr, char *buf)
85608 +{
85609 + return sprintf(buf, "%s\n", "neo1973 Headset Jack");
85610 +}
85611 +
85612 +static ssize_t neo1973kbd_switch_state_show(struct device *dev,
85613 + struct device_attribute *attr, char *buf)
85614 +{
85615 + struct neo1973kbd *kbd = dev_get_drvdata(dev);
85616 + return sprintf(buf, "%d\n",
85617 + gpio_get_value(kbd->pdev->resource[NEO1973_KEY_JACK].start));
85618 +}
85619 +
85620 +static DEVICE_ATTR(name, S_IRUGO , neo1973kbd_switch_name_show, NULL);
85621 +static DEVICE_ATTR(state, S_IRUGO , neo1973kbd_switch_state_show, NULL);
85622 +
85623 +static int neo1973kbd_probe(struct platform_device *pdev)
85624 +{
85625 + struct neo1973kbd *neo1973kbd;
85626 + struct input_dev *input_dev;
85627 + int rc;
85628 + int irq;
85629 + int n;
85630 +
85631 + neo1973kbd = kzalloc(sizeof(struct neo1973kbd), GFP_KERNEL);
85632 + input_dev = input_allocate_device();
85633 + if (!neo1973kbd || !input_dev) {
85634 + kfree(neo1973kbd);
85635 + input_free_device(input_dev);
85636 + return -ENOMEM;
85637 + }
85638 +
85639 + neo1973kbd->pdev = pdev;
85640 + timer_kbd = neo1973kbd;
85641 +
85642 + if (pdev->resource[0].flags != 0)
85643 + return -EINVAL;
85644 +
85645 + platform_set_drvdata(pdev, neo1973kbd);
85646 +
85647 + neo1973kbd->input = input_dev;
85648 +
85649 + INIT_WORK(&neo1973kbd->work, neo1973kbd_debounce_jack);
85650 +
85651 + input_dev->name = "Neo1973 Buttons";
85652 + input_dev->phys = "neo1973kbd/input0";
85653 + input_dev->id.bustype = BUS_HOST;
85654 + input_dev->id.vendor = 0x0001;
85655 + input_dev->id.product = 0x0001;
85656 + input_dev->id.version = 0x0100;
85657 + input_dev->dev.parent = &pdev->dev;
85658 +
85659 + input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_SW);
85660 + set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
85661 + set_bit(KEY_PHONE, input_dev->keybit);
85662 + set_bit(KEY_PAUSE, input_dev->keybit);
85663 +
85664 + rc = input_register_device(neo1973kbd->input);
85665 + if (rc)
85666 + goto out_register;
85667 +
85668 + neo1973kbd->cdev = device_create(neo1973kbd_switch_class,
85669 + &pdev->dev, 0, neo1973kbd, "headset");
85670 + if (unlikely(IS_ERR(neo1973kbd->cdev))) {
85671 + rc = PTR_ERR(neo1973kbd->cdev);
85672 + goto out_device_create;
85673 + }
85674 +
85675 + rc = device_create_file(neo1973kbd->cdev, &dev_attr_name);
85676 + if(rc)
85677 + goto out_device_create_file;
85678 +
85679 + rc = device_create_file(neo1973kbd->cdev, &dev_attr_state);
85680 + if(rc)
85681 + goto out_device_create_file;
85682 +
85683 + /* register GPIO IRQs */
85684 +
85685 + for(n = 0; n < ARRAY_SIZE(keys); n++) {
85686 +
85687 + if (!pdev->resource[0].start)
85688 + continue;
85689 +
85690 + irq = gpio_to_irq(pdev->resource[n].start);
85691 + if (irq < 0)
85692 + continue;
85693 +
85694 + if (request_irq(irq, keys[n].isr, IRQF_DISABLED |
85695 + IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
85696 + keys[n].name, neo1973kbd)) {
85697 + dev_err(&pdev->dev, "Can't get IRQ %u\n", irq);
85698 +
85699 + /* unwind any irq registrations and fail */
85700 +
85701 + while (n > 0) {
85702 + n--;
85703 + free_irq(gpio_to_irq(pdev->resource[n].start),
85704 + neo1973kbd);
85705 + }
85706 + goto out_device_create_file;
85707 + }
85708 +
85709 + keys[n].irq = irq;
85710 + }
85711 +
85712 + /*
85713 + * GTA01 revisions before Bv4 can't be resumed by the PMU, so we use
85714 + * resume by AUX.
85715 + */
85716 + if (machine_is_neo1973_gta01())
85717 + enable_irq_wake(keys[NEO1973_KEY_AUX].irq);
85718 +
85719 + enable_irq_wake(keys[NEO1973_KEY_JACK].irq);
85720 +
85721 + return 0;
85722 +
85723 +out_device_create_file:
85724 + device_unregister(neo1973kbd->cdev);
85725 +out_device_create:
85726 + input_unregister_device(neo1973kbd->input);
85727 +out_register:
85728 + input_free_device(neo1973kbd->input);
85729 + platform_set_drvdata(pdev, NULL);
85730 + kfree(neo1973kbd);
85731 +
85732 + return -ENODEV;
85733 +}
85734 +
85735 +static int neo1973kbd_remove(struct platform_device *pdev)
85736 +{
85737 + struct neo1973kbd *neo1973kbd = platform_get_drvdata(pdev);
85738 +
85739 + free_irq(gpio_to_irq(pdev->resource[2].start), neo1973kbd);
85740 + free_irq(gpio_to_irq(pdev->resource[1].start), neo1973kbd);
85741 + free_irq(gpio_to_irq(pdev->resource[0].start), neo1973kbd);
85742 +
85743 + device_unregister(neo1973kbd->cdev);
85744 + input_unregister_device(neo1973kbd->input);
85745 + input_free_device(neo1973kbd->input);
85746 + platform_set_drvdata(pdev, NULL);
85747 + kfree(neo1973kbd);
85748 +
85749 + return 0;
85750 +}
85751 +
85752 +static struct platform_driver neo1973kbd_driver = {
85753 + .probe = neo1973kbd_probe,
85754 + .remove = neo1973kbd_remove,
85755 + .suspend = neo1973kbd_suspend,
85756 + .resume = neo1973kbd_resume,
85757 + .driver = {
85758 + .name = "neo1973-button",
85759 + },
85760 +};
85761 +
85762 +static int __devinit neo1973kbd_init(void)
85763 +{
85764 + neo1973kbd_switch_class = class_create(THIS_MODULE, "switch");
85765 + if (IS_ERR(neo1973kbd_switch_class))
85766 + return PTR_ERR(neo1973kbd_switch_class);
85767 + return platform_driver_register(&neo1973kbd_driver);
85768 +}
85769 +
85770 +static void __exit neo1973kbd_exit(void)
85771 +{
85772 + platform_driver_unregister(&neo1973kbd_driver);
85773 + class_destroy(neo1973kbd_switch_class);
85774 +}
85775 +
85776 +module_init(neo1973kbd_init);
85777 +module_exit(neo1973kbd_exit);
85778 +
85779 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
85780 +MODULE_DESCRIPTION("FIC Neo1973 buttons input driver");
85781 +MODULE_LICENSE("GPL");
85782 Index: linux-2.6.28/drivers/input/keyboard/qt2410kbd.c
85783 ===================================================================
85784 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
85785 +++ linux-2.6.28/drivers/input/keyboard/qt2410kbd.c 2009-01-02 00:01:56.000000000 +0100
85786 @@ -0,0 +1,231 @@
85787 +/*
85788 + * Keyboard driver for Armzone QT2410
85789 + *
85790 + * (C) 2006 by Openmoko, Inc.
85791 + * Author: Harald Welte <laforge@openmoko.org>
85792 + * All rights reserved.
85793 + *
85794 + * This program is free software; you can redistribute it and/or modify
85795 + * it under the terms of the GNU General Public License version 2 as
85796 + * published by the Free Software Foundation.
85797 + *
85798 + */
85799 +
85800 +#include <linux/delay.h>
85801 +#include <linux/platform_device.h>
85802 +#include <linux/init.h>
85803 +#include <linux/input.h>
85804 +#include <linux/interrupt.h>
85805 +#include <linux/jiffies.h>
85806 +#include <linux/module.h>
85807 +#include <linux/slab.h>
85808 +
85809 +#include <mach/hardware.h>
85810 +#include <mach/gta01.h>
85811 +
85812 +struct gta01kbd {
85813 + struct input_dev *input;
85814 + unsigned int suspended;
85815 + unsigned long suspend_jiffies;
85816 +};
85817 +
85818 +static irqreturn_t gta01kbd_interrupt(int irq, void *dev_id)
85819 +{
85820 + struct gta01kbd *gta01kbd_data = dev_id;
85821 +
85822 + /* FIXME: use GPIO from platform_dev resources */
85823 + if (s3c2410_gpio_getpin(S3C2410_GPF0))
85824 + input_report_key(gta01kbd_data->input, KEY_PHONE, 1);
85825 + else
85826 + input_report_key(gta01kbd_data->input, KEY_PHONE, 0);
85827 +
85828 + input_sync(gta01kbd_data->input);
85829 +
85830 + return IRQ_HANDLED;
85831 +}
85832 +
85833 +
85834 +#ifdef CONFIG_PM
85835 +static int gta01kbd_suspend(struct platform_device *dev, pm_message_t state)
85836 +{
85837 + struct gta01kbd *gta01kbd = platform_get_drvdata(dev);
85838 +
85839 + gta01kbd->suspended = 1;
85840 +
85841 + return 0;
85842 +}
85843 +
85844 +static int gta01kbd_resume(struct platform_device *dev)
85845 +{
85846 + struct gta01kbd *gta01kbd = platform_get_drvdata(dev);
85847 +
85848 + gta01kbd->suspended = 0;
85849 +
85850 + return 0;
85851 +}
85852 +#else
85853 +#define gta01kbd_suspend NULL
85854 +#define gta01kbd_resume NULL
85855 +#endif
85856 +
85857 +static int gta01kbd_probe(struct platform_device *pdev)
85858 +{
85859 + struct gta01kbd *gta01kbd;
85860 + struct input_dev *input_dev;
85861 + int irq_911;
85862 + int rc = 0;
85863 +
85864 + gta01kbd = kzalloc(sizeof(struct gta01kbd), GFP_KERNEL);
85865 + if (!gta01kbd) {
85866 + rc = -ENOMEM;
85867 + goto bail;
85868 + }
85869 + input_dev = input_allocate_device();
85870 + if (!gta01kbd || !input_dev) {
85871 + rc = -ENOMEM;
85872 + goto bail_free;
85873 + }
85874 +
85875 + if (pdev->resource[0].flags != 0) {\
85876 + rc = -EINVAL;
85877 + goto bail_free_dev;
85878 + }
85879 +
85880 + irq_911 = s3c2410_gpio_getirq(pdev->resource[0].start);
85881 + if (irq_911 < 0) {
85882 + rc = -EINVAL;
85883 + goto bail_free_dev;
85884 + }
85885 +
85886 + platform_set_drvdata(pdev, gta01kbd);
85887 +
85888 + gta01kbd->input = input_dev;
85889 +
85890 +#if 0
85891 + spin_lock_init(&gta01kbd->lock);
85892 + /* Init Keyboard rescan timer */
85893 + init_timer(&corgikbd->timer);
85894 + corgikbd->timer.function = corgikbd_timer_callback;
85895 + corgikbd->timer.data = (unsigned long) corgikbd;
85896 +
85897 + /* Init Hinge Timer */
85898 + init_timer(&corgikbd->htimer);
85899 + corgikbd->htimer.function = corgikbd_hinge_timer;
85900 + corgikbd->htimer.data = (unsigned long) corgikbd;
85901 +
85902 + corgikbd->suspend_jiffies=jiffies;
85903 +
85904 + memcpy(corgikbd->keycode, corgikbd_keycode, sizeof(corgikbd->keycode));
85905 +#endif
85906 +
85907 + input_dev->name = "QT2410 Buttons";
85908 + input_dev->phys = "qt2410kbd/input0";
85909 + input_dev->id.bustype = BUS_HOST;
85910 + input_dev->id.vendor = 0x0001;
85911 + input_dev->id.product = 0x0001;
85912 + input_dev->id.version = 0x0100;
85913 +
85914 + input_dev->evbit[0] = BIT(EV_KEY);
85915 +#if 0
85916 + input_dev->keycode = gta01kbd->keycode;
85917 + input_dev->keycodesize = sizeof(unsigned char);
85918 + input_dev->keycodemax = ARRAY_SIZE(corgikbd_keycode);
85919 +
85920 + for (i = 0; i < ARRAY_SIZE(corgikbd_keycode); i++)
85921 + set_bit(corgikbd->keycode[i], input_dev->keybit);
85922 + clear_bit(0, input_dev->keybit);
85923 + set_bit(SW_LID, input_dev->swbit);
85924 + set_bit(SW_TABLET_MODE, input_dev->swbit);
85925 + set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
85926 +#endif
85927 +
85928 + rc = input_register_device(gta01kbd->input);
85929 + if (rc)
85930 + goto bail_free_dev;
85931 +
85932 + s3c2410_gpio_cfgpin(S3C2410_GPF0, S3C2410_GPF0_EINT0);
85933 + if (request_irq(irq_911, gta01kbd_interrupt,
85934 + IRQF_DISABLED | IRQF_TRIGGER_RISING |
85935 + IRQF_TRIGGER_FALLING, "qt2410kbd_eint0", gta01kbd))
85936 + printk(KERN_WARNING "gta01kbd: Can't get IRQ\n");
85937 + enable_irq_wake(irq_911);
85938 +
85939 + /* FIXME: headphone insert */
85940 +
85941 +#if 0
85942 + mod_timer(&corgikbd->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
85943 +
85944 + /* Setup sense interrupts - RisingEdge Detect, sense lines as inputs */
85945 + for (i = 0; i < CORGI_KEY_SENSE_NUM; i++) {
85946 + pxa_gpio_mode(CORGI_GPIO_KEY_SENSE(i) | GPIO_IN);
85947 + if (request_irq(CORGI_IRQ_GPIO_KEY_SENSE(i), corgikbd_interrupt,
85948 + SA_INTERRUPT | SA_TRIGGER_RISING,
85949 + "corgikbd", corgikbd))
85950 + printk(KERN_WARNING "corgikbd: Can't get IRQ: %d!\n", i);
85951 + }
85952 +
85953 + /* Set Strobe lines as outputs - set high */
85954 + for (i = 0; i < CORGI_KEY_STROBE_NUM; i++)
85955 + pxa_gpio_mode(CORGI_GPIO_KEY_STROBE(i) | GPIO_OUT | GPIO_DFLT_HIGH);
85956 +
85957 + /* Setup the headphone jack as an input */
85958 + pxa_gpio_mode(CORGI_GPIO_AK_INT | GPIO_IN);
85959 +#endif
85960 +
85961 + return 0;
85962 +
85963 +bail_free_dev:
85964 + input_free_device(input_dev);
85965 +bail_free:
85966 + kfree(gta01kbd);
85967 +bail:
85968 + return rc;
85969 +}
85970 +
85971 +static int gta01kbd_remove(struct platform_device *pdev)
85972 +{
85973 + struct gta01kbd *gta01kbd = platform_get_drvdata(pdev);
85974 +
85975 + free_irq(s3c2410_gpio_getirq(pdev->resource[0].start), gta01kbd);
85976 +#if 0
85977 + int i;
85978 +
85979 + for (i = 0; i < CORGI_KEY_SENSE_NUM; i++)
85980 + free_irq(CORGI_IRQ_GPIO_KEY_SENSE(i), corgikbd);
85981 +
85982 + del_timer_sync(&corgikbd->htimer);
85983 + del_timer_sync(&corgikbd->timer);
85984 +#endif
85985 + input_unregister_device(gta01kbd->input);
85986 +
85987 + kfree(gta01kbd);
85988 +
85989 + return 0;
85990 +}
85991 +
85992 +static struct platform_driver gta01kbd_driver = {
85993 + .probe = gta01kbd_probe,
85994 + .remove = gta01kbd_remove,
85995 + .suspend = gta01kbd_suspend,
85996 + .resume = gta01kbd_resume,
85997 + .driver = {
85998 + .name = "qt2410-button",
85999 + },
86000 +};
86001 +
86002 +static int __devinit gta01kbd_init(void)
86003 +{
86004 + return platform_driver_register(&gta01kbd_driver);
86005 +}
86006 +
86007 +static void __exit gta01kbd_exit(void)
86008 +{
86009 + platform_driver_unregister(&gta01kbd_driver);
86010 +}
86011 +
86012 +module_init(gta01kbd_init);
86013 +module_exit(gta01kbd_exit);
86014 +
86015 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
86016 +MODULE_DESCRIPTION("Armzone QT2410 Buttons Driver");
86017 +MODULE_LICENSE("GPL");
86018 Index: linux-2.6.28/drivers/input/misc/Kconfig
86019 ===================================================================
86020 --- linux-2.6.28.orig/drivers/input/misc/Kconfig 2009-01-02 00:00:02.000000000 +0100
86021 +++ linux-2.6.28/drivers/input/misc/Kconfig 2009-01-02 00:01:56.000000000 +0100
86022 @@ -236,4 +236,25 @@ config INPUT_GPIO_BUTTONS
86023 To compile this driver as a module, choose M here: the
86024 module will be called gpio-buttons.
86025
86026 +config INPUT_LIS302DL
86027 + tristate "STmicro LIS302DL 3-axis accelerometer"
86028 + depends on SPI_MASTER
86029 + help
86030 + SPI driver for the STmicro LIS302DL 3-axis accelerometer.
86031 +
86032 + The userspece interface is a 3-axis (X/Y/Z) relative movement
86033 + Linux input device, reporting REL_[XYZ] events.
86034 +
86035 +config INPUT_PCF50633_PMU
86036 + tristate "PCF50633 PMU events"
86037 + depends on MFD_PCF50633
86038 + help
86039 + Say Y to include support for input events on NXP PCF50633.
86040 +
86041 +config INPUT_PCF50606_PMU
86042 + tristate "PCF50606 PMU events"
86043 + depends on MFD_PCF50606
86044 + help
86045 + Say Y to include support for input events on NXP PCF50606.
86046 +
86047 endif
86048 Index: linux-2.6.28/drivers/input/misc/lis302dl.c
86049 ===================================================================
86050 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
86051 +++ linux-2.6.28/drivers/input/misc/lis302dl.c 2009-01-02 00:01:56.000000000 +0100
86052 @@ -0,0 +1,874 @@
86053 +/* Linux kernel driver for the ST LIS302D 3-axis accelerometer
86054 + *
86055 + * Copyright (C) 2007-2008 by Openmoko, Inc.
86056 + * Author: Harald Welte <laforge@openmoko.org>
86057 + * converted to private bitbang by:
86058 + * Andy Green <andy@openmoko.com>
86059 + * ability to set acceleration threshold added by:
86060 + * Simon Kagstrom <simon.kagstrom@gmail.com>
86061 + * All rights reserved.
86062 + *
86063 + * This program is free software; you can redistribute it and/or
86064 + * modify it under the terms of the GNU General Public License as
86065 + * published by the Free Software Foundation; either version 2 of
86066 + * the License, or (at your option) any later version.
86067 + *
86068 + * This program is distributed in the hope that it will be useful,
86069 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
86070 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
86071 + * GNU General Public License for more details.
86072 + *
86073 + * You should have received a copy of the GNU General Public License
86074 + * along with this program; if not, write to the Free Software
86075 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
86076 + * MA 02111-1307 USA
86077 + *
86078 + * TODO
86079 + * * statistics for overflow events
86080 + * * configuration interface (sysfs) for
86081 + * * enable/disable x/y/z axis data ready
86082 + * * enable/disable resume from freee fall / click
86083 + * * free fall / click parameters
86084 + * * high pass filter parameters
86085 + */
86086 +#include <linux/kernel.h>
86087 +#include <linux/types.h>
86088 +#include <linux/module.h>
86089 +#include <linux/device.h>
86090 +#include <linux/platform_device.h>
86091 +#include <linux/delay.h>
86092 +#include <linux/irq.h>
86093 +#include <linux/interrupt.h>
86094 +#include <linux/sysfs.h>
86095 +
86096 +#include <linux/lis302dl.h>
86097 +
86098 +/* Utility functions */
86099 +static u8 __reg_read(struct lis302dl_info *lis, u8 reg)
86100 +{
86101 + return (lis->pdata->lis302dl_bitbang_reg_read)(lis, reg);
86102 +}
86103 +
86104 +static void __reg_write(struct lis302dl_info *lis, u8 reg, u8 val)
86105 +{
86106 + (lis->pdata->lis302dl_bitbang_reg_write)(lis, reg, val);
86107 +}
86108 +
86109 +static void __reg_set_bit_mask(struct lis302dl_info *lis, u8 reg, u8 mask,
86110 + u8 val)
86111 +{
86112 + u_int8_t tmp;
86113 +
86114 + val &= mask;
86115 +
86116 + tmp = __reg_read(lis, reg);
86117 + tmp &= ~mask;
86118 + tmp |= val;
86119 + __reg_write(lis, reg, tmp);
86120 +}
86121 +
86122 +static int __ms_to_duration(struct lis302dl_info *lis, int ms)
86123 +{
86124 + /* If we have 400 ms sampling rate, the stepping is 2.5 ms,
86125 + * on 100 ms the stepping is 10ms */
86126 + if (lis->flags & LIS302DL_F_DR)
86127 + return min((ms * 10) / 25, 637);
86128 +
86129 + return min(ms / 10, 2550);
86130 +}
86131 +
86132 +static int __duration_to_ms(struct lis302dl_info *lis, int duration)
86133 +{
86134 + if (lis->flags & LIS302DL_F_DR)
86135 + return (duration * 25) / 10;
86136 +
86137 + return duration * 10;
86138 +}
86139 +
86140 +static u8 __mg_to_threshold(struct lis302dl_info *lis, int mg)
86141 +{
86142 + /* If FS is set each bit is 71mg, otherwise 18mg. The THS register
86143 + * has 7 bits for the threshold value */
86144 + if (lis->flags & LIS302DL_F_FS)
86145 + return min(mg / 71, 127);
86146 +
86147 + return min(mg / 18, 127);
86148 +}
86149 +
86150 +static int __threshold_to_mg(struct lis302dl_info *lis, u8 threshold)
86151 +{
86152 + if (lis->flags & LIS302DL_F_FS)
86153 + return threshold * 71;
86154 +
86155 + return threshold * 18;
86156 +}
86157 +
86158 +/* interrupt handling related */
86159 +
86160 +enum lis302dl_intmode {
86161 + LIS302DL_INTMODE_GND = 0x00,
86162 + LIS302DL_INTMODE_FF_WU_1 = 0x01,
86163 + LIS302DL_INTMODE_FF_WU_2 = 0x02,
86164 + LIS302DL_INTMODE_FF_WU_12 = 0x03,
86165 + LIS302DL_INTMODE_DATA_READY = 0x04,
86166 + LIS302DL_INTMODE_CLICK = 0x07,
86167 +};
86168 +
86169 +static void __lis302dl_int_mode(struct device *dev, int int_pin,
86170 + enum lis302dl_intmode mode)
86171 +{
86172 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86173 +
86174 + switch (int_pin) {
86175 + case 1:
86176 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL3, 0x07, mode);
86177 + break;
86178 + case 2:
86179 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL3, 0x38, mode << 3);
86180 + break;
86181 + default:
86182 + BUG();
86183 + }
86184 +}
86185 +
86186 +static void __enable_wakeup(struct lis302dl_info *lis)
86187 +{
86188 + __reg_write(lis, LIS302DL_REG_CTRL1, 0);
86189 +
86190 + /* First zero to get to a known state */
86191 + __reg_write(lis, LIS302DL_REG_FF_WU_CFG_1, LIS302DL_FFWUCFG_XHIE |
86192 + LIS302DL_FFWUCFG_YHIE | LIS302DL_FFWUCFG_ZHIE |
86193 + LIS302DL_FFWUCFG_LIR);
86194 + __reg_write(lis, LIS302DL_REG_FF_WU_THS_1,
86195 + __mg_to_threshold(lis, lis->wakeup.threshold));
86196 + __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1,
86197 + __ms_to_duration(lis, lis->wakeup.duration));
86198 +
86199 + /* Route the interrupt for wakeup */
86200 + __lis302dl_int_mode(lis->dev, 1,
86201 + LIS302DL_INTMODE_FF_WU_1);
86202 +
86203 + __reg_read(lis, LIS302DL_REG_HP_FILTER_RESET);
86204 + __reg_read(lis, LIS302DL_REG_OUT_X);
86205 + __reg_read(lis, LIS302DL_REG_OUT_Y);
86206 + __reg_read(lis, LIS302DL_REG_OUT_Z);
86207 + __reg_read(lis, LIS302DL_REG_STATUS);
86208 + __reg_read(lis, LIS302DL_REG_FF_WU_SRC_1);
86209 + __reg_read(lis, LIS302DL_REG_FF_WU_SRC_2);
86210 + __reg_write(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_PD | 7);
86211 +}
86212 +
86213 +static void __enable_data_collection(struct lis302dl_info *lis)
86214 +{
86215 + u_int8_t ctrl1 = LIS302DL_CTRL1_PD | LIS302DL_CTRL1_Xen |
86216 + LIS302DL_CTRL1_Yen | LIS302DL_CTRL1_Zen;
86217 +
86218 + /* make sure we're powered up and generate data ready */
86219 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, ctrl1, ctrl1);
86220 +
86221 + /* If the threshold is zero, let the device generated an interrupt
86222 + * on each datum */
86223 + if (lis->threshold == 0) {
86224 + __reg_write(lis, LIS302DL_REG_CTRL2, 0);
86225 + __lis302dl_int_mode(lis->dev, 1, LIS302DL_INTMODE_DATA_READY);
86226 + __lis302dl_int_mode(lis->dev, 2, LIS302DL_INTMODE_DATA_READY);
86227 + } else {
86228 + __reg_write(lis, LIS302DL_REG_CTRL2,
86229 + LIS302DL_CTRL2_HPFF1);
86230 + __reg_write(lis, LIS302DL_REG_FF_WU_THS_1,
86231 + __mg_to_threshold(lis, lis->threshold));
86232 + __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1,
86233 + __ms_to_duration(lis, lis->duration));
86234 +
86235 + /* Clear the HP filter "starting point" */
86236 + __reg_read(lis, LIS302DL_REG_HP_FILTER_RESET);
86237 + __reg_write(lis, LIS302DL_REG_FF_WU_CFG_1,
86238 + LIS302DL_FFWUCFG_XHIE | LIS302DL_FFWUCFG_YHIE |
86239 + LIS302DL_FFWUCFG_ZHIE | LIS302DL_FFWUCFG_LIR);
86240 + __lis302dl_int_mode(lis->dev, 1, LIS302DL_INTMODE_FF_WU_12);
86241 + __lis302dl_int_mode(lis->dev, 2, LIS302DL_INTMODE_FF_WU_12);
86242 + }
86243 +}
86244 +
86245 +#if 0
86246 +static void _report_btn_single(struct input_dev *inp, int btn)
86247 +{
86248 + input_report_key(inp, btn, 1);
86249 + input_sync(inp);
86250 + input_report_key(inp, btn, 0);
86251 +}
86252 +
86253 +static void _report_btn_double(struct input_dev *inp, int btn)
86254 +{
86255 + input_report_key(inp, btn, 1);
86256 + input_sync(inp);
86257 + input_report_key(inp, btn, 0);
86258 + input_sync(inp);
86259 + input_report_key(inp, btn, 1);
86260 + input_sync(inp);
86261 + input_report_key(inp, btn, 0);
86262 +}
86263 +#endif
86264 +
86265 +
86266 +static void lis302dl_bitbang_read_sample(struct lis302dl_info *lis)
86267 +{
86268 + u8 data = 0xc0 | LIS302DL_REG_OUT_X; /* read, autoincrement */
86269 + u8 read[5];
86270 + unsigned long flags;
86271 + int mg_per_sample;
86272 +
86273 + local_irq_save(flags);
86274 + mg_per_sample = __threshold_to_mg(lis, 1);
86275 +
86276 + (lis->pdata->lis302dl_bitbang)(lis, &data, 1, &read[0], 5);
86277 +
86278 + local_irq_restore(flags);
86279 +
86280 + input_report_rel(lis->input_dev, REL_X, mg_per_sample * (s8)read[0]);
86281 + input_report_rel(lis->input_dev, REL_Y, mg_per_sample * (s8)read[2]);
86282 + input_report_rel(lis->input_dev, REL_Z, mg_per_sample * (s8)read[4]);
86283 +
86284 + input_sync(lis->input_dev);
86285 +
86286 + /* Reset the HP filter */
86287 + __reg_read(lis, LIS302DL_REG_HP_FILTER_RESET);
86288 + __reg_read(lis, LIS302DL_REG_FF_WU_SRC_1);
86289 +}
86290 +
86291 +static irqreturn_t lis302dl_interrupt(int irq, void *_lis)
86292 +{
86293 + struct lis302dl_info *lis = _lis;
86294 +
86295 + lis302dl_bitbang_read_sample(lis);
86296 + return IRQ_HANDLED;
86297 +}
86298 +
86299 +/* sysfs */
86300 +
86301 +static ssize_t show_rate(struct device *dev, struct device_attribute *attr,
86302 + char *buf)
86303 +{
86304 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86305 + u8 ctrl1;
86306 + unsigned long flags;
86307 +
86308 + local_irq_save(flags);
86309 + ctrl1 = __reg_read(lis, LIS302DL_REG_CTRL1);
86310 + local_irq_restore(flags);
86311 +
86312 + return sprintf(buf, "%d\n", ctrl1 & LIS302DL_CTRL1_DR ? 400 : 100);
86313 +}
86314 +
86315 +static ssize_t set_rate(struct device *dev, struct device_attribute *attr,
86316 + const char *buf, size_t count)
86317 +{
86318 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86319 + unsigned long flags;
86320 +
86321 + local_irq_save(flags);
86322 +
86323 + if (!strcmp(buf, "400\n")) {
86324 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_DR,
86325 + LIS302DL_CTRL1_DR);
86326 + lis->flags |= LIS302DL_F_DR;
86327 + } else {
86328 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_DR,
86329 + 0);
86330 + lis->flags &= ~LIS302DL_F_DR;
86331 + }
86332 + local_irq_restore(flags);
86333 +
86334 + return count;
86335 +}
86336 +
86337 +static DEVICE_ATTR(sample_rate, S_IRUGO | S_IWUSR, show_rate, set_rate);
86338 +
86339 +static ssize_t show_scale(struct device *dev, struct device_attribute *attr,
86340 + char *buf)
86341 +{
86342 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86343 + u_int8_t ctrl1;
86344 + unsigned long flags;
86345 +
86346 + local_irq_save(flags);
86347 + ctrl1 = __reg_read(lis, LIS302DL_REG_CTRL1);
86348 + local_irq_restore(flags);
86349 +
86350 + return sprintf(buf, "%s\n", ctrl1 & LIS302DL_CTRL1_FS ? "9.2" : "2.3");
86351 +}
86352 +
86353 +static ssize_t set_scale(struct device *dev, struct device_attribute *attr,
86354 + const char *buf, size_t count)
86355 +{
86356 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86357 + unsigned long flags;
86358 +
86359 + local_irq_save(flags);
86360 +
86361 + if (!strcmp(buf, "9.2\n")) {
86362 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_FS,
86363 + LIS302DL_CTRL1_FS);
86364 + lis->flags |= LIS302DL_F_FS;
86365 + } else {
86366 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_FS,
86367 + 0);
86368 + lis->flags &= ~LIS302DL_F_FS;
86369 + }
86370 +
86371 + if (lis->flags & LIS302DL_F_INPUT_OPEN)
86372 + __enable_data_collection(lis);
86373 +
86374 + local_irq_restore(flags);
86375 +
86376 + return count;
86377 +}
86378 +
86379 +static DEVICE_ATTR(full_scale, S_IRUGO | S_IWUSR, show_scale, set_scale);
86380 +
86381 +static ssize_t show_threshold(struct device *dev, struct device_attribute *attr,
86382 + char *buf)
86383 +{
86384 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86385 +
86386 + /* Display the device view of the threshold setting */
86387 + return sprintf(buf, "%d\n", __threshold_to_mg(lis,
86388 + __mg_to_threshold(lis, lis->threshold)));
86389 +}
86390 +
86391 +static ssize_t set_threshold(struct device *dev, struct device_attribute *attr,
86392 + const char *buf, size_t count)
86393 +{
86394 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86395 + unsigned int val;
86396 +
86397 + if (sscanf(buf, "%u\n", &val) != 1)
86398 + return -EINVAL;
86399 + /* 8g is the maximum if FS is 1 */
86400 + if (val > 8000)
86401 + return -ERANGE;
86402 +
86403 + /* Set the threshold and write it out if the device is used */
86404 + lis->threshold = val;
86405 +
86406 + if (lis->flags & LIS302DL_F_INPUT_OPEN) {
86407 + unsigned long flags;
86408 +
86409 + local_irq_save(flags);
86410 + __enable_data_collection(lis);
86411 + local_irq_restore(flags);
86412 + }
86413 +
86414 + return count;
86415 +}
86416 +
86417 +static DEVICE_ATTR(threshold, S_IRUGO | S_IWUSR, show_threshold, set_threshold);
86418 +
86419 +static ssize_t show_duration(struct device *dev, struct device_attribute *attr,
86420 + char *buf)
86421 +{
86422 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86423 +
86424 + return sprintf(buf, "%d\n", __duration_to_ms(lis,
86425 + __ms_to_duration(lis, lis->duration)));
86426 +}
86427 +
86428 +static ssize_t set_duration(struct device *dev, struct device_attribute *attr,
86429 + const char *buf, size_t count)
86430 +{
86431 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86432 + unsigned int val;
86433 +
86434 + if (sscanf(buf, "%u\n", &val) != 1)
86435 + return -EINVAL;
86436 + if (val > 2550)
86437 + return -ERANGE;
86438 +
86439 + lis->duration = val;
86440 + if (lis->flags & LIS302DL_F_INPUT_OPEN)
86441 + __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1,
86442 + __ms_to_duration(lis, lis->duration));
86443 +
86444 + return count;
86445 +}
86446 +
86447 +static DEVICE_ATTR(duration, S_IRUGO | S_IWUSR, show_duration, set_duration);
86448 +
86449 +static ssize_t lis302dl_dump(struct device *dev, struct device_attribute *attr,
86450 + char *buf)
86451 +{
86452 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86453 + int n = 0;
86454 + u8 reg[0x40];
86455 + char *end = buf;
86456 + unsigned long flags;
86457 +
86458 + local_irq_save(flags);
86459 +
86460 + for (n = 0; n < sizeof(reg); n++)
86461 + reg[n] = __reg_read(lis, n);
86462 +
86463 + local_irq_restore(flags);
86464 +
86465 + for (n = 0; n < sizeof(reg); n += 16) {
86466 + hex_dump_to_buffer(reg + n, 16, 16, 1, end, 128, 0);
86467 + end += strlen(end);
86468 + *end++ = '\n';
86469 + *end++ = '\0';
86470 + }
86471 +
86472 + return end - buf;
86473 +}
86474 +static DEVICE_ATTR(dump, S_IRUGO, lis302dl_dump, NULL);
86475 +
86476 +/* Configure freefall/wakeup interrupts */
86477 +static ssize_t set_wakeup_threshold(struct device *dev,
86478 + struct device_attribute *attr, const char *buf, size_t count)
86479 +{
86480 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86481 + unsigned int threshold;
86482 +
86483 + if (sscanf(buf, "%u\n", &threshold) != 1)
86484 + return -EINVAL;
86485 +
86486 + if (threshold > 8000)
86487 + return -ERANGE;
86488 +
86489 + /* Zero turns the feature off */
86490 + if (threshold == 0) {
86491 + if (lis->flags & LIS302DL_F_IRQ_WAKE) {
86492 + disable_irq_wake(lis->pdata->interrupt);
86493 + lis->flags &= ~LIS302DL_F_IRQ_WAKE;
86494 + }
86495 +
86496 + return count;
86497 + }
86498 +
86499 + lis->wakeup.threshold = threshold;
86500 +
86501 + if (!(lis->flags & LIS302DL_F_IRQ_WAKE)) {
86502 + enable_irq_wake(lis->pdata->interrupt);
86503 + lis->flags |= LIS302DL_F_IRQ_WAKE;
86504 + }
86505 +
86506 + return count;
86507 +}
86508 +
86509 +static ssize_t show_wakeup_threshold(struct device *dev,
86510 + struct device_attribute *attr, char *buf)
86511 +{
86512 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86513 +
86514 + /* All events off? */
86515 + if (lis->wakeup.threshold == 0)
86516 + return sprintf(buf, "off\n");
86517 +
86518 + return sprintf(buf, "%u\n", lis->wakeup.threshold);
86519 +}
86520 +
86521 +static DEVICE_ATTR(wakeup_threshold, S_IRUGO | S_IWUSR, show_wakeup_threshold,
86522 + set_wakeup_threshold);
86523 +
86524 +static ssize_t set_wakeup_duration(struct device *dev,
86525 + struct device_attribute *attr, const char *buf, size_t count)
86526 +{
86527 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86528 + unsigned int duration;
86529 +
86530 + if (sscanf(buf, "%u\n", &duration) != 1)
86531 + return -EINVAL;
86532 +
86533 + if (duration > 2550)
86534 + return -ERANGE;
86535 +
86536 + lis->wakeup.duration = duration;
86537 +
86538 + return count;
86539 +}
86540 +
86541 +static ssize_t show_wakeup_duration(struct device *dev,
86542 + struct device_attribute *attr, char *buf)
86543 +{
86544 + struct lis302dl_info *lis = dev_get_drvdata(dev);
86545 +
86546 + return sprintf(buf, "%u\n", lis->wakeup.duration);
86547 +}
86548 +
86549 +static DEVICE_ATTR(wakeup_duration, S_IRUGO | S_IWUSR, show_wakeup_duration,
86550 + set_wakeup_duration);
86551 +
86552 +static struct attribute *lis302dl_sysfs_entries[] = {
86553 + &dev_attr_sample_rate.attr,
86554 + &dev_attr_full_scale.attr,
86555 + &dev_attr_threshold.attr,
86556 + &dev_attr_duration.attr,
86557 + &dev_attr_dump.attr,
86558 + &dev_attr_wakeup_threshold.attr,
86559 + &dev_attr_wakeup_duration.attr,
86560 + NULL
86561 +};
86562 +
86563 +static struct attribute_group lis302dl_attr_group = {
86564 + .name = NULL,
86565 + .attrs = lis302dl_sysfs_entries,
86566 +};
86567 +
86568 +/* input device handling and driver core interaction */
86569 +
86570 +static int lis302dl_input_open(struct input_dev *inp)
86571 +{
86572 + struct lis302dl_info *lis = input_get_drvdata(inp);
86573 + unsigned long flags;
86574 +
86575 + local_irq_save(flags);
86576 +
86577 + __enable_data_collection(lis);
86578 + lis->flags |= LIS302DL_F_INPUT_OPEN;
86579 +
86580 + local_irq_restore(flags);
86581 +
86582 + return 0;
86583 +}
86584 +
86585 +static void lis302dl_input_close(struct input_dev *inp)
86586 +{
86587 + struct lis302dl_info *lis = input_get_drvdata(inp);
86588 + u_int8_t ctrl1 = LIS302DL_CTRL1_Xen | LIS302DL_CTRL1_Yen |
86589 + LIS302DL_CTRL1_Zen;
86590 + unsigned long flags;
86591 +
86592 + local_irq_save(flags);
86593 +
86594 + /* since the input core already serializes access and makes sure we
86595 + * only see close() for the close of the last user, we can safely
86596 + * disable the data ready events */
86597 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, ctrl1, 0x00);
86598 + lis->flags &= ~LIS302DL_F_INPUT_OPEN;
86599 +
86600 + /* however, don't power down the whole device if still needed */
86601 + if (!(lis->flags & LIS302DL_F_WUP_FF ||
86602 + lis->flags & LIS302DL_F_WUP_CLICK)) {
86603 + __reg_set_bit_mask(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_PD,
86604 + 0x00);
86605 + }
86606 + local_irq_restore(flags);
86607 +}
86608 +
86609 +/* get the device to reload its coefficients from EEPROM and wait for it
86610 + * to complete
86611 + */
86612 +
86613 +static int __lis302dl_reset_device(struct lis302dl_info *lis)
86614 +{
86615 + int timeout = 10;
86616 +
86617 + __reg_write(lis, LIS302DL_REG_CTRL2,
86618 + LIS302DL_CTRL2_BOOT | LIS302DL_CTRL2_FDS);
86619 +
86620 + while ((__reg_read(lis, LIS302DL_REG_CTRL2)
86621 + & LIS302DL_CTRL2_BOOT) && (timeout--))
86622 + mdelay(1);
86623 +
86624 + return !!(timeout < 0);
86625 +}
86626 +
86627 +static int __devinit lis302dl_probe(struct platform_device *pdev)
86628 +{
86629 + int rc;
86630 + struct lis302dl_info *lis;
86631 + u_int8_t wai;
86632 + unsigned long flags;
86633 + struct lis302dl_platform_data *pdata = pdev->dev.platform_data;
86634 +
86635 + lis = kzalloc(sizeof(*lis), GFP_KERNEL);
86636 + if (!lis)
86637 + return -ENOMEM;
86638 +
86639 + lis->dev = &pdev->dev;
86640 +
86641 + dev_set_drvdata(lis->dev, lis);
86642 +
86643 + lis->pdata = pdata;
86644 +
86645 + rc = sysfs_create_group(&lis->dev->kobj, &lis302dl_attr_group);
86646 + if (rc) {
86647 + dev_err(lis->dev, "error creating sysfs group\n");
86648 + goto bail_free_lis;
86649 + }
86650 +
86651 + /* initialize input layer details */
86652 + lis->input_dev = input_allocate_device();
86653 + if (!lis->input_dev) {
86654 + dev_err(lis->dev, "Unable to allocate input device\n");
86655 + goto bail_sysfs;
86656 + }
86657 +
86658 + input_set_drvdata(lis->input_dev, lis);
86659 + lis->input_dev->name = pdata->name;
86660 + /* SPI Bus not defined as a valid bus for input subsystem*/
86661 + lis->input_dev->id.bustype = BUS_I2C; /* lie about it */
86662 + lis->input_dev->open = lis302dl_input_open;
86663 + lis->input_dev->close = lis302dl_input_close;
86664 +
86665 + rc = input_register_device(lis->input_dev);
86666 + if (rc) {
86667 + dev_err(lis->dev, "error %d registering input device\n", rc);
86668 + goto bail_inp_dev;
86669 + }
86670 +
86671 + local_irq_save(flags);
86672 + /* Configure our IO */
86673 + (lis->pdata->lis302dl_suspend_io)(lis, 1);
86674 +
86675 + wai = __reg_read(lis, LIS302DL_REG_WHO_AM_I);
86676 + if (wai != LIS302DL_WHO_AM_I_MAGIC) {
86677 + dev_err(lis->dev, "unknown who_am_i signature 0x%02x\n", wai);
86678 + dev_set_drvdata(lis->dev, NULL);
86679 + rc = -ENODEV;
86680 + local_irq_restore(flags);
86681 + goto bail_inp_reg;
86682 + }
86683 +
86684 + set_bit(EV_REL, lis->input_dev->evbit);
86685 + set_bit(REL_X, lis->input_dev->relbit);
86686 + set_bit(REL_Y, lis->input_dev->relbit);
86687 + set_bit(REL_Z, lis->input_dev->relbit);
86688 +/* set_bit(EV_KEY, lis->input_dev->evbit);
86689 + set_bit(BTN_X, lis->input_dev->keybit);
86690 + set_bit(BTN_Y, lis->input_dev->keybit);
86691 + set_bit(BTN_Z, lis->input_dev->keybit);
86692 +*/
86693 + lis->threshold = 0;
86694 + lis->duration = 0;
86695 + memset(&lis->wakeup, 0, sizeof(lis->wakeup));
86696 +
86697 + if (__lis302dl_reset_device(lis))
86698 + dev_err(lis->dev, "device BOOT reload failed\n");
86699 +
86700 + /* force us powered */
86701 + __reg_write(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_PD |
86702 + LIS302DL_CTRL1_Xen |
86703 + LIS302DL_CTRL1_Yen |
86704 + LIS302DL_CTRL1_Zen);
86705 + mdelay(1);
86706 +
86707 + __reg_write(lis, LIS302DL_REG_CTRL2, 0);
86708 + __reg_write(lis, LIS302DL_REG_CTRL3,
86709 + LIS302DL_CTRL3_PP_OD | LIS302DL_CTRL3_IHL);
86710 + __reg_write(lis, LIS302DL_REG_FF_WU_THS_1, 0x0);
86711 + __reg_write(lis, LIS302DL_REG_FF_WU_DURATION_1, 0x00);
86712 + __reg_write(lis, LIS302DL_REG_FF_WU_CFG_1, 0x0);
86713 +
86714 + /* start off in powered down mode; we power up when someone opens us */
86715 + __reg_write(lis, LIS302DL_REG_CTRL1, LIS302DL_CTRL1_Xen |
86716 + LIS302DL_CTRL1_Yen | LIS302DL_CTRL1_Zen);
86717 +
86718 + if (pdata->open_drain)
86719 + /* switch interrupt to open collector, active-low */
86720 + __reg_write(lis, LIS302DL_REG_CTRL3,
86721 + LIS302DL_CTRL3_PP_OD | LIS302DL_CTRL3_IHL);
86722 + else
86723 + /* push-pull, active-low */
86724 + __reg_write(lis, LIS302DL_REG_CTRL3, LIS302DL_CTRL3_IHL);
86725 +
86726 + __lis302dl_int_mode(lis->dev, 1, LIS302DL_INTMODE_GND);
86727 + __lis302dl_int_mode(lis->dev, 2, LIS302DL_INTMODE_GND);
86728 +
86729 + __reg_read(lis, LIS302DL_REG_STATUS);
86730 + __reg_read(lis, LIS302DL_REG_FF_WU_SRC_1);
86731 + __reg_read(lis, LIS302DL_REG_FF_WU_SRC_2);
86732 + __reg_read(lis, LIS302DL_REG_CLICK_SRC);
86733 + local_irq_restore(flags);
86734 +
86735 + dev_info(lis->dev, "Found %s\n", pdata->name);
86736 +
86737 + lis->pdata = pdata;
86738 +
86739 + set_irq_handler(lis->pdata->interrupt, handle_level_irq);
86740 +
86741 + rc = request_irq(lis->pdata->interrupt, lis302dl_interrupt,
86742 + IRQF_TRIGGER_LOW, "lis302dl", lis);
86743 +
86744 + if (rc < 0) {
86745 + dev_err(lis->dev, "error requesting IRQ %d\n",
86746 + lis->pdata->interrupt);
86747 + goto bail_inp_reg;
86748 + }
86749 + return 0;
86750 +
86751 +bail_inp_reg:
86752 + input_unregister_device(lis->input_dev);
86753 +bail_inp_dev:
86754 + input_free_device(lis->input_dev);
86755 +bail_sysfs:
86756 + sysfs_remove_group(&lis->dev->kobj, &lis302dl_attr_group);
86757 +bail_free_lis:
86758 + kfree(lis);
86759 + return rc;
86760 +}
86761 +
86762 +static int __devexit lis302dl_remove(struct platform_device *pdev)
86763 +{
86764 + struct lis302dl_info *lis = dev_get_drvdata(&pdev->dev);
86765 + unsigned long flags;
86766 +
86767 + /* Disable interrupts */
86768 + if (lis->flags & LIS302DL_F_IRQ_WAKE)
86769 + disable_irq_wake(lis->pdata->interrupt);
86770 + free_irq(lis->pdata->interrupt, lis);
86771 +
86772 + /* Reset and power down the device */
86773 + local_irq_save(flags);
86774 + __reg_write(lis, LIS302DL_REG_CTRL3, 0x00);
86775 + __reg_write(lis, LIS302DL_REG_CTRL2, 0x00);
86776 + __reg_write(lis, LIS302DL_REG_CTRL1, 0x00);
86777 + local_irq_restore(flags);
86778 +
86779 + /* Cleanup resources */
86780 + sysfs_remove_group(&pdev->dev.kobj, &lis302dl_attr_group);
86781 + input_unregister_device(lis->input_dev);
86782 + if (lis->input_dev)
86783 + input_free_device(lis->input_dev);
86784 + dev_set_drvdata(lis->dev, NULL);
86785 + kfree(lis);
86786 +
86787 + return 0;
86788 +}
86789 +
86790 +#ifdef CONFIG_PM
86791 +
86792 +static u8 regs_to_save[] = {
86793 + LIS302DL_REG_CTRL1,
86794 + LIS302DL_REG_CTRL2,
86795 + LIS302DL_REG_CTRL3,
86796 + LIS302DL_REG_FF_WU_CFG_1,
86797 + LIS302DL_REG_FF_WU_THS_1,
86798 + LIS302DL_REG_FF_WU_DURATION_1,
86799 + LIS302DL_REG_FF_WU_CFG_2,
86800 + LIS302DL_REG_FF_WU_THS_2,
86801 + LIS302DL_REG_FF_WU_DURATION_2,
86802 + LIS302DL_REG_CLICK_CFG,
86803 + LIS302DL_REG_CLICK_THSY_X,
86804 + LIS302DL_REG_CLICK_THSZ,
86805 + LIS302DL_REG_CLICK_TIME_LIMIT,
86806 + LIS302DL_REG_CLICK_LATENCY,
86807 + LIS302DL_REG_CLICK_WINDOW,
86808 +
86809 +};
86810 +
86811 +static int lis302dl_suspend(struct platform_device *pdev, pm_message_t state)
86812 +{
86813 + struct lis302dl_info *lis = dev_get_drvdata(&pdev->dev);
86814 + unsigned long flags;
86815 + u_int8_t tmp;
86816 + int n;
86817 +
86818 + /* determine if we want to wake up from the accel. */
86819 + if (lis->flags & LIS302DL_F_WUP_CLICK)
86820 + return 0;
86821 +
86822 + disable_irq(lis->pdata->interrupt);
86823 + local_irq_save(flags);
86824 +
86825 + /*
86826 + * When we share SPI over multiple sensors, there is a race here
86827 + * that one or more sensors will lose. In that case, the shared
86828 + * SPI bus GPIO will be in sleep mode and partially pulled down. So
86829 + * we explicitly put our IO into "wake" mode here before the final
86830 + * traffic to the sensor.
86831 + */
86832 + (lis->pdata->lis302dl_suspend_io)(lis, 1);
86833 +
86834 + /* save registers */
86835 + for (n = 0; n < ARRAY_SIZE(regs_to_save); n++)
86836 + lis->regs[regs_to_save[n]] =
86837 + __reg_read(lis, regs_to_save[n]);
86838 +
86839 + /* power down or enable wakeup */
86840 +
86841 + if (lis->wakeup.threshold == 0) {
86842 + tmp = __reg_read(lis, LIS302DL_REG_CTRL1);
86843 + tmp &= ~LIS302DL_CTRL1_PD;
86844 + __reg_write(lis, LIS302DL_REG_CTRL1, tmp);
86845 + } else
86846 + __enable_wakeup(lis);
86847 +
86848 + /* place our IO to the device in sleep-compatible states */
86849 + (lis->pdata->lis302dl_suspend_io)(lis, 0);
86850 +
86851 + local_irq_restore(flags);
86852 +
86853 + return 0;
86854 +}
86855 +
86856 +static int lis302dl_resume(struct platform_device *pdev)
86857 +{
86858 + struct lis302dl_info *lis = dev_get_drvdata(&pdev->dev);
86859 + unsigned long flags;
86860 + int n;
86861 +
86862 + if (lis->flags & LIS302DL_F_WUP_CLICK)
86863 + return 0;
86864 +
86865 + local_irq_save(flags);
86866 +
86867 + /* get our IO to the device back in operational states */
86868 + (lis->pdata->lis302dl_suspend_io)(lis, 1);
86869 +
86870 + /* resume from powerdown first! */
86871 + __reg_write(lis, LIS302DL_REG_CTRL1,
86872 + LIS302DL_CTRL1_PD |
86873 + LIS302DL_CTRL1_Xen |
86874 + LIS302DL_CTRL1_Yen |
86875 + LIS302DL_CTRL1_Zen);
86876 + mdelay(1);
86877 +
86878 + if (__lis302dl_reset_device(lis))
86879 + dev_err(&pdev->dev, "device BOOT reload failed\n");
86880 +
86881 + lis->regs[LIS302DL_REG_CTRL1] |= LIS302DL_CTRL1_PD |
86882 + LIS302DL_CTRL1_Xen |
86883 + LIS302DL_CTRL1_Yen |
86884 + LIS302DL_CTRL1_Zen;
86885 +
86886 + /* restore registers after resume */
86887 + for (n = 0; n < ARRAY_SIZE(regs_to_save); n++)
86888 + __reg_write(lis, regs_to_save[n], lis->regs[regs_to_save[n]]);
86889 +
86890 + local_irq_restore(flags);
86891 + enable_irq(lis->pdata->interrupt);
86892 +
86893 + return 0;
86894 +}
86895 +#else
86896 +#define lis302dl_suspend NULL
86897 +#define lis302dl_resume NULL
86898 +#endif
86899 +
86900 +static struct platform_driver lis302dl_driver = {
86901 + .driver = {
86902 + .name = "lis302dl",
86903 + .owner = THIS_MODULE,
86904 + },
86905 +
86906 + .probe = lis302dl_probe,
86907 + .remove = __devexit_p(lis302dl_remove),
86908 + .suspend = lis302dl_suspend,
86909 + .resume = lis302dl_resume,
86910 +};
86911 +
86912 +static int __devinit lis302dl_init(void)
86913 +{
86914 + return platform_driver_register(&lis302dl_driver);
86915 +}
86916 +
86917 +static void __exit lis302dl_exit(void)
86918 +{
86919 + platform_driver_unregister(&lis302dl_driver);
86920 +}
86921 +
86922 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
86923 +MODULE_LICENSE("GPL");
86924 +
86925 +module_init(lis302dl_init);
86926 +module_exit(lis302dl_exit);
86927 Index: linux-2.6.28/drivers/input/misc/Makefile
86928 ===================================================================
86929 --- linux-2.6.28.orig/drivers/input/misc/Makefile 2009-01-02 00:00:02.000000000 +0100
86930 +++ linux-2.6.28/drivers/input/misc/Makefile 2009-01-02 00:05:46.000000000 +0100
86931 @@ -22,3 +22,6 @@ obj-$(CONFIG_INPUT_UINPUT) += uinput.o
86932 obj-$(CONFIG_INPUT_APANEL) += apanel.o
86933 obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o
86934 obj-$(CONFIG_INPUT_GPIO_BUTTONS) += gpio_buttons.o
86935 +obj-$(CONFIG_INPUT_LIS302DL) += lis302dl.o
86936 +obj-$(CONFIG_INPUT_PCF50633_PMU) += pcf50633-input.o
86937 +obj-$(CONFIG_INPUT_PCF50606_PMU) += pcf50606-input.o
86938 Index: linux-2.6.28/drivers/input/misc/pcf50606-input.c
86939 ===================================================================
86940 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
86941 +++ linux-2.6.28/drivers/input/misc/pcf50606-input.c 2009-01-02 00:01:56.000000000 +0100
86942 @@ -0,0 +1,123 @@
86943 +/* Philips PCF50606 Input Driver
86944 + *
86945 + * (C) 2006-2008 by Openmoko, Inc.
86946 + * Author: Balaji Rao <balajirrao@openmoko.org>
86947 + * All rights reserved.
86948 + *
86949 + * Broken down from monstrous PCF50606 driver mainly by
86950 + * Harald Welte, Matt Hsu, Andy Green and Werner Almesberger
86951 + *
86952 + * This program is free software; you can redistribute it and/or
86953 + * modify it under the terms of the GNU General Public License as
86954 + * published by the Free Software Foundation; either version 2 of
86955 + * the License, or (at your option) any later version.
86956 + *
86957 + * This program is distributed in the hope that it will be useful,
86958 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
86959 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
86960 + * GNU General Public License for more details.
86961 + *
86962 + * You should have received a copy of the GNU General Public License
86963 + * along with this program; if not, write to the Free Software
86964 + * Foundation, Inc., 59 Temple Place, Suite 060, Boston,
86965 + * MA 02111-1307 USA
86966 + */
86967 +
86968 +#include <linux/input.h>
86969 +
86970 +#include <linux/mfd/pcf50606/core.h>
86971 +#include <linux/mfd/pcf50606/input.h>
86972 +
86973 +static void
86974 +pcf50606_input_irq(struct pcf50606 *pcf, int irq, void *data)
86975 +{
86976 + struct input_dev *input_dev = pcf->input.input_dev;
86977 + int onkey_released;
86978 +
86979 + /* We report only one event depending on if the key status */
86980 + onkey_released = pcf50606_reg_read(pcf, PCF50606_REG_OOCS) &
86981 + PCF50606_OOCS_ONKEY;
86982 +
86983 + if (irq == PCF50606_IRQ_ONKEYF && !onkey_released)
86984 + input_report_key(input_dev, KEY_POWER, 1);
86985 + else if (irq == PCF50606_IRQ_ONKEYR && onkey_released)
86986 + input_report_key(input_dev, KEY_POWER, 0);
86987 +
86988 + input_sync(input_dev);
86989 +}
86990 +
86991 +int __init pcf50606_input_probe(struct platform_device *pdev)
86992 +{
86993 + struct pcf50606 *pcf;
86994 + struct input_dev *input_dev;
86995 + int ret;
86996 +
86997 + pcf = platform_get_drvdata(pdev);
86998 +
86999 + input_dev = input_allocate_device();
87000 + if (!input_dev)
87001 + return -ENODEV;
87002 +
87003 + input_dev->name = "PCF50606 PMU events";
87004 + input_dev->id.bustype = BUS_I2C;
87005 +
87006 + input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
87007 + set_bit(KEY_POWER, input_dev->keybit);
87008 + set_bit(KEY_POWER2, input_dev->keybit);
87009 +
87010 + ret = input_register_device(input_dev);
87011 + if (ret)
87012 + goto out;
87013 +
87014 + pcf->input.input_dev = input_dev;
87015 +
87016 + /* Currently we care only about ONKEY and USBINS/USBREM
87017 + *
87018 + * USBINS/USBREM are told to us by mbc driver as we can't setup
87019 + * two handlers for an IRQ
87020 + */
87021 + pcf->irq_handler[PCF50606_IRQ_ONKEYR].handler = pcf50606_input_irq;
87022 +
87023 + pcf->irq_handler[PCF50606_IRQ_ONKEYF].handler = pcf50606_input_irq;
87024 +
87025 + return 0;
87026 +
87027 +out:
87028 + input_free_device(input_dev);
87029 + return ret;
87030 +}
87031 +
87032 +static int __devexit pcf50606_input_remove(struct platform_device *pdev)
87033 +{
87034 + struct pcf50606 *pcf;
87035 +
87036 + pcf = platform_get_drvdata(pdev);
87037 + input_unregister_device(pcf->input.input_dev);
87038 +
87039 + return 0;
87040 +}
87041 +
87042 +struct platform_driver pcf50606_input_driver = {
87043 + .driver = {
87044 + .name = "pcf50606-input",
87045 + },
87046 + .probe = pcf50606_input_probe,
87047 + .remove = __devexit_p(pcf50606_input_remove),
87048 +};
87049 +
87050 +static int __init pcf50606_input_init(void)
87051 +{
87052 + return platform_driver_register(&pcf50606_input_driver);
87053 +}
87054 +module_init(pcf50606_input_init);
87055 +
87056 +static void __exit pcf50606_input_exit(void)
87057 +{
87058 + platform_driver_unregister(&pcf50606_input_driver);
87059 +}
87060 +module_exit(pcf50606_input_exit);
87061 +
87062 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
87063 +MODULE_DESCRIPTION("PCF50606 input driver");
87064 +MODULE_LICENSE("GPL");
87065 +MODULE_ALIAS("platform:pcf50606-input");
87066 Index: linux-2.6.28/drivers/input/misc/pcf50633-input.c
87067 ===================================================================
87068 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
87069 +++ linux-2.6.28/drivers/input/misc/pcf50633-input.c 2009-01-02 00:01:56.000000000 +0100
87070 @@ -0,0 +1,123 @@
87071 +/* Philips PCF50633 Input Driver
87072 + *
87073 + * (C) 2006-2008 by Openmoko, Inc.
87074 + * Author: Balaji Rao <balajirrao@openmoko.org>
87075 + * All rights reserved.
87076 + *
87077 + * Broken down from monstrous PCF50633 driver mainly by
87078 + * Harald Welte, Andy Green and Werner Almesberger
87079 + *
87080 + * This program is free software; you can redistribute it and/or
87081 + * modify it under the terms of the GNU General Public License as
87082 + * published by the Free Software Foundation; either version 2 of
87083 + * the License, or (at your option) any later version.
87084 + *
87085 + * This program is distributed in the hope that it will be useful,
87086 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
87087 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
87088 + * GNU General Public License for more details.
87089 + *
87090 + * You should have received a copy of the GNU General Public License
87091 + * along with this program; if not, write to the Free Software
87092 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
87093 + * MA 02111-1307 USA
87094 + */
87095 +
87096 +#include <linux/input.h>
87097 +
87098 +#include <linux/mfd/pcf50633/core.h>
87099 +#include <linux/mfd/pcf50633/input.h>
87100 +
87101 +static void
87102 +pcf50633_input_irq(struct pcf50633 *pcf, int irq, void *data)
87103 +{
87104 + struct input_dev *input_dev = pcf->input.input_dev;
87105 + int onkey_released;
87106 +
87107 + /* We report only one event depending on if the key status */
87108 + onkey_released = pcf50633_reg_read(pcf, PCF50633_REG_OOCSTAT) &
87109 + PCF50633_OOCSTAT_ONKEY;
87110 +
87111 + if (irq == PCF50633_IRQ_ONKEYF && !onkey_released)
87112 + input_report_key(input_dev, KEY_POWER, 1);
87113 + else if (irq == PCF50633_IRQ_ONKEYR && onkey_released)
87114 + input_report_key(input_dev, KEY_POWER, 0);
87115 +
87116 + input_sync(input_dev);
87117 +}
87118 +
87119 +int __init pcf50633_input_probe(struct platform_device *pdev)
87120 +{
87121 + struct pcf50633 *pcf;
87122 + struct input_dev *input_dev;
87123 + int ret;
87124 +
87125 + pcf = platform_get_drvdata(pdev);
87126 +
87127 + input_dev = input_allocate_device();
87128 + if (!input_dev)
87129 + return -ENODEV;
87130 +
87131 + input_dev->name = "GTA02 PMU events";
87132 + input_dev->id.bustype = BUS_I2C;
87133 +
87134 + input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
87135 + set_bit(KEY_POWER, input_dev->keybit);
87136 + set_bit(KEY_POWER2, input_dev->keybit);
87137 +
87138 + ret = input_register_device(input_dev);
87139 + if (ret)
87140 + goto out;
87141 +
87142 + pcf->input.input_dev = input_dev;
87143 +
87144 + /* Currently we care only about ONKEY and USBINS/USBREM
87145 + *
87146 + * USBINS/USBREM are told to us by mbc driver as we can't setup
87147 + * two handlers for an IRQ
87148 + */
87149 + pcf->irq_handler[PCF50633_IRQ_ONKEYR].handler = pcf50633_input_irq;
87150 +
87151 + pcf->irq_handler[PCF50633_IRQ_ONKEYF].handler = pcf50633_input_irq;
87152 +
87153 + return 0;
87154 +
87155 +out:
87156 + input_free_device(input_dev);
87157 + return ret;
87158 +}
87159 +
87160 +static int __devexit pcf50633_input_remove(struct platform_device *pdev)
87161 +{
87162 + struct pcf50633 *pcf;
87163 +
87164 + pcf = platform_get_drvdata(pdev);
87165 + input_unregister_device(pcf->input.input_dev);
87166 +
87167 + return 0;
87168 +}
87169 +
87170 +struct platform_driver pcf50633_input_driver = {
87171 + .driver = {
87172 + .name = "pcf50633-input",
87173 + },
87174 + .probe = pcf50633_input_probe,
87175 + .remove = __devexit_p(pcf50633_input_remove),
87176 +};
87177 +
87178 +static int __init pcf50633_input_init(void)
87179 +{
87180 + return platform_driver_register(&pcf50633_input_driver);
87181 +}
87182 +module_init(pcf50633_input_init);
87183 +
87184 +static void __exit pcf50633_input_exit(void)
87185 +{
87186 + platform_driver_unregister(&pcf50633_input_driver);
87187 +}
87188 +module_exit(pcf50633_input_exit);
87189 +
87190 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
87191 +MODULE_DESCRIPTION("PCF50633 input driver");
87192 +MODULE_LICENSE("GPL");
87193 +MODULE_ALIAS("platform:pcf50633-input");
87194 Index: linux-2.6.28/drivers/input/mousedev.c
87195 ===================================================================
87196 --- linux-2.6.28.orig/drivers/input/mousedev.c 2008-12-25 00:26:37.000000000 +0100
87197 +++ linux-2.6.28/drivers/input/mousedev.c 2009-01-02 00:01:56.000000000 +0100
87198 @@ -1016,6 +1016,7 @@ static const struct input_device_id mous
87199 .evbit = { BIT_MASK(EV_KEY) | BIT_MASK(EV_REL) },
87200 .relbit = { BIT_MASK(REL_WHEEL) },
87201 }, /* A separate scrollwheel */
87202 +#if 0
87203 {
87204 .flags = INPUT_DEVICE_ID_MATCH_EVBIT |
87205 INPUT_DEVICE_ID_MATCH_KEYBIT |
87206 @@ -1025,6 +1026,7 @@ static const struct input_device_id mous
87207 .absbit = { BIT_MASK(ABS_X) | BIT_MASK(ABS_Y) },
87208 }, /* A tablet like device, at least touch detection,
87209 two absolute axes */
87210 +#endif
87211 {
87212 .flags = INPUT_DEVICE_ID_MATCH_EVBIT |
87213 INPUT_DEVICE_ID_MATCH_KEYBIT |
87214 Index: linux-2.6.28/drivers/input/touchscreen/Kconfig
87215 ===================================================================
87216 --- linux-2.6.28.orig/drivers/input/touchscreen/Kconfig 2008-12-25 00:26:37.000000000 +0100
87217 +++ linux-2.6.28/drivers/input/touchscreen/Kconfig 2009-01-02 00:01:56.000000000 +0100
87218 @@ -11,6 +11,50 @@ menuconfig INPUT_TOUCHSCREEN
87219
87220 if INPUT_TOUCHSCREEN
87221
87222 +menuconfig TOUCHSCREEN_FILTER
87223 + boolean "Touchscreen Filtering"
87224 + depends on INPUT_TOUCHSCREEN
87225 + help
87226 + Select this to include kernel touchscreen filter support. The filters
87227 + can be combined in any order in your machine init and the parameters
87228 + for them can also be set there.
87229 +
87230 +if TOUCHSCREEN_FILTER
87231 +
87232 +config TOUCHSCREEN_FILTER_GROUP
87233 + bool "Group Touchscreen Filter"
87234 + depends on INPUT_TOUCHSCREEN && TOUCHSCREEN_FILTER
87235 + default Y
87236 + help
87237 + Say Y here if you want to use the Group touchscreen filter, it
87238 + avoids using atypical samples.
87239 +
87240 +config TOUCHSCREEN_FILTER_MEDIAN
87241 + bool "Median Average Touchscreen Filter"
87242 + depends on INPUT_TOUCHSCREEN && TOUCHSCREEN_FILTER
87243 + default Y
87244 + help
87245 + Say Y here if you want to use the Median touchscreen filter, it's
87246 + highly effective if you data is noisy with occasional excursions.
87247 +
87248 +config TOUCHSCREEN_FILTER_MEAN
87249 + bool "Mean Average Touchscreen Filter"
87250 + depends on INPUT_TOUCHSCREEN && TOUCHSCREEN_FILTER
87251 + default Y
87252 + help
87253 + Say Y here if you want to use the Mean touchscreen filter, it
87254 + can further improve decent quality data by removing jitter
87255 +
87256 +config TOUCHSCREEN_FILTER_LINEAR
87257 + bool "Linear Touchscreen Filter"
87258 + depends on INPUT_TOUCHSCREEN && TOUCHSCREEN_FILTER
87259 + default Y
87260 + help
87261 + Say Y here if you want to use the Mean touchscreen filter, it
87262 + enables the use of calibration data for the touchscreen.
87263 +
87264 +endif
87265 +
87266 config TOUCHSCREEN_ADS7846
87267 tristate "ADS7846/TSC2046 and ADS7843 based touchscreens"
87268 depends on SPI_MASTER
87269 @@ -71,6 +115,25 @@ config TOUCHSCREEN_FUJITSU
87270 To compile this driver as a module, choose M here: the
87271 module will be called fujitsu-ts.
87272
87273 +config TOUCHSCREEN_S3C2410
87274 + tristate "Samsung S3C2410 touchscreen input driver"
87275 + depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN
87276 + select SERIO
87277 + select TOUCHSCREEN_FILTER
87278 + help
87279 + Say Y here if you have the s3c2410 touchscreen.
87280 +
87281 + If unsure, say N.
87282 +
87283 + To compile this driver as a module, choose M here: the
87284 + module will be called s3c2410_ts.
87285 +
87286 +config TOUCHSCREEN_S3C2410_DEBUG
87287 + boolean "Samsung S3C2410 touchscreen debug messages"
87288 + depends on TOUCHSCREEN_S3C2410
87289 + help
87290 + Select this if you want debug messages
87291 +
87292 config TOUCHSCREEN_GUNZE
87293 tristate "Gunze AHL-51S touchscreen"
87294 select SERIO
87295 @@ -376,4 +439,15 @@ config TOUCHSCREEN_TOUCHIT213
87296 To compile this driver as a module, choose M here: the
87297 module will be called touchit213.
87298
87299 +config TOUCHSCREEN_PCAP7200
87300 + tristate "EETI Projected capacitive touchscreen controller"
87301 + help
87302 + Say Y here if you have the EETI PCAP7200 touchscreen
87303 + controller chip in your system.
87304 +
87305 + If unsure, say N.
87306 +
87307 + To compile this driver as a module, choose M here: the
87308 + module will be called pcap7200.
87309 endif
87310 +
87311 Index: linux-2.6.28/drivers/input/touchscreen/Makefile
87312 ===================================================================
87313 --- linux-2.6.28.orig/drivers/input/touchscreen/Makefile 2008-12-25 00:26:37.000000000 +0100
87314 +++ linux-2.6.28/drivers/input/touchscreen/Makefile 2009-01-02 00:01:56.000000000 +0100
87315 @@ -31,3 +31,10 @@ wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705) +
87316 wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9712) += wm9712.o
87317 wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9713) += wm9713.o
87318 obj-$(CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE) += mainstone-wm97xx.o
87319 +obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
87320 +obj-$(CONFIG_TOUCHSCREEN_FILTER) += ts_filter.o
87321 +obj-$(CONFIG_TOUCHSCREEN_FILTER_GROUP) += ts_filter_group.o
87322 +obj-$(CONFIG_TOUCHSCREEN_FILTER_LINEAR) += ts_filter_linear.o
87323 +obj-$(CONFIG_TOUCHSCREEN_FILTER_MEDIAN) += ts_filter_median.o
87324 +obj-$(CONFIG_TOUCHSCREEN_FILTER_MEAN) += ts_filter_mean.o
87325 +obj-$(CONFIG_TOUCHSCREEN_PCAP7200) += pcap7200_ts.o
87326 Index: linux-2.6.28/drivers/input/touchscreen/s3c2410_ts.c
87327 ===================================================================
87328 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
87329 +++ linux-2.6.28/drivers/input/touchscreen/s3c2410_ts.c 2009-01-02 00:01:56.000000000 +0100
87330 @@ -0,0 +1,618 @@
87331 +/*
87332 + * This program is free software; you can redistribute it and/or modify
87333 + * it under the terms of the GNU General Public License as published by
87334 + * the Free Software Foundation; either version 2 of the License, or
87335 + * (at your option) any later version.
87336 + *
87337 + * This program is distributed in the hope that it will be useful,
87338 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
87339 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
87340 + * GNU General Public License for more details.
87341 + *
87342 + * You should have received a copy of the GNU General Public License
87343 + * along with this program; if not, write to the Free Software
87344 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
87345 + *
87346 + * Copyright (c) 2004 Arnaud Patard <arnaud.patard@rtp-net.org>
87347 + * iPAQ H1940 touchscreen support
87348 + *
87349 + * ChangeLog
87350 + *
87351 + * 2004-09-05: Herbert Pötzl <herbert@13thfloor.at>
87352 + * - added clock (de-)allocation code
87353 + *
87354 + * 2005-03-06: Arnaud Patard <arnaud.patard@rtp-net.org>
87355 + * - h1940_ -> s3c2410 (this driver is now also used on the n30
87356 + * machines :P)
87357 + * - Debug messages are now enabled with the config option
87358 + * TOUCHSCREEN_S3C2410_DEBUG
87359 + * - Changed the way the value are read
87360 + * - Input subsystem should now work
87361 + * - Use ioremap and readl/writel
87362 + *
87363 + * 2005-03-23: Arnaud Patard <arnaud.patard@rtp-net.org>
87364 + * - Make use of some undocumented features of the touchscreen
87365 + * controller
87366 + *
87367 + * 2007-05-23: Harald Welte <laforge@openmoko.org>
87368 + * - Add proper support for S32440
87369 + *
87370 + * 2008-06-23: Andy Green <andy@openmoko.com>
87371 + * - removed averaging system
87372 + * - added generic Touchscreen filter stuff
87373 + *
87374 + * 2008-11-27: Nelson Castillo <arhuaco@freaks-unidos.net>
87375 + * - improve interrupt handling
87376 + */
87377 +
87378 +#include <linux/errno.h>
87379 +#include <linux/kernel.h>
87380 +#include <linux/module.h>
87381 +#include <linux/slab.h>
87382 +#include <linux/input.h>
87383 +#include <linux/init.h>
87384 +#include <linux/serio.h>
87385 +#include <linux/timer.h>
87386 +#include <linux/kfifo.h>
87387 +#include <linux/delay.h>
87388 +#include <linux/platform_device.h>
87389 +#include <linux/clk.h>
87390 +#include <asm/io.h>
87391 +#include <asm/irq.h>
87392 +
87393 +#include <mach/regs-gpio.h>
87394 +#include <mach/ts.h>
87395 +
87396 +#include <plat/regs-adc.h>
87397 +
87398 +#include <linux/ts_filter.h>
87399 +
87400 +/* For ts.dev.id.version */
87401 +#define S3C2410TSVERSION 0x0101
87402 +
87403 +#define TSC_SLEEP (S3C2410_ADCTSC_PULL_UP_DISABLE | S3C2410_ADCTSC_XY_PST(0))
87404 +
87405 +#define WAIT4INT(x) (((x)<<8) | \
87406 + S3C2410_ADCTSC_YM_SEN | \
87407 + S3C2410_ADCTSC_YP_SEN | \
87408 + S3C2410_ADCTSC_XP_SEN | \
87409 + S3C2410_ADCTSC_XY_PST(3))
87410 +
87411 +#define AUTOPST (S3C2410_ADCTSC_YM_SEN | \
87412 + S3C2410_ADCTSC_YP_SEN | \
87413 + S3C2410_ADCTSC_XP_SEN | \
87414 + S3C2410_ADCTSC_AUTO_PST | \
87415 + S3C2410_ADCTSC_XY_PST(0))
87416 +
87417 +#define DEBUG_LVL KERN_DEBUG
87418 +
87419 +MODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");
87420 +MODULE_DESCRIPTION("s3c2410 touchscreen driver");
87421 +MODULE_LICENSE("GPL");
87422 +
87423 +/*
87424 + * Definitions & global arrays.
87425 + */
87426 +
87427 +static char *s3c2410ts_name = "s3c2410 TouchScreen";
87428 +
87429 +#define TS_RELEASE_TIMEOUT (HZ >> 4) /* ~ 60 milliseconds */
87430 +#define TS_EVENT_FIFO_SIZE (2 << 6) /* must be a power of 2 */
87431 +
87432 +#define TS_STATE_STANDBY 0 /* initial state */
87433 +#define TS_STATE_PRESSED 1
87434 +#define TS_STATE_RELEASE_PENDING 2
87435 +#define TS_STATE_RELEASE 3
87436 +
87437 +/*
87438 + * Per-touchscreen data.
87439 + */
87440 +
87441 +struct s3c2410ts {
87442 + struct input_dev *dev;
87443 + struct ts_filter *tsf[MAX_TS_FILTER_CHAIN];
87444 + int coords[2]; /* just X and Y for us */
87445 + int is_down;
87446 + int state;
87447 + struct kfifo *event_fifo;
87448 +};
87449 +
87450 +static struct s3c2410ts ts;
87451 +
87452 +static void __iomem *base_addr;
87453 +
87454 +/*
87455 + * A few low level functions.
87456 + */
87457 +
87458 +static inline void s3c2410_ts_connect(void)
87459 +{
87460 + s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON);
87461 + s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);
87462 + s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);
87463 + s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);
87464 +}
87465 +
87466 +static void s3c2410_ts_start_adc_conversion(void)
87467 +{
87468 + writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST,
87469 + base_addr + S3C2410_ADCTSC);
87470 + writel(readl(base_addr + S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START,
87471 + base_addr + S3C2410_ADCCON);
87472 +}
87473 +
87474 +/*
87475 + * Just send the input events.
87476 + */
87477 +
87478 +enum ts_input_event {IE_DOWN = 0, IE_UP};
87479 +
87480 +static void ts_input_report(int event, int coords[])
87481 +{
87482 +#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
87483 + static char *s[] = {"down", "up"};
87484 + struct timeval tv;
87485 +
87486 + do_gettimeofday(&tv);
87487 +#endif
87488 +
87489 + if (event == IE_DOWN) {
87490 + input_report_abs(ts.dev, ABS_X, coords[0]);
87491 + input_report_abs(ts.dev, ABS_Y, coords[1]);
87492 + input_report_key(ts.dev, BTN_TOUCH, 1);
87493 + input_report_abs(ts.dev, ABS_PRESSURE, 1);
87494 +
87495 +#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
87496 + printk(DEBUG_LVL "T:%06d %6s (X:%03d, Y:%03d)\n",
87497 + (int)tv.tv_usec, s[event], coords[0], coords[1]);
87498 +#endif
87499 + } else {
87500 + input_report_key(ts.dev, BTN_TOUCH, 0);
87501 + input_report_abs(ts.dev, ABS_PRESSURE, 0);
87502 +
87503 +#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
87504 + printk(DEBUG_LVL "T:%06d %6s\n",
87505 + (int)tv.tv_usec, s[event]);
87506 +#endif
87507 + }
87508 +
87509 + input_sync(ts.dev);
87510 +}
87511 +
87512 +/*
87513 + * Manage the state of the touchscreen.
87514 + */
87515 +
87516 +static void event_send_timer_f(unsigned long data);
87517 +
87518 +static struct timer_list event_send_timer =
87519 + TIMER_INITIALIZER(event_send_timer_f, 0, 0);
87520 +
87521 +static void event_send_timer_f(unsigned long data)
87522 +{
87523 + static unsigned long running;
87524 + static int noop_counter;
87525 + int event_type;
87526 +
87527 + if (unlikely(test_and_set_bit(0, &running))) {
87528 + mod_timer(&event_send_timer,
87529 + jiffies + TS_RELEASE_TIMEOUT);
87530 + return;
87531 + }
87532 +
87533 + while (__kfifo_get(ts.event_fifo, (unsigned char *)&event_type,
87534 + sizeof(int))) {
87535 + int buf[2];
87536 +
87537 + switch (event_type) {
87538 + case 'D':
87539 + if (ts.state == TS_STATE_RELEASE_PENDING)
87540 + /* Ignore short UP event */
87541 + ts.state = TS_STATE_PRESSED;
87542 + break;
87543 +
87544 + case 'U':
87545 + ts.state = TS_STATE_RELEASE_PENDING;
87546 + break;
87547 +
87548 + case 'P':
87549 + if (ts.is_down) /* stylus_action needs a conversion */
87550 + s3c2410_ts_start_adc_conversion();
87551 +
87552 + if (unlikely(__kfifo_get(ts.event_fifo,
87553 + (unsigned char *)buf,
87554 + sizeof(int) * 2)
87555 + != sizeof(int) * 2))
87556 + goto ts_exit_error;
87557 +
87558 + ts_input_report(IE_DOWN, buf);
87559 + ts.state = TS_STATE_PRESSED;
87560 + break;
87561 +
87562 + default:
87563 + goto ts_exit_error;
87564 + }
87565 +
87566 + noop_counter = 0;
87567 + }
87568 +
87569 + if (noop_counter++ >= 1) {
87570 + noop_counter = 0;
87571 + if (ts.state == TS_STATE_RELEASE_PENDING) {
87572 + /* We delay the UP event for a
87573 + * while to avoid jitter. If we get a DOWN
87574 + * event we do not send it. */
87575 +
87576 + ts_input_report(IE_UP, NULL);
87577 + ts.state = TS_STATE_STANDBY;
87578 +
87579 + if (ts.tsf[0])
87580 + (ts.tsf[0]->api->clear)(ts.tsf[0]);
87581 + }
87582 + } else {
87583 + mod_timer(&event_send_timer, jiffies + TS_RELEASE_TIMEOUT);
87584 + }
87585 +
87586 + clear_bit(0, &running);
87587 +
87588 + return;
87589 +
87590 +ts_exit_error: /* should not happen unless we have a bug */
87591 + printk(KERN_ERR __FILE__ ": event_send_timer_f failed\n");
87592 +}
87593 +
87594 +/*
87595 + * Manage interrupts.
87596 + */
87597 +
87598 +static irqreturn_t stylus_updown(int irq, void *dev_id)
87599 +{
87600 + unsigned long data0;
87601 + unsigned long data1;
87602 + int event_type;
87603 +
87604 + data0 = readl(base_addr+S3C2410_ADCDAT0);
87605 + data1 = readl(base_addr+S3C2410_ADCDAT1);
87606 +
87607 + ts.is_down = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) &&
87608 + (!(data1 & S3C2410_ADCDAT0_UPDOWN));
87609 +
87610 + event_type = ts.is_down ? 'D' : 'U';
87611 +
87612 + if (unlikely(__kfifo_put(ts.event_fifo, (unsigned char *)&event_type,
87613 + sizeof(int)) != sizeof(int))) /* should not happen */
87614 + printk(KERN_ERR __FILE__": stylus_updown lost event!\n");
87615 +
87616 + if (ts.is_down)
87617 + s3c2410_ts_start_adc_conversion();
87618 + else
87619 + writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
87620 +
87621 + mod_timer(&event_send_timer, jiffies + 1);
87622 +
87623 + return IRQ_HANDLED;
87624 +}
87625 +
87626 +static irqreturn_t stylus_action(int irq, void *dev_id)
87627 +{
87628 + int buf[3];
87629 +
87630 + /* grab the ADC results */
87631 + ts.coords[0] = readl(base_addr + S3C2410_ADCDAT0) &
87632 + S3C2410_ADCDAT0_XPDATA_MASK;
87633 + ts.coords[1] = readl(base_addr + S3C2410_ADCDAT1) &
87634 + S3C2410_ADCDAT1_YPDATA_MASK;
87635 +
87636 + if (ts.tsf[0]) { /* filtering is enabled, don't use raw directly */
87637 + switch ((ts.tsf[0]->api->process)(ts.tsf[0], &ts.coords[0])) {
87638 + case 0: /*
87639 + * no real sample came out of processing yet,
87640 + * get another raw result to feed it
87641 + */
87642 + s3c2410_ts_start_adc_conversion();
87643 + return IRQ_HANDLED;
87644 + case 1: /* filters are ready to deliver a sample */
87645 + (ts.tsf[0]->api->scale)(ts.tsf[0], &ts.coords[0]);
87646 + break;
87647 + case -1:
87648 + /* error in filters, ignore the event */
87649 + (ts.tsf[0]->api->clear)(ts.tsf[0]);
87650 + writel(WAIT4INT(1), base_addr + S3C2410_ADCTSC);
87651 + return IRQ_HANDLED;
87652 + default:
87653 + printk(KERN_ERR":stylus_action error\n");
87654 + }
87655 + }
87656 +
87657 + /* We use a buffer because want an atomic operation */
87658 + buf[0] = 'P';
87659 + buf[1] = ts.coords[0];
87660 + buf[2] = ts.coords[1];
87661 +
87662 + if (unlikely(__kfifo_put(ts.event_fifo, (unsigned char *)buf,
87663 + sizeof(int) * 3) != sizeof(int) * 3))
87664 + /* should not happen */
87665 + printk(KERN_ERR":stylus_action error\n");
87666 +
87667 + writel(WAIT4INT(1), base_addr + S3C2410_ADCTSC);
87668 + mod_timer(&event_send_timer, jiffies + 1);
87669 +
87670 + return IRQ_HANDLED;
87671 +}
87672 +
87673 +static struct clk *adc_clock;
87674 +
87675 +/*
87676 + * The functions for inserting/removing us as a module.
87677 + */
87678 +
87679 +static int __init s3c2410ts_probe(struct platform_device *pdev)
87680 +{
87681 + int rc;
87682 + struct s3c2410_ts_mach_info *info;
87683 + struct input_dev *input_dev;
87684 + int ret = 0;
87685 +
87686 + dev_info(&pdev->dev, "Starting\n");
87687 +
87688 + info = (struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
87689 +
87690 + if (!info)
87691 + {
87692 + dev_err(&pdev->dev, "Hm... too bad: no platform data for ts\n");
87693 + return -EINVAL;
87694 + }
87695 +
87696 +#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
87697 + printk(DEBUG_LVL "Entering s3c2410ts_init\n");
87698 +#endif
87699 +
87700 + adc_clock = clk_get(NULL, "adc");
87701 + if (!adc_clock) {
87702 + dev_err(&pdev->dev, "failed to get adc clock source\n");
87703 + return -ENOENT;
87704 + }
87705 + clk_enable(adc_clock);
87706 +
87707 +#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
87708 + printk(DEBUG_LVL "got and enabled clock\n");
87709 +#endif
87710 +
87711 + base_addr = ioremap(S3C2410_PA_ADC,0x20);
87712 + if (base_addr == NULL) {
87713 + dev_err(&pdev->dev, "Failed to remap register block\n");
87714 + ret = -ENOMEM;
87715 + goto bail0;
87716 + }
87717 +
87718 +
87719 + /* If we acutally are a S3C2410: Configure GPIOs */
87720 + if (!strcmp(pdev->name, "s3c2410-ts"))
87721 + s3c2410_ts_connect();
87722 +
87723 + if ((info->presc & 0xff) > 0)
87724 + writel(S3C2410_ADCCON_PRSCEN |
87725 + S3C2410_ADCCON_PRSCVL(info->presc&0xFF),
87726 + base_addr + S3C2410_ADCCON);
87727 + else
87728 + writel(0, base_addr+S3C2410_ADCCON);
87729 +
87730 + /* Initialise registers */
87731 + if ((info->delay & 0xffff) > 0)
87732 + writel(info->delay & 0xffff, base_addr + S3C2410_ADCDLY);
87733 +
87734 + writel(WAIT4INT(0), base_addr + S3C2410_ADCTSC);
87735 +
87736 + /* Initialise input stuff */
87737 + memset(&ts, 0, sizeof(struct s3c2410ts));
87738 + input_dev = input_allocate_device();
87739 +
87740 + if (!input_dev) {
87741 + dev_err(&pdev->dev, "Unable to allocate the input device\n");
87742 + ret = -ENOMEM;
87743 + goto bail1;
87744 + }
87745 +
87746 + ts.dev = input_dev;
87747 + ts.dev->evbit[0] = BIT_MASK(EV_SYN) | BIT_MASK(EV_KEY) |
87748 + BIT_MASK(EV_ABS);
87749 + ts.dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
87750 + input_set_abs_params(ts.dev, ABS_X, 0, 0x3FF, 0, 0);
87751 + input_set_abs_params(ts.dev, ABS_Y, 0, 0x3FF, 0, 0);
87752 + input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);
87753 +
87754 + ts.dev->name = s3c2410ts_name;
87755 + ts.dev->id.bustype = BUS_RS232;
87756 + ts.dev->id.vendor = 0xDEAD;
87757 + ts.dev->id.product = 0xBEEF;
87758 + ts.dev->id.version = S3C2410TSVERSION;
87759 + ts.state = TS_STATE_STANDBY;
87760 + ts.event_fifo = kfifo_alloc(TS_EVENT_FIFO_SIZE, GFP_KERNEL, NULL);
87761 + if (IS_ERR(ts.event_fifo)) {
87762 + ret = -EIO;
87763 + goto bail2;
87764 + }
87765 +
87766 + /* create the filter chain set up for the 2 coordinates we produce */
87767 + ret = ts_filter_create_chain(
87768 + pdev, (struct ts_filter_api **)&info->filter_sequence,
87769 + (void *)&info->filter_config, ts.tsf, ARRAY_SIZE(ts.coords));
87770 + if (ret)
87771 + dev_info(&pdev->dev, "%d filter(s) initialized\n", ret);
87772 + else /* this is OK, just means there won't be any filtering */
87773 + dev_info(&pdev->dev, "Unfiltered output selected\n");
87774 +
87775 + if (ts.tsf[0])
87776 + (ts.tsf[0]->api->clear)(ts.tsf[0]);
87777 + else
87778 + dev_info(&pdev->dev, "No filtering\n");
87779 +
87780 + /* Get irqs */
87781 + if (request_irq(IRQ_ADC, stylus_action, IRQF_SAMPLE_RANDOM,
87782 + "s3c2410_action", ts.dev)) {
87783 + dev_err(&pdev->dev, "Could not allocate ts IRQ_ADC !\n");
87784 + iounmap(base_addr);
87785 + ret = -EIO;
87786 + goto bail3;
87787 + }
87788 + if (request_irq(IRQ_TC, stylus_updown, IRQF_SAMPLE_RANDOM,
87789 + "s3c2410_action", ts.dev)) {
87790 + dev_err(&pdev->dev, "Could not allocate ts IRQ_TC !\n");
87791 + free_irq(IRQ_ADC, ts.dev);
87792 + iounmap(base_addr);
87793 + ret = -EIO;
87794 + goto bail4;
87795 + }
87796 +
87797 + dev_info(&pdev->dev, "successfully loaded\n");
87798 +
87799 + /* All went ok, so register to the input system */
87800 + rc = input_register_device(ts.dev);
87801 + if (rc) {
87802 + ret = -EIO;
87803 + goto bail5;
87804 + }
87805 +
87806 + return 0;
87807 +
87808 +bail5:
87809 + free_irq(IRQ_TC, ts.dev);
87810 + free_irq(IRQ_ADC, ts.dev);
87811 + clk_disable(adc_clock);
87812 + iounmap(base_addr);
87813 + disable_irq(IRQ_TC);
87814 +bail4:
87815 + disable_irq(IRQ_ADC);
87816 +bail3:
87817 + ts_filter_destroy_chain(pdev, ts.tsf);
87818 + kfifo_free(ts.event_fifo);
87819 +bail2:
87820 + input_unregister_device(ts.dev);
87821 +bail1:
87822 + iounmap(base_addr);
87823 +bail0:
87824 +
87825 + return ret;
87826 +}
87827 +
87828 +static int s3c2410ts_remove(struct platform_device *pdev)
87829 +{
87830 + disable_irq(IRQ_ADC);
87831 + disable_irq(IRQ_TC);
87832 + free_irq(IRQ_TC,ts.dev);
87833 + free_irq(IRQ_ADC,ts.dev);
87834 +
87835 + if (adc_clock) {
87836 + clk_disable(adc_clock);
87837 + clk_put(adc_clock);
87838 + adc_clock = NULL;
87839 + }
87840 +
87841 + input_unregister_device(ts.dev);
87842 + iounmap(base_addr);
87843 +
87844 + ts_filter_destroy_chain(pdev, ts.tsf);
87845 +
87846 + kfifo_free(ts.event_fifo);
87847 +
87848 + return 0;
87849 +}
87850 +
87851 +#ifdef CONFIG_PM
87852 +static int s3c2410ts_suspend(struct platform_device *pdev, pm_message_t state)
87853 +{
87854 + writel(TSC_SLEEP, base_addr+S3C2410_ADCTSC);
87855 + writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_STDBM,
87856 + base_addr+S3C2410_ADCCON);
87857 +
87858 + disable_irq(IRQ_ADC);
87859 + disable_irq(IRQ_TC);
87860 +
87861 + clk_disable(adc_clock);
87862 +
87863 + return 0;
87864 +}
87865 +
87866 +static int s3c2410ts_resume(struct platform_device *pdev)
87867 +{
87868 + struct s3c2410_ts_mach_info *info =
87869 + ( struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
87870 +
87871 + clk_enable(adc_clock);
87872 + mdelay(1);
87873 +
87874 + if (ts.tsf[0])
87875 + (ts.tsf[0]->api->clear)(ts.tsf[0]);
87876 +
87877 + enable_irq(IRQ_ADC);
87878 + enable_irq(IRQ_TC);
87879 +
87880 + if ((info->presc&0xff) > 0)
87881 + writel(S3C2410_ADCCON_PRSCEN |
87882 + S3C2410_ADCCON_PRSCVL(info->presc&0xFF),
87883 + base_addr+S3C2410_ADCCON);
87884 + else
87885 + writel(0,base_addr+S3C2410_ADCCON);
87886 +
87887 + /* Initialise registers */
87888 + if ((info->delay & 0xffff) > 0)
87889 + writel(info->delay & 0xffff, base_addr+S3C2410_ADCDLY);
87890 +
87891 + writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
87892 +
87893 + return 0;
87894 +}
87895 +
87896 +#else
87897 +#define s3c2410ts_suspend NULL
87898 +#define s3c2410ts_resume NULL
87899 +#endif
87900 +
87901 +static struct platform_driver s3c2410ts_driver = {
87902 + .driver = {
87903 + .name = "s3c2410-ts",
87904 + .owner = THIS_MODULE,
87905 + },
87906 + .probe = s3c2410ts_probe,
87907 + .remove = s3c2410ts_remove,
87908 + .suspend = s3c2410ts_suspend,
87909 + .resume = s3c2410ts_resume,
87910 +
87911 +};
87912 +
87913 +static struct platform_driver s3c2440ts_driver = {
87914 + .driver = {
87915 + .name = "s3c2440-ts",
87916 + .owner = THIS_MODULE,
87917 + },
87918 + .probe = s3c2410ts_probe,
87919 + .remove = s3c2410ts_remove,
87920 + .suspend = s3c2410ts_suspend,
87921 + .resume = s3c2410ts_resume,
87922 +
87923 +};
87924 +
87925 +static int __init s3c2410ts_init(void)
87926 +{
87927 + int rc;
87928 +
87929 + rc = platform_driver_register(&s3c2410ts_driver);
87930 + if (rc < 0)
87931 + return rc;
87932 +
87933 + rc = platform_driver_register(&s3c2440ts_driver);
87934 + if (rc < 0)
87935 + platform_driver_unregister(&s3c2410ts_driver);
87936 +
87937 + return rc;
87938 +}
87939 +
87940 +static void __exit s3c2410ts_exit(void)
87941 +{
87942 + platform_driver_unregister(&s3c2440ts_driver);
87943 + platform_driver_unregister(&s3c2410ts_driver);
87944 +}
87945 +
87946 +module_init(s3c2410ts_init);
87947 +module_exit(s3c2410ts_exit);
87948 +
87949 Index: linux-2.6.28/drivers/input/touchscreen/ts_filter.c
87950 ===================================================================
87951 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
87952 +++ linux-2.6.28/drivers/input/touchscreen/ts_filter.c 2009-01-02 00:01:56.000000000 +0100
87953 @@ -0,0 +1,64 @@
87954 +/*
87955 + * This program is free software; you can redistribute it and/or modify
87956 + * it under the terms of the GNU General Public License as published by
87957 + * the Free Software Foundation; either version 2 of the License, or
87958 + * (at your option) any later version.
87959 + *
87960 + * This program is distributed in the hope that it will be useful,
87961 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
87962 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
87963 + * GNU General Public License for more details.
87964 + *
87965 + * You should have received a copy of the GNU General Public License
87966 + * along with this program; if not, write to the Free Software
87967 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
87968 + *
87969 + * Copyright (c) 2008 Andy Green <andy@openmoko.com>
87970 + */
87971 +
87972 +#include <linux/kernel.h>
87973 +#include <linux/device.h>
87974 +#include <linux/ts_filter.h>
87975 +
87976 +int ts_filter_create_chain(struct platform_device *pdev,
87977 + struct ts_filter_api **api, void **config,
87978 + struct ts_filter **list, int count_coords)
87979 +{
87980 + int count = 0;
87981 + struct ts_filter *last = NULL;
87982 +
87983 + if (!api)
87984 + return 0;
87985 +
87986 + while (*api && count < MAX_TS_FILTER_CHAIN) {
87987 + *list = ((*api)->create)(pdev, *config++, count_coords);
87988 + if (!*list) {
87989 + printk(KERN_ERR "Filter %d failed init\n", count);
87990 + return count;
87991 + }
87992 + (*list)->api = *api++;
87993 + if (last)
87994 + last->next = *list;
87995 + last = *list;
87996 + list++;
87997 + count++;
87998 + }
87999 +
88000 + return count;
88001 +}
88002 +EXPORT_SYMBOL_GPL(ts_filter_create_chain);
88003 +
88004 +void ts_filter_destroy_chain(struct platform_device *pdev,
88005 + struct ts_filter **list)
88006 +{
88007 + struct ts_filter **first;
88008 + int count = 0;
88009 +
88010 + first = list;
88011 + while (*list && count++ < MAX_TS_FILTER_CHAIN) {
88012 + ((*list)->api->destroy)(pdev, *list);
88013 + list++;
88014 + }
88015 + *first = NULL;
88016 +}
88017 +EXPORT_SYMBOL_GPL(ts_filter_destroy_chain);
88018 Index: linux-2.6.28/drivers/input/touchscreen/ts_filter_group.c
88019 ===================================================================
88020 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
88021 +++ linux-2.6.28/drivers/input/touchscreen/ts_filter_group.c 2009-01-02 00:01:56.000000000 +0100
88022 @@ -0,0 +1,219 @@
88023 +/*
88024 + * This program is free software; you can redistribute it and/or modify
88025 + * it under the terms of the GNU General Public License as published by
88026 + * the Free Software Foundation; either version 2 of the License, or
88027 + * (at your option) any later version.
88028 + *
88029 + * This program is distributed in the hope that it will be useful,
88030 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
88031 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
88032 + * GNU General Public License for more details.
88033 + *
88034 + * You should have received a copy of the GNU General Public License
88035 + * along with this program; if not, write to the Free Software
88036 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
88037 + *
88038 + * Copyright (C) 2008 by Openmoko, Inc.
88039 + * Author: Nelson Castillo <arhuaco@freaks-unidos.net>
88040 + * All rights reserved.
88041 + *
88042 + * This filter is useful to reject samples that are not reliable. We consider
88043 + * that a sample is not reliable if it deviates form the Majority.
88044 + *
88045 + * 1) We collect S samples.
88046 + *
88047 + * 2) For each dimension:
88048 + *
88049 + * - We sort the points.
88050 + * - Points that are "close enough" are considered to be in the same set.
88051 + * - We choose the set with more elements. If more than "threshold"
88052 + * points are in this set we use the first and the last point of the set
88053 + * to define the valid range for this dimension [min, max], otherwise we
88054 + * discard all the points and go to step 1.
88055 + *
88056 + * 3) We consider the unsorted S samples and try to feed them to the next
88057 + * filter in the chain. If one of the points of each sample
88058 + * is not in the allowed range for its dimension, we discard the sample.
88059 + *
88060 + */
88061 +
88062 +#include <linux/kernel.h>
88063 +#include <linux/slab.h>
88064 +#include <linux/sort.h>
88065 +#include <linux/ts_filter_group.h>
88066 +
88067 +static void ts_filter_group_clear_internal(struct ts_filter_group *tsfg,
88068 + int attempts)
88069 +{
88070 + tsfg->N = 0;
88071 + tsfg->tries_left = attempts;
88072 +}
88073 +
88074 +static void ts_filter_group_clear(struct ts_filter *tsf)
88075 +{
88076 + struct ts_filter_group *tsfg = (struct ts_filter_group *)tsf;
88077 +
88078 + ts_filter_group_clear_internal(tsfg, tsfg->config->attempts);
88079 +
88080 + if (tsf->next) /* chain */
88081 + (tsf->next->api->clear)(tsf->next);
88082 +}
88083 +
88084 +static struct ts_filter *ts_filter_group_create(struct platform_device *pdev,
88085 + void *conf, int count_coords)
88086 +{
88087 + struct ts_filter_group *tsfg;
88088 + int i;
88089 +
88090 + BUG_ON((count_coords < 1) || (count_coords > MAX_TS_FILTER_COORDS));
88091 +
88092 + tsfg = kzalloc(sizeof(struct ts_filter_group), GFP_KERNEL);
88093 + if (!tsfg)
88094 + return NULL;
88095 +
88096 + tsfg->config = (struct ts_filter_group_configuration *)conf;
88097 + tsfg->tsf.count_coords = count_coords;
88098 +
88099 + BUG_ON(tsfg->config->attempts <= 0);
88100 +
88101 + tsfg->samples[0] = kmalloc((2 + count_coords) * sizeof(int) *
88102 + tsfg->config->extent, GFP_KERNEL);
88103 + if (!tsfg->samples[0]) {
88104 + kfree(tsfg);
88105 + return NULL;
88106 + }
88107 + for (i = 1; i < count_coords; ++i)
88108 + tsfg->samples[i] = tsfg->samples[0] + i * tsfg->config->extent;
88109 + tsfg->sorted_samples = tsfg->samples[0] + count_coords *
88110 + tsfg->config->extent;
88111 + tsfg->group_size = tsfg->samples[0] + (1 + count_coords) *
88112 + tsfg->config->extent;
88113 +
88114 + ts_filter_group_clear_internal(tsfg, tsfg->config->attempts);
88115 +
88116 + printk(KERN_INFO" Created group ts filter len %d depth %d close %d "
88117 + "thresh %d\n", tsfg->config->extent, count_coords,
88118 + tsfg->config->close_enough, tsfg->config->threshold);
88119 +
88120 + return &tsfg->tsf;
88121 +}
88122 +
88123 +static void ts_filter_group_destroy(struct platform_device *pdev,
88124 + struct ts_filter *tsf)
88125 +{
88126 + struct ts_filter_group *tsfg = (struct ts_filter_group *)tsf;
88127 +
88128 + kfree(tsfg->samples[0]); /* first guy has pointer from kmalloc */
88129 + kfree(tsf);
88130 +}
88131 +
88132 +static void ts_filter_group_scale(struct ts_filter *tsf, int *coords)
88133 +{
88134 + if (tsf->next)
88135 + (tsf->next->api->scale)(tsf->next, coords);
88136 +}
88137 +
88138 +static int int_cmp(const void *_a, const void *_b)
88139 +{
88140 + const int *a = _a;
88141 + const int *b = _b;
88142 +
88143 + if (*a > *b)
88144 + return 1;
88145 + if (*a < *b)
88146 + return -1;
88147 + return 0;
88148 +}
88149 +
88150 +static int ts_filter_group_process(struct ts_filter *tsf, int *coords)
88151 +{
88152 + struct ts_filter_group *tsfg = (struct ts_filter_group *)tsf;
88153 + int n;
88154 + int i;
88155 + int ret = 0; /* ask for more samples by default */
88156 +
88157 + BUG_ON(tsfg->N >= tsfg->config->extent);
88158 +
88159 + for (n = 0; n < tsf->count_coords; n++)
88160 + tsfg->samples[n][tsfg->N] = coords[n];
88161 +
88162 + if (++tsfg->N < tsfg->config->extent)
88163 + return 0; /* we meed more samples */
88164 +
88165 + for (n = 0; n < tsfg->tsf.count_coords; n++) {
88166 + int *v = tsfg->sorted_samples;
88167 + int ngroups = 0;
88168 + int best_size;
88169 + int best_idx = 0;
88170 + int idx = 0;
88171 +
88172 + memcpy(v, tsfg->samples[n], tsfg->N * sizeof(int));
88173 + sort(v, tsfg->N, sizeof(int), int_cmp, NULL);
88174 +
88175 + tsfg->group_size[0] = 1;
88176 + for (i = 1; i < tsfg->N; ++i) {
88177 + if (v[i] - v[i - 1] <= tsfg->config->close_enough)
88178 + tsfg->group_size[ngroups]++;
88179 + else
88180 + tsfg->group_size[++ngroups] = 1;
88181 + }
88182 + ngroups++;
88183 +
88184 + best_size = tsfg->group_size[0];
88185 + for (i = 1; i < ngroups; i++) {
88186 + idx += tsfg->group_size[i - 1];
88187 + if (best_size < tsfg->group_size[i]) {
88188 + best_size = tsfg->group_size[i];
88189 + best_idx = idx;
88190 + }
88191 + }
88192 +
88193 + if (best_size < tsfg->config->threshold) {
88194 + /* this set is not good enough for us */
88195 + if (--tsfg->tries_left) {
88196 + ts_filter_group_clear_internal
88197 + (tsfg, tsfg->tries_left);
88198 + return 0; /* ask for more samples */
88199 + }
88200 + return -1; /* we give up */
88201 + }
88202 +
88203 + tsfg->range_min[n] = v[best_idx];
88204 + tsfg->range_max[n] = v[best_idx + best_size - 1];
88205 + }
88206 +
88207 + BUG_ON(!tsf->next);
88208 +
88209 + for (i = 0; i < tsfg->N; ++i) {
88210 + int r;
88211 +
88212 + for (n = 0; n < tsfg->tsf.count_coords; ++n) {
88213 + coords[n] = tsfg->samples[n][i];
88214 + if (coords[n] < tsfg->range_min[n] ||
88215 + coords[n] > tsfg->range_max[n])
88216 + break;
88217 + }
88218 +
88219 + if (n != tsfg->tsf.count_coords) /* sample not OK */
88220 + continue;
88221 +
88222 + r = (tsf->next->api->process)(tsf->next, coords);
88223 + if (r) {
88224 + ret = r;
88225 + break;
88226 + }
88227 + }
88228 +
88229 + ts_filter_group_clear_internal(tsfg, tsfg->config->attempts);
88230 +
88231 + return ret;
88232 +}
88233 +
88234 +struct ts_filter_api ts_filter_group_api = {
88235 + .create = ts_filter_group_create,
88236 + .destroy = ts_filter_group_destroy,
88237 + .clear = ts_filter_group_clear,
88238 + .process = ts_filter_group_process,
88239 + .scale = ts_filter_group_scale,
88240 +};
88241 +
88242 Index: linux-2.6.28/drivers/input/touchscreen/ts_filter_linear.c
88243 ===================================================================
88244 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
88245 +++ linux-2.6.28/drivers/input/touchscreen/ts_filter_linear.c 2009-01-02 00:01:56.000000000 +0100
88246 @@ -0,0 +1,178 @@
88247 +/*
88248 + * This program is free software; you can redistribute it and/or modify
88249 + * it under the terms of the GNU General Public License as published by
88250 + * the Free Software Foundation; version 2 of the License, or
88251 + * (at your option) any later version.
88252 + *
88253 + * This program is distributed in the hope that it will be useful,
88254 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
88255 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
88256 + * GNU General Public License for more details.
88257 + *
88258 + * You should have received a copy of the GNU General Public License
88259 + * along with this program; if not, write to the Free Software
88260 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
88261 + *
88262 + * Copyright (C) 2008 by Openmoko, Inc.
88263 + * Author: Nelson Castillo <arhuaco@freaks-unidos.net>
88264 + * All rights reserved.
88265 + *
88266 + * Linearly scale touchscreen values.
88267 + *
88268 + * Expose the TS_FILTER_LINEAR_NCONSTANTS for the linear transformation
88269 + * using sysfs.
88270 + *
88271 + */
88272 +
88273 +#include <linux/ts_filter_linear.h>
88274 +#include <linux/kernel.h>
88275 +#include <linux/slab.h>
88276 +#include <linux/string.h>
88277 +
88278 +
88279 +/*
88280 + * sysfs functions
88281 + */
88282 +
88283 +
88284 +static ssize_t const_attr_show(struct kobject *kobj,
88285 + struct attribute *attr,
88286 + char *buf)
88287 +{
88288 + struct const_attribute *a = to_const_attr(attr);
88289 +
88290 + return a->show(to_const_obj(kobj), a, buf);
88291 +}
88292 +
88293 +static ssize_t const_attr_store(struct kobject *kobj,
88294 + struct attribute *attr,
88295 + const char *buf, size_t len)
88296 +{
88297 + struct const_attribute *a = to_const_attr(attr);
88298 +
88299 + return a->store(to_const_obj(kobj), a, buf, len);
88300 +}
88301 +
88302 +static struct sysfs_ops const_sysfs_ops = {
88303 + .show = const_attr_show,
88304 + .store = const_attr_store,
88305 +};
88306 +
88307 +static void const_release(struct kobject *kobj)
88308 +{
88309 + kfree(to_const_obj(kobj)->tsfl);
88310 +}
88311 +
88312 +static ssize_t const_show(struct const_obj *obj, struct const_attribute *attr,
88313 + char *buf)
88314 +{
88315 + int who;
88316 +
88317 + sscanf(attr->attr.name, "%d", &who);
88318 + return sprintf(buf, "%d\n", obj->tsfl->constants[who]);
88319 +}
88320 +
88321 +static ssize_t const_store(struct const_obj *obj, struct const_attribute *attr,
88322 + const char *buf, size_t count)
88323 +{
88324 + int who;
88325 +
88326 + sscanf(attr->attr.name, "%d", &who);
88327 + sscanf(buf, "%d", &obj->tsfl->constants[who]);
88328 + return count;
88329 +}
88330 +
88331 +/*
88332 + * filter functions
88333 + */
88334 +
88335 +static struct ts_filter *ts_filter_linear_create(struct platform_device *pdev,
88336 + void *conf, int count_coords)
88337 +{
88338 + struct ts_filter_linear *tsfl;
88339 + int i;
88340 + int ret;
88341 +
88342 + tsfl = kzalloc(sizeof(struct ts_filter_linear), GFP_KERNEL);
88343 + if (!tsfl)
88344 + return NULL;
88345 +
88346 + tsfl->config = (struct ts_filter_linear_configuration *)conf;
88347 + tsfl->tsf.count_coords = count_coords;
88348 +
88349 + for (i = 0; i < TS_FILTER_LINEAR_NCONSTANTS; ++i) {
88350 + tsfl->constants[i] = tsfl->config->constants[i];
88351 +
88352 + /* sysfs */
88353 + sprintf(tsfl->attr_names[i], "%d", i);
88354 + tsfl->kattrs[i].attr.name = tsfl->attr_names[i];
88355 + tsfl->kattrs[i].attr.mode = 0666;
88356 + tsfl->kattrs[i].show = const_show;
88357 + tsfl->kattrs[i].store = const_store;
88358 + tsfl->attrs[i] = &tsfl->kattrs[i].attr;
88359 + }
88360 + tsfl->attrs[i] = NULL;
88361 +
88362 + tsfl->const_ktype.sysfs_ops = &const_sysfs_ops;
88363 + tsfl->const_ktype.release = const_release;
88364 + tsfl->const_ktype.default_attrs = tsfl->attrs;
88365 + tsfl->c_obj.tsfl = tsfl; /* kernel frees tsfl in const_release */
88366 +
88367 + /* TODO: /sys/ts-calibration is not OK */
88368 + ret = kobject_init_and_add(&tsfl->c_obj.kobj, &tsfl->const_ktype,
88369 + &pdev->dev.kobj, "calibration");
88370 + if (ret) {
88371 + kobject_put(&tsfl->c_obj.kobj);
88372 + return NULL;
88373 + }
88374 +
88375 + printk(KERN_INFO" Created Linear ts filter depth %d\n", count_coords);
88376 +
88377 + return &tsfl->tsf;
88378 +}
88379 +
88380 +static void ts_filter_linear_destroy(struct platform_device *pdev,
88381 + struct ts_filter *tsf)
88382 +{
88383 + struct ts_filter_linear *tsfl = (struct ts_filter_linear *)tsf;
88384 +
88385 + /* kernel frees tsfl in const_release */
88386 + kobject_put(&tsfl->c_obj.kobj);
88387 +}
88388 +
88389 +static void ts_filter_linear_clear(struct ts_filter *tsf)
88390 +{
88391 + if (tsf->next) /* chain */
88392 + (tsf->next->api->clear)(tsf->next);
88393 +}
88394 +
88395 +
88396 +static void ts_filter_linear_scale(struct ts_filter *tsf, int *coords)
88397 +{
88398 + struct ts_filter_linear *tsfl = (struct ts_filter_linear *)tsf;
88399 + int *k = tsfl->constants;
88400 + int c0 = coords[tsfl->config->coord0];
88401 + int c1 = coords[tsfl->config->coord1];
88402 +
88403 + coords[tsfl->config->coord0] = (k[2] + k[0] * c0 + k[1] * c1) / k[6];
88404 + coords[tsfl->config->coord1] = (k[5] + k[3] * c0 + k[4] * c1) / k[6];
88405 +
88406 + if (tsf->next)
88407 + (tsf->next->api->scale)(tsf->next, coords);
88408 +}
88409 +
88410 +static int ts_filter_linear_process(struct ts_filter *tsf, int *coords)
88411 +{
88412 + if (tsf->next)
88413 + return (tsf->next->api->process)(tsf->next, coords);
88414 +
88415 + return 1;
88416 +}
88417 +
88418 +struct ts_filter_api ts_filter_linear_api = {
88419 + .create = ts_filter_linear_create,
88420 + .destroy = ts_filter_linear_destroy,
88421 + .clear = ts_filter_linear_clear,
88422 + .process = ts_filter_linear_process,
88423 + .scale = ts_filter_linear_scale,
88424 +};
88425 Index: linux-2.6.28/drivers/input/touchscreen/ts_filter_mean.c
88426 ===================================================================
88427 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
88428 +++ linux-2.6.28/drivers/input/touchscreen/ts_filter_mean.c 2009-01-02 00:01:56.000000000 +0100
88429 @@ -0,0 +1,172 @@
88430 +/*
88431 + * This program is free software; you can redistribute it and/or modify
88432 + * it under the terms of the GNU General Public License as published by
88433 + * the Free Software Foundation; either version 2 of the License, or
88434 + * (at your option) any later version.
88435 + *
88436 + * This program is distributed in the hope that it will be useful,
88437 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
88438 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
88439 + * GNU General Public License for more details.
88440 + *
88441 + * You should have received a copy of the GNU General Public License
88442 + * along with this program; if not, write to the Free Software
88443 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
88444 + *
88445 + * Copyright (c) 2008 Andy Green <andy@openmoko.com>
88446 + *
88447 + *
88448 + * Mean has no effect if the samples are changing by more that the
88449 + * threshold set by averaging_threshold in the configuration.
88450 + *
88451 + * However while samples come in that don't go outside this threshold from
88452 + * the last reported sample, Mean replaces the samples with a simple mean
88453 + * of a configurable number of samples (set by bits_filter_length in config,
88454 + * which is 2^n, so 5 there makes 32 sample averaging).
88455 + *
88456 + * Mean works well if the input data is already good quality, reducing + / - 1
88457 + * sample jitter when the stylus is still, or moving very slowly, without
88458 + * introducing abrupt transitions or reducing ability to follow larger
88459 + * movements. If you set the threshold higher than the dynamic range of the
88460 + * coordinates, you can just use it as a simple mean average.
88461 + */
88462 +
88463 +#include <linux/errno.h>
88464 +#include <linux/kernel.h>
88465 +#include <linux/slab.h>
88466 +#include <linux/ts_filter_mean.h>
88467 +
88468 +static void ts_filter_mean_clear_internal(struct ts_filter *tsf)
88469 +{
88470 + struct ts_filter_mean *tsfs = (struct ts_filter_mean *)tsf;
88471 + int n;
88472 +
88473 + for (n = 0; n < tsfs->tsf.count_coords; n++) {
88474 + tsfs->fhead[n] = 0;
88475 + tsfs->ftail[n] = 0;
88476 + tsfs->lowpass[n] = 0;
88477 + }
88478 +}
88479 +
88480 +static void ts_filter_mean_clear(struct ts_filter *tsf)
88481 +{
88482 + ts_filter_mean_clear_internal(tsf);
88483 +
88484 + if (tsf->next) /* chain */
88485 + (tsf->next->api->clear)(tsf->next);
88486 +}
88487 +
88488 +static struct ts_filter *ts_filter_mean_create(struct platform_device *pdev,
88489 + void *config, int count_coords)
88490 +{
88491 + int *p;
88492 + int n;
88493 + struct ts_filter_mean *tsfs = kzalloc(
88494 + sizeof(struct ts_filter_mean), GFP_KERNEL);
88495 +
88496 + if (!tsfs)
88497 + return NULL;
88498 +
88499 + BUG_ON((count_coords < 1) || (count_coords > MAX_TS_FILTER_COORDS));
88500 + tsfs->tsf.count_coords = count_coords;
88501 +
88502 + tsfs->config = (struct ts_filter_mean_configuration *)config;
88503 +
88504 + tsfs->config->extent = 1 << tsfs->config->bits_filter_length;
88505 + BUG_ON((tsfs->config->extent > 256) || (!tsfs->config->extent));
88506 +
88507 + p = kmalloc(tsfs->config->extent * sizeof(int) * count_coords,
88508 + GFP_KERNEL);
88509 + if (!p)
88510 + return NULL;
88511 +
88512 + for (n = 0; n < count_coords; n++) {
88513 + tsfs->fifo[n] = p;
88514 + p += tsfs->config->extent;
88515 + }
88516 +
88517 + if (!tsfs->config->averaging_threshold)
88518 + tsfs->config->averaging_threshold = 0xffff; /* always active */
88519 +
88520 + ts_filter_mean_clear_internal(&tsfs->tsf);
88521 +
88522 + printk(KERN_INFO" Created Mean ts filter len %d depth %d thresh %d\n",
88523 + tsfs->config->extent, count_coords,
88524 + tsfs->config->averaging_threshold);
88525 +
88526 + return &tsfs->tsf;
88527 +}
88528 +
88529 +static void ts_filter_mean_destroy(struct platform_device *pdev,
88530 + struct ts_filter *tsf)
88531 +{
88532 + struct ts_filter_mean *tsfs = (struct ts_filter_mean *)tsf;
88533 +
88534 + kfree(tsfs->fifo[0]); /* first guy has pointer from kmalloc */
88535 + kfree(tsf);
88536 +}
88537 +
88538 +static void ts_filter_mean_scale(struct ts_filter *tsf, int *coords)
88539 +{
88540 + if (tsf->next) /* chain */
88541 + (tsf->next->api->scale)(tsf->next, coords);
88542 +}
88543 +
88544 +/* give us the raw sample data in x and y, and if we return 1 then you can
88545 + * get a filtered coordinate from tsm->x and tsm->y: if we return 0 you didn't
88546 + * fill the filter with samples yet.
88547 + */
88548 +
88549 +static int ts_filter_mean_process(struct ts_filter *tsf, int *coords)
88550 +{
88551 + struct ts_filter_mean *tsfs = (struct ts_filter_mean *)tsf;
88552 + int n;
88553 + int len;
88554 +
88555 + for (n = 0; n < tsf->count_coords; n++) {
88556 +
88557 + /* has he moved far enough away that we should abandon current
88558 + * low pass filtering state?
88559 + */
88560 + if ((coords[n] < (tsfs->reported[n] -
88561 + tsfs->config->averaging_threshold)) ||
88562 + (coords[n] > (tsfs->reported[n] +
88563 + tsfs->config->averaging_threshold))) {
88564 + tsfs->fhead[n] = 0;
88565 + tsfs->ftail[n] = 0;
88566 + tsfs->lowpass[n] = 0;
88567 + }
88568 +
88569 + /* capture this sample into fifo and sum */
88570 + tsfs->fifo[n][tsfs->fhead[n]++] = coords[n];
88571 + if (tsfs->fhead[n] == tsfs->config->extent)
88572 + tsfs->fhead[n] = 0;
88573 + tsfs->lowpass[n] += coords[n];
88574 +
88575 + /* adjust the sum into an average and use that*/
88576 + len = (tsfs->fhead[n] - tsfs->ftail[n]) &
88577 + (tsfs->config->extent - 1);
88578 + coords[n] = (tsfs->lowpass[n] + (len >> 1)) / len;
88579 + tsfs->reported[n] = coords[n];
88580 +
88581 + /* remove oldest sample if we are full */
88582 + if (len == (tsfs->config->extent - 1)) {
88583 + tsfs->lowpass[n] -= tsfs->fifo[n][tsfs->ftail[n]++];
88584 + if (tsfs->ftail[n] == tsfs->config->extent)
88585 + tsfs->ftail[n] = 0;
88586 + }
88587 + }
88588 +
88589 + if (tsf->next) /* chain */
88590 + return (tsf->next->api->process)(tsf->next, coords);
88591 +
88592 + return 1;
88593 +}
88594 +
88595 +struct ts_filter_api ts_filter_mean_api = {
88596 + .create = ts_filter_mean_create,
88597 + .destroy = ts_filter_mean_destroy,
88598 + .clear = ts_filter_mean_clear,
88599 + .process = ts_filter_mean_process,
88600 + .scale = ts_filter_mean_scale,
88601 +};
88602 Index: linux-2.6.28/drivers/input/touchscreen/ts_filter_median.c
88603 ===================================================================
88604 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
88605 +++ linux-2.6.28/drivers/input/touchscreen/ts_filter_median.c 2009-01-02 00:01:56.000000000 +0100
88606 @@ -0,0 +1,215 @@
88607 +/*
88608 + * This program is free software; you can redistribute it and/or modify
88609 + * it under the terms of the GNU General Public License as published by
88610 + * the Free Software Foundation; either version 2 of the License, or
88611 + * (at your option) any later version.
88612 + *
88613 + * This program is distributed in the hope that it will be useful,
88614 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
88615 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
88616 + * GNU General Public License for more details.
88617 + *
88618 + * You should have received a copy of the GNU General Public License
88619 + * along with this program; if not, write to the Free Software
88620 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
88621 + *
88622 + * Copyright (c) 2008 Andy Green <andy@openmoko.com>
88623 + *
88624 + *
88625 + * Median averaging stuff. We sort incoming raw samples into an array of
88626 + * MEDIAN_SIZE length, discarding the oldest sample each time once we are full.
88627 + * We then return the sum of the middle three samples for X and Y. It means
88628 + * the final result must be divided by (3 * scaling factor) to correct for
88629 + * avoiding the repeated /3.
88630 + *
88631 + * This strongly rejects brief excursions away from a central point that is
88632 + * sticky in time compared to the excursion duration.
88633 + *
88634 + * Thanks to Dale Schumacher (who wrote some example code) and Carl-Daniel
88635 + * Halifinger who pointed out this would be a good method.
88636 + */
88637 +
88638 +#include <linux/errno.h>
88639 +#include <linux/kernel.h>
88640 +#include <linux/slab.h>
88641 +#include <linux/ts_filter_median.h>
88642 +
88643 +static void ts_filter_median_insert(int *p, int sample, int count)
88644 +{
88645 + int n;
88646 +
88647 + /* search through what we got so far to find where to put sample */
88648 + for (n = 0; n < count; n++)
88649 + /* we met somebody bigger than us? */
88650 + if (sample < p[n]) {
88651 + /* starting from the end, push bigger guys down one */
88652 + for (count--; count >= n; count--)
88653 + p[count + 1] = p[count];
88654 + p[n] = sample; /* and put us in place of first bigger */
88655 + return;
88656 + }
88657 +
88658 + p[count] = sample; /* nobody was bigger than us, add us on the end */
88659 +}
88660 +
88661 +static void ts_filter_median_del(int *p, int value, int count)
88662 +{
88663 + int index;
88664 +
88665 + for (index = 0; index < count; index++)
88666 + if (p[index] == value) {
88667 + for (; index < count; index++)
88668 + p[index] = p[index + 1];
88669 + return;
88670 + }
88671 +}
88672 +
88673 +
88674 +static void ts_filter_median_clear_internal(struct ts_filter *tsf)
88675 +{
88676 + struct ts_filter_median *tsfm = (struct ts_filter_median *)tsf;
88677 +
88678 + tsfm->pos = 0;
88679 + tsfm->valid = 0;
88680 +
88681 +}
88682 +static void ts_filter_median_clear(struct ts_filter *tsf)
88683 +{
88684 + ts_filter_median_clear_internal(tsf);
88685 +
88686 + if (tsf->next) /* chain */
88687 + (tsf->next->api->clear)(tsf->next);
88688 +}
88689 +
88690 +static struct ts_filter *ts_filter_median_create(struct platform_device *pdev,
88691 + void *conf, int count_coords)
88692 +{
88693 + int *p;
88694 + int n;
88695 + struct ts_filter_median *tsfm = kzalloc(sizeof(struct ts_filter_median),
88696 + GFP_KERNEL);
88697 +
88698 + if (!tsfm)
88699 + return NULL;
88700 +
88701 + tsfm->config = (struct ts_filter_median_configuration *)conf;
88702 + BUG_ON((count_coords < 1) || (count_coords > MAX_TS_FILTER_COORDS));
88703 + tsfm->tsf.count_coords = count_coords;
88704 +
88705 + tsfm->config->midpoint = (tsfm->config->extent >> 1) + 1;
88706 +
88707 + p = kmalloc(2 * count_coords * sizeof(int) * (tsfm->config->extent + 1),
88708 + GFP_KERNEL);
88709 + if (!p) {
88710 + kfree(tsfm);
88711 + return NULL;
88712 + }
88713 +
88714 + for (n = 0; n < count_coords; n++) {
88715 + tsfm->sort[n] = p;
88716 + p += tsfm->config->extent + 1;
88717 + tsfm->fifo[n] = p;
88718 + p += tsfm->config->extent + 1;
88719 + }
88720 +
88721 + ts_filter_median_clear_internal(&tsfm->tsf);
88722 +
88723 + printk(KERN_INFO" Created Median ts filter len %d depth %d dec %d\n",
88724 + tsfm->config->extent, count_coords,
88725 + tsfm->config->decimation_threshold);
88726 +
88727 + return &tsfm->tsf;
88728 +}
88729 +
88730 +static void ts_filter_median_destroy(struct platform_device *pdev,
88731 + struct ts_filter *tsf)
88732 +{
88733 + struct ts_filter_median *tsfm = (struct ts_filter_median *)tsf;
88734 +
88735 + kfree(tsfm->sort[0]); /* first guy has pointer from kmalloc */
88736 + kfree(tsf);
88737 +}
88738 +
88739 +static void ts_filter_median_scale(struct ts_filter *tsf, int *coords)
88740 +{
88741 + int n;
88742 +
88743 + for (n = 0; n < tsf->count_coords; n++)
88744 + coords[n] = (coords[n] + 2) / 3;
88745 +
88746 + if (tsf->next) /* chain */
88747 + (tsf->next->api->scale)(tsf->next, coords);
88748 +}
88749 +
88750 +/* give us the raw sample data coords, and if we return 1 then you can
88751 + * get a filtered coordinate from coords: if we return 0 you didn't
88752 + * fill all the filters with samples yet.
88753 + */
88754 +
88755 +static int ts_filter_median_process(struct ts_filter *tsf, int *coords)
88756 +{
88757 + struct ts_filter_median *tsfm = (struct ts_filter_median *)tsf;
88758 + int n;
88759 + int movement = 1;
88760 +
88761 + for (n = 0; n < tsf->count_coords; n++) {
88762 + /* grab copy in insertion order to remove when oldest */
88763 + tsfm->fifo[n][tsfm->pos] = coords[n];
88764 + /* insert these samples in sorted order in the median arrays */
88765 + ts_filter_median_insert(tsfm->sort[n], coords[n], tsfm->valid);
88766 + }
88767 + /* move us on in the fifo */
88768 + if (++tsfm->pos == (tsfm->config->extent + 1))
88769 + tsfm->pos = 0;
88770 +
88771 + /* we have finished a median sampling? */
88772 + if (++tsfm->valid != tsfm->config->extent)
88773 + return 0; /* no valid sample to use */
88774 +
88775 + /* discard the oldest sample in median sorted array */
88776 + tsfm->valid--;
88777 +
88778 + /* sum the middle 3 in the median sorted arrays. We don't divide back
88779 + * down which increases the sum resolution by a factor of 3 until the
88780 + * scale API is called
88781 + */
88782 + for (n = 0; n < tsfm->tsf.count_coords; n++)
88783 + /* perform the deletion of the oldest sample */
88784 + ts_filter_median_del(tsfm->sort[n], tsfm->fifo[n][tsfm->pos],
88785 + tsfm->valid);
88786 +
88787 + tsfm->decimation_count--;
88788 + if (tsfm->decimation_count >= 0)
88789 + return 0;
88790 +
88791 + for (n = 0; n < tsfm->tsf.count_coords; n++) {
88792 + /* give the coordinate result from summing median 3 */
88793 + coords[n] = tsfm->sort[n][tsfm->config->midpoint - 1] +
88794 + tsfm->sort[n][tsfm->config->midpoint] +
88795 + tsfm->sort[n][tsfm->config->midpoint + 1]
88796 + ;
88797 +
88798 + movement += abs(tsfm->last_issued[n] - coords[n]);
88799 + }
88800 +
88801 + if (movement > tsfm->config->decimation_threshold) /* fast */
88802 + tsfm->decimation_count = tsfm->config->decimation_above;
88803 + else
88804 + tsfm->decimation_count = tsfm->config->decimation_below;
88805 +
88806 + memcpy(&tsfm->last_issued[0], coords,
88807 + tsfm->tsf.count_coords * sizeof(int));
88808 +
88809 + if (tsf->next) /* chain */
88810 + return (tsf->next->api->process)(tsf->next, coords);
88811 +
88812 + return 1;
88813 +}
88814 +
88815 +struct ts_filter_api ts_filter_median_api = {
88816 + .create = ts_filter_median_create,
88817 + .destroy = ts_filter_median_destroy,
88818 + .clear = ts_filter_median_clear,
88819 + .process = ts_filter_median_process,
88820 + .scale = ts_filter_median_scale,
88821 +};
88822 Index: linux-2.6.28/drivers/Kconfig
88823 ===================================================================
88824 --- linux-2.6.28.orig/drivers/Kconfig 2008-12-25 00:26:37.000000000 +0100
88825 +++ linux-2.6.28/drivers/Kconfig 2009-01-02 00:01:56.000000000 +0100
88826 @@ -107,4 +107,6 @@ source "drivers/uio/Kconfig"
88827 source "drivers/xen/Kconfig"
88828
88829 source "drivers/staging/Kconfig"
88830 +
88831 +source "drivers/android/Kconfig"
88832 endmenu
88833 Index: linux-2.6.28/drivers/leds/Kconfig
88834 ===================================================================
88835 --- linux-2.6.28.orig/drivers/leds/Kconfig 2009-01-02 00:00:02.000000000 +0100
88836 +++ linux-2.6.28/drivers/leds/Kconfig 2009-01-02 00:01:56.000000000 +0100
88837 @@ -33,7 +33,7 @@ config LEDS_LOCOMO
88838
88839 config LEDS_S3C24XX
88840 tristate "LED Support for Samsung S3C24XX GPIO LEDs"
88841 - depends on LEDS_CLASS && ARCH_S3C2410
88842 + depends on LEDS_CLASS && ARCH_S3C2410 && S3C2410_PWM
88843 help
88844 This option enables support for LEDs connected to GPIO lines
88845 on Samsung S3C24XX series CPUs, such as the S3C2410 and S3C2440.
88846 @@ -171,6 +171,18 @@ config LEDS_DA903X
88847 This option enables support for on-chip LED drivers found
88848 on Dialog Semiconductor DA9030/DA9034 PMICs.
88849
88850 +config LEDS_NEO1973_VIBRATOR
88851 + tristate "Vibrator Support for the FIC Neo1973 GSM phone"
88852 + depends on LEDS_CLASS && MACH_NEO1973
88853 + help
88854 + This option enables support for the vibrator on the FIC Neo1973.
88855 +
88856 +config LEDS_NEO1973_GTA02
88857 + tristate "LED Support for the FIC Neo1973 (GTA02)"
88858 + depends on LEDS_CLASS && MACH_NEO1973_GTA02
88859 + help
88860 + This option enables support for the LEDs on the FIC Neo1973.
88861 +
88862 comment "LED Triggers"
88863
88864 config LEDS_TRIGGERS
88865 Index: linux-2.6.28/drivers/leds/led-class.c
88866 ===================================================================
88867 --- linux-2.6.28.orig/drivers/leds/led-class.c 2008-12-25 00:26:37.000000000 +0100
88868 +++ linux-2.6.28/drivers/leds/led-class.c 2009-01-02 00:01:56.000000000 +0100
88869 @@ -56,8 +56,10 @@ static ssize_t led_brightness_store(stru
88870 if (count == size) {
88871 ret = count;
88872
88873 +#if 0 /* This is really bad. Don't do it!!!! */
88874 if (state == LED_OFF)
88875 led_trigger_remove(led_cdev);
88876 +#endif
88877 led_set_brightness(led_cdev, state);
88878 }
88879
88880 Index: linux-2.6.28/drivers/leds/leds-neo1973-gta02.c
88881 ===================================================================
88882 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
88883 +++ linux-2.6.28/drivers/leds/leds-neo1973-gta02.c 2009-01-02 00:01:56.000000000 +0100
88884 @@ -0,0 +1,179 @@
88885 +/*
88886 + * LED driver for the Openmoko GTA02 GSM phone
88887 + *
88888 + * (C) 2006-2008 by Openmoko, Inc.
88889 + * Author: Harald Welte <laforge@openmoko.org>
88890 + * All rights reserved.
88891 + *
88892 + * This program is free software; you can redistribute it and/or modify
88893 + * it under the terms of the GNU General Public License version 2 as
88894 + * published by the Free Software Foundation.
88895 + *
88896 + */
88897 +
88898 +#include <linux/kernel.h>
88899 +#include <linux/init.h>
88900 +#include <linux/platform_device.h>
88901 +#include <linux/leds.h>
88902 +#include <mach/hardware.h>
88903 +#include <asm/mach-types.h>
88904 +#include <mach/gta02.h>
88905 +#include <plat/regs-timer.h>
88906 +#include <asm/plat-s3c24xx/neo1973.h>
88907 +
88908 +#define MAX_LEDS 3
88909 +#define COUNTER 256
88910 +
88911 +struct gta02_led_priv
88912 +{
88913 + spinlock_t lock;
88914 + struct led_classdev cdev;
88915 + unsigned int gpio;
88916 +};
88917 +
88918 +struct gta02_led_bundle
88919 +{
88920 + int num_leds;
88921 + struct gta02_led_priv led[MAX_LEDS];
88922 +};
88923 +
88924 +static inline struct gta02_led_priv *to_priv(struct led_classdev *led_cdev)
88925 +{
88926 + return container_of(led_cdev, struct gta02_led_priv, cdev);
88927 +}
88928 +
88929 +static inline struct gta02_led_bundle *to_bundle(struct led_classdev *led_cdev)
88930 +{
88931 + return dev_get_drvdata(led_cdev->dev->parent);
88932 +}
88933 +
88934 +static void gta02led_set(struct led_classdev *led_cdev,
88935 + enum led_brightness value)
88936 +{
88937 + unsigned long flags;
88938 + struct gta02_led_priv *lp = to_priv(led_cdev);
88939 +
88940 + spin_lock_irqsave(&lp->lock, flags);
88941 + neo1973_gpb_setpin(lp->gpio, value ? 1 : 0);
88942 + spin_unlock_irqrestore(&lp->lock, flags);
88943 +}
88944 +
88945 +#ifdef CONFIG_PM
88946 +static int gta02led_suspend(struct platform_device *pdev, pm_message_t state)
88947 +{
88948 + struct gta02_led_bundle *bundle = platform_get_drvdata(pdev);
88949 + int i;
88950 +
88951 + for (i = 0; i < bundle->num_leds; i++)
88952 + led_classdev_suspend(&bundle->led[i].cdev);
88953 +
88954 + return 0;
88955 +}
88956 +
88957 +static int gta02led_resume(struct platform_device *pdev)
88958 +{
88959 + struct gta02_led_bundle *bundle = platform_get_drvdata(pdev);
88960 + int i;
88961 +
88962 + for (i = 0; i < bundle->num_leds; i++)
88963 + led_classdev_resume(&bundle->led[i].cdev);
88964 +
88965 + return 0;
88966 +}
88967 +#endif
88968 +
88969 +static int __init gta02led_probe(struct platform_device *pdev)
88970 +{
88971 + int i, rc;
88972 + struct gta02_led_bundle *bundle;
88973 +
88974 + if (!machine_is_neo1973_gta02())
88975 + return -EIO;
88976 +
88977 + bundle = kzalloc(sizeof(struct gta02_led_bundle), GFP_KERNEL);
88978 + if (!bundle)
88979 + return -ENOMEM;
88980 + platform_set_drvdata(pdev, bundle);
88981 +
88982 + for (i = 0; i < pdev->num_resources; i++) {
88983 + struct gta02_led_priv *lp;
88984 + struct resource *r;
88985 +
88986 + if (i >= MAX_LEDS)
88987 + break;
88988 +
88989 + r = platform_get_resource(pdev, 0, i);
88990 + if (!r || !r->start || !r->name)
88991 + continue;
88992 +
88993 + lp = &bundle->led[i];
88994 +
88995 + lp->gpio = r->start;
88996 + lp->cdev.name = r->name;
88997 + lp->cdev.brightness_set = gta02led_set;
88998 +
88999 + switch (lp->gpio) {
89000 + case S3C2410_GPB0:
89001 + case S3C2410_GPB1:
89002 + case S3C2410_GPB2:
89003 + s3c2410_gpio_cfgpin(lp->gpio, S3C2410_GPIO_OUTPUT);
89004 + neo1973_gpb_add_shadow_gpio(lp->gpio);
89005 + break;
89006 + default:
89007 + break;
89008 + }
89009 +
89010 + spin_lock_init(&lp->lock);
89011 + rc = led_classdev_register(&pdev->dev, &lp->cdev);
89012 + }
89013 +
89014 + bundle->num_leds = i;
89015 +
89016 + return 0;
89017 +}
89018 +
89019 +static int gta02led_remove(struct platform_device *pdev)
89020 +{
89021 + struct gta02_led_bundle *bundle = platform_get_drvdata(pdev);
89022 + int i;
89023 +
89024 + for (i = 0; i < bundle->num_leds; i++) {
89025 + struct gta02_led_priv *lp = &bundle->led[i];
89026 + gta02led_set(&lp->cdev, 0);
89027 + led_classdev_unregister(&lp->cdev);
89028 + }
89029 +
89030 + platform_set_drvdata(pdev, NULL);
89031 + kfree(bundle);
89032 +
89033 + return 0;
89034 +}
89035 +
89036 +static struct platform_driver gta02led_driver = {
89037 + .probe = gta02led_probe,
89038 + .remove = gta02led_remove,
89039 +#ifdef CONFIG_PM
89040 + .suspend = gta02led_suspend,
89041 + .resume = gta02led_resume,
89042 +#endif
89043 + .driver = {
89044 + .name = "gta02-led",
89045 + },
89046 +};
89047 +
89048 +static int __init gta02led_init(void)
89049 +{
89050 + return platform_driver_register(&gta02led_driver);
89051 +}
89052 +
89053 +static void __exit gta02led_exit(void)
89054 +{
89055 + platform_driver_unregister(&gta02led_driver);
89056 +}
89057 +
89058 +module_init(gta02led_init);
89059 +module_exit(gta02led_exit);
89060 +
89061 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
89062 +MODULE_DESCRIPTION("Openmoko GTA02 LED driver");
89063 +MODULE_LICENSE("GPL");
89064 Index: linux-2.6.28/drivers/leds/leds-neo1973-vibrator.c
89065 ===================================================================
89066 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
89067 +++ linux-2.6.28/drivers/leds/leds-neo1973-vibrator.c 2009-01-02 00:01:56.000000000 +0100
89068 @@ -0,0 +1,209 @@
89069 +/*
89070 + * LED driver for the vibrator of the Openmoko GTA01/GTA02 GSM Phones
89071 + *
89072 + * (C) 2006-2008 by Openmoko, Inc.
89073 + * Author: Harald Welte <laforge@openmoko.org>
89074 + * All rights reserved.
89075 + *
89076 + * This program is free software; you can redistribute it and/or modify
89077 + * it under the terms of the GNU General Public License version 2 as
89078 + * published by the Free Software Foundation.
89079 + *
89080 + * Javi Roman <javiroman@kernel-labs.org>:
89081 + * Implement PWM support for GTA01Bv4 and later
89082 + */
89083 +
89084 +#include <linux/kernel.h>
89085 +#include <linux/init.h>
89086 +#include <linux/platform_device.h>
89087 +#include <linux/leds.h>
89088 +#include <mach/hardware.h>
89089 +#include <asm/mach-types.h>
89090 +#include <mach/pwm.h>
89091 +#include <mach/gta01.h>
89092 +#include <plat/regs-timer.h>
89093 +
89094 +#ifdef CONFIG_MACH_NEO1973_GTA02
89095 +#include <mach/fiq_ipc_gta02.h>
89096 +#endif
89097 +#include <asm/plat-s3c24xx/neo1973.h>
89098 +
89099 +#define COUNTER 64
89100 +
89101 +struct neo1973_vib_priv {
89102 + struct led_classdev cdev;
89103 + unsigned int gpio;
89104 + spinlock_t lock;
89105 + unsigned int has_pwm;
89106 + struct s3c2410_pwm pwm;
89107 +};
89108 +
89109 +static void neo1973_vib_vib_set(struct led_classdev *led_cdev,
89110 + enum led_brightness value)
89111 +{
89112 + unsigned long flags;
89113 + struct neo1973_vib_priv *vp = container_of(led_cdev,
89114 + struct neo1973_vib_priv,
89115 + cdev);
89116 +
89117 +#ifdef CONFIG_MACH_NEO1973_GTA02
89118 + if (machine_is_neo1973_gta02()) { /* use FIQ to control GPIO */
89119 + fiq_ipc.vib_pwm = value; /* set it for FIQ */
89120 + fiq_kick(); /* start up FIQs if not already going */
89121 + return;
89122 + }
89123 +#endif
89124 + /*
89125 + * value == 255 -> 99% duty cycle (full power)
89126 + * value == 128 -> 50% duty cycle (medium power)
89127 + * value == 0 -> 0% duty cycle (zero power)
89128 + */
89129 + spin_lock_irqsave(&vp->lock, flags);
89130 + if (vp->has_pwm) {
89131 + s3c2410_pwm_duty_cycle(value / 4, &vp->pwm);
89132 + }
89133 + else {
89134 + neo1973_gpb_setpin(vp->gpio, value ? 1 : 0);
89135 + }
89136 + spin_unlock_irqrestore(&vp->lock, flags);
89137 +}
89138 +
89139 +static struct neo1973_vib_priv neo1973_vib_led = {
89140 + .cdev = {
89141 + .name = "neo1973:vibrator",
89142 + .brightness_set = neo1973_vib_vib_set,
89143 + },
89144 +};
89145 +
89146 +static int neo1973_vib_init_hw(struct neo1973_vib_priv *vp)
89147 +{
89148 + int rc;
89149 +
89150 + rc = s3c2410_pwm_init(&vp->pwm);
89151 + if (rc)
89152 + return rc;
89153 +
89154 + vp->pwm.timerid = PWM3;
89155 + /* use same prescaler as arch/arm/plat-s3c24xx/time.c */
89156 + vp->pwm.prescaler = (6 - 1) / 2;
89157 + vp->pwm.divider = S3C2410_TCFG1_MUX3_DIV2;
89158 + vp->pwm.counter = COUNTER;
89159 + vp->pwm.comparer = COUNTER;
89160 +
89161 + rc = s3c2410_pwm_enable(&vp->pwm);
89162 + if (rc)
89163 + return rc;
89164 +
89165 + s3c2410_pwm_start(&vp->pwm);
89166 +
89167 + return 0;
89168 +}
89169 +
89170 +#ifdef CONFIG_PM
89171 +static int neo1973_vib_suspend(struct platform_device *dev, pm_message_t state)
89172 +{
89173 + led_classdev_suspend(&neo1973_vib_led.cdev);
89174 + return 0;
89175 +}
89176 +
89177 +static int neo1973_vib_resume(struct platform_device *dev)
89178 +{
89179 + struct neo1973_vib_priv *vp = platform_get_drvdata(dev);
89180 +
89181 + if (vp->has_pwm)
89182 + neo1973_vib_init_hw(vp);
89183 +
89184 + led_classdev_resume(&neo1973_vib_led.cdev);
89185 +
89186 + return 0;
89187 +}
89188 +#endif /* CONFIG_PM */
89189 +
89190 +static int __init neo1973_vib_probe(struct platform_device *pdev)
89191 +{
89192 + struct resource *r;
89193 + int rc;
89194 +
89195 + if (!machine_is_neo1973_gta01() && !machine_is_neo1973_gta02())
89196 + return -EIO;
89197 +
89198 + r = platform_get_resource(pdev, 0, 0);
89199 + if (!r || !r->start)
89200 + return -EIO;
89201 +
89202 + neo1973_vib_led.gpio = r->start;
89203 + platform_set_drvdata(pdev, &neo1973_vib_led);
89204 +
89205 +#ifdef CONFIG_MACH_NEO1973_GTA02
89206 + if (machine_is_neo1973_gta02()) { /* use FIQ to control GPIO */
89207 + neo1973_gpb_setpin(neo1973_vib_led.gpio, 0); /* off */
89208 + s3c2410_gpio_cfgpin(neo1973_vib_led.gpio, S3C2410_GPIO_OUTPUT);
89209 + /* safe, kmalloc'd copy needed for FIQ ISR */
89210 + fiq_ipc.vib_gpio_pin = neo1973_vib_led.gpio;
89211 + fiq_ipc.vib_pwm = 0; /* off */
89212 + goto configured;
89213 + }
89214 +#endif
89215 +
89216 + /* TOUT3 */
89217 + if (neo1973_vib_led.gpio == S3C2410_GPB3) {
89218 + rc = neo1973_vib_init_hw(&neo1973_vib_led);
89219 + if (rc)
89220 + return rc;
89221 +
89222 + s3c2410_pwm_duty_cycle(0, &neo1973_vib_led.pwm);
89223 + s3c2410_gpio_cfgpin(neo1973_vib_led.gpio, S3C2410_GPB3_TOUT3);
89224 + neo1973_vib_led.has_pwm = 1;
89225 + }
89226 +#ifdef CONFIG_MACH_NEO1973_GTA02
89227 +configured:
89228 +#endif
89229 + spin_lock_init(&neo1973_vib_led.lock);
89230 +
89231 + return led_classdev_register(&pdev->dev, &neo1973_vib_led.cdev);
89232 +}
89233 +
89234 +static int neo1973_vib_remove(struct platform_device *pdev)
89235 +{
89236 +#ifdef CONFIG_MACH_NEO1973_GTA02
89237 + if (machine_is_neo1973_gta02()) /* use FIQ to control GPIO */
89238 + fiq_ipc.vib_pwm = 0; /* off */
89239 + /* would only need kick if already off so no kick needed */
89240 +#endif
89241 +
89242 + if (neo1973_vib_led.has_pwm)
89243 + s3c2410_pwm_disable(&neo1973_vib_led.pwm);
89244 +
89245 + led_classdev_unregister(&neo1973_vib_led.cdev);
89246 +
89247 + return 0;
89248 +}
89249 +
89250 +static struct platform_driver neo1973_vib_driver = {
89251 + .probe = neo1973_vib_probe,
89252 + .remove = neo1973_vib_remove,
89253 +#ifdef CONFIG_PM
89254 + .suspend = neo1973_vib_suspend,
89255 + .resume = neo1973_vib_resume,
89256 +#endif
89257 + .driver = {
89258 + .name = "neo1973-vibrator",
89259 + },
89260 +};
89261 +
89262 +static int __init neo1973_vib_init(void)
89263 +{
89264 + return platform_driver_register(&neo1973_vib_driver);
89265 +}
89266 +
89267 +static void __exit neo1973_vib_exit(void)
89268 +{
89269 + platform_driver_unregister(&neo1973_vib_driver);
89270 +}
89271 +
89272 +module_init(neo1973_vib_init);
89273 +module_exit(neo1973_vib_exit);
89274 +
89275 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
89276 +MODULE_DESCRIPTION("Openmoko GTA01/GTA02 vibrator driver");
89277 +MODULE_LICENSE("GPL");
89278 Index: linux-2.6.28/drivers/leds/Makefile
89279 ===================================================================
89280 --- linux-2.6.28.orig/drivers/leds/Makefile 2009-01-02 00:00:02.000000000 +0100
89281 +++ linux-2.6.28/drivers/leds/Makefile 2009-01-02 00:01:56.000000000 +0100
89282 @@ -24,6 +24,8 @@ obj-$(CONFIG_LEDS_FSG) += leds-fsg.o
89283 obj-$(CONFIG_LEDS_PCA955X) += leds-pca955x.o
89284 obj-$(CONFIG_LEDS_DA903X) += leds-da903x.o
89285 obj-$(CONFIG_LEDS_HP_DISK) += leds-hp-disk.o
89286 +obj-$(CONFIG_LEDS_NEO1973_VIBRATOR) += leds-neo1973-vibrator.o
89287 +obj-$(CONFIG_LEDS_NEO1973_GTA02) += leds-neo1973-gta02.o
89288
89289 # LED Triggers
89290 obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
89291 Index: linux-2.6.28/drivers/Makefile
89292 ===================================================================
89293 --- linux-2.6.28.orig/drivers/Makefile 2008-12-25 00:26:37.000000000 +0100
89294 +++ linux-2.6.28/drivers/Makefile 2009-01-02 00:01:56.000000000 +0100
89295 @@ -86,6 +86,7 @@ obj-$(CONFIG_CPU_IDLE) += cpuidle/
89296 obj-y += idle/
89297 obj-$(CONFIG_MMC) += mmc/
89298 obj-$(CONFIG_MEMSTICK) += memstick/
89299 +obj-$(CONFIG_AR6000_WLAN) += ar6000/
89300 obj-$(CONFIG_NEW_LEDS) += leds/
89301 obj-$(CONFIG_INFINIBAND) += infiniband/
89302 obj-$(CONFIG_SGI_SN) += sn/
89303 @@ -98,6 +99,7 @@ obj-$(CONFIG_DCA) += dca/
89304 obj-$(CONFIG_HID) += hid/
89305 obj-$(CONFIG_PPC_PS3) += ps3/
89306 obj-$(CONFIG_OF) += of/
89307 +obj-y += android/
89308 obj-$(CONFIG_SSB) += ssb/
89309 obj-$(CONFIG_VIRTIO) += virtio/
89310 obj-$(CONFIG_REGULATOR) += regulator/
89311 Index: linux-2.6.28/drivers/mfd/glamo/glamo-core.c
89312 ===================================================================
89313 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
89314 +++ linux-2.6.28/drivers/mfd/glamo/glamo-core.c 2009-01-02 00:01:56.000000000 +0100
89315 @@ -0,0 +1,1399 @@
89316 +/* Smedia Glamo 336x/337x driver
89317 + *
89318 + * (C) 2007 by Openmoko, Inc.
89319 + * Author: Harald Welte <laforge@openmoko.org>
89320 + * All rights reserved.
89321 + *
89322 + * This program is free software; you can redistribute it and/or
89323 + * modify it under the terms of the GNU General Public License as
89324 + * published by the Free Software Foundation; either version 2 of
89325 + * the License, or (at your option) any later version.
89326 + *
89327 + * This program is distributed in the hope that it will be useful,
89328 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
89329 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
89330 + * GNU General Public License for more details.
89331 + *
89332 + * You should have received a copy of the GNU General Public License
89333 + * along with this program; if not, write to the Free Software
89334 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
89335 + * MA 02111-1307 USA
89336 + */
89337 +
89338 +#include <linux/module.h>
89339 +#include <linux/kernel.h>
89340 +#include <linux/errno.h>
89341 +#include <linux/string.h>
89342 +#include <linux/mm.h>
89343 +#include <linux/tty.h>
89344 +#include <linux/slab.h>
89345 +#include <linux/delay.h>
89346 +#include <linux/fb.h>
89347 +#include <linux/init.h>
89348 +#include <linux/irq.h>
89349 +#include <linux/interrupt.h>
89350 +#include <linux/workqueue.h>
89351 +#include <linux/wait.h>
89352 +#include <linux/platform_device.h>
89353 +#include <linux/kernel_stat.h>
89354 +#include <linux/spinlock.h>
89355 +#include <linux/glamofb.h>
89356 +#include <linux/mmc/mmc.h>
89357 +#include <linux/mmc/host.h>
89358 +
89359 +#include <asm/io.h>
89360 +#include <asm/uaccess.h>
89361 +#include <asm/div64.h>
89362 +
89363 +//#include <mach/regs-irq.h>
89364 +
89365 +#ifdef CONFIG_PM
89366 +#include <linux/pm.h>
89367 +#endif
89368 +
89369 +#include "glamo-regs.h"
89370 +#include "glamo-core.h"
89371 +
89372 +#define RESSIZE(ressource) (((ressource)->end - (ressource)->start)+1)
89373 +
89374 +#define GLAMO_MEM_REFRESH_COUNT 0x100
89375 +
89376 +struct reg_range {
89377 + int start;
89378 + int count;
89379 + char *name;
89380 + char dump;
89381 +};
89382 +struct reg_range reg_range[] = {
89383 + { 0x0000, 0x76, "General", 1 },
89384 + { 0x0200, 0x16, "Host Bus", 1 },
89385 + { 0x0300, 0x38, "Memory", 1 },
89386 +/* { 0x0400, 0x100, "Sensor", 0 }, */
89387 +/* { 0x0500, 0x300, "ISP", 0 }, */
89388 +/* { 0x0800, 0x400, "JPEG", 0 }, */
89389 +/* { 0x0c00, 0xcc, "MPEG", 0 }, */
89390 + { 0x1100, 0xb2, "LCD 1", 1 },
89391 + { 0x1200, 0x64, "LCD 2", 1 },
89392 + { 0x1400, 0x40, "MMC", 1 },
89393 +/* { 0x1500, 0x080, "MPU 0", 0 },
89394 + { 0x1580, 0x080, "MPU 1", 0 },
89395 + { 0x1600, 0x080, "Cmd Queue", 0 },
89396 + { 0x1680, 0x080, "RISC CPU", 0 },
89397 + { 0x1700, 0x400, "2D Unit", 0 },
89398 + { 0x1b00, 0x900, "3D Unit", 0 }, */
89399 +};
89400 +
89401 +static struct glamo_core *glamo_handle;
89402 +
89403 +static inline void __reg_write(struct glamo_core *glamo,
89404 + u_int16_t reg, u_int16_t val)
89405 +{
89406 + writew(val, glamo->base + reg);
89407 +}
89408 +
89409 +static inline u_int16_t __reg_read(struct glamo_core *glamo,
89410 + u_int16_t reg)
89411 +{
89412 + return readw(glamo->base + reg);
89413 +}
89414 +
89415 +static void __reg_set_bit_mask(struct glamo_core *glamo,
89416 + u_int16_t reg, u_int16_t mask,
89417 + u_int16_t val)
89418 +{
89419 + u_int16_t tmp;
89420 +
89421 + val &= mask;
89422 +
89423 + tmp = __reg_read(glamo, reg);
89424 + tmp &= ~mask;
89425 + tmp |= val;
89426 + __reg_write(glamo, reg, tmp);
89427 +}
89428 +
89429 +static void reg_set_bit_mask(struct glamo_core *glamo,
89430 + u_int16_t reg, u_int16_t mask,
89431 + u_int16_t val)
89432 +{
89433 + spin_lock(&glamo->lock);
89434 + __reg_set_bit_mask(glamo, reg, mask, val);
89435 + spin_unlock(&glamo->lock);
89436 +}
89437 +
89438 +static inline void __reg_set_bit(struct glamo_core *glamo,
89439 + u_int16_t reg, u_int16_t bit)
89440 +{
89441 + __reg_set_bit_mask(glamo, reg, bit, 0xffff);
89442 +}
89443 +
89444 +static inline void __reg_clear_bit(struct glamo_core *glamo,
89445 + u_int16_t reg, u_int16_t bit)
89446 +{
89447 + __reg_set_bit_mask(glamo, reg, bit, 0);
89448 +}
89449 +
89450 +static inline void glamo_vmem_write(struct glamo_core *glamo, u_int32_t addr,
89451 + u_int16_t *src, int len)
89452 +{
89453 + if (addr & 0x0001 || (unsigned long)src & 0x0001 || len & 0x0001) {
89454 + dev_err(&glamo->pdev->dev, "unaligned write(0x%08x, 0x%p, "
89455 + "0x%x)!!\n", addr, src, len);
89456 + }
89457 +
89458 +}
89459 +
89460 +static inline void glamo_vmem_read(struct glamo_core *glamo, u_int16_t *buf,
89461 + u_int32_t addr, int len)
89462 +{
89463 + if (addr & 0x0001 || (unsigned long) buf & 0x0001 || len & 0x0001) {
89464 + dev_err(&glamo->pdev->dev, "unaligned read(0x%p, 0x08%x, "
89465 + "0x%x)!!\n", buf, addr, len);
89466 + }
89467 +
89468 +
89469 +}
89470 +
89471 +/***********************************************************************
89472 + * resources of sibling devices
89473 + ***********************************************************************/
89474 +
89475 +#if 0
89476 +static struct resource glamo_core_resources[] = {
89477 + {
89478 + .start = GLAMO_REGOFS_GENERIC,
89479 + .end = GLAMO_REGOFS_GENERIC + 0x400,
89480 + .flags = IORESOURCE_MEM,
89481 + }, {
89482 + .start = 0,
89483 + .end = 0,
89484 + .flags = IORESOURCE_IRQ,
89485 + },
89486 +};
89487 +
89488 +static struct platform_device glamo_core_dev = {
89489 + .name = "glamo-core",
89490 + .resource = &glamo_core_resources,
89491 + .num_resources = ARRAY_SIZE(glamo_core_resources),
89492 +};
89493 +#endif
89494 +
89495 +static struct resource glamo_jpeg_resources[] = {
89496 + {
89497 + .start = GLAMO_REGOFS_JPEG,
89498 + .end = GLAMO_REGOFS_MPEG - 1,
89499 + .flags = IORESOURCE_MEM,
89500 + }, {
89501 + .start = IRQ_GLAMO_JPEG,
89502 + .end = IRQ_GLAMO_JPEG,
89503 + .flags = IORESOURCE_IRQ,
89504 + },
89505 +};
89506 +
89507 +static struct platform_device glamo_jpeg_dev = {
89508 + .name = "glamo-jpeg",
89509 + .resource = glamo_jpeg_resources,
89510 + .num_resources = ARRAY_SIZE(glamo_jpeg_resources),
89511 +};
89512 +
89513 +static struct resource glamo_mpeg_resources[] = {
89514 + {
89515 + .start = GLAMO_REGOFS_MPEG,
89516 + .end = GLAMO_REGOFS_LCD - 1,
89517 + .flags = IORESOURCE_MEM,
89518 + }, {
89519 + .start = IRQ_GLAMO_MPEG,
89520 + .end = IRQ_GLAMO_MPEG,
89521 + .flags = IORESOURCE_IRQ,
89522 + },
89523 +};
89524 +
89525 +static struct platform_device glamo_mpeg_dev = {
89526 + .name = "glamo-mpeg",
89527 + .resource = glamo_mpeg_resources,
89528 + .num_resources = ARRAY_SIZE(glamo_mpeg_resources),
89529 +};
89530 +
89531 +static struct resource glamo_2d_resources[] = {
89532 + {
89533 + .start = GLAMO_REGOFS_2D,
89534 + .end = GLAMO_REGOFS_3D - 1,
89535 + .flags = IORESOURCE_MEM,
89536 + }, {
89537 + .start = IRQ_GLAMO_2D,
89538 + .end = IRQ_GLAMO_2D,
89539 + .flags = IORESOURCE_IRQ,
89540 + },
89541 +};
89542 +
89543 +static struct platform_device glamo_2d_dev = {
89544 + .name = "glamo-2d",
89545 + .resource = glamo_2d_resources,
89546 + .num_resources = ARRAY_SIZE(glamo_2d_resources),
89547 +};
89548 +
89549 +static struct resource glamo_3d_resources[] = {
89550 + {
89551 + .start = GLAMO_REGOFS_3D,
89552 + .end = GLAMO_REGOFS_END - 1,
89553 + .flags = IORESOURCE_MEM,
89554 + },
89555 +};
89556 +
89557 +static struct platform_device glamo_3d_dev = {
89558 + .name = "glamo-3d",
89559 + .resource = glamo_3d_resources,
89560 + .num_resources = ARRAY_SIZE(glamo_3d_resources),
89561 +};
89562 +
89563 +static struct platform_device glamo_spigpio_dev = {
89564 + .name = "glamo-spi-gpio",
89565 +};
89566 +
89567 +static struct resource glamo_fb_resources[] = {
89568 + /* FIXME: those need to be incremented by parent base */
89569 + {
89570 + .name = "glamo-fb-regs",
89571 + .start = GLAMO_REGOFS_LCD,
89572 + .end = GLAMO_REGOFS_MMC - 1,
89573 + .flags = IORESOURCE_MEM,
89574 + }, {
89575 + .name = "glamo-fb-mem",
89576 + .start = GLAMO_OFFSET_FB,
89577 + .end = GLAMO_OFFSET_FB + GLAMO_FB_SIZE - 1,
89578 + .flags = IORESOURCE_MEM,
89579 + },
89580 +};
89581 +
89582 +static struct platform_device glamo_fb_dev = {
89583 + .name = "glamo-fb",
89584 + .resource = glamo_fb_resources,
89585 + .num_resources = ARRAY_SIZE(glamo_fb_resources),
89586 +};
89587 +
89588 +static struct resource glamo_mmc_resources[] = {
89589 + {
89590 + /* FIXME: those need to be incremented by parent base */
89591 + .start = GLAMO_REGOFS_MMC,
89592 + .end = GLAMO_REGOFS_MPROC0 - 1,
89593 + .flags = IORESOURCE_MEM
89594 + }, {
89595 + .start = IRQ_GLAMO_MMC,
89596 + .end = IRQ_GLAMO_MMC,
89597 + .flags = IORESOURCE_IRQ,
89598 + }, { /* our data buffer for MMC transfers */
89599 + .start = GLAMO_OFFSET_FB + GLAMO_FB_SIZE,
89600 + .end = GLAMO_OFFSET_FB + GLAMO_FB_SIZE +
89601 + GLAMO_MMC_BUFFER_SIZE - 1,
89602 + .flags = IORESOURCE_MEM
89603 + },
89604 +};
89605 +
89606 +struct glamo_mci_pdata glamo_mci_def_pdata = {
89607 + .gpio_detect = 0,
89608 + .glamo_can_set_mci_power = NULL, /* filled in from MFD platform data */
89609 + .ocr_avail = MMC_VDD_20_21 |
89610 + MMC_VDD_21_22 |
89611 + MMC_VDD_22_23 |
89612 + MMC_VDD_23_24 |
89613 + MMC_VDD_24_25 |
89614 + MMC_VDD_25_26 |
89615 + MMC_VDD_26_27 |
89616 + MMC_VDD_27_28 |
89617 + MMC_VDD_28_29 |
89618 + MMC_VDD_29_30 |
89619 + MMC_VDD_30_31 |
89620 + MMC_VDD_32_33,
89621 + .glamo_irq_is_wired = NULL, /* filled in from MFD platform data */
89622 + .mci_suspending = NULL, /* filled in from MFD platform data */
89623 + .mci_all_dependencies_resumed = NULL, /* filled in from MFD platform data */
89624 +};
89625 +EXPORT_SYMBOL_GPL(glamo_mci_def_pdata);
89626 +
89627 +
89628 +
89629 +static void mangle_mem_resources(struct resource *res, int num_res,
89630 + struct resource *parent)
89631 +{
89632 + int i;
89633 +
89634 + for (i = 0; i < num_res; i++) {
89635 + if (res[i].flags != IORESOURCE_MEM)
89636 + continue;
89637 + res[i].start += parent->start;
89638 + res[i].end += parent->start;
89639 + res[i].parent = parent;
89640 + }
89641 +}
89642 +
89643 +/***********************************************************************
89644 + * IRQ demultiplexer
89645 + ***********************************************************************/
89646 +#define irq2glamo(x) (x - IRQ_GLAMO(0))
89647 +
89648 +static void glamo_ack_irq(unsigned int irq)
89649 +{
89650 + /* clear interrupt source */
89651 + __reg_write(glamo_handle, GLAMO_REG_IRQ_CLEAR,
89652 + 1 << irq2glamo(irq));
89653 +}
89654 +
89655 +static void glamo_mask_irq(unsigned int irq)
89656 +{
89657 + u_int16_t tmp;
89658 +
89659 + /* clear bit in enable register */
89660 + tmp = __reg_read(glamo_handle, GLAMO_REG_IRQ_ENABLE);
89661 + tmp &= ~(1 << irq2glamo(irq));
89662 + __reg_write(glamo_handle, GLAMO_REG_IRQ_ENABLE, tmp);
89663 +}
89664 +
89665 +static void glamo_unmask_irq(unsigned int irq)
89666 +{
89667 + u_int16_t tmp;
89668 +
89669 + /* set bit in enable register */
89670 + tmp = __reg_read(glamo_handle, GLAMO_REG_IRQ_ENABLE);
89671 + tmp |= (1 << irq2glamo(irq));
89672 + __reg_write(glamo_handle, GLAMO_REG_IRQ_ENABLE, tmp);
89673 +}
89674 +
89675 +static struct irq_chip glamo_irq_chip = {
89676 + .ack = glamo_ack_irq,
89677 + .mask = glamo_mask_irq,
89678 + .unmask = glamo_unmask_irq,
89679 +};
89680 +
89681 +static void glamo_irq_demux_handler(unsigned int irq, struct irq_desc *desc)
89682 +{
89683 + const unsigned int cpu = smp_processor_id();
89684 +
89685 + desc->status &= ~(IRQ_REPLAY | IRQ_WAITING);
89686 +
89687 + if (unlikely(desc->status & IRQ_INPROGRESS)) {
89688 + desc->status |= (IRQ_PENDING | IRQ_MASKED);
89689 + desc->chip->mask(irq);
89690 + desc->chip->ack(irq);
89691 + return;
89692 + }
89693 +
89694 + kstat_cpu(cpu).irqs[irq]++;
89695 + desc->chip->ack(irq);
89696 + desc->status |= IRQ_INPROGRESS;
89697 +
89698 + do {
89699 + u_int16_t irqstatus;
89700 + int i;
89701 +
89702 + if (unlikely((desc->status &
89703 + (IRQ_PENDING | IRQ_MASKED | IRQ_DISABLED)) ==
89704 + (IRQ_PENDING | IRQ_MASKED))) {
89705 + /* dealing with pending IRQ, unmasking */
89706 + desc->chip->unmask(irq);
89707 + desc->status &= ~IRQ_MASKED;
89708 + }
89709 +
89710 + desc->status &= ~IRQ_PENDING;
89711 +
89712 + /* read IRQ status register */
89713 + irqstatus = __reg_read(glamo_handle, GLAMO_REG_IRQ_STATUS);
89714 + for (i = 0; i < 9; i++)
89715 + if (irqstatus & (1 << i))
89716 + desc_handle_irq(IRQ_GLAMO(i),
89717 + irq_desc+IRQ_GLAMO(i));
89718 +
89719 + } while ((desc->status & (IRQ_PENDING | IRQ_DISABLED)) == IRQ_PENDING);
89720 +
89721 + desc->status &= ~IRQ_INPROGRESS;
89722 +}
89723 +
89724 +
89725 +static ssize_t regs_write(struct device *dev, struct device_attribute *attr,
89726 + const char *buf, size_t count)
89727 +{
89728 + unsigned long reg = simple_strtoul(buf, NULL, 10);
89729 + struct glamo_core *glamo = dev_get_drvdata(dev);
89730 +
89731 + while (*buf && (*buf != ' '))
89732 + buf++;
89733 + if (*buf != ' ')
89734 + return -EINVAL;
89735 + while (*buf && (*buf == ' '))
89736 + buf++;
89737 + if (!*buf)
89738 + return -EINVAL;
89739 +
89740 + printk(KERN_INFO"reg 0x%02lX <-- 0x%04lX\n",
89741 + reg, simple_strtoul(buf, NULL, 10));
89742 +
89743 + __reg_write(glamo, reg, simple_strtoul(buf, NULL, 10));
89744 +
89745 + return count;
89746 +}
89747 +
89748 +static ssize_t regs_read(struct device *dev, struct device_attribute *attr,
89749 + char *buf)
89750 +{
89751 + struct glamo_core *glamo = dev_get_drvdata(dev);
89752 + int n, n1 = 0, r;
89753 + char * end = buf;
89754 +
89755 + spin_lock(&glamo->lock);
89756 +
89757 + for (r = 0; r < ARRAY_SIZE(reg_range); r++) {
89758 + if (!reg_range[r].dump)
89759 + continue;
89760 + n1 = 0;
89761 + end += sprintf(end, "\n%s\n", reg_range[r].name);
89762 + for (n = reg_range[r].start;
89763 + n < reg_range[r].start + reg_range[r].count; n += 2) {
89764 + if (((n1++) & 7) == 0)
89765 + end += sprintf(end, "\n%04X: ", n);
89766 + end += sprintf(end, "%04x ", __reg_read(glamo, n));
89767 + }
89768 + end += sprintf(end, "\n");
89769 + if (!attr) {
89770 + printk("%s", buf);
89771 + end = buf;
89772 + }
89773 + }
89774 + spin_unlock(&glamo->lock);
89775 +
89776 + return end - buf;
89777 +}
89778 +
89779 +static DEVICE_ATTR(regs, 0644, regs_read, regs_write);
89780 +static struct attribute *glamo_sysfs_entries[] = {
89781 + &dev_attr_regs.attr,
89782 + NULL
89783 +};
89784 +static struct attribute_group glamo_attr_group = {
89785 + .name = NULL,
89786 + .attrs = glamo_sysfs_entries,
89787 +};
89788 +
89789 +
89790 +
89791 +/***********************************************************************
89792 + * 'engine' support
89793 + ***********************************************************************/
89794 +
89795 +int __glamo_engine_enable(struct glamo_core *glamo, enum glamo_engine engine)
89796 +{
89797 + switch (engine) {
89798 + case GLAMO_ENGINE_LCD:
89799 + __reg_set_bit_mask(glamo, GLAMO_REG_HOSTBUS(2),
89800 + GLAMO_HOSTBUS2_MMIO_EN_LCD,
89801 + GLAMO_HOSTBUS2_MMIO_EN_LCD);
89802 + __reg_write(glamo, GLAMO_REG_CLOCK_LCD,
89803 + GLAMO_CLOCK_LCD_EN_M5CLK |
89804 + GLAMO_CLOCK_LCD_EN_DHCLK |
89805 + GLAMO_CLOCK_LCD_EN_DMCLK |
89806 + GLAMO_CLOCK_LCD_EN_DCLK |
89807 + GLAMO_CLOCK_LCD_DG_M5CLK |
89808 + GLAMO_CLOCK_LCD_DG_DMCLK);
89809 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1,
89810 + GLAMO_CLOCK_GEN51_EN_DIV_DHCLK |
89811 + GLAMO_CLOCK_GEN51_EN_DIV_DMCLK |
89812 + GLAMO_CLOCK_GEN51_EN_DIV_DCLK, 0xffff);
89813 + break;
89814 + case GLAMO_ENGINE_MMC:
89815 + __reg_set_bit_mask(glamo, GLAMO_REG_HOSTBUS(2),
89816 + GLAMO_HOSTBUS2_MMIO_EN_MMC,
89817 + GLAMO_HOSTBUS2_MMIO_EN_MMC);
89818 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_MMC,
89819 + GLAMO_CLOCK_MMC_EN_M9CLK |
89820 + GLAMO_CLOCK_MMC_EN_TCLK |
89821 + GLAMO_CLOCK_MMC_DG_M9CLK |
89822 + GLAMO_CLOCK_MMC_DG_TCLK, 0xffff);
89823 + /* enable the TCLK divider clk input */
89824 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1,
89825 + GLAMO_CLOCK_GEN51_EN_DIV_TCLK,
89826 + GLAMO_CLOCK_GEN51_EN_DIV_TCLK);
89827 + break;
89828 + case GLAMO_ENGINE_2D:
89829 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_2D,
89830 + GLAMO_CLOCK_2D_EN_M7CLK |
89831 + GLAMO_CLOCK_2D_EN_GCLK |
89832 + GLAMO_CLOCK_2D_DG_M7CLK |
89833 + GLAMO_CLOCK_2D_DG_GCLK, 0xffff);
89834 + __reg_set_bit_mask(glamo, GLAMO_REG_HOSTBUS(2),
89835 + GLAMO_HOSTBUS2_MMIO_EN_2D,
89836 + GLAMO_HOSTBUS2_MMIO_EN_2D);
89837 + break;
89838 + case GLAMO_ENGINE_CMDQ:
89839 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_2D,
89840 + GLAMO_CLOCK_2D_EN_M6CLK, 0xffff);
89841 + __reg_set_bit_mask(glamo, GLAMO_REG_HOSTBUS(2),
89842 + GLAMO_HOSTBUS2_MMIO_EN_CQ,
89843 + GLAMO_HOSTBUS2_MMIO_EN_CQ);
89844 + break;
89845 + /* FIXME: Implementation */
89846 + default:
89847 + break;
89848 + }
89849 +
89850 + glamo->engine_enabled_bitfield |= 1 << engine;
89851 +
89852 + return 0;
89853 +}
89854 +
89855 +int glamo_engine_enable(struct glamo_core *glamo, enum glamo_engine engine)
89856 +{
89857 + int ret;
89858 +
89859 + spin_lock(&glamo->lock);
89860 +
89861 + ret = __glamo_engine_enable(glamo, engine);
89862 +
89863 + spin_unlock(&glamo->lock);
89864 +
89865 + return ret;
89866 +}
89867 +EXPORT_SYMBOL_GPL(glamo_engine_enable);
89868 +
89869 +int __glamo_engine_disable(struct glamo_core *glamo, enum glamo_engine engine)
89870 +{
89871 + switch (engine) {
89872 + case GLAMO_ENGINE_LCD:
89873 + /* remove pixel clock to LCM */
89874 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_LCD,
89875 + GLAMO_CLOCK_LCD_EN_DCLK, 0);
89876 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_LCD,
89877 + GLAMO_CLOCK_LCD_EN_DHCLK |
89878 + GLAMO_CLOCK_LCD_EN_DMCLK, 0);
89879 + /* kill memory clock */
89880 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_LCD,
89881 + GLAMO_CLOCK_LCD_EN_M5CLK, 0);
89882 + /* stop dividing the clocks */
89883 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1,
89884 + GLAMO_CLOCK_GEN51_EN_DIV_DHCLK |
89885 + GLAMO_CLOCK_GEN51_EN_DIV_DMCLK |
89886 + GLAMO_CLOCK_GEN51_EN_DIV_DCLK, 0);
89887 + break;
89888 +
89889 + case GLAMO_ENGINE_MMC:
89890 +// __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_MMC,
89891 +// GLAMO_CLOCK_MMC_EN_M9CLK |
89892 +// GLAMO_CLOCK_MMC_EN_TCLK |
89893 +// GLAMO_CLOCK_MMC_DG_M9CLK |
89894 +// GLAMO_CLOCK_MMC_DG_TCLK, 0);
89895 + /* disable the TCLK divider clk input */
89896 +// __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1,
89897 +// GLAMO_CLOCK_GEN51_EN_DIV_TCLK, 0);
89898 +
89899 + default:
89900 + break;
89901 + }
89902 +
89903 + glamo->engine_enabled_bitfield &= ~(1 << engine);
89904 +
89905 + return 0;
89906 +}
89907 +int glamo_engine_disable(struct glamo_core *glamo, enum glamo_engine engine)
89908 +{
89909 + int ret;
89910 +
89911 + spin_lock(&glamo->lock);
89912 +
89913 + ret = __glamo_engine_disable(glamo, engine);
89914 +
89915 + spin_unlock(&glamo->lock);
89916 +
89917 + return ret;
89918 +}
89919 +EXPORT_SYMBOL_GPL(glamo_engine_disable);
89920 +
89921 +static const u_int16_t engine_clock_regs[__NUM_GLAMO_ENGINES] = {
89922 + [GLAMO_ENGINE_LCD] = GLAMO_REG_CLOCK_LCD,
89923 + [GLAMO_ENGINE_MMC] = GLAMO_REG_CLOCK_MMC,
89924 + [GLAMO_ENGINE_ISP] = GLAMO_REG_CLOCK_ISP,
89925 + [GLAMO_ENGINE_JPEG] = GLAMO_REG_CLOCK_JPEG,
89926 + [GLAMO_ENGINE_3D] = GLAMO_REG_CLOCK_3D,
89927 + [GLAMO_ENGINE_2D] = GLAMO_REG_CLOCK_2D,
89928 + [GLAMO_ENGINE_MPEG_ENC] = GLAMO_REG_CLOCK_MPEG,
89929 + [GLAMO_ENGINE_MPEG_DEC] = GLAMO_REG_CLOCK_MPEG,
89930 +};
89931 +
89932 +void glamo_engine_clkreg_set(struct glamo_core *glamo,
89933 + enum glamo_engine engine,
89934 + u_int16_t mask, u_int16_t val)
89935 +{
89936 + reg_set_bit_mask(glamo, engine_clock_regs[engine], mask, val);
89937 +}
89938 +EXPORT_SYMBOL_GPL(glamo_engine_clkreg_set);
89939 +
89940 +u_int16_t glamo_engine_clkreg_get(struct glamo_core *glamo,
89941 + enum glamo_engine engine)
89942 +{
89943 + u_int16_t val;
89944 +
89945 + spin_lock(&glamo->lock);
89946 + val = __reg_read(glamo, engine_clock_regs[engine]);
89947 + spin_unlock(&glamo->lock);
89948 +
89949 + return val;
89950 +}
89951 +EXPORT_SYMBOL_GPL(glamo_engine_clkreg_get);
89952 +
89953 +struct glamo_script reset_regs[] = {
89954 + [GLAMO_ENGINE_LCD] = {
89955 + GLAMO_REG_CLOCK_LCD, GLAMO_CLOCK_LCD_RESET
89956 + },
89957 +#if 0
89958 + [GLAMO_ENGINE_HOST] = {
89959 + GLAMO_REG_CLOCK_HOST, GLAMO_CLOCK_HOST_RESET
89960 + },
89961 + [GLAMO_ENGINE_MEM] = {
89962 + GLAMO_REG_CLOCK_MEM, GLAMO_CLOCK_MEM_RESET
89963 + },
89964 +#endif
89965 + [GLAMO_ENGINE_MMC] = {
89966 + GLAMO_REG_CLOCK_MMC, GLAMO_CLOCK_MMC_RESET
89967 + },
89968 + [GLAMO_ENGINE_2D] = {
89969 + GLAMO_REG_CLOCK_2D, GLAMO_CLOCK_2D_RESET
89970 + },
89971 + [GLAMO_ENGINE_JPEG] = {
89972 + GLAMO_REG_CLOCK_JPEG, GLAMO_CLOCK_JPEG_RESET
89973 + },
89974 +};
89975 +
89976 +void glamo_engine_reset(struct glamo_core *glamo, enum glamo_engine engine)
89977 +{
89978 + struct glamo_script *rst;
89979 +
89980 + if (engine >= ARRAY_SIZE(reset_regs)) {
89981 + dev_warn(&glamo->pdev->dev, "unknown engine %u ", engine);
89982 + return;
89983 + }
89984 +
89985 + rst = &reset_regs[engine];
89986 +
89987 + spin_lock(&glamo->lock);
89988 + __reg_set_bit(glamo, rst->reg, rst->val);
89989 + __reg_clear_bit(glamo, rst->reg, rst->val);
89990 + spin_unlock(&glamo->lock);
89991 +}
89992 +EXPORT_SYMBOL_GPL(glamo_engine_reset);
89993 +
89994 +void glamo_lcm_reset(int level)
89995 +{
89996 + if (!glamo_handle)
89997 + return;
89998 +
89999 + glamo_gpio_setpin(glamo_handle, GLAMO_GPIO4, level);
90000 + glamo_gpio_cfgpin(glamo_handle, GLAMO_GPIO4_OUTPUT);
90001 +
90002 +}
90003 +EXPORT_SYMBOL_GPL(glamo_lcm_reset);
90004 +
90005 +enum glamo_pll {
90006 + GLAMO_PLL1,
90007 + GLAMO_PLL2,
90008 +};
90009 +
90010 +static int glamo_pll_rate(struct glamo_core *glamo,
90011 + enum glamo_pll pll)
90012 +{
90013 + u_int16_t reg;
90014 + unsigned int div = 512;
90015 + /* FIXME: move osci into platform_data */
90016 + unsigned int osci = 32768;
90017 +
90018 + if (osci == 32768)
90019 + div = 1;
90020 +
90021 + switch (pll) {
90022 + case GLAMO_PLL1:
90023 + reg = __reg_read(glamo, GLAMO_REG_PLL_GEN1);
90024 + break;
90025 + case GLAMO_PLL2:
90026 + reg = __reg_read(glamo, GLAMO_REG_PLL_GEN3);
90027 + break;
90028 + default:
90029 + return -EINVAL;
90030 + }
90031 + return (osci/div)*reg;
90032 +}
90033 +
90034 +int glamo_engine_reclock(struct glamo_core *glamo,
90035 + enum glamo_engine engine,
90036 + int ps)
90037 +{
90038 + int pll, khz;
90039 + u_int16_t reg, mask, val = 0;
90040 +
90041 + if (!ps)
90042 + return 0;
90043 +
90044 + switch (engine) {
90045 + case GLAMO_ENGINE_LCD:
90046 + pll = GLAMO_PLL1;
90047 + reg = GLAMO_REG_CLOCK_GEN7;
90048 + mask = 0xff;
90049 + break;
90050 + default:
90051 + dev_warn(&glamo->pdev->dev,
90052 + "reclock of engine 0x%x not supported\n", engine);
90053 + return -EINVAL;
90054 + break;
90055 + }
90056 +
90057 + pll = glamo_pll_rate(glamo, pll);
90058 + khz = 1000000000UL / ps;
90059 +
90060 + if (khz)
90061 + val = (pll / khz) / 1000;
90062 +
90063 + dev_dbg(&glamo->pdev->dev,
90064 + "PLL %d, kHZ %d, div %d\n", pll, khz, val);
90065 +
90066 + if (val) {
90067 + val--;
90068 + reg_set_bit_mask(glamo, reg, mask, val);
90069 + mdelay(5); /* wait some time to stabilize */
90070 +
90071 + return 0;
90072 + } else {
90073 + return -EINVAL;
90074 + }
90075 +}
90076 +EXPORT_SYMBOL_GPL(glamo_engine_reclock);
90077 +
90078 +/***********************************************************************
90079 + * script support
90080 + ***********************************************************************/
90081 +
90082 +int glamo_run_script(struct glamo_core *glamo, struct glamo_script *script,
90083 + int len, int may_sleep)
90084 +{
90085 + int i;
90086 +
90087 + for (i = 0; i < len; i++) {
90088 + struct glamo_script *line = &script[i];
90089 +
90090 + switch (line->reg) {
90091 + case 0xffff:
90092 + return 0;
90093 + case 0xfffe:
90094 + if (may_sleep)
90095 + msleep(line->val);
90096 + else
90097 + mdelay(line->val * 4);
90098 + break;
90099 + case 0xfffd:
90100 + /* spin until PLLs lock */
90101 + while ((__reg_read(glamo, GLAMO_REG_PLL_GEN5) & 3) != 3)
90102 + ;
90103 + break;
90104 + default:
90105 + __reg_write(glamo, script[i].reg, script[i].val);
90106 + break;
90107 + }
90108 + }
90109 +
90110 + return 0;
90111 +}
90112 +EXPORT_SYMBOL(glamo_run_script);
90113 +
90114 +static struct glamo_script glamo_init_script[] = {
90115 + { GLAMO_REG_CLOCK_HOST, 0x1000 },
90116 + { 0xfffe, 2 },
90117 + { GLAMO_REG_CLOCK_MEMORY, 0x1000 },
90118 + { GLAMO_REG_CLOCK_MEMORY, 0x2000 },
90119 + { GLAMO_REG_CLOCK_LCD, 0x1000 },
90120 + { GLAMO_REG_CLOCK_MMC, 0x1000 },
90121 + { GLAMO_REG_CLOCK_ISP, 0x1000 },
90122 + { GLAMO_REG_CLOCK_ISP, 0x3000 },
90123 + { GLAMO_REG_CLOCK_JPEG, 0x1000 },
90124 + { GLAMO_REG_CLOCK_3D, 0x1000 },
90125 + { GLAMO_REG_CLOCK_3D, 0x3000 },
90126 + { GLAMO_REG_CLOCK_2D, 0x1000 },
90127 + { GLAMO_REG_CLOCK_2D, 0x3000 },
90128 + { GLAMO_REG_CLOCK_RISC1, 0x1000 },
90129 + { GLAMO_REG_CLOCK_MPEG, 0x3000 },
90130 + { GLAMO_REG_CLOCK_MPEG, 0x3000 },
90131 + { GLAMO_REG_CLOCK_MPROC, 0x1000 /*0x100f*/ },
90132 + { 0xfffe, 2 },
90133 + { GLAMO_REG_CLOCK_HOST, 0x0000 },
90134 + { GLAMO_REG_CLOCK_MEMORY, 0x0000 },
90135 + { GLAMO_REG_CLOCK_LCD, 0x0000 },
90136 + { GLAMO_REG_CLOCK_MMC, 0x0000 },
90137 +#if 0
90138 +/* unused engines must be left in reset to stop MMC block read "blackouts" */
90139 + { GLAMO_REG_CLOCK_ISP, 0x0000 },
90140 + { GLAMO_REG_CLOCK_ISP, 0x0000 },
90141 + { GLAMO_REG_CLOCK_JPEG, 0x0000 },
90142 + { GLAMO_REG_CLOCK_3D, 0x0000 },
90143 + { GLAMO_REG_CLOCK_3D, 0x0000 },
90144 + { GLAMO_REG_CLOCK_2D, 0x0000 },
90145 + { GLAMO_REG_CLOCK_2D, 0x0000 },
90146 + { GLAMO_REG_CLOCK_RISC1, 0x0000 },
90147 + { GLAMO_REG_CLOCK_MPEG, 0x0000 },
90148 + { GLAMO_REG_CLOCK_MPEG, 0x0000 },
90149 +#endif
90150 + { GLAMO_REG_PLL_GEN1, 0x05db }, /* 48MHz */
90151 + { GLAMO_REG_PLL_GEN3, 0x0aba }, /* 90MHz */
90152 + { 0xfffd, 0 },
90153 + /*
90154 + * b9 of this register MUST be zero to get any interrupts on INT#
90155 + * the other set bits enable all the engine interrupt sources
90156 + */
90157 + { GLAMO_REG_IRQ_ENABLE, 0x01ff },
90158 + { GLAMO_REG_CLOCK_GEN6, 0x2000 },
90159 + { GLAMO_REG_CLOCK_GEN7, 0x0101 },
90160 + { GLAMO_REG_CLOCK_GEN8, 0x0100 },
90161 + { GLAMO_REG_CLOCK_HOST, 0x000d },
90162 + /*
90163 + * b7..b4 = 0 = no wait states on read or write
90164 + * b0 = 1 select PLL2 for Host interface, b1 = enable it
90165 + */
90166 + { 0x200, 0x0e03 },
90167 + { 0x202, 0x07ff },
90168 + { 0x212, 0x0000 },
90169 + { 0x214, 0x4000 },
90170 + { 0x216, 0xf00e },
90171 +
90172 + /* S-Media recommended "set tiling mode to 512 mode for memory access
90173 + * more efficiency when 640x480" */
90174 + { GLAMO_REG_MEM_TYPE, 0x0c74 }, /* 8MB, 16 word pg wr+rd */
90175 + { GLAMO_REG_MEM_GEN, 0xafaf }, /* 63 grants min + max */
90176 +
90177 + { GLAMO_REGOFS_HOSTBUS + 2, 0xffff }, /* enable on MMIO*/
90178 +
90179 + { GLAMO_REG_MEM_TIMING1, 0x0108 },
90180 + { GLAMO_REG_MEM_TIMING2, 0x0010 }, /* Taa = 3 MCLK */
90181 + { GLAMO_REG_MEM_TIMING3, 0x0000 },
90182 + { GLAMO_REG_MEM_TIMING4, 0x0000 }, /* CE1# delay fall/rise */
90183 + { GLAMO_REG_MEM_TIMING5, 0x0000 }, /* UB# LB# */
90184 + { GLAMO_REG_MEM_TIMING6, 0x0000 }, /* OE# */
90185 + { GLAMO_REG_MEM_TIMING7, 0x0000 }, /* WE# */
90186 + { GLAMO_REG_MEM_TIMING8, 0x1002 }, /* MCLK delay, was 0x1000 */
90187 + { GLAMO_REG_MEM_TIMING9, 0x6006 },
90188 + { GLAMO_REG_MEM_TIMING10, 0x00ff },
90189 + { GLAMO_REG_MEM_TIMING11, 0x0001 },
90190 + { GLAMO_REG_MEM_POWER1, 0x0020 },
90191 + { GLAMO_REG_MEM_POWER2, 0x0000 },
90192 + { GLAMO_REG_MEM_DRAM1, 0x0000 },
90193 + { 0xfffe, 1 },
90194 + { GLAMO_REG_MEM_DRAM1, 0xc100 },
90195 + { 0xfffe, 1 },
90196 + { GLAMO_REG_MEM_DRAM1, 0xe100 },
90197 + { GLAMO_REG_MEM_DRAM2, 0x01d6 },
90198 + { GLAMO_REG_CLOCK_MEMORY, 0x000b },
90199 + { GLAMO_REG_GPIO_GEN1, 0x000f },
90200 + { GLAMO_REG_GPIO_GEN2, 0x111e },
90201 + { GLAMO_REG_GPIO_GEN3, 0xccc3 },
90202 + { GLAMO_REG_GPIO_GEN4, 0x111e },
90203 + { GLAMO_REG_GPIO_GEN5, 0x000f },
90204 +};
90205 +#if 0
90206 +static struct glamo_script glamo_resume_script[] = {
90207 +
90208 + { GLAMO_REG_PLL_GEN1, 0x05db }, /* 48MHz */
90209 + { GLAMO_REG_PLL_GEN3, 0x0aba }, /* 90MHz */
90210 + { GLAMO_REG_DFT_GEN6, 1 },
90211 + { 0xfffe, 100 },
90212 + { 0xfffd, 0 },
90213 + { 0x200, 0x0e03 },
90214 +
90215 + /*
90216 + * b9 of this register MUST be zero to get any interrupts on INT#
90217 + * the other set bits enable all the engine interrupt sources
90218 + */
90219 + { GLAMO_REG_IRQ_ENABLE, 0x01ff },
90220 + { GLAMO_REG_CLOCK_HOST, 0x0018 },
90221 + { GLAMO_REG_CLOCK_GEN5_1, 0x18b1 },
90222 +
90223 + { GLAMO_REG_MEM_DRAM1, 0x0000 },
90224 + { 0xfffe, 1 },
90225 + { GLAMO_REG_MEM_DRAM1, 0xc100 },
90226 + { 0xfffe, 1 },
90227 + { GLAMO_REG_MEM_DRAM1, 0xe100 },
90228 + { GLAMO_REG_MEM_DRAM2, 0x01d6 },
90229 + { GLAMO_REG_CLOCK_MEMORY, 0x000b },
90230 +};
90231 +#endif
90232 +
90233 +enum glamo_power {
90234 + GLAMO_POWER_ON,
90235 + GLAMO_POWER_SUSPEND,
90236 +};
90237 +
90238 +static void glamo_power(struct glamo_core *glamo,
90239 + enum glamo_power new_state)
90240 +{
90241 + int n;
90242 + unsigned long flags;
90243 +
90244 + spin_lock_irqsave(&glamo->lock, flags);
90245 +
90246 + dev_info(&glamo->pdev->dev, "***** glamo_power -> %d\n", new_state);
90247 +
90248 + /*
90249 +Power management
90250 +static const REG_VALUE_MASK_TYPE reg_powerOn[] =
90251 +{
90252 + { REG_GEN_DFT6, REG_BIT_ALL, REG_DATA(1u << 0) },
90253 + { REG_GEN_PLL3, 0u, REG_DATA(1u << 13) },
90254 + { REG_GEN_MEM_CLK, REG_BIT_ALL, REG_BIT_EN_MOCACLK },
90255 + { REG_MEM_DRAM2, 0u, REG_BIT_EN_DEEP_POWER_DOWN },
90256 + { REG_MEM_DRAM1, 0u, REG_BIT_SELF_REFRESH }
90257 +};
90258 +
90259 +static const REG_VALUE_MASK_TYPE reg_powerStandby[] =
90260 +{
90261 + { REG_MEM_DRAM1, REG_BIT_ALL, REG_BIT_SELF_REFRESH },
90262 + { REG_GEN_MEM_CLK, 0u, REG_BIT_EN_MOCACLK },
90263 + { REG_GEN_PLL3, REG_BIT_ALL, REG_DATA(1u << 13) },
90264 + { REG_GEN_DFT5, REG_BIT_ALL, REG_DATA(1u << 0) }
90265 +};
90266 +
90267 +static const REG_VALUE_MASK_TYPE reg_powerSuspend[] =
90268 +{
90269 + { REG_MEM_DRAM2, REG_BIT_ALL, REG_BIT_EN_DEEP_POWER_DOWN },
90270 + { REG_GEN_MEM_CLK, 0u, REG_BIT_EN_MOCACLK },
90271 + { REG_GEN_PLL3, REG_BIT_ALL, REG_DATA(1u << 13) },
90272 + { REG_GEN_DFT5, REG_BIT_ALL, REG_DATA(1u << 0) }
90273 +};
90274 +*/
90275 +
90276 + switch (new_state) {
90277 + case GLAMO_POWER_ON:
90278 +
90279 + /*
90280 + * glamo state on resume is nondeterministic in some
90281 + * fundamental way, it has also been observed that the
90282 + * Glamo reset pin can get asserted by, eg, touching it with
90283 + * a scope probe. So the only answer is to roll with it and
90284 + * force an external reset on the Glamo during resume.
90285 + */
90286 +
90287 + (glamo->pdata->glamo_external_reset)(0);
90288 + udelay(10);
90289 + (glamo->pdata->glamo_external_reset)(1);
90290 + mdelay(5);
90291 +
90292 + glamo_run_script(glamo, glamo_init_script,
90293 + ARRAY_SIZE(glamo_init_script), 0);
90294 +
90295 + break;
90296 +
90297 + case GLAMO_POWER_SUSPEND:
90298 +
90299 + /* nuke interrupts */
90300 + __reg_write(glamo, GLAMO_REG_IRQ_ENABLE, 0x200);
90301 +
90302 + /* stash a copy of which engines were running */
90303 + glamo->engine_enabled_bitfield_suspend =
90304 + glamo->engine_enabled_bitfield;
90305 +
90306 + /* take down each engine before we kill mem and pll */
90307 + for (n = 0; n < __NUM_GLAMO_ENGINES; n++)
90308 + if (glamo->engine_enabled_bitfield & (1 << n))
90309 + __glamo_engine_disable(glamo, n);
90310 +
90311 + /* enable self-refresh */
90312 +
90313 + __reg_write(glamo, GLAMO_REG_MEM_DRAM1,
90314 + GLAMO_MEM_DRAM1_EN_DRAM_REFRESH |
90315 + GLAMO_MEM_DRAM1_EN_GATE_CKE |
90316 + GLAMO_MEM_DRAM1_SELF_REFRESH |
90317 + GLAMO_MEM_REFRESH_COUNT);
90318 + __reg_write(glamo, GLAMO_REG_MEM_DRAM1,
90319 + GLAMO_MEM_DRAM1_EN_MODEREG_SET |
90320 + GLAMO_MEM_DRAM1_EN_DRAM_REFRESH |
90321 + GLAMO_MEM_DRAM1_EN_GATE_CKE |
90322 + GLAMO_MEM_DRAM1_SELF_REFRESH |
90323 + GLAMO_MEM_REFRESH_COUNT);
90324 +
90325 + /* force RAM into deep powerdown */
90326 +
90327 + __reg_write(glamo, GLAMO_REG_MEM_DRAM2,
90328 + GLAMO_MEM_DRAM2_DEEP_PWRDOWN |
90329 + (7 << 6) | /* tRC */
90330 + (1 << 4) | /* tRP */
90331 + (1 << 2) | /* tRCD */
90332 + 2); /* CAS latency */
90333 +
90334 + /* disable clocks to memory */
90335 + __reg_write(glamo, GLAMO_REG_CLOCK_MEMORY, 0);
90336 +
90337 + /* all dividers from OSCI */
90338 + __reg_set_bit_mask(glamo, GLAMO_REG_CLOCK_GEN5_1, 0x400, 0x400);
90339 +
90340 + /* PLL2 into bypass */
90341 + __reg_set_bit_mask(glamo, GLAMO_REG_PLL_GEN3, 1 << 12, 1 << 12);
90342 +
90343 + __reg_write(glamo, 0x200, 0x0e00);
90344 +
90345 +
90346 + /* kill PLLS 1 then 2 */
90347 + __reg_write(glamo, GLAMO_REG_DFT_GEN5, 0x0001);
90348 + __reg_set_bit_mask(glamo, GLAMO_REG_PLL_GEN3, 1 << 13, 1 << 13);
90349 +
90350 + break;
90351 + }
90352 +
90353 + spin_unlock_irqrestore(&glamo->lock, flags);
90354 +}
90355 +
90356 +#if 0
90357 +#define MEMDETECT_RETRY 6
90358 +static unsigned int detect_memsize(struct glamo_core *glamo)
90359 +{
90360 + int i;
90361 +
90362 + /*static const u_int16_t pattern[] = {
90363 + 0x1111, 0x8a8a, 0x2222, 0x7a7a,
90364 + 0x3333, 0x6a6a, 0x4444, 0x5a5a,
90365 + 0x5555, 0x4a4a, 0x6666, 0x3a3a,
90366 + 0x7777, 0x2a2a, 0x8888, 0x1a1a
90367 + }; */
90368 +
90369 + for (i = 0; i < MEMDETECT_RETRY; i++) {
90370 + switch (glamo->type) {
90371 + case 3600:
90372 + __reg_write(glamo, GLAMO_REG_MEM_TYPE, 0x0072);
90373 + __reg_write(glamo, GLAMO_REG_MEM_DRAM1, 0xc100);
90374 + break;
90375 + case 3650:
90376 + switch (glamo->revision) {
90377 + case GLAMO_CORE_REV_A0:
90378 + if (i & 1)
90379 + __reg_write(glamo, GLAMO_REG_MEM_TYPE,
90380 + 0x097a);
90381 + else
90382 + __reg_write(glamo, GLAMO_REG_MEM_TYPE,
90383 + 0x0173);
90384 +
90385 + __reg_write(glamo, GLAMO_REG_MEM_DRAM1, 0x0000);
90386 + msleep(1);
90387 + __reg_write(glamo, GLAMO_REG_MEM_DRAM1, 0xc100);
90388 + break;
90389 + default:
90390 + if (i & 1)
90391 + __reg_write(glamo, GLAMO_REG_MEM_TYPE,
90392 + 0x0972);
90393 + else
90394 + __reg_write(glamo, GLAMO_REG_MEM_TYPE,
90395 + 0x0872);
90396 +
90397 + __reg_write(glamo, GLAMO_REG_MEM_DRAM1, 0x0000);
90398 + msleep(1);
90399 + __reg_write(glamo, GLAMO_REG_MEM_DRAM1, 0xe100);
90400 + break;
90401 + }
90402 + break;
90403 + case 3700:
90404 + /* FIXME */
90405 + default:
90406 + break;
90407 + }
90408 +
90409 +#if 0
90410 + /* FIXME: finish implementation */
90411 + for (j = 0; j < 8; j++) {
90412 + __
90413 +#endif
90414 + }
90415 +
90416 + return 0;
90417 +}
90418 +#endif
90419 +
90420 +/* Find out if we can support this version of the Glamo chip */
90421 +static int glamo_supported(struct glamo_core *glamo)
90422 +{
90423 + u_int16_t dev_id, rev_id; /*, memsize; */
90424 +
90425 + dev_id = __reg_read(glamo, GLAMO_REG_DEVICE_ID);
90426 + rev_id = __reg_read(glamo, GLAMO_REG_REVISION_ID);
90427 +
90428 + switch (dev_id) {
90429 + case 0x3650:
90430 + switch (rev_id) {
90431 + case GLAMO_CORE_REV_A2:
90432 + break;
90433 + case GLAMO_CORE_REV_A0:
90434 + case GLAMO_CORE_REV_A1:
90435 + case GLAMO_CORE_REV_A3:
90436 + dev_warn(&glamo->pdev->dev, "untested core revision "
90437 + "%04x, your mileage may vary\n", rev_id);
90438 + break;
90439 + default:
90440 + dev_warn(&glamo->pdev->dev, "unknown glamo revision "
90441 + "%04x, your mileage may vary\n", rev_id);
90442 + /* maybe should abort ? */
90443 + }
90444 + break;
90445 + case 0x3600:
90446 + case 0x3700:
90447 + default:
90448 + dev_err(&glamo->pdev->dev, "unsupported Glamo device %04x\n",
90449 + dev_id);
90450 + return 0;
90451 + }
90452 +
90453 + dev_dbg(&glamo->pdev->dev, "Detected Glamo core %04x Revision %04x "
90454 + "(%uHz CPU / %uHz Memory)\n", dev_id, rev_id,
90455 + glamo_pll_rate(glamo, GLAMO_PLL1),
90456 + glamo_pll_rate(glamo, GLAMO_PLL2));
90457 +
90458 + return 1;
90459 +}
90460 +
90461 +static int __init glamo_probe(struct platform_device *pdev)
90462 +{
90463 + int rc = 0, irq;
90464 + struct glamo_core *glamo;
90465 + struct platform_device *glamo_mmc_dev;
90466 +
90467 + if (glamo_handle) {
90468 + dev_err(&pdev->dev,
90469 + "This driver supports only one instance\n");
90470 + return -EBUSY;
90471 + }
90472 +
90473 + glamo = kmalloc(GFP_KERNEL, sizeof(*glamo));
90474 + if (!glamo)
90475 + return -ENOMEM;
90476 +
90477 + spin_lock_init(&glamo->lock);
90478 + glamo_handle = glamo;
90479 + glamo->pdev = pdev;
90480 + glamo->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
90481 + glamo->irq = platform_get_irq(pdev, 0);
90482 + glamo->pdata = pdev->dev.platform_data;
90483 + if (!glamo->mem || !glamo->pdata) {
90484 + dev_err(&pdev->dev, "platform device with no MEM/PDATA ?\n");
90485 + rc = -ENOENT;
90486 + goto bail_free;
90487 + }
90488 +
90489 + /* register a number of sibling devices whoise IOMEM resources
90490 + * are siblings of pdev's IOMEM resource */
90491 +#if 0
90492 + glamo_core_dev.dev.parent = &pdev.dev;
90493 + mangle_mem_resources(glamo_core_dev.resources,
90494 + glamo_core_dev.num_resources, glamo->mem);
90495 + glamo_core_dev.resources[1].start = glamo->irq;
90496 + glamo_core_dev.resources[1].end = glamo->irq;
90497 + platform_device_register(&glamo_core_dev);
90498 +#endif
90499 + /* only remap the generic, hostbus and memory controller registers */
90500 + glamo->base = ioremap(glamo->mem->start, 0x4000 /*GLAMO_REGOFS_VIDCAP*/);
90501 + if (!glamo->base) {
90502 + dev_err(&pdev->dev, "failed to ioremap() memory region\n");
90503 + goto bail_free;
90504 + }
90505 +
90506 + platform_set_drvdata(pdev, glamo);
90507 +
90508 + (glamo->pdata->glamo_external_reset)(0);
90509 + udelay(10);
90510 + (glamo->pdata->glamo_external_reset)(1);
90511 + mdelay(10);
90512 +
90513 + /*
90514 + * finally set the mfd interrupts up
90515 + * can't do them earlier or sibling probes blow up
90516 + */
90517 +
90518 + for (irq = IRQ_GLAMO(0); irq <= IRQ_GLAMO(8); irq++) {
90519 + set_irq_chip(irq, &glamo_irq_chip);
90520 + set_irq_handler(irq, handle_level_irq);
90521 + set_irq_flags(irq, IRQF_VALID);
90522 + }
90523 +
90524 + if (glamo->pdata->glamo_irq_is_wired &&
90525 + !glamo->pdata->glamo_irq_is_wired()) {
90526 + set_irq_chained_handler(glamo->irq, glamo_irq_demux_handler);
90527 + set_irq_type(glamo->irq, IRQ_TYPE_EDGE_FALLING);
90528 + dev_info(&pdev->dev, "Glamo interrupt registered\n");
90529 + glamo->irq_works = 1;
90530 + } else {
90531 + dev_err(&pdev->dev, "Glamo interrupt not used\n");
90532 + glamo->irq_works = 0;
90533 + }
90534 +
90535 +
90536 + /* confirm it isn't insane version */
90537 + if (!glamo_supported(glamo)) {
90538 + dev_err(&pdev->dev, "This Glamo is not supported\n");
90539 + goto bail_irq;
90540 + }
90541 +
90542 + /* sysfs */
90543 + rc = sysfs_create_group(&pdev->dev.kobj, &glamo_attr_group);
90544 + if (rc < 0) {
90545 + dev_err(&pdev->dev, "cannot create sysfs group\n");
90546 + goto bail_irq;
90547 + }
90548 +
90549 + /* init the chip with canned register set */
90550 +
90551 + dev_dbg(&glamo->pdev->dev, "running init script\n");
90552 + glamo_run_script(glamo, glamo_init_script,
90553 + ARRAY_SIZE(glamo_init_script), 1);
90554 +
90555 + dev_info(&glamo->pdev->dev, "Glamo core PLL1: %uHz, PLL2: %uHz\n",
90556 + glamo_pll_rate(glamo, GLAMO_PLL1),
90557 + glamo_pll_rate(glamo, GLAMO_PLL2));
90558 +
90559 + /* bring MCI specific stuff over from our MFD platform data */
90560 + glamo_mci_def_pdata.glamo_can_set_mci_power =
90561 + glamo->pdata->glamo_can_set_mci_power;
90562 + glamo_mci_def_pdata.glamo_mci_use_slow =
90563 + glamo->pdata->glamo_mci_use_slow;
90564 + glamo_mci_def_pdata.glamo_irq_is_wired =
90565 + glamo->pdata->glamo_irq_is_wired;
90566 +
90567 + /* start creating the siblings */
90568 +
90569 + glamo_2d_dev.dev.parent = &pdev->dev;
90570 + mangle_mem_resources(glamo_2d_dev.resource,
90571 + glamo_2d_dev.num_resources, glamo->mem);
90572 + platform_device_register(&glamo_2d_dev);
90573 +
90574 + glamo_3d_dev.dev.parent = &pdev->dev;
90575 + mangle_mem_resources(glamo_3d_dev.resource,
90576 + glamo_3d_dev.num_resources, glamo->mem);
90577 + platform_device_register(&glamo_3d_dev);
90578 +
90579 + glamo_jpeg_dev.dev.parent = &pdev->dev;
90580 + mangle_mem_resources(glamo_jpeg_dev.resource,
90581 + glamo_jpeg_dev.num_resources, glamo->mem);
90582 + platform_device_register(&glamo_jpeg_dev);
90583 +
90584 + glamo_mpeg_dev.dev.parent = &pdev->dev;
90585 + mangle_mem_resources(glamo_mpeg_dev.resource,
90586 + glamo_mpeg_dev.num_resources, glamo->mem);
90587 + platform_device_register(&glamo_mpeg_dev);
90588 +
90589 + glamo->pdata->glamo = glamo;
90590 + glamo_fb_dev.dev.parent = &pdev->dev;
90591 + glamo_fb_dev.dev.platform_data = glamo->pdata;
90592 + mangle_mem_resources(glamo_fb_dev.resource,
90593 + glamo_fb_dev.num_resources, glamo->mem);
90594 + platform_device_register(&glamo_fb_dev);
90595 +
90596 + glamo->pdata->spigpio_info->glamo = glamo;
90597 + glamo_spigpio_dev.dev.parent = &pdev->dev;
90598 + glamo_spigpio_dev.dev.platform_data = glamo->pdata->spigpio_info;
90599 + platform_device_register(&glamo_spigpio_dev);
90600 +
90601 + glamo_mmc_dev = glamo->pdata->mmc_dev;
90602 + glamo_mmc_dev->name = "glamo-mci";
90603 + glamo_mmc_dev->dev.parent = &pdev->dev;
90604 + glamo_mmc_dev->resource = glamo_mmc_resources;
90605 + glamo_mmc_dev->num_resources = ARRAY_SIZE(glamo_mmc_resources);
90606 +
90607 + /* we need it later to give to the engine enable and disable */
90608 + glamo_mci_def_pdata.pglamo = glamo;
90609 + mangle_mem_resources(glamo_mmc_dev->resource,
90610 + glamo_mmc_dev->num_resources, glamo->mem);
90611 + platform_device_register(glamo_mmc_dev);
90612 +
90613 + /* only request the generic, hostbus and memory controller MMIO */
90614 + glamo->mem = request_mem_region(glamo->mem->start,
90615 + GLAMO_REGOFS_VIDCAP, "glamo-core");
90616 + if (!glamo->mem) {
90617 + dev_err(&pdev->dev, "failed to request memory region\n");
90618 + goto bail_irq;
90619 + }
90620 +
90621 + return 0;
90622 +
90623 +bail_irq:
90624 + disable_irq(glamo->irq);
90625 + set_irq_chained_handler(glamo->irq, NULL);
90626 +
90627 + for (irq = IRQ_GLAMO(0); irq <= IRQ_GLAMO(8); irq++) {
90628 + set_irq_flags(irq, 0);
90629 + set_irq_chip(irq, NULL);
90630 + }
90631 +
90632 + iounmap(glamo->base);
90633 +bail_free:
90634 + platform_set_drvdata(pdev, NULL);
90635 + glamo_handle = NULL;
90636 + kfree(glamo);
90637 +
90638 + return rc;
90639 +}
90640 +
90641 +static int glamo_remove(struct platform_device *pdev)
90642 +{
90643 + struct glamo_core *glamo = platform_get_drvdata(pdev);
90644 + int irq;
90645 +
90646 + disable_irq(glamo->irq);
90647 + set_irq_chained_handler(glamo->irq, NULL);
90648 +
90649 + for (irq = IRQ_GLAMO(0); irq <= IRQ_GLAMO(8); irq++) {
90650 + set_irq_flags(irq, 0);
90651 + set_irq_chip(irq, NULL);
90652 + }
90653 +
90654 + platform_set_drvdata(pdev, NULL);
90655 + platform_device_unregister(&glamo_fb_dev);
90656 + platform_device_unregister(glamo->pdata->mmc_dev);
90657 + iounmap(glamo->base);
90658 + release_mem_region(glamo->mem->start, GLAMO_REGOFS_VIDCAP);
90659 + glamo_handle = NULL;
90660 + kfree(glamo);
90661 +
90662 + return 0;
90663 +}
90664 +
90665 +#ifdef CONFIG_PM
90666 +
90667 +static int glamo_suspend(struct platform_device *pdev, pm_message_t state)
90668 +{
90669 + glamo_handle->suspending = 1;
90670 + glamo_power(glamo_handle, GLAMO_POWER_SUSPEND);
90671 +
90672 + return 0;
90673 +}
90674 +
90675 +static int glamo_resume(struct platform_device *pdev)
90676 +{
90677 + glamo_power(glamo_handle, GLAMO_POWER_ON);
90678 + glamo_handle->suspending = 0;
90679 +
90680 + return 0;
90681 +}
90682 +
90683 +#else
90684 +#define glamo_suspend NULL
90685 +#define glamo_resume NULL
90686 +#endif
90687 +
90688 +static struct platform_driver glamo_driver = {
90689 + .probe = glamo_probe,
90690 + .remove = glamo_remove,
90691 + .suspend = glamo_suspend,
90692 + .resume = glamo_resume,
90693 + .driver = {
90694 + .name = "glamo3362",
90695 + .owner = THIS_MODULE,
90696 + },
90697 +};
90698 +
90699 +static int __devinit glamo_init(void)
90700 +{
90701 + return platform_driver_register(&glamo_driver);
90702 +}
90703 +
90704 +static void __exit glamo_cleanup(void)
90705 +{
90706 + platform_driver_unregister(&glamo_driver);
90707 +}
90708 +
90709 +module_init(glamo_init);
90710 +module_exit(glamo_cleanup);
90711 +
90712 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
90713 +MODULE_DESCRIPTION("Smedia Glamo 336x/337x core/resource driver");
90714 +MODULE_LICENSE("GPL");
90715 Index: linux-2.6.28/drivers/mfd/glamo/glamo-core.h
90716 ===================================================================
90717 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
90718 +++ linux-2.6.28/drivers/mfd/glamo/glamo-core.h 2009-01-02 00:01:56.000000000 +0100
90719 @@ -0,0 +1,92 @@
90720 +#ifndef __GLAMO_CORE_H
90721 +#define __GLAMO_CORE_H
90722 +
90723 +#include <asm/system.h>
90724 +
90725 +/* for the time being, we put the on-screen framebuffer into the lowest
90726 + * VRAM space. This should make the code easily compatible with the various
90727 + * 2MB/4MB/8MB variants of the Smedia chips */
90728 +#define GLAMO_OFFSET_VRAM 0x800000
90729 +#define GLAMO_OFFSET_FB (GLAMO_OFFSET_VRAM)
90730 +
90731 +/* we only allocate the minimum possible size for the framebuffer to make
90732 + * sure we have sufficient memory for other functions of the chip */
90733 +//#define GLAMO_FB_SIZE (640*480*4) /* == 0x12c000 */
90734 +#define GLAMO_INTERNAL_RAM_SIZE 0x800000
90735 +#define GLAMO_MMC_BUFFER_SIZE (64 * 1024)
90736 +#define GLAMO_FB_SIZE (GLAMO_INTERNAL_RAM_SIZE - GLAMO_MMC_BUFFER_SIZE)
90737 +
90738 +struct glamo_core {
90739 + int irq;
90740 + int irq_works; /* 0 means PCB does not support Glamo IRQ */
90741 + struct resource *mem;
90742 + struct resource *mem_core;
90743 + void __iomem *base;
90744 + struct platform_device *pdev;
90745 + struct glamofb_platform_data *pdata;
90746 + u_int16_t type;
90747 + u_int16_t revision;
90748 + spinlock_t lock;
90749 + u32 engine_enabled_bitfield;
90750 + u32 engine_enabled_bitfield_suspend;
90751 + int suspending;
90752 +};
90753 +
90754 +struct glamo_script {
90755 + u_int16_t reg;
90756 + u_int16_t val;
90757 +};
90758 +
90759 +int glamo_run_script(struct glamo_core *glamo,
90760 + struct glamo_script *script, int len, int may_sleep);
90761 +
90762 +enum glamo_engine {
90763 + GLAMO_ENGINE_CAPTURE,
90764 + GLAMO_ENGINE_ISP,
90765 + GLAMO_ENGINE_JPEG,
90766 + GLAMO_ENGINE_MPEG_ENC,
90767 + GLAMO_ENGINE_MPEG_DEC,
90768 + GLAMO_ENGINE_LCD,
90769 + GLAMO_ENGINE_CMDQ,
90770 + GLAMO_ENGINE_2D,
90771 + GLAMO_ENGINE_3D,
90772 + GLAMO_ENGINE_MMC,
90773 + GLAMO_ENGINE_MICROP0,
90774 + GLAMO_ENGINE_RISC,
90775 + GLAMO_ENGINE_MICROP1_MPEG_ENC,
90776 + GLAMO_ENGINE_MICROP1_MPEG_DEC,
90777 +#if 0
90778 + GLAMO_ENGINE_H264_DEC,
90779 + GLAMO_ENGINE_RISC1,
90780 + GLAMO_ENGINE_SPI,
90781 +#endif
90782 + __NUM_GLAMO_ENGINES
90783 +};
90784 +
90785 +struct glamo_mci_pdata {
90786 + struct glamo_core * pglamo;
90787 + unsigned int gpio_detect;
90788 + unsigned int gpio_wprotect;
90789 + unsigned long ocr_avail;
90790 + int (*glamo_can_set_mci_power)(void);
90791 + /* glamo-mci asking if it should use the slow clock to card */
90792 + int (*glamo_mci_use_slow)(void);
90793 + int (*glamo_irq_is_wired)(void);
90794 + void (*mci_suspending)(struct platform_device *dev);
90795 + int (*mci_all_dependencies_resumed)(struct platform_device *dev);
90796 +
90797 +};
90798 +
90799 +int glamo_engine_enable(struct glamo_core *glamo, enum glamo_engine engine);
90800 +int glamo_engine_disable(struct glamo_core *glamo, enum glamo_engine engine);
90801 +void glamo_engine_reset(struct glamo_core *glamo, enum glamo_engine engine);
90802 +int glamo_engine_reclock(struct glamo_core *glamo,
90803 + enum glamo_engine engine, int ps);
90804 +
90805 +void glamo_engine_clkreg_set(struct glamo_core *glamo,
90806 + enum glamo_engine engine,
90807 + u_int16_t mask, u_int16_t val);
90808 +
90809 +u_int16_t glamo_engine_clkreg_get(struct glamo_core *glamo,
90810 + enum glamo_engine engine);
90811 +#endif /* __GLAMO_CORE_H */
90812 Index: linux-2.6.28/drivers/mfd/glamo/glamo-fb.c
90813 ===================================================================
90814 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
90815 +++ linux-2.6.28/drivers/mfd/glamo/glamo-fb.c 2009-01-02 00:01:56.000000000 +0100
90816 @@ -0,0 +1,1048 @@
90817 +/* Smedia Glamo 336x/337x driver
90818 + *
90819 + * (C) 2007-2008 by Openmoko, Inc.
90820 + * Author: Harald Welte <laforge@openmoko.org>
90821 + * All rights reserved.
90822 + *
90823 + * This program is free software; you can redistribute it and/or
90824 + * modify it under the terms of the GNU General Public License as
90825 + * published by the Free Software Foundation; either version 2 of
90826 + * the License, or (at your option) any later version.
90827 + *
90828 + * This program is distributed in the hope that it will be useful,
90829 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
90830 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
90831 + * GNU General Public License for more details.
90832 + *
90833 + * You should have received a copy of the GNU General Public License
90834 + * along with this program; if not, write to the Free Software
90835 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
90836 + * MA 02111-1307 USA
90837 + */
90838 +
90839 +#include <linux/module.h>
90840 +#include <linux/kernel.h>
90841 +#include <linux/errno.h>
90842 +#include <linux/string.h>
90843 +#include <linux/mm.h>
90844 +#include <linux/slab.h>
90845 +#include <linux/delay.h>
90846 +#include <linux/fb.h>
90847 +#include <linux/init.h>
90848 +#include <linux/vmalloc.h>
90849 +#include <linux/dma-mapping.h>
90850 +#include <linux/interrupt.h>
90851 +#include <linux/workqueue.h>
90852 +#include <linux/wait.h>
90853 +#include <linux/platform_device.h>
90854 +#include <linux/clk.h>
90855 +#include <linux/spinlock.h>
90856 +
90857 +#include <asm/io.h>
90858 +#include <asm/uaccess.h>
90859 +#include <asm/div64.h>
90860 +
90861 +#ifdef CONFIG_PM
90862 +#include <linux/pm.h>
90863 +#endif
90864 +
90865 +#include <linux/glamofb.h>
90866 +
90867 +#include "glamo-regs.h"
90868 +#include "glamo-core.h"
90869 +
90870 +#ifndef DEBUG
90871 +#define GLAMO_LOG(...)
90872 +#else
90873 +#define GLAMO_LOG(...) \
90874 +do { \
90875 + printk(KERN_DEBUG "in %s:%s:%d", __FILE__, __func__, __LINE__); \
90876 + printk(KERN_DEBUG __VA_ARGS__); \
90877 +} while (0);
90878 +#endif
90879 +
90880 +
90881 +#define RESSIZE(ressource) (((ressource)->end - (ressource)->start)+1)
90882 +
90883 +struct glamofb_handle {
90884 + struct fb_info *fb;
90885 + struct device *dev;
90886 + struct resource *reg;
90887 + struct resource *fb_res;
90888 + char __iomem *base;
90889 + struct glamofb_platform_data *mach_info;
90890 + char __iomem *cursor_addr;
90891 + int cursor_on;
90892 + u_int32_t pseudo_pal[16];
90893 + spinlock_t lock_cmd;
90894 +};
90895 +
90896 +/* 'sibling' spi device for lcm init */
90897 +static struct platform_device glamo_spi_dev = {
90898 + .name = "glamo-lcm-spi",
90899 +};
90900 +
90901 +
90902 +static int reg_read(struct glamofb_handle *glamo,
90903 + u_int16_t reg)
90904 +{
90905 + return readw(glamo->base + reg);
90906 +}
90907 +
90908 +static void reg_write(struct glamofb_handle *glamo,
90909 + u_int16_t reg, u_int16_t val)
90910 +{
90911 + writew(val, glamo->base + reg);
90912 +}
90913 +
90914 +static struct glamo_script glamo_regs[] = {
90915 + { GLAMO_REG_LCD_MODE1, 0x0020 },
90916 + /* no display rotation, no hardware cursor, no dither, no gamma,
90917 + * no retrace flip, vsync low-active, hsync low active,
90918 + * no TVCLK, no partial display, hw dest color from fb,
90919 + * no partial display mode, LCD1, software flip, */
90920 + { GLAMO_REG_LCD_MODE2, 0x9020 },
90921 + /* video flip, no ptr, no ptr, dhclk off,
90922 + * normal mode, no cpuif,
90923 + * res, serial msb first, single fb, no fr ctrl,
90924 + * cpu if bits all zero, no crc
90925 + * 0000 0000 0010 0000 */
90926 + { GLAMO_REG_LCD_MODE3, 0x0b40 },
90927 + /* src data rgb565, res, 18bit rgb666
90928 + * 000 01 011 0100 0000 */
90929 + { GLAMO_REG_LCD_POLARITY, 0x440c },
90930 + /* DE high active, no cpu/lcd if, cs0 force low, a0 low active,
90931 + * np cpu if, 9bit serial data, sclk rising edge latch data
90932 + * 01 00 0 100 0 000 01 0 0 */
90933 + /* The following values assume 640*480@16bpp */
90934 + { GLAMO_REG_LCD_A_BASE1, 0x0000 }, /* display A base address 15:0 */
90935 + { GLAMO_REG_LCD_A_BASE2, 0x0000 }, /* display A base address 22:16 */
90936 + { GLAMO_REG_LCD_B_BASE1, 0x6000 }, /* display B base address 15:0 */
90937 + { GLAMO_REG_LCD_B_BASE2, 0x0009 }, /* display B base address 22:16 */
90938 + { GLAMO_REG_LCD_CURSOR_BASE1, 0xC000 }, /* cursor base address 15:0 */
90939 + { GLAMO_REG_LCD_CURSOR_BASE2, 0x0012 }, /* cursor base address 22:16 */
90940 + { GLAMO_REG_LCD_COMMAND2, 0x0000 }, /* display page A */
90941 +};
90942 +
90943 +static int glamofb_run_script(struct glamofb_handle *glamo,
90944 + struct glamo_script *script, int len)
90945 +{
90946 + int i;
90947 +
90948 + if (glamo->mach_info->glamo->suspending) {
90949 + dev_err(&glamo->mach_info->glamo->pdev->dev, "IGNORING glamofb_run_script while "
90950 + "suspended\n");
90951 + return -EBUSY;
90952 + }
90953 +
90954 + for (i = 0; i < len; i++) {
90955 + struct glamo_script *line = &script[i];
90956 +
90957 + if (line->reg == 0xffff)
90958 + return 0;
90959 + else if (line->reg == 0xfffe)
90960 + msleep(line->val);
90961 + else
90962 + reg_write(glamo, script[i].reg, script[i].val);
90963 + }
90964 +
90965 + return 0;
90966 +}
90967 +
90968 +static int glamofb_check_var(struct fb_var_screeninfo *var,
90969 + struct fb_info *info)
90970 +{
90971 + struct glamofb_handle *glamo = info->par;
90972 +
90973 + if (glamo->mach_info->glamo->suspending) {
90974 + dev_err(&glamo->mach_info->glamo->pdev->dev, "IGNORING glamofb_check_var while "
90975 + "suspended\n");
90976 + return -EBUSY;
90977 + }
90978 +
90979 + if (var->yres > glamo->mach_info->yres.max)
90980 + var->yres = glamo->mach_info->yres.max;
90981 + else if (var->yres < glamo->mach_info->yres.min)
90982 + var->yres = glamo->mach_info->yres.min;
90983 +
90984 + if (var->xres > glamo->mach_info->xres.max)
90985 + var->xres = glamo->mach_info->xres.max;
90986 + else if (var->xres < glamo->mach_info->xres.min)
90987 + var->xres = glamo->mach_info->xres.min;
90988 +
90989 + if (var->bits_per_pixel > glamo->mach_info->bpp.max)
90990 + var->bits_per_pixel = glamo->mach_info->bpp.max;
90991 + else if (var->bits_per_pixel < glamo->mach_info->bpp.min)
90992 + var->bits_per_pixel = glamo->mach_info->bpp.min;
90993 +
90994 + /* FIXME: set rgb positions */
90995 + switch (var->bits_per_pixel) {
90996 + case 16:
90997 + switch (reg_read(glamo, GLAMO_REG_LCD_MODE3) & 0xc000) {
90998 + case GLAMO_LCD_SRC_RGB565:
90999 + var->red.offset = 11;
91000 + var->green.offset = 5;
91001 + var->blue.offset = 0;
91002 + var->red.length = 5;
91003 + var->green.length = 6;
91004 + var->blue.length = 5;
91005 + var->transp.length = 0;
91006 + break;
91007 + case GLAMO_LCD_SRC_ARGB1555:
91008 + var->transp.offset = 15;
91009 + var->red.offset = 10;
91010 + var->green.offset = 5;
91011 + var->blue.offset = 0;
91012 + var->transp.length = 1;
91013 + var->red.length = 5;
91014 + var->green.length = 5;
91015 + var->blue.length = 5;
91016 + break;
91017 + case GLAMO_LCD_SRC_ARGB4444:
91018 + var->transp.offset = 12;
91019 + var->red.offset = 8;
91020 + var->green.offset = 4;
91021 + var->blue.offset = 0;
91022 + var->transp.length = 4;
91023 + var->red.length = 4;
91024 + var->green.length = 4;
91025 + var->blue.length = 4;
91026 + break;
91027 + }
91028 + break;
91029 + case 24:
91030 + case 32:
91031 + default:
91032 + /* The Smedia Glamo doesn't support anything but 16bit color */
91033 + printk(KERN_ERR
91034 + "Smedia driver does not [yet?] support 24/32bpp\n");
91035 + return -EINVAL;
91036 + }
91037 +
91038 + return 0;
91039 +}
91040 +
91041 +static void reg_set_bit_mask(struct glamofb_handle *glamo,
91042 + u_int16_t reg, u_int16_t mask,
91043 + u_int16_t val)
91044 +{
91045 + u_int16_t tmp;
91046 +
91047 + val &= mask;
91048 +
91049 + tmp = reg_read(glamo, reg);
91050 + tmp &= ~mask;
91051 + tmp |= val;
91052 + reg_write(glamo, reg, tmp);
91053 +}
91054 +
91055 +#define GLAMO_LCD_WIDTH_MASK 0x03FF
91056 +#define GLAMO_LCD_HEIGHT_MASK 0x03FF
91057 +#define GLAMO_LCD_PITCH_MASK 0x07FE
91058 +#define GLAMO_LCD_HV_TOTAL_MASK 0x03FF
91059 +#define GLAMO_LCD_HV_RETR_START_MASK 0x03FF
91060 +#define GLAMO_LCD_HV_RETR_END_MASK 0x03FF
91061 +#define GLAMO_LCD_HV_RETR_DISP_START_MASK 0x03FF
91062 +#define GLAMO_LCD_HV_RETR_DISP_END_MASK 0x03FF
91063 +
91064 +enum orientation {
91065 + ORIENTATION_PORTRAIT,
91066 + ORIENTATION_LANDSCAPE
91067 +};
91068 +
91069 +
91070 +/* the caller has to enxure lock_cmd is held and we are in cmd mode */
91071 +static void __rotate_lcd(struct glamofb_handle *glamo, __u32 rotation)
91072 +{
91073 + int glamo_rot;
91074 +
91075 + if (glamo->mach_info->glamo->suspending) {
91076 + dev_err(&glamo->mach_info->glamo->pdev->dev, "IGNORING rotate_lcd while "
91077 + "suspended\n");
91078 + return;
91079 + }
91080 +
91081 + switch (rotation) {
91082 + case FB_ROTATE_UR:
91083 + glamo_rot = GLAMO_LCD_ROT_MODE_0;
91084 + break;
91085 + case FB_ROTATE_CW:
91086 + glamo_rot = GLAMO_LCD_ROT_MODE_90;
91087 + break;
91088 + case FB_ROTATE_UD:
91089 + glamo_rot = GLAMO_LCD_ROT_MODE_180;
91090 + break;
91091 + case FB_ROTATE_CCW:
91092 + glamo_rot = GLAMO_LCD_ROT_MODE_270;
91093 + break;
91094 + default:
91095 + glamo_rot = GLAMO_LCD_ROT_MODE_0;
91096 + break;
91097 + }
91098 +
91099 + reg_set_bit_mask(glamo,
91100 + GLAMO_REG_LCD_WIDTH,
91101 + GLAMO_LCD_ROT_MODE_MASK,
91102 + glamo_rot);
91103 + reg_set_bit_mask(glamo,
91104 + GLAMO_REG_LCD_MODE1,
91105 + GLAMO_LCD_MODE1_ROTATE_EN,
91106 + (glamo_rot != GLAMO_LCD_ROT_MODE_0)?
91107 + GLAMO_LCD_MODE1_ROTATE_EN : 0);
91108 +}
91109 +
91110 +static enum orientation get_orientation(struct fb_var_screeninfo *var)
91111 +{
91112 + if (var->xres <= var->yres)
91113 + return ORIENTATION_PORTRAIT;
91114 +
91115 + return ORIENTATION_LANDSCAPE;
91116 +}
91117 +
91118 +static int will_orientation_change(struct fb_var_screeninfo *var)
91119 +{
91120 + enum orientation orient = get_orientation(var);
91121 +
91122 + switch (orient) {
91123 + case ORIENTATION_LANDSCAPE:
91124 + if (var->rotate == FB_ROTATE_UR ||
91125 + var->rotate == FB_ROTATE_UD)
91126 + return 1;
91127 + break;
91128 + case ORIENTATION_PORTRAIT:
91129 + if (var->rotate == FB_ROTATE_CW ||
91130 + var->rotate == FB_ROTATE_CCW)
91131 + return 1;
91132 + break;
91133 + }
91134 + return 0;
91135 +}
91136 +
91137 +static void glamofb_update_lcd_controller(struct glamofb_handle *glamo,
91138 + struct fb_var_screeninfo *var)
91139 +{
91140 + int sync, bp, disp, fp, total, xres, yres, pitch, orientation_changing;
91141 + unsigned long flags;
91142 +
91143 + if (!glamo || !var)
91144 + return;
91145 +
91146 + if (glamo->mach_info->glamo->suspending) {
91147 + dev_err(&glamo->mach_info->glamo->pdev->dev, "IGNORING glamofb_update_lcd_controller while "
91148 + "suspended\n");
91149 + return;
91150 + }
91151 +
91152 + dev_dbg(&glamo->mach_info->glamo->pdev->dev,
91153 + "glamofb_update_lcd_controller spin_lock_irqsave\n");
91154 + spin_lock_irqsave(&glamo->lock_cmd, flags);
91155 +
91156 + if (glamofb_cmd_mode(glamo, 1))
91157 + goto out_unlock;
91158 +
91159 + if (var->pixclock)
91160 + glamo_engine_reclock(glamo->mach_info->glamo,
91161 + GLAMO_ENGINE_LCD,
91162 + var->pixclock);
91163 +
91164 + xres = var->xres;
91165 + yres = var->yres;
91166 +
91167 + /* figure out if orientation is going to change */
91168 + orientation_changing = will_orientation_change(var);
91169 +
91170 + /* adjust the pitch according to new orientation to come */
91171 +
91172 + if (orientation_changing) {
91173 + pitch = var->yres * var->bits_per_pixel / 8;
91174 + } else {
91175 + pitch = var->xres * var->bits_per_pixel / 8;
91176 + }
91177 +
91178 + /*
91179 + * set the desired LCD geometry
91180 + */
91181 + reg_set_bit_mask(glamo,
91182 + GLAMO_REG_LCD_WIDTH,
91183 + GLAMO_LCD_WIDTH_MASK,
91184 + xres);
91185 + reg_set_bit_mask(glamo,
91186 + GLAMO_REG_LCD_HEIGHT,
91187 + GLAMO_LCD_HEIGHT_MASK,
91188 + yres);
91189 + reg_set_bit_mask(glamo,
91190 + GLAMO_REG_LCD_PITCH,
91191 + GLAMO_LCD_PITCH_MASK,
91192 + pitch);
91193 +
91194 + /* honour the rotation request */
91195 + __rotate_lcd(glamo, var->rotate);
91196 +
91197 + /* update the reported geometry of the framebuffer. */
91198 + if (orientation_changing) {
91199 + var->xres_virtual = var->xres = yres;
91200 + var->xres_virtual *= 2;
91201 + var->yres_virtual = var->yres = xres;
91202 + } else {
91203 + var->xres_virtual = var->xres = xres;
91204 + var->yres_virtual = var->yres = yres;
91205 + var->yres_virtual *= 2;
91206 + }
91207 +
91208 + /* update scannout timings */
91209 + sync = 0;
91210 + bp = sync + var->hsync_len;
91211 + disp = bp + var->left_margin;
91212 + fp = disp + xres;
91213 + total = fp + var->right_margin;
91214 +
91215 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_HORIZ_TOTAL,
91216 + GLAMO_LCD_HV_TOTAL_MASK, total);
91217 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_HORIZ_RETR_START,
91218 + GLAMO_LCD_HV_RETR_START_MASK, sync);
91219 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_HORIZ_RETR_END,
91220 + GLAMO_LCD_HV_RETR_END_MASK, bp);
91221 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_HORIZ_DISP_START,
91222 + GLAMO_LCD_HV_RETR_DISP_START_MASK, disp);
91223 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_HORIZ_DISP_END,
91224 + GLAMO_LCD_HV_RETR_DISP_END_MASK, fp);
91225 +
91226 + sync = 0;
91227 + bp = sync + var->vsync_len;
91228 + disp = bp + var->upper_margin;
91229 + fp = disp + yres;
91230 + total = fp + var->lower_margin;
91231 +
91232 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_VERT_TOTAL,
91233 + GLAMO_LCD_HV_TOTAL_MASK, total);
91234 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_VERT_RETR_START,
91235 + GLAMO_LCD_HV_RETR_START_MASK, sync);
91236 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_VERT_RETR_END,
91237 + GLAMO_LCD_HV_RETR_END_MASK, bp);
91238 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_VERT_DISP_START,
91239 + GLAMO_LCD_HV_RETR_DISP_START_MASK, disp);
91240 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_VERT_DISP_END,
91241 + GLAMO_LCD_HV_RETR_DISP_END_MASK, fp);
91242 +
91243 + glamofb_cmd_mode(glamo, 0);
91244 +
91245 +out_unlock:
91246 + dev_dbg(&glamo->mach_info->glamo->pdev->dev,
91247 + "glamofb_update_lcd_controller spin_unlock_irqrestore\n");
91248 + spin_unlock_irqrestore(&glamo->lock_cmd, flags);
91249 +}
91250 +
91251 +static int glamofb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
91252 +{
91253 + struct glamofb_handle *glamo = info->par;
91254 + u_int16_t page = var->yoffset / glamo->mach_info->yres.defval;
91255 + reg_write(glamo, GLAMO_REG_LCD_COMMAND2, page);
91256 +
91257 + return 0;
91258 +}
91259 +
91260 +static int glamofb_set_par(struct fb_info *info)
91261 +{
91262 + struct glamofb_handle *glamo = info->par;
91263 + struct fb_var_screeninfo *var = &info->var;
91264 +
91265 + if (glamo->mach_info->glamo->suspending) {
91266 + dev_err(&glamo->mach_info->glamo->pdev->dev, "IGNORING glamofb_set_par while "
91267 + "suspended\n");
91268 + return -EBUSY;
91269 + }
91270 +
91271 + switch (var->bits_per_pixel) {
91272 + case 16:
91273 + info->fix.visual = FB_VISUAL_TRUECOLOR;
91274 + break;
91275 + default:
91276 + printk("Smedia driver doesn't support != 16bpp\n");
91277 + return -EINVAL;
91278 + }
91279 +
91280 + info->fix.line_length = (var->xres * var->bits_per_pixel) / 8;
91281 +
91282 + glamofb_update_lcd_controller(glamo, var);
91283 +
91284 + return 0;
91285 +}
91286 +
91287 +
91288 +static void notify_blank(struct fb_info *info, int blank_mode)
91289 +{
91290 + struct fb_event event;
91291 +
91292 + event.info = info;
91293 + event.data = &blank_mode;
91294 + fb_notifier_call_chain(FB_EVENT_CONBLANK, &event);
91295 +}
91296 +
91297 +
91298 +static int glamofb_blank(int blank_mode, struct fb_info *info)
91299 +{
91300 + struct glamofb_handle *gfb = info->par;
91301 + struct glamo_core *gcore = gfb->mach_info->glamo;
91302 +
91303 + dev_dbg(gfb->dev, "glamofb_blank(%u)\n", blank_mode);
91304 +
91305 + switch (blank_mode) {
91306 + case FB_BLANK_VSYNC_SUSPEND:
91307 + case FB_BLANK_HSYNC_SUSPEND:
91308 + /* FIXME: add pdata hook/flag to indicate whether
91309 + * we should already switch off pixel clock here */
91310 + break;
91311 + case FB_BLANK_POWERDOWN:
91312 + /* disable the pixel clock */
91313 + glamo_engine_clkreg_set(gcore, GLAMO_ENGINE_LCD,
91314 + GLAMO_CLOCK_LCD_EN_DCLK, 0);
91315 + break;
91316 + case FB_BLANK_UNBLANK:
91317 + case FB_BLANK_NORMAL:
91318 + /* enable the pixel clock */
91319 + glamo_engine_clkreg_set(gcore, GLAMO_ENGINE_LCD,
91320 + GLAMO_CLOCK_LCD_EN_DCLK,
91321 + GLAMO_CLOCK_LCD_EN_DCLK);
91322 + notify_blank(info, blank_mode);
91323 + break;
91324 + }
91325 +
91326 + /* FIXME: once we have proper clock management in glamo-core,
91327 + * we can determine if other units need MCLK1 or the PLL, and
91328 + * disable it if not used. */
91329 + return 0;
91330 +}
91331 +
91332 +static inline unsigned int chan_to_field(unsigned int chan,
91333 + struct fb_bitfield *bf)
91334 +{
91335 + chan &= 0xffff;
91336 + chan >>= 16 - bf->length;
91337 + return chan << bf->offset;
91338 +}
91339 +
91340 +static int glamofb_setcolreg(unsigned regno,
91341 + unsigned red, unsigned green, unsigned blue,
91342 + unsigned transp, struct fb_info *info)
91343 +{
91344 + struct glamofb_handle *glamo = info->par;
91345 + unsigned int val;
91346 +
91347 + if (glamo->mach_info->glamo->suspending) {
91348 + dev_err(&glamo->mach_info->glamo->pdev->dev, "IGNORING glamofb_set_par while "
91349 + "suspended\n");
91350 + return -EBUSY;
91351 + }
91352 +
91353 + switch (glamo->fb->fix.visual) {
91354 + case FB_VISUAL_TRUECOLOR:
91355 + case FB_VISUAL_DIRECTCOLOR:
91356 + /* true-colour, use pseuo-palette */
91357 +
91358 + if (regno < 16) {
91359 + u32 *pal = glamo->fb->pseudo_palette;
91360 +
91361 + val = chan_to_field(red, &glamo->fb->var.red);
91362 + val |= chan_to_field(green, &glamo->fb->var.green);
91363 + val |= chan_to_field(blue, &glamo->fb->var.blue);
91364 +
91365 + pal[regno] = val;
91366 + };
91367 + break;
91368 + default:
91369 + return 1; /* unknown type */
91370 + }
91371 +
91372 + return 0;
91373 +}
91374 +
91375 +#ifdef CONFIG_MFD_GLAMO_HWACCEL
91376 +static inline void glamofb_vsync_wait(struct glamofb_handle *glamo,
91377 + int line, int size, int range)
91378 +{
91379 + int count[2];
91380 +
91381 + do {
91382 + count[0] = reg_read(glamo, GLAMO_REG_LCD_STATUS2) & 0x3ff;
91383 + count[1] = reg_read(glamo, GLAMO_REG_LCD_STATUS2) & 0x3ff;
91384 + } while (count[0] != count[1] ||
91385 + (line < count[0] + range &&
91386 + size > count[0] - range) ||
91387 + count[0] < range * 2);
91388 +}
91389 +
91390 +/*
91391 + * Enable/disable the hardware cursor mode altogether
91392 + * (for blinking and such, use glamofb_cursor()).
91393 + */
91394 +static void glamofb_cursor_onoff(struct glamofb_handle *glamo, int on)
91395 +{
91396 + int y, size;
91397 +
91398 + if (glamo->cursor_on) {
91399 + y = reg_read(glamo, GLAMO_REG_LCD_CURSOR_Y_POS);
91400 + size = reg_read(glamo, GLAMO_REG_LCD_CURSOR_Y_SIZE);
91401 +
91402 + glamofb_vsync_wait(glamo, y, size, 30);
91403 + }
91404 +
91405 + reg_set_bit_mask(glamo, GLAMO_REG_LCD_MODE1,
91406 + GLAMO_LCD_MODE1_CURSOR_EN,
91407 + on ? GLAMO_LCD_MODE1_CURSOR_EN : 0);
91408 + glamo->cursor_on = on;
91409 +
91410 + /* Hide the cursor by default */
91411 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_X_SIZE, 0);
91412 +}
91413 +
91414 +static int glamofb_cursor(struct fb_info *info, struct fb_cursor *cursor)
91415 +{
91416 + struct glamofb_handle *glamo = info->par;
91417 + unsigned long flags;
91418 +
91419 + spin_lock_irqsave(&glamo->lock_cmd, flags);
91420 +
91421 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_X_SIZE,
91422 + cursor->enable ? cursor->image.width : 0);
91423 +
91424 + if (cursor->set & FB_CUR_SETPOS) {
91425 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_X_POS,
91426 + cursor->image.dx);
91427 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_Y_POS,
91428 + cursor->image.dy);
91429 + }
91430 +
91431 + if (cursor->set & FB_CUR_SETCMAP) {
91432 + uint16_t fg = glamo->pseudo_pal[cursor->image.fg_color];
91433 + uint16_t bg = glamo->pseudo_pal[cursor->image.bg_color];
91434 +
91435 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_FG_COLOR, fg);
91436 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_BG_COLOR, bg);
91437 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_DST_COLOR, fg);
91438 + }
91439 +
91440 + if (cursor->set & FB_CUR_SETHOT)
91441 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_PRESET,
91442 + (cursor->hot.x << 8) | cursor->hot.y);
91443 +
91444 + if ((cursor->set & FB_CUR_SETSIZE) ||
91445 + (cursor->set & (FB_CUR_SETIMAGE | FB_CUR_SETSHAPE))) {
91446 + int x, y, pitch, op;
91447 + const uint8_t *pcol = cursor->image.data;
91448 + const uint8_t *pmsk = cursor->mask;
91449 + uint8_t __iomem *dst = glamo->cursor_addr;
91450 + uint8_t dcol = 0;
91451 + uint8_t dmsk = 0;
91452 + uint8_t byte = 0;
91453 +
91454 + if (cursor->image.depth > 1) {
91455 + spin_unlock_irqrestore(&glamo->lock_cmd, flags);
91456 + return -EINVAL;
91457 + }
91458 +
91459 + pitch = ((cursor->image.width + 7) >> 2) & ~1;
91460 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_PITCH,
91461 + pitch);
91462 + reg_write(glamo, GLAMO_REG_LCD_CURSOR_Y_SIZE,
91463 + cursor->image.height);
91464 +
91465 + for (y = 0; y < cursor->image.height; y++) {
91466 + byte = 0;
91467 + for (x = 0; x < cursor->image.width; x++) {
91468 + if ((x % 8) == 0) {
91469 + dcol = *pcol++;
91470 + dmsk = *pmsk++;
91471 + } else {
91472 + dcol >>= 1;
91473 + dmsk >>= 1;
91474 + }
91475 +
91476 + if (cursor->rop == ROP_COPY)
91477 + op = (dmsk & 1) ?
91478 + (dcol & 1) ? 1 : 3 : 0;
91479 + else
91480 + op = ((dmsk & 1) << 1) |
91481 + ((dcol & 1) << 0);
91482 + byte |= op << ((x & 3) << 1);
91483 +
91484 + if (x % 4 == 3) {
91485 + writeb(byte, dst + x / 4);
91486 + byte = 0;
91487 + }
91488 + }
91489 + if (x % 4) {
91490 + writeb(byte, dst + x / 4);
91491 + byte = 0;
91492 + }
91493 +
91494 + dst += pitch;
91495 + }
91496 + }
91497 +
91498 + spin_unlock_irqrestore(&glamo->lock_cmd, flags);
91499 +
91500 + return 0;
91501 +}
91502 +#endif
91503 +
91504 +static inline int glamofb_cmdq_empty(struct glamofb_handle *gfb)
91505 +{
91506 + /* DGCMdQempty -- 1 == command queue is empty */
91507 + return reg_read(gfb, GLAMO_REG_LCD_STATUS1) & (1 << 15);
91508 +}
91509 +
91510 +/* call holding gfb->lock_cmd when locking, until you unlock */
91511 +int glamofb_cmd_mode(struct glamofb_handle *gfb, int on)
91512 +{
91513 + int timeout = 2000000;
91514 +
91515 + if (gfb->mach_info->glamo->suspending) {
91516 + dev_err(&gfb->mach_info->glamo->pdev->dev, "IGNORING glamofb_cmd_mode while "
91517 + "suspended\n");
91518 + return -EBUSY;
91519 + }
91520 +
91521 + dev_dbg(gfb->dev, "glamofb_cmd_mode(gfb=%p, on=%d)\n", gfb, on);
91522 + if (on) {
91523 + dev_dbg(gfb->dev, "%s: waiting for cmdq empty: ",
91524 + __FUNCTION__);
91525 + while ((!glamofb_cmdq_empty(gfb)) && (timeout--))
91526 + /* yield() */;
91527 + if (timeout < 0) {
91528 + printk(KERN_ERR"*************"
91529 + "glamofb cmd_queue never got empty"
91530 + "*************\n");
91531 + return -EIO;
91532 + }
91533 + dev_dbg(gfb->dev, "empty!\n");
91534 +
91535 + /* display the entire frame then switch to command */
91536 + reg_write(gfb, GLAMO_REG_LCD_COMMAND1,
91537 + GLAMO_LCD_CMD_TYPE_DISP |
91538 + GLAMO_LCD_CMD_DATA_FIRE_VSYNC);
91539 +
91540 + /* wait until lcd idle */
91541 + dev_dbg(gfb->dev, "waiting for lcd idle: ");
91542 + timeout = 2000000;
91543 + while ((!reg_read(gfb, GLAMO_REG_LCD_STATUS2) & (1 << 12)) &&
91544 + (timeout--))
91545 + /* yield() */;
91546 + if (timeout < 0) {
91547 + printk(KERN_ERR"*************"
91548 + "glamofb lcd never idle"
91549 + "*************\n");
91550 + return -EIO;
91551 + }
91552 +
91553 + mdelay(100);
91554 +
91555 + dev_dbg(gfb->dev, "cmd mode entered\n");
91556 +
91557 + } else {
91558 + /* RGB interface needs vsync/hsync */
91559 + if (reg_read(gfb, GLAMO_REG_LCD_MODE3) & GLAMO_LCD_MODE3_RGB)
91560 + reg_write(gfb, GLAMO_REG_LCD_COMMAND1,
91561 + GLAMO_LCD_CMD_TYPE_DISP |
91562 + GLAMO_LCD_CMD_DATA_DISP_SYNC);
91563 +
91564 + reg_write(gfb, GLAMO_REG_LCD_COMMAND1,
91565 + GLAMO_LCD_CMD_TYPE_DISP |
91566 + GLAMO_LCD_CMD_DATA_DISP_FIRE);
91567 + }
91568 +
91569 + return 0;
91570 +}
91571 +EXPORT_SYMBOL_GPL(glamofb_cmd_mode);
91572 +
91573 +
91574 +int glamofb_cmd_write(struct glamofb_handle *gfb, u_int16_t val)
91575 +{
91576 + int timeout = 200000;
91577 +
91578 + if (gfb->mach_info->glamo->suspending) {
91579 + dev_err(&gfb->mach_info->glamo->pdev->dev, "IGNORING glamofb_cmd_write while "
91580 + "suspended\n");
91581 + return -EBUSY;
91582 + }
91583 +
91584 + dev_dbg(gfb->dev, "%s: waiting for cmdq empty\n", __FUNCTION__);
91585 + while ((!glamofb_cmdq_empty(gfb)) && (timeout--))
91586 + yield();
91587 + if (timeout < 0) {
91588 + printk(KERN_ERR"*************"
91589 + "glamofb cmd_queue never got empty"
91590 + "*************\n");
91591 + return 1;
91592 + }
91593 + dev_dbg(gfb->dev, "idle, writing 0x%04x\n", val);
91594 +
91595 + reg_write(gfb, GLAMO_REG_LCD_COMMAND1, val);
91596 +
91597 + return 0;
91598 +}
91599 +EXPORT_SYMBOL_GPL(glamofb_cmd_write);
91600 +
91601 +static struct fb_ops glamofb_ops = {
91602 + .owner = THIS_MODULE,
91603 + .fb_check_var = glamofb_check_var,
91604 + .fb_pan_display = glamofb_pan_display,
91605 + .fb_set_par = glamofb_set_par,
91606 + .fb_blank = glamofb_blank,
91607 + .fb_setcolreg = glamofb_setcolreg,
91608 +#ifdef CONFIG_MFD_GLAMO_HWACCEL
91609 + .fb_cursor = glamofb_cursor,
91610 +#endif
91611 + .fb_fillrect = cfb_fillrect,
91612 + .fb_copyarea = cfb_copyarea,
91613 + .fb_imageblit = cfb_imageblit,
91614 +};
91615 +
91616 +static int glamofb_init_regs(struct glamofb_handle *glamo)
91617 +{
91618 + struct fb_info *info = glamo->fb;
91619 +
91620 + glamofb_check_var(&info->var, info);
91621 + glamofb_run_script(glamo, glamo_regs, ARRAY_SIZE(glamo_regs));
91622 + glamofb_set_par(info);
91623 +
91624 + return 0;
91625 +}
91626 +
91627 +static int __init glamofb_probe(struct platform_device *pdev)
91628 +{
91629 + int rc = -EIO;
91630 + struct fb_info *fbinfo;
91631 + struct glamofb_handle *glamofb;
91632 + struct glamofb_platform_data *mach_info = pdev->dev.platform_data;
91633 +
91634 + printk(KERN_INFO "SMEDIA Glamo frame buffer driver (C) 2007 "
91635 + "Openmoko, Inc.\n");
91636 +
91637 + fbinfo = framebuffer_alloc(sizeof(struct glamofb_handle), &pdev->dev);
91638 + if (!fbinfo)
91639 + return -ENOMEM;
91640 +
91641 + glamofb = fbinfo->par;
91642 + glamofb->fb = fbinfo;
91643 + glamofb->dev = &pdev->dev;
91644 +
91645 + strcpy(fbinfo->fix.id, "SMedia Glamo");
91646 +
91647 + glamofb->reg = platform_get_resource_byname(pdev, IORESOURCE_MEM,
91648 + "glamo-fb-regs");
91649 + if (!glamofb->reg) {
91650 + dev_err(&pdev->dev, "platform device with no registers?\n");
91651 + rc = -ENOENT;
91652 + goto out_free;
91653 + }
91654 +
91655 + glamofb->fb_res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
91656 + "glamo-fb-mem");
91657 + if (!glamofb->fb_res) {
91658 + dev_err(&pdev->dev, "platform device with no memory ?\n");
91659 + rc = -ENOENT;
91660 + goto out_free;
91661 + }
91662 +
91663 + glamofb->reg = request_mem_region(glamofb->reg->start,
91664 + RESSIZE(glamofb->reg), pdev->name);
91665 + if (!glamofb->reg) {
91666 + dev_err(&pdev->dev, "failed to request mmio region\n");
91667 + goto out_free;
91668 + }
91669 +
91670 + glamofb->fb_res = request_mem_region(glamofb->fb_res->start,
91671 + mach_info->fb_mem_size,
91672 + pdev->name);
91673 + if (!glamofb->fb_res) {
91674 + dev_err(&pdev->dev, "failed to request vram region\n");
91675 + goto out_release_reg;
91676 + }
91677 +
91678 + /* we want to remap only the registers required for this core
91679 + * driver. */
91680 + glamofb->base = ioremap(glamofb->reg->start, RESSIZE(glamofb->reg));
91681 + if (!glamofb->base) {
91682 + dev_err(&pdev->dev, "failed to ioremap() mmio memory\n");
91683 + goto out_release_fb;
91684 + }
91685 + fbinfo->fix.smem_start = (unsigned long) glamofb->fb_res->start;
91686 + fbinfo->fix.smem_len = mach_info->fb_mem_size;
91687 +
91688 + fbinfo->screen_base = ioremap(glamofb->fb_res->start,
91689 + RESSIZE(glamofb->fb_res));
91690 + if (!fbinfo->screen_base) {
91691 + dev_err(&pdev->dev, "failed to ioremap() vram memory\n");
91692 + goto out_release_fb;
91693 + }
91694 + glamofb->cursor_addr = fbinfo->screen_base + 0x12C000;
91695 +
91696 + platform_set_drvdata(pdev, glamofb);
91697 +
91698 + glamofb->mach_info = pdev->dev.platform_data;
91699 +
91700 + fbinfo->fix.visual = FB_VISUAL_TRUECOLOR;
91701 + fbinfo->fix.type = FB_TYPE_PACKED_PIXELS;
91702 + fbinfo->fix.type_aux = 0;
91703 + fbinfo->fix.xpanstep = 0;
91704 + fbinfo->fix.ypanstep = mach_info->yres.defval;
91705 + fbinfo->fix.ywrapstep = 0;
91706 + fbinfo->fix.accel = FB_ACCEL_GLAMO;
91707 +
91708 + fbinfo->var.nonstd = 0;
91709 + fbinfo->var.activate = FB_ACTIVATE_NOW;
91710 + fbinfo->var.height = mach_info->height;
91711 + fbinfo->var.width = mach_info->width;
91712 + fbinfo->var.accel_flags = 0; /* FIXME */
91713 + fbinfo->var.vmode = FB_VMODE_NONINTERLACED;
91714 +
91715 + fbinfo->fbops = &glamofb_ops;
91716 + fbinfo->flags = FBINFO_FLAG_DEFAULT;
91717 + fbinfo->pseudo_palette = &glamofb->pseudo_pal;
91718 +
91719 + fbinfo->var.xres = mach_info->xres.defval;
91720 + fbinfo->var.xres_virtual = mach_info->xres.defval;
91721 + fbinfo->var.yres = mach_info->yres.defval;
91722 + fbinfo->var.yres_virtual = mach_info->yres.defval * 2;
91723 + fbinfo->var.bits_per_pixel = mach_info->bpp.defval;
91724 +
91725 + fbinfo->var.pixclock = mach_info->pixclock;
91726 + fbinfo->var.left_margin = mach_info->left_margin;
91727 + fbinfo->var.right_margin = mach_info->right_margin;
91728 + fbinfo->var.upper_margin = mach_info->upper_margin;
91729 + fbinfo->var.lower_margin = mach_info->lower_margin;
91730 + fbinfo->var.hsync_len = mach_info->hsync_len;
91731 + fbinfo->var.vsync_len = mach_info->vsync_len;
91732 +
91733 + memset(fbinfo->screen_base, 0,
91734 + mach_info->xres.max *
91735 + mach_info->yres.max *
91736 + mach_info->bpp.max / 8);
91737 +
91738 + glamo_engine_enable(mach_info->glamo, GLAMO_ENGINE_LCD);
91739 + glamo_engine_reset(mach_info->glamo, GLAMO_ENGINE_LCD);
91740 +
91741 + dev_info(&pdev->dev, "spin_lock_init\n");
91742 + spin_lock_init(&glamofb->lock_cmd);
91743 + glamofb_init_regs(glamofb);
91744 +#ifdef CONFIG_MFD_GLAMO_HWACCEL
91745 + glamofb_cursor_onoff(glamofb, 1);
91746 +#endif
91747 +
91748 + rc = register_framebuffer(fbinfo);
91749 + if (rc < 0) {
91750 + dev_err(&pdev->dev, "failed to register framebuffer\n");
91751 + goto out_unmap_fb;
91752 + }
91753 +
91754 + if (mach_info->spi_info) {
91755 + /* register the sibling spi device */
91756 + mach_info->spi_info->glamofb_handle = glamofb;
91757 + glamo_spi_dev.dev.parent = &pdev->dev;
91758 + glamo_spi_dev.dev.platform_data = mach_info->spi_info;
91759 + platform_device_register(&glamo_spi_dev);
91760 + }
91761 +
91762 + printk(KERN_INFO "fb%d: %s frame buffer device\n",
91763 + fbinfo->node, fbinfo->fix.id);
91764 +
91765 + return 0;
91766 +
91767 +out_unmap_fb:
91768 + iounmap(fbinfo->screen_base);
91769 + iounmap(glamofb->base);
91770 +out_release_fb:
91771 + release_mem_region(glamofb->fb_res->start, RESSIZE(glamofb->fb_res));
91772 +out_release_reg:
91773 + release_mem_region(glamofb->reg->start, RESSIZE(glamofb->reg));
91774 +out_free:
91775 + framebuffer_release(fbinfo);
91776 + return rc;
91777 +}
91778 +
91779 +static int glamofb_remove(struct platform_device *pdev)
91780 +{
91781 + struct glamofb_handle *glamofb = platform_get_drvdata(pdev);
91782 +
91783 + platform_set_drvdata(pdev, NULL);
91784 + iounmap(glamofb->base);
91785 + release_mem_region(glamofb->reg->start, RESSIZE(glamofb->reg));
91786 + kfree(glamofb);
91787 +
91788 + return 0;
91789 +}
91790 +
91791 +#ifdef CONFIG_PM
91792 +
91793 +static int glamofb_suspend(struct platform_device *pdev, pm_message_t state)
91794 +{
91795 + struct glamofb_handle *gfb = platform_get_drvdata(pdev);
91796 +
91797 + /* we need to stop anything touching our framebuffer */
91798 +// fb_blank(gfb->fb, FB_BLANK_NORMAL);
91799 + fb_set_suspend(gfb->fb, 1);
91800 +
91801 + /* seriously -- nobody is allowed to touch glamo memory when we
91802 + * are suspended or we lock on nWAIT
91803 + */
91804 +// iounmap(gfb->fb->screen_base);
91805 +
91806 + return 0;
91807 +}
91808 +
91809 +static int glamofb_resume(struct platform_device *pdev)
91810 +{
91811 + struct glamofb_handle *glamofb = platform_get_drvdata(pdev);
91812 + struct glamofb_platform_data *mach_info = pdev->dev.platform_data;
91813 +
91814 + /* OK let's allow framebuffer ops again */
91815 +// gfb->fb->screen_base = ioremap(gfb->fb_res->start,
91816 +// RESSIZE(gfb->fb_res));
91817 + glamo_engine_enable(mach_info->glamo, GLAMO_ENGINE_LCD);
91818 + glamo_engine_reset(mach_info->glamo, GLAMO_ENGINE_LCD);
91819 +
91820 + printk(KERN_ERR"spin_lock_init\n");
91821 + spin_lock_init(&glamofb->lock_cmd);
91822 + glamofb_init_regs(glamofb);
91823 +#ifdef CONFIG_MFD_GLAMO_HWACCEL
91824 + glamofb_cursor_onoff(glamofb, 1);
91825 +#endif
91826 +
91827 +
91828 + fb_set_suspend(glamofb->fb, 0);
91829 +// fb_blank(gfb->fb, FB_BLANK_UNBLANK);
91830 +
91831 + return 0;
91832 +}
91833 +#else
91834 +#define glamo_suspend NULL
91835 +#define glamo_resume NULL
91836 +#endif
91837 +
91838 +static struct platform_driver glamofb_driver = {
91839 + .probe = glamofb_probe,
91840 + .remove = glamofb_remove,
91841 + .suspend = glamofb_suspend,
91842 + .resume = glamofb_resume,
91843 + .driver = {
91844 + .name = "glamo-fb",
91845 + .owner = THIS_MODULE,
91846 + },
91847 +};
91848 +
91849 +static int __devinit glamofb_init(void)
91850 +{
91851 + return platform_driver_register(&glamofb_driver);
91852 +}
91853 +
91854 +static void __exit glamofb_cleanup(void)
91855 +{
91856 + platform_driver_unregister(&glamofb_driver);
91857 +}
91858 +
91859 +module_init(glamofb_init);
91860 +module_exit(glamofb_cleanup);
91861 +
91862 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
91863 +MODULE_DESCRIPTION("Smedia Glamo 336x/337x framebuffer driver");
91864 +MODULE_LICENSE("GPL");
91865 Index: linux-2.6.28/drivers/mfd/glamo/glamo-gpio.c
91866 ===================================================================
91867 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
91868 +++ linux-2.6.28/drivers/mfd/glamo/glamo-gpio.c 2009-01-02 00:01:56.000000000 +0100
91869 @@ -0,0 +1,62 @@
91870 +
91871 +#include <linux/kernel.h>
91872 +#include <linux/module.h>
91873 +#include <linux/spinlock.h>
91874 +#include <linux/io.h>
91875 +
91876 +#include <linux/glamo-gpio.h>
91877 +
91878 +#include "glamo-core.h"
91879 +#include "glamo-regs.h"
91880 +
91881 +void glamo_gpio_setpin(struct glamo_core *glamo, unsigned int pin,
91882 + unsigned int value)
91883 +{
91884 + unsigned int reg = REG_OF_GPIO(pin);
91885 + u_int16_t tmp;
91886 +
91887 + spin_lock(&glamo->lock);
91888 + tmp = readw(glamo->base + reg);
91889 + if (value)
91890 + tmp |= OUTPUT_BIT(pin);
91891 + else
91892 + tmp &= ~OUTPUT_BIT(pin);
91893 + writew(tmp, glamo->base + reg);
91894 + spin_unlock(&glamo->lock);
91895 +}
91896 +EXPORT_SYMBOL(glamo_gpio_setpin);
91897 +
91898 +int glamo_gpio_getpin(struct glamo_core *glamo, unsigned int pin)
91899 +{
91900 + return readw(REG_OF_GPIO(pin)) & INPUT_BIT(pin) ? 1 : 0;
91901 +}
91902 +EXPORT_SYMBOL(glamo_gpio_getpin);
91903 +
91904 +void glamo_gpio_cfgpin(struct glamo_core *glamo, unsigned int pinfunc)
91905 +{
91906 + unsigned int reg = REG_OF_GPIO(pinfunc);
91907 + u_int16_t tmp;
91908 +
91909 + spin_lock(&glamo->lock);
91910 + tmp = readw(glamo->base + reg);
91911 +
91912 + if ((pinfunc & 0x00f0) == GLAMO_GPIO_F_FUNC) {
91913 + /* pin is a function pin: clear gpio bit */
91914 + tmp &= ~FUNC_BIT(pinfunc);
91915 + } else {
91916 + /* pin is gpio: set gpio bit */
91917 + tmp |= FUNC_BIT(pinfunc);
91918 +
91919 + if (pinfunc & GLAMO_GPIO_F_IN) {
91920 + /* gpio input: set bit to disable output mode */
91921 + tmp |= GPIO_OUT_BIT(pinfunc);
91922 + } else if (pinfunc & GLAMO_GPIO_F_OUT) {
91923 + /* gpio output: clear bit to enable output mode */
91924 + tmp &= ~GPIO_OUT_BIT(pinfunc);
91925 + }
91926 + }
91927 + writew(tmp, glamo->base + reg);
91928 + spin_unlock(&glamo->lock);
91929 +}
91930 +EXPORT_SYMBOL(glamo_gpio_cfgpin);
91931 +
91932 Index: linux-2.6.28/drivers/mfd/glamo/glamo-lcm-spi.c
91933 ===================================================================
91934 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
91935 +++ linux-2.6.28/drivers/mfd/glamo/glamo-lcm-spi.c 2009-01-02 00:01:56.000000000 +0100
91936 @@ -0,0 +1,240 @@
91937 +/*
91938 + * Copyright (C) 2007 Openmoko, Inc.
91939 + * Author: Harald Welte <laforge@openmoko.org>
91940 + *
91941 + * Smedia Glamo GPIO based SPI driver
91942 + *
91943 + * This program is free software; you can redistribute it and/or modify
91944 + * it under the terms of the GNU General Public License version 2 as
91945 + * published by the Free Software Foundation.
91946 + *
91947 + * This driver currently only implements a minimum subset of the hardware
91948 + * features, esp. those features that are required to drive the jbt6k74
91949 + * LCM controller asic in the TD028TTEC1 LCM.
91950 + *
91951 +*/
91952 +
91953 +#define DEBUG
91954 +
91955 +#include <linux/kernel.h>
91956 +#include <linux/init.h>
91957 +#include <linux/delay.h>
91958 +#include <linux/device.h>
91959 +#include <linux/spinlock.h>
91960 +#include <linux/workqueue.h>
91961 +#include <linux/platform_device.h>
91962 +
91963 +#include <linux/spi/spi.h>
91964 +#include <linux/spi/spi_bitbang.h>
91965 +#include <linux/spi/glamo.h>
91966 +
91967 +#include <linux/glamofb.h>
91968 +
91969 +#include <mach/hardware.h>
91970 +
91971 +#include "glamo-core.h"
91972 +#include "glamo-regs.h"
91973 +
91974 +struct glamo_spi {
91975 + struct spi_bitbang bitbang;
91976 + struct spi_master *master;
91977 + struct glamo_spi_info *info;
91978 + struct device *dev;
91979 +};
91980 +
91981 +static inline struct glamo_spi *to_gs(struct spi_device *spi)
91982 +{
91983 + return spi->controller_data;
91984 +}
91985 +
91986 +static int glamo_spi_setupxfer(struct spi_device *spi, struct spi_transfer *t)
91987 +{
91988 + unsigned int bpw;
91989 +
91990 + bpw = t ? t->bits_per_word : spi->bits_per_word;
91991 +
91992 + if (bpw != 9 && bpw != 8) {
91993 + dev_err(&spi->dev, "invalid bits-per-word (%d)\n", bpw);
91994 + return -EINVAL;
91995 + }
91996 +
91997 + return 0;
91998 +}
91999 +
92000 +static void glamo_spi_chipsel(struct spi_device *spi, int value)
92001 +{
92002 +#if 0
92003 + struct glamo_spi *gs = to_gs(spi);
92004 +
92005 + dev_dbg(&spi->dev, "chipsel %d: spi=%p, gs=%p, info=%p, handle=%p\n",
92006 + value, spi, gs, gs->info, gs->info->glamofb_handle);
92007 +
92008 + glamofb_cmd_mode(gs->info->glamofb_handle, value);
92009 +#endif
92010 +}
92011 +
92012 +static int glamo_spi_txrx(struct spi_device *spi, struct spi_transfer *t)
92013 +{
92014 + struct glamo_spi *gs = to_gs(spi);
92015 + const u_int16_t *ui16 = (const u_int16_t *) t->tx_buf;
92016 + u_int16_t nine_bits;
92017 + int i;
92018 +
92019 + dev_dbg(&spi->dev, "txrx: tx %p, rx %p, bpw %d, len %d\n",
92020 + t->tx_buf, t->rx_buf, t->bits_per_word, t->len);
92021 +
92022 + if (spi->bits_per_word == 9)
92023 + nine_bits = (1 << 9);
92024 + else
92025 + nine_bits = 0;
92026 +
92027 + if (t->len > 3 * sizeof(u_int16_t)) {
92028 + dev_err(&spi->dev, "this driver doesn't support "
92029 + "%u sized xfers\n", t->len);
92030 + return -EINVAL;
92031 + }
92032 +
92033 + for (i = 0; i < t->len/sizeof(u_int16_t); i++) {
92034 + /* actually transfer the data */
92035 +#if 1
92036 + glamofb_cmd_write(gs->info->glamofb_handle,
92037 + GLAMO_LCD_CMD_TYPE_SERIAL | nine_bits |
92038 + (1 << 10) | (1 << 11) | (ui16[i] & 0x1ff));
92039 +#endif
92040 + /* FIXME: fire ?!? */
92041 + if (i == 0 && (ui16[i] & 0x1ff) == 0x29) {
92042 + dev_dbg(&spi->dev, "leaving command mode\n");
92043 + glamofb_cmd_mode(gs->info->glamofb_handle, 0);
92044 + }
92045 + }
92046 +
92047 + return t->len;
92048 +}
92049 +
92050 +static int glamo_spi_setup(struct spi_device *spi)
92051 +{
92052 + int ret;
92053 +
92054 + if (!spi->bits_per_word)
92055 + spi->bits_per_word = 9;
92056 +
92057 + /* FIXME: hardware can do this */
92058 + if (spi->mode & SPI_LSB_FIRST)
92059 + return -EINVAL;
92060 +
92061 + ret = glamo_spi_setupxfer(spi, NULL);
92062 + if (ret < 0) {
92063 + dev_err(&spi->dev, "setupxfer returned %d\n", ret);
92064 + return ret;
92065 + }
92066 +
92067 + dev_dbg(&spi->dev, "%s: mode %d, %u bpw\n",
92068 + __FUNCTION__, spi->mode, spi->bits_per_word);
92069 +
92070 + return 0;
92071 +}
92072 +
92073 +static int glamo_spi_probe(struct platform_device *pdev)
92074 +{
92075 + struct spi_master *master;
92076 + struct glamo_spi *sp;
92077 + int ret;
92078 + int i;
92079 +
92080 + master = spi_alloc_master(&pdev->dev, sizeof(struct glamo_spi));
92081 + if (master == NULL) {
92082 + dev_err(&pdev->dev, "failed to allocate spi master\n");
92083 + ret = -ENOMEM;
92084 + goto err;
92085 + }
92086 +
92087 + sp = spi_master_get_devdata(master);
92088 + memset(sp, 0, sizeof(struct glamo_spi));
92089 +
92090 + sp->master = spi_master_get(master);
92091 + sp->info = pdev->dev.platform_data;
92092 + if (!sp->info) {
92093 + dev_err(&pdev->dev, "can't operate without platform data\n");
92094 + ret = -EIO;
92095 + goto err_no_pdev;
92096 + }
92097 + dev_dbg(&pdev->dev, "sp->info(pdata) = %p\n", sp->info);
92098 +
92099 + sp->dev = &pdev->dev;
92100 +
92101 + platform_set_drvdata(pdev, sp);
92102 +
92103 + sp->bitbang.master = sp->master;
92104 + sp->bitbang.setup_transfer = glamo_spi_setupxfer;
92105 + sp->bitbang.chipselect = glamo_spi_chipsel;
92106 + sp->bitbang.txrx_bufs = glamo_spi_txrx;
92107 + sp->bitbang.master->setup = glamo_spi_setup;
92108 +
92109 + ret = spi_bitbang_start(&sp->bitbang);
92110 + if (ret)
92111 + goto err_no_bitbang;
92112 +
92113 + /* register the chips to go with the board */
92114 +
92115 + glamofb_cmd_mode(sp->info->glamofb_handle, 1);
92116 +
92117 + for (i = 0; i < sp->info->board_size; i++) {
92118 + dev_info(&pdev->dev, "registering %p: %s\n",
92119 + &sp->info->board_info[i],
92120 + sp->info->board_info[i].modalias);
92121 +
92122 + sp->info->board_info[i].controller_data = sp;
92123 + spi_new_device(master, sp->info->board_info + i);
92124 + }
92125 +
92126 + return 0;
92127 +
92128 +err_no_bitbang:
92129 + platform_set_drvdata(pdev, NULL);
92130 +err_no_pdev:
92131 + spi_master_put(sp->bitbang.master);
92132 +err:
92133 + return ret;
92134 +
92135 +}
92136 +
92137 +static int glamo_spi_remove(struct platform_device *pdev)
92138 +{
92139 + struct glamo_spi *sp = platform_get_drvdata(pdev);
92140 +
92141 + spi_bitbang_stop(&sp->bitbang);
92142 + spi_master_put(sp->bitbang.master);
92143 +
92144 + return 0;
92145 +}
92146 +
92147 +#define glamo_spi_suspend NULL
92148 +#define glamo_spi_resume NULL
92149 +
92150 +static struct platform_driver glamo_spi_drv = {
92151 + .probe = glamo_spi_probe,
92152 + .remove = glamo_spi_remove,
92153 + .suspend = glamo_spi_suspend,
92154 + .resume = glamo_spi_resume,
92155 + .driver = {
92156 + .name = "glamo-lcm-spi",
92157 + .owner = THIS_MODULE,
92158 + },
92159 +};
92160 +
92161 +static int __init glamo_spi_init(void)
92162 +{
92163 + return platform_driver_register(&glamo_spi_drv);
92164 +}
92165 +
92166 +static void __exit glamo_spi_exit(void)
92167 +{
92168 + platform_driver_unregister(&glamo_spi_drv);
92169 +}
92170 +
92171 +module_init(glamo_spi_init);
92172 +module_exit(glamo_spi_exit);
92173 +
92174 +MODULE_DESCRIPTION("Smedia Glamo 336x/337x LCM serial command SPI Driver");
92175 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>")
92176 +MODULE_LICENSE("GPL");
92177 Index: linux-2.6.28/drivers/mfd/glamo/glamo-mci.c
92178 ===================================================================
92179 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
92180 +++ linux-2.6.28/drivers/mfd/glamo/glamo-mci.c 2009-01-02 00:01:56.000000000 +0100
92181 @@ -0,0 +1,1133 @@
92182 +/*
92183 + * linux/drivers/mmc/host/glamo-mmc.c - Glamo MMC driver
92184 + *
92185 + * Copyright (C) 2007 Openmoko, Inc, Andy Green <andy@openmoko.com>
92186 + * Based on S3C MMC driver that was:
92187 + * Copyright (C) 2004-2006 maintech GmbH, Thomas Kleffel <tk@maintech.de>
92188 + *
92189 + * This program is free software; you can redistribute it and/or modify
92190 + * it under the terms of the GNU General Public License version 2 as
92191 + * published by the Free Software Foundation.
92192 + */
92193 +
92194 +#include <linux/module.h>
92195 +#include <linux/dma-mapping.h>
92196 +#include <linux/clk.h>
92197 +#include <linux/mmc/mmc.h>
92198 +#include <linux/mmc/host.h>
92199 +#include <linux/platform_device.h>
92200 +#include <linux/irq.h>
92201 +#include <linux/pcf50633.h>
92202 +#include <linux/delay.h>
92203 +#include <linux/interrupt.h>
92204 +#include <linux/spinlock.h>
92205 +
92206 +#include <asm/dma.h>
92207 +#include <asm/dma-mapping.h>
92208 +#include <asm/io.h>
92209 +
92210 +#include "glamo-mci.h"
92211 +#include "glamo-core.h"
92212 +#include "glamo-regs.h"
92213 +
92214 +/* from glamo-core.c */
92215 +extern struct glamo_mci_pdata glamo_mci_def_pdata;
92216 +
92217 +static spinlock_t clock_lock;
92218 +
92219 +#define DRIVER_NAME "glamo-mci"
92220 +#define RESSIZE(ressource) (((ressource)->end - (ressource)->start) + 1)
92221 +
92222 +static void glamo_mci_send_request(struct mmc_host *mmc);
92223 +
92224 +/*
92225 + * Max SD clock rate
92226 + *
92227 + * held at /(3 + 1) due to concerns of 100R recommended series resistor
92228 + * allows 16MHz @ 4-bit --> 8MBytes/sec raw
92229 + *
92230 + * you can override this on kernel commandline using
92231 + *
92232 + * glamo_mci.sd_max_clk=10000000
92233 + *
92234 + * for example
92235 + */
92236 +
92237 +static int sd_max_clk = 50000000 / 3;
92238 +module_param(sd_max_clk, int, 0644);
92239 +
92240 +/*
92241 + * Slow SD clock rate
92242 + *
92243 + * you can override this on kernel commandline using
92244 + *
92245 + * glamo_mci.sd_slow_ratio=8
92246 + *
92247 + * for example
92248 + *
92249 + * platform callback is used to decide effective clock rate, if not
92250 + * defined then max is used, if defined and returns nonzero, rate is
92251 + * divided by this factor
92252 + */
92253 +
92254 +static int sd_slow_ratio = 8;
92255 +module_param(sd_slow_ratio, int, 0644);
92256 +
92257 +/*
92258 + * Post-power SD clock rate
92259 + *
92260 + * you can override this on kernel commandline using
92261 + *
92262 + * glamo_mci.sd_post_power_clock=1000000
92263 + *
92264 + * for example
92265 + *
92266 + * After changing power to card, clock is held at this rate until first bulk
92267 + * transfer completes
92268 + */
92269 +
92270 +static int sd_post_power_clock = 1000000;
92271 +module_param(sd_post_power_clock, int, 0644);
92272 +
92273 +
92274 +/*
92275 + * SD Signal drive strength
92276 + *
92277 + * you can override this on kernel commandline using
92278 + *
92279 + * glamo_mci.sd_drive=0
92280 + *
92281 + * for example
92282 + */
92283 +
92284 +static int sd_drive;
92285 +module_param(sd_drive, int, 0644);
92286 +
92287 +/*
92288 + * SD allow SD clock to run while idle
92289 + *
92290 + * you can override this on kernel commandline using
92291 + *
92292 + * glamo_mci.sd_idleclk=0
92293 + *
92294 + * for example
92295 + */
92296 +
92297 +static int sd_idleclk = 0; /* disallow idle clock by default */
92298 +module_param(sd_idleclk, int, 0644);
92299 +
92300 +/* used to stash real idleclk state in suspend: we force it to run in there */
92301 +static int suspend_sd_idleclk;
92302 +
92303 +
92304 +unsigned char CRC7(u8 * pu8, int cnt)
92305 +{
92306 + u8 crc = 0;
92307 +
92308 + while (cnt--) {
92309 + int n;
92310 + u8 d = *pu8++;
92311 + for (n = 0; n < 8; n++) {
92312 + crc <<= 1;
92313 + if ((d & 0x80) ^ (crc & 0x80))
92314 + crc ^= 0x09;
92315 + d <<= 1;
92316 + }
92317 + }
92318 + return (crc << 1) | 1;
92319 +}
92320 +
92321 +static int get_data_buffer(struct glamo_mci_host *host,
92322 + volatile u32 *words, volatile u16 **pointer)
92323 +{
92324 + struct scatterlist *sg;
92325 +
92326 + *words = 0;
92327 + *pointer = NULL;
92328 +
92329 + if (host->pio_active == XFER_NONE)
92330 + return -EINVAL;
92331 +
92332 + if ((!host->mrq) || (!host->mrq->data))
92333 + return -EINVAL;
92334 +
92335 + if (host->pio_sgptr >= host->mrq->data->sg_len) {
92336 + dev_dbg(&host->pdev->dev, "no more buffers (%i/%i)\n",
92337 + host->pio_sgptr, host->mrq->data->sg_len);
92338 + return -EBUSY;
92339 + }
92340 + sg = &host->mrq->data->sg[host->pio_sgptr];
92341 +
92342 + *words = sg->length >> 1; /* we are working with a 16-bit data bus */
92343 + *pointer = page_address(sg_page(sg)) + sg->offset;
92344 +
92345 + BUG_ON(((long)(*pointer)) & 1);
92346 +
92347 + host->pio_sgptr++;
92348 +
92349 + /* dev_info(&host->pdev->dev, "new buffer (%i/%i)\n",
92350 + host->pio_sgptr, host->mrq->data->sg_len); */
92351 + return 0;
92352 +}
92353 +
92354 +static void do_pio_read(struct glamo_mci_host *host)
92355 +{
92356 + int res;
92357 + u16 __iomem *from_ptr = host->base_data + (RESSIZE(host->mem_data) /
92358 + sizeof(u16) / 2);
92359 +#ifdef DEBUG
92360 + u16 * block;
92361 +#endif
92362 +
92363 + while (1) {
92364 + res = get_data_buffer(host, &host->pio_words, &host->pio_ptr);
92365 + if (res) {
92366 + host->pio_active = XFER_NONE;
92367 + host->complete_what = COMPLETION_FINALIZE;
92368 +
92369 + dev_dbg(&host->pdev->dev, "pio_read(): "
92370 + "complete (no more data).\n");
92371 + return;
92372 + }
92373 +
92374 + dev_dbg(&host->pdev->dev, "pio_read(): host->pio_words: %d\n",
92375 + host->pio_words);
92376 +
92377 + host->pio_count += host->pio_words << 1;
92378 +
92379 +#ifdef DEBUG
92380 + block = (u16 *)host->pio_ptr;
92381 + res = host->pio_words << 1;
92382 +#endif
92383 +#if 0
92384 + /* u16-centric memcpy */
92385 + while (host->pio_words--)
92386 + *host->pio_ptr++ = *from_ptr++;
92387 +#else
92388 + /* memcpy can be faster? */
92389 + memcpy((void *)host->pio_ptr, from_ptr, host->pio_words << 1);
92390 + host->pio_ptr += host->pio_words;
92391 +#endif
92392 +
92393 +#ifdef DEBUG
92394 + print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 16, 1,
92395 + (void *)block, res, 1);
92396 +#endif
92397 + }
92398 +}
92399 +
92400 +static int do_pio_write(struct glamo_mci_host *host)
92401 +{
92402 + int res = 0;
92403 + volatile u16 __iomem *to_ptr = host->base_data;
92404 + int err = 0;
92405 +
92406 + dev_dbg(&host->pdev->dev, "pio_write():\n");
92407 + while (!res) {
92408 + res = get_data_buffer(host, &host->pio_words, &host->pio_ptr);
92409 + if (res)
92410 + continue;
92411 +
92412 + dev_dbg(&host->pdev->dev, "pio_write():new source: [%i]@[%p]\n",
92413 + host->pio_words, host->pio_ptr);
92414 +
92415 + host->pio_count += host->pio_words << 1;
92416 + while (host->pio_words--)
92417 + writew(*host->pio_ptr++, to_ptr++);
92418 + }
92419 +
92420 + dev_dbg(&host->pdev->dev, "pio_write(): complete\n");
92421 + host->pio_active = XFER_NONE;
92422 + return err;
92423 +}
92424 +
92425 +static void __glamo_mci_fix_card_div(struct glamo_mci_host *host, int div)
92426 +{
92427 + unsigned long flags;
92428 +
92429 + spin_lock_irqsave(&clock_lock, flags);
92430 +
92431 + if (div < 0) {
92432 + /* stop clock - remove clock from divider input */
92433 + writew(readw(glamo_mci_def_pdata.pglamo->base +
92434 + GLAMO_REG_CLOCK_GEN5_1) & (~GLAMO_CLOCK_GEN51_EN_DIV_TCLK),
92435 + glamo_mci_def_pdata.pglamo->base + GLAMO_REG_CLOCK_GEN5_1);
92436 +
92437 + goto done;
92438 + } else {
92439 + /* set the nearest prescaler factor
92440 + *
92441 + * register shared with SCLK divisor -- no chance of race because
92442 + * we don't use sensor interface
92443 + */
92444 + writew((readw(glamo_mci_def_pdata.pglamo->base +
92445 + GLAMO_REG_CLOCK_GEN8) & 0xff00) | div,
92446 + glamo_mci_def_pdata.pglamo->base + GLAMO_REG_CLOCK_GEN8);
92447 + /* enable clock to divider input */
92448 + writew(readw(glamo_mci_def_pdata.pglamo->base +
92449 + GLAMO_REG_CLOCK_GEN5_1) | GLAMO_CLOCK_GEN51_EN_DIV_TCLK,
92450 + glamo_mci_def_pdata.pglamo->base + GLAMO_REG_CLOCK_GEN5_1);
92451 + }
92452 +
92453 + if (host->force_slow_during_powerup)
92454 + div = host->clk_rate / sd_post_power_clock;
92455 + else
92456 + if (host->pdata->glamo_mci_use_slow)
92457 + if ((host->pdata->glamo_mci_use_slow)())
92458 + div = div * sd_slow_ratio;
92459 +
92460 + if (div > 255)
92461 + div = 255;
92462 +
92463 + /*
92464 + * set the nearest prescaler factor
92465 + *
92466 + * register shared with SCLK divisor -- no chance of race because
92467 + * we don't use sensor interface
92468 + */
92469 + writew((readw(glamo_mci_def_pdata.pglamo->base +
92470 + GLAMO_REG_CLOCK_GEN8) & 0xff00) | div,
92471 + glamo_mci_def_pdata.pglamo->base + GLAMO_REG_CLOCK_GEN8);
92472 + /* enable clock to divider input */
92473 + writew(readw(glamo_mci_def_pdata.pglamo->base +
92474 + GLAMO_REG_CLOCK_GEN5_1) | GLAMO_CLOCK_GEN51_EN_DIV_TCLK,
92475 + glamo_mci_def_pdata.pglamo->base + GLAMO_REG_CLOCK_GEN5_1);
92476 +
92477 +done:
92478 + spin_unlock_irqrestore(&clock_lock, flags);
92479 +}
92480 +
92481 +static int __glamo_mci_set_card_clock(struct glamo_mci_host *host, int freq,
92482 + int *division)
92483 +{
92484 + int div = 0;
92485 + int real_rate = 0;
92486 +
92487 + if (freq) {
92488 + /* Set clock */
92489 + for (div = 0; div < 256; div++) {
92490 + real_rate = host->clk_rate / (div + 1);
92491 + if (real_rate <= freq)
92492 + break;
92493 + }
92494 + if (div > 255)
92495 + div = 255;
92496 +
92497 + if (division)
92498 + *division = div;
92499 +
92500 + __glamo_mci_fix_card_div(host, div);
92501 +
92502 + } else {
92503 + /* stop clock */
92504 + if (division)
92505 + *division = 0xff;
92506 +
92507 + if (!sd_idleclk && !host->force_slow_during_powerup)
92508 + /* clock off */
92509 + __glamo_mci_fix_card_div(host, -1);
92510 + }
92511 +
92512 + return real_rate;
92513 +}
92514 +
92515 +static void glamo_mci_irq(unsigned int irq, struct irq_desc *desc)
92516 +{
92517 + struct glamo_mci_host *host = (struct glamo_mci_host *)
92518 + desc->handler_data;
92519 + u16 status;
92520 + struct mmc_command *cmd;
92521 + unsigned long iflags;
92522 +
92523 + if (!host)
92524 + return;
92525 +
92526 + if (host->suspending) { /* bad news, dangerous time */
92527 + dev_err(&host->pdev->dev, "****glamo_mci_irq before resumed\n");
92528 + return;
92529 + }
92530 +
92531 + if (!host->mrq)
92532 + return;
92533 + cmd = host->mrq->cmd;
92534 + if (!cmd)
92535 + return;
92536 +
92537 + spin_lock_irqsave(&host->complete_lock, iflags);
92538 +
92539 + status = readw(host->base + GLAMO_REG_MMC_RB_STAT1);
92540 +
92541 + /* ack this interrupt source */
92542 + writew(GLAMO_IRQ_MMC,
92543 + glamo_mci_def_pdata.pglamo->base + GLAMO_REG_IRQ_CLEAR);
92544 +
92545 + if (status & (GLAMO_STAT1_MMC_RTOUT |
92546 + GLAMO_STAT1_MMC_DTOUT))
92547 + cmd->error = -ETIMEDOUT;
92548 + if (status & (GLAMO_STAT1_MMC_BWERR |
92549 + GLAMO_STAT1_MMC_BRERR))
92550 + cmd->error = -EILSEQ;
92551 + if (cmd->error) {
92552 + dev_info(&host->pdev->dev, "Error after cmd: 0x%x\n", status);
92553 + goto done;
92554 + }
92555 +
92556 + /* disable the initial slow start after first bulk transfer */
92557 + if (host->force_slow_during_powerup)
92558 + host->force_slow_during_powerup--;
92559 +
92560 + if (host->pio_active == XFER_READ)
92561 + do_pio_read(host);
92562 +
92563 + host->mrq->data->bytes_xfered = host->pio_count;
92564 + dev_dbg(&host->pdev->dev, "status = 0x%04x count=%d\n",
92565 + status, host->pio_count);
92566 +
92567 + /* issue STOP if we have been given one to use */
92568 + if (host->mrq->stop) {
92569 + host->cmd_is_stop = 1;
92570 + glamo_mci_send_request(host->mmc);
92571 + host->cmd_is_stop = 0;
92572 + }
92573 +
92574 + if (!sd_idleclk && !host->force_slow_during_powerup)
92575 + /* clock off */
92576 + __glamo_mci_fix_card_div(host, -1);
92577 +
92578 +done:
92579 + host->complete_what = COMPLETION_NONE;
92580 + host->mrq = NULL;
92581 + mmc_request_done(host->mmc, cmd->mrq);
92582 + spin_unlock_irqrestore(&host->complete_lock, iflags);
92583 +}
92584 +
92585 +static int glamo_mci_send_command(struct glamo_mci_host *host,
92586 + struct mmc_command *cmd)
92587 +{
92588 + u8 u8a[6];
92589 + u16 fire = 0;
92590 +
92591 + /* if we can't do it, reject as busy */
92592 + if (!readw(host->base + GLAMO_REG_MMC_RB_STAT1) &
92593 + GLAMO_STAT1_MMC_IDLE) {
92594 + host->mrq = NULL;
92595 + cmd->error = -EBUSY;
92596 + mmc_request_done(host->mmc, host->mrq);
92597 + return -EBUSY;
92598 + }
92599 +
92600 + /* create an array in wire order for CRC computation */
92601 + u8a[0] = 0x40 | (cmd->opcode & 0x3f);
92602 + u8a[1] = (u8)(cmd->arg >> 24);
92603 + u8a[2] = (u8)(cmd->arg >> 16);
92604 + u8a[3] = (u8)(cmd->arg >> 8);
92605 + u8a[4] = (u8)cmd->arg;
92606 + u8a[5] = CRC7(&u8a[0], 5); /* CRC7 on first 5 bytes of packet */
92607 +
92608 + /* issue the wire-order array including CRC in register order */
92609 + writew((u8a[4] << 8) | u8a[5], host->base + GLAMO_REG_MMC_CMD_REG1);
92610 + writew((u8a[2] << 8) | u8a[3], host->base + GLAMO_REG_MMC_CMD_REG2);
92611 + writew((u8a[0] << 8) | u8a[1], host->base + GLAMO_REG_MMC_CMD_REG3);
92612 +
92613 + /* command index toggle */
92614 + fire |= (host->ccnt & 1) << 12;
92615 +
92616 + /* set type of command */
92617 + switch (mmc_cmd_type(cmd)) {
92618 + case MMC_CMD_BC:
92619 + fire |= GLAMO_FIRE_MMC_CMDT_BNR;
92620 + break;
92621 + case MMC_CMD_BCR:
92622 + fire |= GLAMO_FIRE_MMC_CMDT_BR;
92623 + break;
92624 + case MMC_CMD_AC:
92625 + fire |= GLAMO_FIRE_MMC_CMDT_AND;
92626 + break;
92627 + case MMC_CMD_ADTC:
92628 + fire |= GLAMO_FIRE_MMC_CMDT_AD;
92629 + break;
92630 + }
92631 + /*
92632 + * if it expects a response, set the type expected
92633 + *
92634 + * R1, Length : 48bit, Normal response
92635 + * R1b, Length : 48bit, same R1, but added card busy status
92636 + * R2, Length : 136bit (really 128 bits with CRC snipped)
92637 + * R3, Length : 48bit (OCR register value)
92638 + * R4, Length : 48bit, SDIO_OP_CONDITION, Reverse SDIO Card
92639 + * R5, Length : 48bit, IO_RW_DIRECTION, Reverse SDIO Card
92640 + * R6, Length : 48bit (RCA register)
92641 + * R7, Length : 48bit (interface condition, VHS(voltage supplied),
92642 + * check pattern, CRC7)
92643 + */
92644 + switch (mmc_resp_type(cmd)) {
92645 + case MMC_RSP_R6: /* same index as R7 and R1 */
92646 + fire |= GLAMO_FIRE_MMC_RSPT_R1;
92647 + break;
92648 + case MMC_RSP_R1B:
92649 + fire |= GLAMO_FIRE_MMC_RSPT_R1b;
92650 + break;
92651 + case MMC_RSP_R2:
92652 + fire |= GLAMO_FIRE_MMC_RSPT_R2;
92653 + break;
92654 + case MMC_RSP_R3:
92655 + fire |= GLAMO_FIRE_MMC_RSPT_R3;
92656 + break;
92657 + /* R4 and R5 supported by chip not defined in linux/mmc/core.h (sdio) */
92658 + }
92659 + /*
92660 + * From the command index, set up the command class in the host ctrllr
92661 + *
92662 + * missing guys present on chip but couldn't figure out how to use yet:
92663 + * 0x0 "stream read"
92664 + * 0x9 "cancel running command"
92665 + */
92666 + switch (cmd->opcode) {
92667 + case MMC_READ_SINGLE_BLOCK:
92668 + fire |= GLAMO_FIRE_MMC_CC_SBR; /* single block read */
92669 + break;
92670 + case MMC_SWITCH: /* 64 byte payload */
92671 + case 0x33: /* observed issued by MCI */
92672 + case MMC_READ_MULTIPLE_BLOCK:
92673 + /* we will get an interrupt off this */
92674 + if (!cmd->mrq->stop)
92675 + /* multiblock no stop */
92676 + fire |= GLAMO_FIRE_MMC_CC_MBRNS;
92677 + else
92678 + /* multiblock with stop */
92679 + fire |= GLAMO_FIRE_MMC_CC_MBRS;
92680 + break;
92681 + case MMC_WRITE_BLOCK:
92682 + fire |= GLAMO_FIRE_MMC_CC_SBW; /* single block write */
92683 + break;
92684 + case MMC_WRITE_MULTIPLE_BLOCK:
92685 + if (cmd->mrq->stop)
92686 + /* multiblock with stop */
92687 + fire |= GLAMO_FIRE_MMC_CC_MBWS;
92688 + else
92689 +// /* multiblock NO stop-- 'RESERVED'? */
92690 + fire |= GLAMO_FIRE_MMC_CC_MBWNS;
92691 + break;
92692 + case MMC_STOP_TRANSMISSION:
92693 + fire |= GLAMO_FIRE_MMC_CC_STOP; /* STOP */
92694 + break;
92695 + default:
92696 + fire |= GLAMO_FIRE_MMC_CC_BASIC; /* "basic command" */
92697 + break;
92698 + }
92699 +
92700 + /* always largest timeout */
92701 + writew(0xfff, host->base + GLAMO_REG_MMC_TIMEOUT);
92702 +
92703 + /* Generate interrupt on txfer */
92704 + writew((readw(host->base + GLAMO_REG_MMC_BASIC) & 0x3e) |
92705 + 0x0800 | GLAMO_BASIC_MMC_NO_CLK_RD_WAIT |
92706 + GLAMO_BASIC_MMC_EN_COMPL_INT | (sd_drive << 6),
92707 + host->base + GLAMO_REG_MMC_BASIC);
92708 +
92709 + /* send the command out on the wire */
92710 + /* dev_info(&host->pdev->dev, "Using FIRE %04X\n", fire); */
92711 + writew(fire, host->base + GLAMO_REG_MMC_CMD_FIRE);
92712 + cmd->error = 0;
92713 + return 0;
92714 +}
92715 +
92716 +static int glamo_mci_prepare_pio(struct glamo_mci_host *host,
92717 + struct mmc_data *data)
92718 +{
92719 + /*
92720 + * the S-Media-internal RAM offset for our MMC buffer
92721 + * Read is halfway up the buffer and write is at the start
92722 + */
92723 + if (data->flags & MMC_DATA_READ) {
92724 + writew((u16)(GLAMO_FB_SIZE + (RESSIZE(host->mem_data) / 2)),
92725 + host->base + GLAMO_REG_MMC_WDATADS1);
92726 + writew((u16)((GLAMO_FB_SIZE +
92727 + (RESSIZE(host->mem_data) / 2)) >> 16),
92728 + host->base + GLAMO_REG_MMC_WDATADS2);
92729 + } else {
92730 + writew((u16)GLAMO_FB_SIZE, host->base +
92731 + GLAMO_REG_MMC_RDATADS1);
92732 + writew((u16)(GLAMO_FB_SIZE >> 16), host->base +
92733 + GLAMO_REG_MMC_RDATADS2);
92734 + }
92735 +
92736 + /* set up the block info */
92737 + writew(data->blksz, host->base + GLAMO_REG_MMC_DATBLKLEN);
92738 + writew(data->blocks, host->base + GLAMO_REG_MMC_DATBLKCNT);
92739 + dev_dbg(&host->pdev->dev, "(blksz=%d, count=%d)\n",
92740 + data->blksz, data->blocks);
92741 + host->pio_sgptr = 0;
92742 + host->pio_words = 0;
92743 + host->pio_count = 0;
92744 + host->pio_active = 0;
92745 + /* if write, prep the write into the shared RAM before the command */
92746 + if (data->flags & MMC_DATA_WRITE) {
92747 + host->pio_active = XFER_WRITE;
92748 + return do_pio_write(host);
92749 + }
92750 + host->pio_active = XFER_READ;
92751 + return 0;
92752 +}
92753 +
92754 +static void glamo_mci_send_request(struct mmc_host *mmc)
92755 +{
92756 + struct glamo_mci_host *host = mmc_priv(mmc);
92757 + struct mmc_request *mrq = host->mrq;
92758 + struct mmc_command *cmd = host->cmd_is_stop ? mrq->stop : mrq->cmd;
92759 + u16 * pu16 = (u16 *)&cmd->resp[0];
92760 + u16 * reg_resp = (u16 *)(host->base + GLAMO_REG_MMC_CMD_RSP1);
92761 + u16 status;
92762 + int n;
92763 + int timeout = 1000000;
92764 + int insanity_timeout = 1000000;
92765 +
92766 + if (host->suspending) {
92767 + dev_err(&host->pdev->dev, "IGNORING glamo_mci_send_request while "
92768 + "suspended\n");
92769 + cmd->error = -EIO;
92770 + if (cmd->data)
92771 + cmd->data->error = -EIO;
92772 + mmc_request_done(mmc, mrq);
92773 + return;
92774 + }
92775 +
92776 + host->ccnt++;
92777 + /*
92778 + * somehow 2.6.24 MCI manages to issue MMC_WRITE_BLOCK *without* the
92779 + * MMC_DATA_WRITE flag, WTF? Work around the madness.
92780 + */
92781 + if (cmd->opcode == MMC_WRITE_BLOCK)
92782 + if (mrq->data)
92783 + mrq->data->flags |= MMC_DATA_WRITE;
92784 +
92785 + /* this guy has data to read/write? */
92786 + if ((!host->cmd_is_stop) && cmd->data) {
92787 + int res;
92788 + host->dcnt++;
92789 + res = glamo_mci_prepare_pio(host, cmd->data);
92790 + if (res) {
92791 + cmd->error = -EIO;
92792 + cmd->data->error = -EIO;
92793 + mmc_request_done(mmc, mrq);
92794 + return;
92795 + }
92796 + }
92797 +
92798 + dev_dbg(&host->pdev->dev,"cmd 0x%x, "
92799 + "arg 0x%x data=%p mrq->stop=%p flags 0x%x\n",
92800 + cmd->opcode, cmd->arg, cmd->data, cmd->mrq->stop,
92801 + cmd->flags);
92802 +
92803 + /* resume requested clock rate
92804 + * scale it down by sd_slow_ratio if platform requests it
92805 + */
92806 + __glamo_mci_fix_card_div(host, host->clk_div);
92807 +
92808 + if (glamo_mci_send_command(host, cmd))
92809 + goto bail;
92810 +
92811 + /* we are deselecting card? because it isn't going to ack then... */
92812 + if ((cmd->opcode == 7) && (cmd->arg == 0))
92813 + goto done;
92814 +
92815 + /*
92816 + * we must spin until response is ready or timed out
92817 + * -- we don't get interrupts unless there is a bulk rx
92818 + */
92819 + do
92820 + status = readw(host->base + GLAMO_REG_MMC_RB_STAT1);
92821 + while (((((status >> 15) & 1) != (host->ccnt & 1)) ||
92822 + (!(status & (GLAMO_STAT1_MMC_RB_RRDY |
92823 + GLAMO_STAT1_MMC_RTOUT |
92824 + GLAMO_STAT1_MMC_DTOUT |
92825 + GLAMO_STAT1_MMC_BWERR |
92826 + GLAMO_STAT1_MMC_BRERR)))) && (insanity_timeout--));
92827 +
92828 + if (insanity_timeout < 0)
92829 + dev_info(&host->pdev->dev, "command timeout, continuing\n");
92830 +
92831 + if (status & (GLAMO_STAT1_MMC_RTOUT |
92832 + GLAMO_STAT1_MMC_DTOUT))
92833 + cmd->error = -ETIMEDOUT;
92834 + if (status & (GLAMO_STAT1_MMC_BWERR |
92835 + GLAMO_STAT1_MMC_BRERR))
92836 + cmd->error = -EILSEQ;
92837 +
92838 + if (host->cmd_is_stop)
92839 + goto bail;
92840 +
92841 + if (cmd->error) {
92842 + dev_info(&host->pdev->dev, "Error after cmd: 0x%x\n", status);
92843 + goto done;
92844 + }
92845 + /*
92846 + * mangle the response registers in two different exciting
92847 + * undocumented ways discovered by trial and error
92848 + */
92849 + if (mmc_resp_type(cmd) == MMC_RSP_R2)
92850 + /* grab the response */
92851 + for (n = 0; n < 8; n++) /* super mangle power 1 */
92852 + pu16[n ^ 6] = readw(&reg_resp[n]);
92853 + else
92854 + for (n = 0; n < 3; n++) /* super mangle power 2 */
92855 + pu16[n] = (readw(&reg_resp[n]) >> 8) |
92856 + (readw(&reg_resp[n + 1]) << 8);
92857 + /*
92858 + * if we don't have bulk data to take care of, we're done
92859 + */
92860 + if (!cmd->data)
92861 + goto done;
92862 + if (!(cmd->data->flags & (MMC_DATA_READ | MMC_DATA_WRITE)))
92863 + goto done;
92864 +
92865 + /*
92866 + * Otherwise can can use the interrupt as async completion --
92867 + * if there is read data coming, or we wait for write data to complete,
92868 + * exit without mmc_request_done() as the payload interrupt
92869 + * will service it
92870 + */
92871 + dev_dbg(&host->pdev->dev, "Waiting for payload data\n");
92872 + /*
92873 + * if the glamo INT# line isn't wired (*cough* it can happen)
92874 + * I'm afraid we have to spin on the IRQ status bit and "be
92875 + * our own INT# line"
92876 + */
92877 + if (!glamo_mci_def_pdata.pglamo->irq_works) {
92878 + /*
92879 + * we have faith we will get an "interrupt"...
92880 + * but something insane like suspend problems can mean
92881 + * we spin here forever, so we timeout after a LONG time
92882 + */
92883 + while ((!(readw(glamo_mci_def_pdata.pglamo->base +
92884 + GLAMO_REG_IRQ_STATUS) & GLAMO_IRQ_MMC)) &&
92885 + (timeout--))
92886 + ;
92887 +
92888 + if (timeout < 0) {
92889 + if (cmd->data->error)
92890 + cmd->data->error = -ETIMEDOUT;
92891 + dev_err(&host->pdev->dev, "Payload timeout\n");
92892 + goto bail;
92893 + }
92894 +
92895 + /* yay we are an interrupt controller! -- call the ISR
92896 + * it will stop clock to card
92897 + */
92898 + glamo_mci_irq(IRQ_GLAMO(GLAMO_IRQIDX_MMC),
92899 + irq_desc + IRQ_GLAMO(GLAMO_IRQIDX_MMC));
92900 + }
92901 + return;
92902 +
92903 +done:
92904 + host->complete_what = COMPLETION_NONE;
92905 + host->mrq = NULL;
92906 + mmc_request_done(host->mmc, cmd->mrq);
92907 +bail:
92908 + if (!sd_idleclk && !host->force_slow_during_powerup)
92909 + /* stop the clock to card */
92910 + __glamo_mci_fix_card_div(host, -1);
92911 +}
92912 +
92913 +static void glamo_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
92914 +{
92915 + struct glamo_mci_host *host = mmc_priv(mmc);
92916 +
92917 + host->cmd_is_stop = 0;
92918 + host->mrq = mrq;
92919 + glamo_mci_send_request(mmc);
92920 +}
92921 +
92922 +#if 1
92923 +static void glamo_mci_reset(struct glamo_mci_host *host)
92924 +{
92925 + if (host->suspending) {
92926 + dev_err(&host->pdev->dev, "IGNORING glamo_mci_reset while "
92927 + "suspended\n");
92928 + return;
92929 + }
92930 + dev_dbg(&host->pdev->dev, "******* glamo_mci_reset\n");
92931 + /* reset MMC controller */
92932 + writew(GLAMO_CLOCK_MMC_RESET | GLAMO_CLOCK_MMC_DG_TCLK |
92933 + GLAMO_CLOCK_MMC_EN_TCLK | GLAMO_CLOCK_MMC_DG_M9CLK |
92934 + GLAMO_CLOCK_MMC_EN_M9CLK,
92935 + glamo_mci_def_pdata.pglamo->base + GLAMO_REG_CLOCK_MMC);
92936 + udelay(10);
92937 + /* and disable reset */
92938 + writew(GLAMO_CLOCK_MMC_DG_TCLK |
92939 + GLAMO_CLOCK_MMC_EN_TCLK | GLAMO_CLOCK_MMC_DG_M9CLK |
92940 + GLAMO_CLOCK_MMC_EN_M9CLK,
92941 + glamo_mci_def_pdata.pglamo->base + GLAMO_REG_CLOCK_MMC);
92942 +}
92943 +#endif
92944 +static inline int glamo_mci_get_mv(int vdd)
92945 +{
92946 + int mv = 1650;
92947 +
92948 + if (vdd > 7)
92949 + mv += 350 + 100 * (vdd - 8);
92950 +
92951 + return mv;
92952 +}
92953 +
92954 +static void glamo_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
92955 +{
92956 + struct glamo_mci_host *host = mmc_priv(mmc);
92957 + struct regulator *regulator;
92958 + int n = 0;
92959 + int div;
92960 + int powering = 0;
92961 + int mv;
92962 +
92963 + if (host->suspending) {
92964 + dev_err(&host->pdev->dev, "IGNORING glamo_mci_set_ios while "
92965 + "suspended\n");
92966 + return;
92967 + }
92968 +
92969 + regulator = host->regulator;
92970 +
92971 + /* Set power */
92972 + switch(ios->power_mode) {
92973 + case MMC_POWER_UP:
92974 + if (host->pdata->glamo_can_set_mci_power()) {
92975 + mv = glamo_mci_get_mv(ios->vdd);
92976 + regulator_set_voltage(regulator, mv * 1000, mv * 1000);
92977 + regulator_enable(regulator);
92978 + }
92979 + break;
92980 + case MMC_POWER_ON:
92981 + /*
92982 + * we should use very slow clock until first bulk
92983 + * transfer completes OK
92984 + */
92985 + host->force_slow_during_powerup = 1;
92986 +
92987 + if (host->vdd_current != ios->vdd) {
92988 + if (host->pdata->glamo_can_set_mci_power()) {
92989 + mv = glamo_mci_get_mv(ios->vdd);
92990 + regulator_set_voltage(regulator, mv * 1000, mv * 1000);
92991 + printk(KERN_INFO "SD power -> %dmV\n", mv);
92992 + }
92993 + host->vdd_current = ios->vdd;
92994 + }
92995 + if (host->power_mode_current == MMC_POWER_OFF) {
92996 + glamo_engine_enable(glamo_mci_def_pdata.pglamo,
92997 + GLAMO_ENGINE_MMC);
92998 + powering = 1;
92999 + }
93000 + break;
93001 +
93002 + case MMC_POWER_OFF:
93003 + default:
93004 + if (host->power_mode_current == MMC_POWER_OFF)
93005 + break;
93006 + /* never want clocking with dead card */
93007 + __glamo_mci_fix_card_div(host, -1);
93008 +
93009 + glamo_engine_disable(glamo_mci_def_pdata.pglamo,
93010 + GLAMO_ENGINE_MMC);
93011 + regulator_disable(regulator);
93012 + host->vdd_current = -1;
93013 + break;
93014 + }
93015 + host->power_mode_current = ios->power_mode;
93016 +
93017 + host->real_rate = __glamo_mci_set_card_clock(host, ios->clock, &div);
93018 + host->clk_div = div;
93019 +
93020 + /* after power-up, we are meant to give it >= 74 clocks so it can
93021 + * initialize itself. Doubt any modern cards need it but anyway...
93022 + */
93023 + if (powering)
93024 + mdelay(1);
93025 +
93026 + if (!sd_idleclk && !host->force_slow_during_powerup)
93027 + /* stop the clock to card, because we are idle until transfer */
93028 + __glamo_mci_fix_card_div(host, -1);
93029 +
93030 + if ((ios->power_mode == MMC_POWER_ON) ||
93031 + (ios->power_mode == MMC_POWER_UP)) {
93032 + dev_info(&host->pdev->dev,
93033 + "powered (vdd = %d) clk: %lukHz div=%d (req: %ukHz). "
93034 + "Bus width=%d\n",(int)ios->vdd,
93035 + host->real_rate / 1000, (int)host->clk_div,
93036 + ios->clock / 1000, (int)ios->bus_width);
93037 + } else
93038 + dev_info(&host->pdev->dev, "glamo_mci_set_ios: power down.\n");
93039 +
93040 + /* set bus width */
93041 + host->bus_width = ios->bus_width;
93042 + if (host->bus_width == MMC_BUS_WIDTH_4)
93043 + n = GLAMO_BASIC_MMC_EN_4BIT_DATA;
93044 + writew((readw(host->base + GLAMO_REG_MMC_BASIC) &
93045 + (~(GLAMO_BASIC_MMC_EN_4BIT_DATA |
93046 + GLAMO_BASIC_MMC_EN_DR_STR0 |
93047 + GLAMO_BASIC_MMC_EN_DR_STR1))) | n |
93048 + sd_drive << 6, host->base + GLAMO_REG_MMC_BASIC);
93049 +}
93050 +
93051 +
93052 +/*
93053 + * no physical write protect supported by us
93054 + */
93055 +static int glamo_mci_get_ro(struct mmc_host *mmc)
93056 +{
93057 + return 0;
93058 +}
93059 +
93060 +static struct mmc_host_ops glamo_mci_ops = {
93061 + .request = glamo_mci_request,
93062 + .set_ios = glamo_mci_set_ios,
93063 + .get_ro = glamo_mci_get_ro,
93064 +};
93065 +
93066 +static int glamo_mci_probe(struct platform_device *pdev)
93067 +{
93068 + struct mmc_host *mmc;
93069 + struct glamo_mci_host *host;
93070 + int ret;
93071 +
93072 + dev_info(&pdev->dev, "glamo_mci driver (C)2007 Openmoko, Inc\n");
93073 +
93074 + mmc = mmc_alloc_host(sizeof(struct glamo_mci_host), &pdev->dev);
93075 + if (!mmc) {
93076 + ret = -ENOMEM;
93077 + goto probe_out;
93078 + }
93079 +
93080 + host = mmc_priv(mmc);
93081 + host->mmc = mmc;
93082 + host->pdev = pdev;
93083 + host->pdata = &glamo_mci_def_pdata;
93084 + host->power_mode_current = MMC_POWER_OFF;
93085 +
93086 + host->complete_what = COMPLETION_NONE;
93087 + host->pio_active = XFER_NONE;
93088 +
93089 + spin_lock_init(&host->complete_lock);
93090 +
93091 + host->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
93092 + if (!host->mem) {
93093 + dev_err(&pdev->dev,
93094 + "failed to get io memory region resouce.\n");
93095 +
93096 + ret = -ENOENT;
93097 + goto probe_free_host;
93098 + }
93099 +
93100 + host->mem = request_mem_region(host->mem->start,
93101 + RESSIZE(host->mem), pdev->name);
93102 +
93103 + if (!host->mem) {
93104 + dev_err(&pdev->dev, "failed to request io memory region.\n");
93105 + ret = -ENOENT;
93106 + goto probe_free_host;
93107 + }
93108 +
93109 + host->base = ioremap(host->mem->start, RESSIZE(host->mem));
93110 + if (!host->base) {
93111 + dev_err(&pdev->dev, "failed to ioremap() io memory region.\n");
93112 + ret = -EINVAL;
93113 + goto probe_free_mem_region;
93114 + }
93115 +
93116 + host->regulator = regulator_get(&pdev->dev, "SD_3V3");
93117 + if (!host->regulator) {
93118 + dev_err(&pdev->dev, "Cannot proceed without regulator.\n");
93119 + return -ENODEV;
93120 + }
93121 +
93122 + /* set the handler for our bit of the shared chip irq register */
93123 + set_irq_handler(IRQ_GLAMO(GLAMO_IRQIDX_MMC), glamo_mci_irq);
93124 + /* stash host as our handler's private data */
93125 + set_irq_data(IRQ_GLAMO(GLAMO_IRQIDX_MMC), host);
93126 +
93127 + /* Get ahold of our data buffer we use for data in and out on MMC */
93128 + host->mem_data = platform_get_resource(pdev, IORESOURCE_MEM, 1);
93129 + if (!host->mem_data) {
93130 + dev_err(&pdev->dev,
93131 + "failed to get io memory region resource.\n");
93132 + ret = -ENOENT;
93133 + goto probe_iounmap;
93134 + }
93135 +
93136 + host->mem_data = request_mem_region(host->mem_data->start,
93137 + RESSIZE(host->mem_data), pdev->name);
93138 +
93139 + if (!host->mem_data) {
93140 + dev_err(&pdev->dev, "failed to request io memory region.\n");
93141 + ret = -ENOENT;
93142 + goto probe_iounmap;
93143 + }
93144 + host->base_data = ioremap(host->mem_data->start,
93145 + RESSIZE(host->mem_data));
93146 + host->data_max_size = RESSIZE(host->mem_data);
93147 +
93148 + if (host->base_data == 0) {
93149 + dev_err(&pdev->dev, "failed to ioremap() io memory region.\n");
93150 + ret = -EINVAL;
93151 + goto probe_free_mem_region_data;
93152 + }
93153 +
93154 + host->vdd_current = 0;
93155 + host->clk_rate = 50000000; /* really it's 49152000 */
93156 + host->clk_div = 16;
93157 +
93158 + /* explain our host controller capabilities */
93159 + mmc->ops = &glamo_mci_ops;
93160 + mmc->ocr_avail = host->pdata->ocr_avail;
93161 + mmc->caps = MMC_CAP_4_BIT_DATA |
93162 + MMC_CAP_MMC_HIGHSPEED |
93163 + MMC_CAP_SD_HIGHSPEED;
93164 + mmc->f_min = host->clk_rate / 256;
93165 + mmc->f_max = sd_max_clk;
93166 +
93167 + mmc->max_blk_count = (1 << 16) - 1; /* GLAMO_REG_MMC_RB_BLKCNT */
93168 + mmc->max_blk_size = (1 << 12) - 1; /* GLAMO_REG_MMC_RB_BLKLEN */
93169 + mmc->max_req_size = RESSIZE(host->mem_data) / 2;
93170 + mmc->max_seg_size = mmc->max_req_size;
93171 + mmc->max_phys_segs = 1; /* hw doesn't talk about segs??? */
93172 + mmc->max_hw_segs = 1;
93173 +
93174 + dev_info(&host->pdev->dev, "probe: mapped mci_base:%p irq:%u.\n",
93175 + host->base, host->irq);
93176 +
93177 + platform_set_drvdata(pdev, mmc);
93178 +
93179 + glamo_engine_enable(glamo_mci_def_pdata.pglamo, GLAMO_ENGINE_MMC);
93180 + glamo_mci_reset(host);
93181 +
93182 + if ((ret = mmc_add_host(mmc))) {
93183 + dev_err(&pdev->dev, "failed to add mmc host.\n");
93184 + goto probe_free_mem_region_data;
93185 + }
93186 +
93187 + dev_info(&pdev->dev,"initialisation done.\n");
93188 + return 0;
93189 +
93190 + probe_free_mem_region_data:
93191 + release_mem_region(host->mem_data->start, RESSIZE(host->mem_data));
93192 +
93193 + probe_iounmap:
93194 + iounmap(host->base);
93195 +
93196 + probe_free_mem_region:
93197 + release_mem_region(host->mem->start, RESSIZE(host->mem));
93198 +
93199 + probe_free_host:
93200 + mmc_free_host(mmc);
93201 + probe_out:
93202 + return ret;
93203 +}
93204 +
93205 +static int glamo_mci_remove(struct platform_device *pdev)
93206 +{
93207 + struct mmc_host *mmc = platform_get_drvdata(pdev);
93208 + struct glamo_mci_host *host = mmc_priv(mmc);
93209 + struct regulator *regulator;
93210 +
93211 + mmc_remove_host(mmc);
93212 + /* stop using our handler, revert it to default */
93213 + set_irq_handler(IRQ_GLAMO(GLAMO_IRQIDX_MMC), handle_level_irq);
93214 + iounmap(host->base);
93215 + iounmap(host->base_data);
93216 + release_mem_region(host->mem->start, RESSIZE(host->mem));
93217 + release_mem_region(host->mem_data->start, RESSIZE(host->mem_data));
93218 +
93219 + regulator = host->regulator;
93220 + regulator_put(regulator);
93221 +
93222 + mmc_free_host(mmc);
93223 +
93224 + glamo_engine_disable(glamo_mci_def_pdata.pglamo, GLAMO_ENGINE_MMC);
93225 + return 0;
93226 +}
93227 +
93228 +
93229 +#ifdef CONFIG_PM
93230 +
93231 +static int glamo_mci_suspend(struct platform_device *dev, pm_message_t state)
93232 +{
93233 + struct mmc_host *mmc = platform_get_drvdata(dev);
93234 + struct glamo_mci_host *host = mmc_priv(mmc);
93235 + int ret;
93236 +
93237 + /*
93238 + * possible workaround for SD corruption during suspend - resume
93239 + * make sure the clock was running during suspend and consequently
93240 + * resume
93241 + */
93242 + __glamo_mci_fix_card_div(host, host->clk_div);
93243 +
93244 + /* we are going to do more commands to override this in
93245 + * mmc_suspend_host(), so we need to change sd_idleclk for the
93246 + * duration as well
93247 + */
93248 + suspend_sd_idleclk = sd_idleclk;
93249 + sd_idleclk = 1;
93250 +
93251 + ret = mmc_suspend_host(mmc, state);
93252 +
93253 + host->suspending++;
93254 + /* so that when we resume, we use any modified max rate */
93255 + mmc->f_max = sd_max_clk;
93256 +
93257 + return ret;
93258 +}
93259 +
93260 +int glamo_mci_resume(struct platform_device *dev)
93261 +{
93262 + struct mmc_host *mmc = platform_get_drvdata(dev);
93263 + struct glamo_mci_host *host = mmc_priv(mmc);
93264 + int ret;
93265 +
93266 + sd_idleclk = 1;
93267 +
93268 + glamo_engine_enable(host->pdata->pglamo, GLAMO_ENGINE_MMC);
93269 + glamo_mci_reset(host);
93270 +
93271 + host->suspending--;
93272 +
93273 + ret = mmc_resume_host(mmc);
93274 +
93275 + /* put sd_idleclk back to pre-suspend state */
93276 + sd_idleclk = suspend_sd_idleclk;
93277 +
93278 + return ret;
93279 +}
93280 +EXPORT_SYMBOL_GPL(glamo_mci_resume);
93281 +
93282 +#else /* CONFIG_PM */
93283 +#define glamo_mci_suspend NULL
93284 +#define glamo_mci_resume NULL
93285 +#endif /* CONFIG_PM */
93286 +
93287 +
93288 +static struct platform_driver glamo_mci_driver =
93289 +{
93290 + .driver.name = "glamo-mci",
93291 + .probe = glamo_mci_probe,
93292 + .remove = glamo_mci_remove,
93293 + .suspend = glamo_mci_suspend,
93294 + .resume = glamo_mci_resume,
93295 +};
93296 +
93297 +static int __init glamo_mci_init(void)
93298 +{
93299 + spin_lock_init(&clock_lock);
93300 + platform_driver_register(&glamo_mci_driver);
93301 + return 0;
93302 +}
93303 +
93304 +static void __exit glamo_mci_exit(void)
93305 +{
93306 + platform_driver_unregister(&glamo_mci_driver);
93307 +}
93308 +
93309 +module_init(glamo_mci_init);
93310 +module_exit(glamo_mci_exit);
93311 +
93312 +MODULE_DESCRIPTION("Glamo MMC/SD Card Interface driver");
93313 +MODULE_LICENSE("GPL");
93314 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
93315 Index: linux-2.6.28/drivers/mfd/glamo/glamo-mci.h
93316 ===================================================================
93317 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
93318 +++ linux-2.6.28/drivers/mfd/glamo/glamo-mci.h 2009-01-02 00:01:56.000000000 +0100
93319 @@ -0,0 +1,83 @@
93320 +/*
93321 + * linux/drivers/mmc/host/glamo-mmc.h - GLAMO MCI driver
93322 + *
93323 + * Copyright (C) 2007-2008 Openmoko, Inc, Andy Green <andy@openmoko.com>
93324 + * based on S3C MMC driver -->
93325 + * Copyright (C) 2004-2006 Thomas Kleffel, All Rights Reserved.
93326 + *
93327 + * This program is free software; you can redistribute it and/or modify
93328 + * it under the terms of the GNU General Public License version 2 as
93329 + * published by the Free Software Foundation.
93330 + */
93331 +
93332 +#include <linux/regulator/consumer.h>
93333 +
93334 +enum glamo_mci_waitfor {
93335 + COMPLETION_NONE,
93336 + COMPLETION_FINALIZE,
93337 + COMPLETION_CMDSENT,
93338 + COMPLETION_RSPFIN,
93339 + COMPLETION_XFERFINISH,
93340 + COMPLETION_XFERFINISH_RSPFIN,
93341 +};
93342 +
93343 +struct glamo_mci_host {
93344 + struct platform_device *pdev;
93345 + struct glamo_mci_pdata *pdata;
93346 + struct mmc_host *mmc;
93347 + struct resource *mem;
93348 + struct resource *mem_data;
93349 + struct clk *clk;
93350 + void __iomem *base;
93351 + u16 __iomem *base_data;
93352 + int irq;
93353 + int irq_cd;
93354 + int dma;
93355 + int data_max_size;
93356 +
93357 + int suspending;
93358 +
93359 + int power_mode_current;
93360 + unsigned int vdd_current;
93361 +
93362 + unsigned long clk_rate;
93363 + unsigned long clk_div;
93364 + unsigned long real_rate;
93365 + u8 prescaler;
93366 +
93367 + int force_slow_during_powerup;
93368 +
93369 + unsigned sdiimsk;
93370 + int dodma;
93371 +
93372 + volatile int dmatogo;
93373 +
93374 + struct mmc_request *mrq;
93375 + int cmd_is_stop;
93376 +
93377 + spinlock_t complete_lock;
93378 + volatile enum glamo_mci_waitfor
93379 + complete_what;
93380 +
93381 + volatile int dma_complete;
93382 +
93383 + volatile u32 pio_sgptr;
93384 + volatile u32 pio_words;
93385 + volatile u32 pio_count;
93386 + volatile u16 *pio_ptr;
93387 +#define XFER_NONE 0
93388 +#define XFER_READ 1
93389 +#define XFER_WRITE 2
93390 + volatile u32 pio_active;
93391 +
93392 + int bus_width;
93393 +
93394 + char dbgmsg_cmd[301];
93395 + char dbgmsg_dat[301];
93396 + volatile char *status;
93397 +
93398 + unsigned int ccnt, dcnt;
93399 + struct tasklet_struct pio_tasklet;
93400 +
93401 + struct regulator *regulator;
93402 +};
93403 Index: linux-2.6.28/drivers/mfd/glamo/glamo-regs.h
93404 ===================================================================
93405 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
93406 +++ linux-2.6.28/drivers/mfd/glamo/glamo-regs.h 2009-01-02 00:01:56.000000000 +0100
93407 @@ -0,0 +1,632 @@
93408 +#ifndef _GLAMO_REGS_H
93409 +#define _GLAMO_REGS_H
93410 +
93411 +/* Smedia Glamo 336x/337x driver
93412 + *
93413 + * (C) 2007 by Openmoko, Inc.
93414 + * Author: Harald Welte <laforge@openmoko.org>
93415 + * All rights reserved.
93416 + *
93417 + * This program is free software; you can redistribute it and/or
93418 + * modify it under the terms of the GNU General Public License as
93419 + * published by the Free Software Foundation; either version 2 of
93420 + * the License, or (at your option) any later version.
93421 + *
93422 + * This program is distributed in the hope that it will be useful,
93423 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
93424 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
93425 + * GNU General Public License for more details.
93426 + *
93427 + * You should have received a copy of the GNU General Public License
93428 + * along with this program; if not, write to the Free Software
93429 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
93430 + * MA 02111-1307 USA
93431 + */
93432 +
93433 +enum glamo_regster_offsets {
93434 + GLAMO_REGOFS_GENERIC = 0x0000,
93435 + GLAMO_REGOFS_HOSTBUS = 0x0200,
93436 + GLAMO_REGOFS_MEMORY = 0x0300,
93437 + GLAMO_REGOFS_VIDCAP = 0x0400,
93438 + GLAMO_REGOFS_ISP = 0x0500,
93439 + GLAMO_REGOFS_JPEG = 0x0800,
93440 + GLAMO_REGOFS_MPEG = 0x0c00,
93441 + GLAMO_REGOFS_LCD = 0x1100,
93442 + GLAMO_REGOFS_MMC = 0x1400,
93443 + GLAMO_REGOFS_MPROC0 = 0x1500,
93444 + GLAMO_REGOFS_MPROC1 = 0x1580,
93445 + GLAMO_REGOFS_CMDQUEUE = 0x1600,
93446 + GLAMO_REGOFS_RISC = 0x1680,
93447 + GLAMO_REGOFS_2D = 0x1700,
93448 + GLAMO_REGOFS_3D = 0x1b00,
93449 + GLAMO_REGOFS_END = 0x2400,
93450 +};
93451 +
93452 +
93453 +enum glamo_register_generic {
93454 + GLAMO_REG_GCONF1 = 0x0000,
93455 + GLAMO_REG_GCONF2 = 0x0002,
93456 +#define GLAMO_REG_DEVICE_ID GLAMO_REG_GCONF2
93457 + GLAMO_REG_GCONF3 = 0x0004,
93458 +#define GLAMO_REG_REVISION_ID GLAMO_REG_GCONF3
93459 + GLAMO_REG_IRQ_GEN1 = 0x0006,
93460 +#define GLAMO_REG_IRQ_ENABLE GLAMO_REG_IRQ_GEN1
93461 + GLAMO_REG_IRQ_GEN2 = 0x0008,
93462 +#define GLAMO_REG_IRQ_SET GLAMO_REG_IRQ_GEN2
93463 + GLAMO_REG_IRQ_GEN3 = 0x000a,
93464 +#define GLAMO_REG_IRQ_CLEAR GLAMO_REG_IRQ_GEN3
93465 + GLAMO_REG_IRQ_GEN4 = 0x000c,
93466 +#define GLAMO_REG_IRQ_STATUS GLAMO_REG_IRQ_GEN4
93467 + GLAMO_REG_CLOCK_HOST = 0x0010,
93468 + GLAMO_REG_CLOCK_MEMORY = 0x0012,
93469 + GLAMO_REG_CLOCK_LCD = 0x0014,
93470 + GLAMO_REG_CLOCK_MMC = 0x0016,
93471 + GLAMO_REG_CLOCK_ISP = 0x0018,
93472 + GLAMO_REG_CLOCK_JPEG = 0x001a,
93473 + GLAMO_REG_CLOCK_3D = 0x001c,
93474 + GLAMO_REG_CLOCK_2D = 0x001e,
93475 + GLAMO_REG_CLOCK_RISC1 = 0x0020, /* 3365 only? */
93476 + GLAMO_REG_CLOCK_RISC2 = 0x0022, /* 3365 only? */
93477 + GLAMO_REG_CLOCK_MPEG = 0x0024,
93478 + GLAMO_REG_CLOCK_MPROC = 0x0026,
93479 +
93480 + GLAMO_REG_CLOCK_GEN5_1 = 0x0030,
93481 + GLAMO_REG_CLOCK_GEN5_2 = 0x0032,
93482 + GLAMO_REG_CLOCK_GEN6 = 0x0034,
93483 + GLAMO_REG_CLOCK_GEN7 = 0x0036,
93484 + GLAMO_REG_CLOCK_GEN8 = 0x0038,
93485 + GLAMO_REG_CLOCK_GEN9 = 0x003a,
93486 + GLAMO_REG_CLOCK_GEN10 = 0x003c,
93487 + GLAMO_REG_CLOCK_GEN11 = 0x003e,
93488 + GLAMO_REG_PLL_GEN1 = 0x0040,
93489 + GLAMO_REG_PLL_GEN2 = 0x0042,
93490 + GLAMO_REG_PLL_GEN3 = 0x0044,
93491 + GLAMO_REG_PLL_GEN4 = 0x0046,
93492 + GLAMO_REG_PLL_GEN5 = 0x0048,
93493 + GLAMO_REG_GPIO_GEN1 = 0x0050,
93494 + GLAMO_REG_GPIO_GEN2 = 0x0052,
93495 + GLAMO_REG_GPIO_GEN3 = 0x0054,
93496 + GLAMO_REG_GPIO_GEN4 = 0x0056,
93497 + GLAMO_REG_GPIO_GEN5 = 0x0058,
93498 + GLAMO_REG_GPIO_GEN6 = 0x005a,
93499 + GLAMO_REG_GPIO_GEN7 = 0x005c,
93500 + GLAMO_REG_GPIO_GEN8 = 0x005e,
93501 + GLAMO_REG_GPIO_GEN9 = 0x0060,
93502 + GLAMO_REG_GPIO_GEN10 = 0x0062,
93503 + GLAMO_REG_DFT_GEN1 = 0x0070,
93504 + GLAMO_REG_DFT_GEN2 = 0x0072,
93505 + GLAMO_REG_DFT_GEN3 = 0x0074,
93506 + GLAMO_REG_DFT_GEN4 = 0x0076,
93507 +
93508 + GLAMO_REG_DFT_GEN5 = 0x01e0,
93509 + GLAMO_REG_DFT_GEN6 = 0x01f0,
93510 +};
93511 +
93512 +#define GLAMO_REG_HOSTBUS(x) (GLAMO_REGOFS_HOSTBUS-2+(x*2))
93513 +
93514 +#define REG_MEM(x) (GLAMO_REGOFS_MEMORY+(x))
93515 +#define GLAMO_REG_MEM_TIMING(x) (GLAMO_REG_MEM_TIMING1-2+(x*2))
93516 +
93517 +enum glamo_register_mem {
93518 + GLAMO_REG_MEM_TYPE = REG_MEM(0x00),
93519 + GLAMO_REG_MEM_GEN = REG_MEM(0x02),
93520 + GLAMO_REG_MEM_TIMING1 = REG_MEM(0x04),
93521 + GLAMO_REG_MEM_TIMING2 = REG_MEM(0x06),
93522 + GLAMO_REG_MEM_TIMING3 = REG_MEM(0x08),
93523 + GLAMO_REG_MEM_TIMING4 = REG_MEM(0x0a),
93524 + GLAMO_REG_MEM_TIMING5 = REG_MEM(0x0c),
93525 + GLAMO_REG_MEM_TIMING6 = REG_MEM(0x0e),
93526 + GLAMO_REG_MEM_TIMING7 = REG_MEM(0x10),
93527 + GLAMO_REG_MEM_TIMING8 = REG_MEM(0x12),
93528 + GLAMO_REG_MEM_TIMING9 = REG_MEM(0x14),
93529 + GLAMO_REG_MEM_TIMING10 = REG_MEM(0x16),
93530 + GLAMO_REG_MEM_TIMING11 = REG_MEM(0x18),
93531 + GLAMO_REG_MEM_POWER1 = REG_MEM(0x1a),
93532 + GLAMO_REG_MEM_POWER2 = REG_MEM(0x1c),
93533 + GLAMO_REG_MEM_LCD_BUF1 = REG_MEM(0x1e),
93534 + GLAMO_REG_MEM_LCD_BUF2 = REG_MEM(0x20),
93535 + GLAMO_REG_MEM_LCD_BUF3 = REG_MEM(0x22),
93536 + GLAMO_REG_MEM_LCD_BUF4 = REG_MEM(0x24),
93537 + GLAMO_REG_MEM_BIST1 = REG_MEM(0x26),
93538 + GLAMO_REG_MEM_BIST2 = REG_MEM(0x28),
93539 + GLAMO_REG_MEM_BIST3 = REG_MEM(0x2a),
93540 + GLAMO_REG_MEM_BIST4 = REG_MEM(0x2c),
93541 + GLAMO_REG_MEM_BIST5 = REG_MEM(0x2e),
93542 + GLAMO_REG_MEM_MAH1 = REG_MEM(0x30),
93543 + GLAMO_REG_MEM_MAH2 = REG_MEM(0x32),
93544 + GLAMO_REG_MEM_DRAM1 = REG_MEM(0x34),
93545 + GLAMO_REG_MEM_DRAM2 = REG_MEM(0x36),
93546 + GLAMO_REG_MEM_CRC = REG_MEM(0x38),
93547 +};
93548 +
93549 +#define GLAMO_MEM_TYPE_MASK 0x03
93550 +
93551 +enum glamo_reg_mem_dram1 {
93552 + /* b0 - b10 == refresh period, 1 -> 2048 clocks */
93553 + GLAMO_MEM_DRAM1_EN_GATE_CLK = (1 << 11),
93554 + GLAMO_MEM_DRAM1_SELF_REFRESH = (1 << 12),
93555 + GLAMO_MEM_DRAM1_EN_GATE_CKE = (1 << 13),
93556 + GLAMO_MEM_DRAM1_EN_DRAM_REFRESH = (1 << 14),
93557 + GLAMO_MEM_DRAM1_EN_MODEREG_SET = (1 << 15),
93558 +};
93559 +
93560 +enum glamo_reg_mem_dram2 {
93561 + GLAMO_MEM_DRAM2_DEEP_PWRDOWN = (1 << 12),
93562 +};
93563 +
93564 +enum glamo_irq_index {
93565 + GLAMO_IRQIDX_HOSTBUS = 0,
93566 + GLAMO_IRQIDX_JPEG = 1,
93567 + GLAMO_IRQIDX_MPEG = 2,
93568 + GLAMO_IRQIDX_MPROC1 = 3,
93569 + GLAMO_IRQIDX_MPROC0 = 4,
93570 + GLAMO_IRQIDX_CMDQUEUE = 5,
93571 + GLAMO_IRQIDX_2D = 6,
93572 + GLAMO_IRQIDX_MMC = 7,
93573 + GLAMO_IRQIDX_RISC = 8,
93574 +};
93575 +
93576 +enum glamo_irq {
93577 + GLAMO_IRQ_HOSTBUS = (1 << GLAMO_IRQIDX_HOSTBUS),
93578 + GLAMO_IRQ_JPEG = (1 << GLAMO_IRQIDX_JPEG),
93579 + GLAMO_IRQ_MPEG = (1 << GLAMO_IRQIDX_MPEG),
93580 + GLAMO_IRQ_MPROC1 = (1 << GLAMO_IRQIDX_MPROC1),
93581 + GLAMO_IRQ_MPROC0 = (1 << GLAMO_IRQIDX_MPROC0),
93582 + GLAMO_IRQ_CMDQUEUE = (1 << GLAMO_IRQIDX_CMDQUEUE),
93583 + GLAMO_IRQ_2D = (1 << GLAMO_IRQIDX_2D),
93584 + GLAMO_IRQ_MMC = (1 << GLAMO_IRQIDX_MMC),
93585 + GLAMO_IRQ_RISC = (1 << GLAMO_IRQIDX_RISC),
93586 +};
93587 +
93588 +enum glamo_reg_clock_host {
93589 + GLAMO_CLOCK_HOST_DG_BCLK = 0x0001,
93590 + GLAMO_CLOCK_HOST_DG_M0CLK = 0x0004,
93591 + GLAMO_CLOCK_HOST_RESET = 0x1000,
93592 +};
93593 +
93594 +enum glamo_reg_clock_mem {
93595 + GLAMO_CLOCK_MEM_DG_M1CLK = 0x0001,
93596 + GLAMO_CLOCK_MEM_EN_M1CLK = 0x0002,
93597 + GLAMO_CLOCK_MEM_DG_MOCACLK = 0x0004,
93598 + GLAMO_CLOCK_MEM_EN_MOCACLK = 0x0008,
93599 + GLAMO_CLOCK_MEM_RESET = 0x1000,
93600 + GLAMO_CLOCK_MOCA_RESET = 0x2000,
93601 +};
93602 +
93603 +enum glamo_reg_clock_lcd {
93604 + GLAMO_CLOCK_LCD_DG_DCLK = 0x0001,
93605 + GLAMO_CLOCK_LCD_EN_DCLK = 0x0002,
93606 + GLAMO_CLOCK_LCD_DG_DMCLK = 0x0004,
93607 + GLAMO_CLOCK_LCD_EN_DMCLK = 0x0008,
93608 + //
93609 + GLAMO_CLOCK_LCD_EN_DHCLK = 0x0020,
93610 + GLAMO_CLOCK_LCD_DG_M5CLK = 0x0040,
93611 + GLAMO_CLOCK_LCD_EN_M5CLK = 0x0080,
93612 + GLAMO_CLOCK_LCD_RESET = 0x1000,
93613 +};
93614 +
93615 +enum glamo_reg_clock_mmc {
93616 + GLAMO_CLOCK_MMC_DG_TCLK = 0x0001,
93617 + GLAMO_CLOCK_MMC_EN_TCLK = 0x0002,
93618 + GLAMO_CLOCK_MMC_DG_M9CLK = 0x0004,
93619 + GLAMO_CLOCK_MMC_EN_M9CLK = 0x0008,
93620 + GLAMO_CLOCK_MMC_RESET = 0x1000,
93621 +};
93622 +
93623 +enum glamo_reg_basic_mmc {
93624 + /* set to disable CRC error rejection */
93625 + GLAMO_BASIC_MMC_DISABLE_CRC = 0x0001,
93626 + /* enable completion interrupt */
93627 + GLAMO_BASIC_MMC_EN_COMPL_INT = 0x0002,
93628 + /* stop MMC clock while enforced idle waiting for data from card */
93629 + GLAMO_BASIC_MMC_NO_CLK_RD_WAIT = 0x0004,
93630 + /* 0 = 1-bit bus to card, 1 = use 4-bit bus (has to be negotiated) */
93631 + GLAMO_BASIC_MMC_EN_4BIT_DATA = 0x0008,
93632 + /* enable 75K pullups on D3..D0 */
93633 + GLAMO_BASIC_MMC_EN_DATA_PUPS = 0x0010,
93634 + /* enable 75K pullup on CMD */
93635 + GLAMO_BASIC_MMC_EN_CMD_PUP = 0x0020,
93636 + /* IO drive strength 00=weak -> 11=strongest */
93637 + GLAMO_BASIC_MMC_EN_DR_STR0 = 0x0040,
93638 + GLAMO_BASIC_MMC_EN_DR_STR1 = 0x0080,
93639 + /* TCLK delay stage A, 0000 = 500ps --> 1111 = 8ns */
93640 + GLAMO_BASIC_MMC_EN_TCLK_DLYA0 = 0x0100,
93641 + GLAMO_BASIC_MMC_EN_TCLK_DLYA1 = 0x0200,
93642 + GLAMO_BASIC_MMC_EN_TCLK_DLYA2 = 0x0400,
93643 + GLAMO_BASIC_MMC_EN_TCLK_DLYA3 = 0x0800,
93644 + /* TCLK delay stage B (cumulative), 0000 = 500ps --> 1111 = 8ns */
93645 + GLAMO_BASIC_MMC_EN_TCLK_DLYB0 = 0x1000,
93646 + GLAMO_BASIC_MMC_EN_TCLK_DLYB1 = 0x2000,
93647 + GLAMO_BASIC_MMC_EN_TCLK_DLYB2 = 0x4000,
93648 + GLAMO_BASIC_MMC_EN_TCLK_DLYB3 = 0x8000,
93649 +};
93650 +
93651 +enum glamo_reg_stat1_mmc {
93652 + /* command "counter" (really: toggle) */
93653 + GLAMO_STAT1_MMC_CMD_CTR = 0x8000,
93654 + /* engine is idle */
93655 + GLAMO_STAT1_MMC_IDLE = 0x4000,
93656 + /* readback response is ready */
93657 + GLAMO_STAT1_MMC_RB_RRDY = 0x0200,
93658 + /* readback data is ready */
93659 + GLAMO_STAT1_MMC_RB_DRDY = 0x0100,
93660 + /* no response timeout */
93661 + GLAMO_STAT1_MMC_RTOUT = 0x0020,
93662 + /* no data timeout */
93663 + GLAMO_STAT1_MMC_DTOUT = 0x0010,
93664 + /* CRC error on block write */
93665 + GLAMO_STAT1_MMC_BWERR = 0x0004,
93666 + /* CRC error on block read */
93667 + GLAMO_STAT1_MMC_BRERR = 0x0002
93668 +};
93669 +
93670 +enum glamo_reg_fire_mmc {
93671 + /* command "counter" (really: toggle)
93672 + * the STAT1 register reflects this so you can ensure you don't look
93673 + * at status for previous command
93674 + */
93675 + GLAMO_FIRE_MMC_CMD_CTR = 0x8000,
93676 + /* sets kind of response expected */
93677 + GLAMO_FIRE_MMC_RES_MASK = 0x0700,
93678 + /* sets command type */
93679 + GLAMO_FIRE_MMC_TYP_MASK = 0x00C0,
93680 + /* sets command class */
93681 + GLAMO_FIRE_MMC_CLS_MASK = 0x000F,
93682 +};
93683 +
93684 +enum glamo_fire_mmc_response_types {
93685 + GLAMO_FIRE_MMC_RSPT_R1 = 0x0000,
93686 + GLAMO_FIRE_MMC_RSPT_R1b = 0x0100,
93687 + GLAMO_FIRE_MMC_RSPT_R2 = 0x0200,
93688 + GLAMO_FIRE_MMC_RSPT_R3 = 0x0300,
93689 + GLAMO_FIRE_MMC_RSPT_R4 = 0x0400,
93690 + GLAMO_FIRE_MMC_RSPT_R5 = 0x0500,
93691 +};
93692 +
93693 +enum glamo_fire_mmc_command_types {
93694 + /* broadcast, no response */
93695 + GLAMO_FIRE_MMC_CMDT_BNR = 0x0000,
93696 + /* broadcast, with response */
93697 + GLAMO_FIRE_MMC_CMDT_BR = 0x0040,
93698 + /* addressed, no data */
93699 + GLAMO_FIRE_MMC_CMDT_AND = 0x0080,
93700 + /* addressed, with data */
93701 + GLAMO_FIRE_MMC_CMDT_AD = 0x00C0,
93702 +};
93703 +
93704 +enum glamo_fire_mmc_command_class {
93705 + /* "Stream Read" */
93706 + GLAMO_FIRE_MMC_CC_STRR = 0x0000,
93707 + /* Single Block Read */
93708 + GLAMO_FIRE_MMC_CC_SBR = 0x0001,
93709 + /* Multiple Block Read With Stop */
93710 + GLAMO_FIRE_MMC_CC_MBRS = 0x0002,
93711 + /* Multiple Block Read No Stop */
93712 + GLAMO_FIRE_MMC_CC_MBRNS = 0x0003,
93713 + /* RESERVED for "Stream Write" */
93714 + GLAMO_FIRE_MMC_CC_STRW = 0x0004,
93715 + /* "Stream Write" */
93716 + GLAMO_FIRE_MMC_CC_SBW = 0x0005,
93717 + /* RESERVED for Multiple Block Write With Stop */
93718 + GLAMO_FIRE_MMC_CC_MBWS = 0x0006,
93719 + /* Multiple Block Write No Stop */
93720 + GLAMO_FIRE_MMC_CC_MBWNS = 0x0007,
93721 + /* STOP command */
93722 + GLAMO_FIRE_MMC_CC_STOP = 0x0008,
93723 + /* Cancel on Running Command */
93724 + GLAMO_FIRE_MMC_CC_CANCL = 0x0009,
93725 + /* "Basic Command" */
93726 + GLAMO_FIRE_MMC_CC_BASIC = 0x000a,
93727 +};
93728 +
93729 +/* these are offsets from the start of the MMC register region */
93730 +enum glamo_register_mmc {
93731 + /* MMC command, b15..8 = cmd arg b7..0; b7..1 = CRC; b0 = end bit */
93732 + GLAMO_REG_MMC_CMD_REG1 = 0x00,
93733 + /* MMC command, b15..0 = cmd arg b23 .. 8 */
93734 + GLAMO_REG_MMC_CMD_REG2 = 0x02,
93735 + /* MMC command, b15=start, b14=transmission,
93736 + * b13..8=cmd idx, b7..0=cmd arg b31..24
93737 + */
93738 + GLAMO_REG_MMC_CMD_REG3 = 0x04,
93739 + GLAMO_REG_MMC_CMD_FIRE = 0x06,
93740 + GLAMO_REG_MMC_CMD_RSP1 = 0x10,
93741 + GLAMO_REG_MMC_CMD_RSP2 = 0x12,
93742 + GLAMO_REG_MMC_CMD_RSP3 = 0x14,
93743 + GLAMO_REG_MMC_CMD_RSP4 = 0x16,
93744 + GLAMO_REG_MMC_CMD_RSP5 = 0x18,
93745 + GLAMO_REG_MMC_CMD_RSP6 = 0x1a,
93746 + GLAMO_REG_MMC_CMD_RSP7 = 0x1c,
93747 + GLAMO_REG_MMC_CMD_RSP8 = 0x1e,
93748 + GLAMO_REG_MMC_RB_STAT1 = 0x20,
93749 + GLAMO_REG_MMC_RB_BLKCNT = 0x22,
93750 + GLAMO_REG_MMC_RB_BLKLEN = 0x24,
93751 + GLAMO_REG_MMC_BASIC = 0x30,
93752 + GLAMO_REG_MMC_RDATADS1 = 0x34,
93753 + GLAMO_REG_MMC_RDATADS2 = 0x36,
93754 + GLAMO_REG_MMC_WDATADS1 = 0x38,
93755 + GLAMO_REG_MMC_WDATADS2 = 0x3a,
93756 + GLAMO_REG_MMC_DATBLKCNT = 0x3c,
93757 + GLAMO_REG_MMC_DATBLKLEN = 0x3e,
93758 + GLAMO_REG_MMC_TIMEOUT = 0x40,
93759 +
93760 +};
93761 +
93762 +enum glamo_reg_clock_isp {
93763 + GLAMO_CLOCK_ISP_DG_I1CLK = 0x0001,
93764 + GLAMO_CLOCK_ISP_EN_I1CLK = 0x0002,
93765 + GLAMO_CLOCK_ISP_DG_CCLK = 0x0004,
93766 + GLAMO_CLOCK_ISP_EN_CCLK = 0x0008,
93767 + //
93768 + GLAMO_CLOCK_ISP_EN_SCLK = 0x0020,
93769 + GLAMO_CLOCK_ISP_DG_M2CLK = 0x0040,
93770 + GLAMO_CLOCK_ISP_EN_M2CLK = 0x0080,
93771 + GLAMO_CLOCK_ISP_DG_M15CLK = 0x0100,
93772 + GLAMO_CLOCK_ISP_EN_M15CLK = 0x0200,
93773 + GLAMO_CLOCK_ISP1_RESET = 0x1000,
93774 + GLAMO_CLOCK_ISP2_RESET = 0x2000,
93775 +};
93776 +
93777 +enum glamo_reg_clock_jpeg {
93778 + GLAMO_CLOCK_JPEG_DG_JCLK = 0x0001,
93779 + GLAMO_CLOCK_JPEG_EN_JCLK = 0x0002,
93780 + GLAMO_CLOCK_JPEG_DG_M3CLK = 0x0004,
93781 + GLAMO_CLOCK_JPEG_EN_M3CLK = 0x0008,
93782 + GLAMO_CLOCK_JPEG_RESET = 0x1000,
93783 +};
93784 +
93785 +enum glamo_reg_clock_2d {
93786 + GLAMO_CLOCK_2D_DG_GCLK = 0x0001,
93787 + GLAMO_CLOCK_2D_EN_GCLK = 0x0002,
93788 + GLAMO_CLOCK_2D_DG_M7CLK = 0x0004,
93789 + GLAMO_CLOCK_2D_EN_M7CLK = 0x0008,
93790 + GLAMO_CLOCK_2D_DG_M6CLK = 0x0010,
93791 + GLAMO_CLOCK_2D_EN_M6CLK = 0x0020,
93792 + GLAMO_CLOCK_2D_RESET = 0x1000,
93793 + GLAMO_CLOCK_2D_CQ_RESET = 0x2000,
93794 +};
93795 +
93796 +enum glamo_reg_clock_3d {
93797 + GLAMO_CLOCK_3D_DG_ECLK = 0x0001,
93798 + GLAMO_CLOCK_3D_EN_ECLK = 0x0002,
93799 + GLAMO_CLOCK_3D_DG_RCLK = 0x0004,
93800 + GLAMO_CLOCK_3D_EN_RCLK = 0x0008,
93801 + GLAMO_CLOCK_3D_DG_M8CLK = 0x0010,
93802 + GLAMO_CLOCK_3D_EN_M8CLK = 0x0020,
93803 + GLAMO_CLOCK_3D_BACK_RESET = 0x1000,
93804 + GLAMO_CLOCK_3D_FRONT_RESET = 0x2000,
93805 +};
93806 +
93807 +enum glamo_reg_clock_mpeg {
93808 + GLAMO_CLOCK_MPEG_DG_X0CLK = 0x0001,
93809 + GLAMO_CLOCK_MPEG_EN_X0CLK = 0x0002,
93810 + GLAMO_CLOCK_MPEG_DG_X1CLK = 0x0004,
93811 + GLAMO_CLOCK_MPEG_EN_X1CLK = 0x0008,
93812 + GLAMO_CLOCK_MPEG_DG_X2CLK = 0x0010,
93813 + GLAMO_CLOCK_MPEG_EN_X2CLK = 0x0020,
93814 + GLAMO_CLOCK_MPEG_DG_X3CLK = 0x0040,
93815 + GLAMO_CLOCK_MPEG_EN_X3CLK = 0x0080,
93816 + GLAMO_CLOCK_MPEG_DG_X4CLK = 0x0100,
93817 + GLAMO_CLOCK_MPEG_EN_X4CLK = 0x0200,
93818 + GLAMO_CLOCK_MPEG_DG_X6CLK = 0x0400,
93819 + GLAMO_CLOCK_MPEG_EN_X6CLK = 0x0800,
93820 + GLAMO_CLOCK_MPEG_ENC_RESET = 0x1000,
93821 + GLAMO_CLOCK_MPEG_DEC_RESET = 0x2000,
93822 +};
93823 +
93824 +enum glamo_reg_clock51 {
93825 + GLAMO_CLOCK_GEN51_EN_DIV_MCLK = 0x0001,
93826 + GLAMO_CLOCK_GEN51_EN_DIV_SCLK = 0x0002,
93827 + GLAMO_CLOCK_GEN51_EN_DIV_JCLK = 0x0004,
93828 + GLAMO_CLOCK_GEN51_EN_DIV_DCLK = 0x0008,
93829 + GLAMO_CLOCK_GEN51_EN_DIV_DMCLK = 0x0010,
93830 + GLAMO_CLOCK_GEN51_EN_DIV_DHCLK = 0x0020,
93831 + GLAMO_CLOCK_GEN51_EN_DIV_GCLK = 0x0040,
93832 + GLAMO_CLOCK_GEN51_EN_DIV_TCLK = 0x0080,
93833 + /* FIXME: higher bits */
93834 +};
93835 +
93836 +enum glamo_reg_hostbus2 {
93837 + GLAMO_HOSTBUS2_MMIO_EN_ISP = 0x0001,
93838 + GLAMO_HOSTBUS2_MMIO_EN_JPEG = 0x0002,
93839 + GLAMO_HOSTBUS2_MMIO_EN_MPEG = 0x0004,
93840 + GLAMO_HOSTBUS2_MMIO_EN_LCD = 0x0008,
93841 + GLAMO_HOSTBUS2_MMIO_EN_MMC = 0x0010,
93842 + GLAMO_HOSTBUS2_MMIO_EN_MICROP0 = 0x0020,
93843 + GLAMO_HOSTBUS2_MMIO_EN_MICROP1 = 0x0040,
93844 + GLAMO_HOSTBUS2_MMIO_EN_CQ = 0x0080,
93845 + GLAMO_HOSTBUS2_MMIO_EN_RISC = 0x0100,
93846 + GLAMO_HOSTBUS2_MMIO_EN_2D = 0x0200,
93847 + GLAMO_HOSTBUS2_MMIO_EN_3D = 0x0400,
93848 +};
93849 +
93850 +/* LCD Controller */
93851 +
93852 +#define REG_LCD(x) (x)
93853 +enum glamo_reg_lcd {
93854 + GLAMO_REG_LCD_MODE1 = REG_LCD(0x00),
93855 + GLAMO_REG_LCD_MODE2 = REG_LCD(0x02),
93856 + GLAMO_REG_LCD_MODE3 = REG_LCD(0x04),
93857 + GLAMO_REG_LCD_WIDTH = REG_LCD(0x06),
93858 + GLAMO_REG_LCD_HEIGHT = REG_LCD(0x08),
93859 + GLAMO_REG_LCD_POLARITY = REG_LCD(0x0a),
93860 + GLAMO_REG_LCD_A_BASE1 = REG_LCD(0x0c),
93861 + GLAMO_REG_LCD_A_BASE2 = REG_LCD(0x0e),
93862 + GLAMO_REG_LCD_B_BASE1 = REG_LCD(0x10),
93863 + GLAMO_REG_LCD_B_BASE2 = REG_LCD(0x12),
93864 + GLAMO_REG_LCD_C_BASE1 = REG_LCD(0x14),
93865 + GLAMO_REG_LCD_C_BASE2 = REG_LCD(0x16),
93866 + GLAMO_REG_LCD_PITCH = REG_LCD(0x18),
93867 + /* RES */
93868 + GLAMO_REG_LCD_HORIZ_TOTAL = REG_LCD(0x1c),
93869 + /* RES */
93870 + GLAMO_REG_LCD_HORIZ_RETR_START = REG_LCD(0x20),
93871 + /* RES */
93872 + GLAMO_REG_LCD_HORIZ_RETR_END = REG_LCD(0x24),
93873 + /* RES */
93874 + GLAMO_REG_LCD_HORIZ_DISP_START = REG_LCD(0x28),
93875 + /* RES */
93876 + GLAMO_REG_LCD_HORIZ_DISP_END = REG_LCD(0x2c),
93877 + /* RES */
93878 + GLAMO_REG_LCD_VERT_TOTAL = REG_LCD(0x30),
93879 + /* RES */
93880 + GLAMO_REG_LCD_VERT_RETR_START = REG_LCD(0x34),
93881 + /* RES */
93882 + GLAMO_REG_LCD_VERT_RETR_END = REG_LCD(0x38),
93883 + /* RES */
93884 + GLAMO_REG_LCD_VERT_DISP_START = REG_LCD(0x3c),
93885 + /* RES */
93886 + GLAMO_REG_LCD_VERT_DISP_END = REG_LCD(0x40),
93887 + /* RES */
93888 + GLAMO_REG_LCD_POL = REG_LCD(0x44),
93889 + GLAMO_REG_LCD_DATA_START = REG_LCD(0x46),
93890 + GLAMO_REG_LCD_FRATE_CONTRO = REG_LCD(0x48),
93891 + GLAMO_REG_LCD_DATA_CMD_HDR = REG_LCD(0x4a),
93892 + GLAMO_REG_LCD_SP_START = REG_LCD(0x4c),
93893 + GLAMO_REG_LCD_SP_END = REG_LCD(0x4e),
93894 + GLAMO_REG_LCD_CURSOR_BASE1 = REG_LCD(0x50),
93895 + GLAMO_REG_LCD_CURSOR_BASE2 = REG_LCD(0x52),
93896 + GLAMO_REG_LCD_CURSOR_PITCH = REG_LCD(0x54),
93897 + GLAMO_REG_LCD_CURSOR_X_SIZE = REG_LCD(0x56),
93898 + GLAMO_REG_LCD_CURSOR_Y_SIZE = REG_LCD(0x58),
93899 + GLAMO_REG_LCD_CURSOR_X_POS = REG_LCD(0x5a),
93900 + GLAMO_REG_LCD_CURSOR_Y_POS = REG_LCD(0x5c),
93901 + GLAMO_REG_LCD_CURSOR_PRESET = REG_LCD(0x5e),
93902 + GLAMO_REG_LCD_CURSOR_FG_COLOR = REG_LCD(0x60),
93903 + /* RES */
93904 + GLAMO_REG_LCD_CURSOR_BG_COLOR = REG_LCD(0x64),
93905 + /* RES */
93906 + GLAMO_REG_LCD_CURSOR_DST_COLOR = REG_LCD(0x68),
93907 + /* RES */
93908 + GLAMO_REG_LCD_STATUS1 = REG_LCD(0x80),
93909 + GLAMO_REG_LCD_STATUS2 = REG_LCD(0x82),
93910 + GLAMO_REG_LCD_STATUS3 = REG_LCD(0x84),
93911 + GLAMO_REG_LCD_STATUS4 = REG_LCD(0x86),
93912 + /* RES */
93913 + GLAMO_REG_LCD_COMMAND1 = REG_LCD(0xa0),
93914 + GLAMO_REG_LCD_COMMAND2 = REG_LCD(0xa2),
93915 + /* RES */
93916 + GLAMO_REG_LCD_WFORM_DELAY1 = REG_LCD(0xb0),
93917 + GLAMO_REG_LCD_WFORM_DELAY2 = REG_LCD(0xb2),
93918 + /* RES */
93919 + GLAMO_REG_LCD_GAMMA_CORR = REG_LCD(0x100),
93920 + /* RES */
93921 + GLAMO_REG_LCD_GAMMA_R_ENTRY01 = REG_LCD(0x110),
93922 + GLAMO_REG_LCD_GAMMA_R_ENTRY23 = REG_LCD(0x112),
93923 + GLAMO_REG_LCD_GAMMA_R_ENTRY45 = REG_LCD(0x114),
93924 + GLAMO_REG_LCD_GAMMA_R_ENTRY67 = REG_LCD(0x116),
93925 + GLAMO_REG_LCD_GAMMA_R_ENTRY8 = REG_LCD(0x118),
93926 + /* RES */
93927 + GLAMO_REG_LCD_GAMMA_G_ENTRY01 = REG_LCD(0x130),
93928 + GLAMO_REG_LCD_GAMMA_G_ENTRY23 = REG_LCD(0x132),
93929 + GLAMO_REG_LCD_GAMMA_G_ENTRY45 = REG_LCD(0x134),
93930 + GLAMO_REG_LCD_GAMMA_G_ENTRY67 = REG_LCD(0x136),
93931 + GLAMO_REG_LCD_GAMMA_G_ENTRY8 = REG_LCD(0x138),
93932 + /* RES */
93933 + GLAMO_REG_LCD_GAMMA_B_ENTRY01 = REG_LCD(0x150),
93934 + GLAMO_REG_LCD_GAMMA_B_ENTRY23 = REG_LCD(0x152),
93935 + GLAMO_REG_LCD_GAMMA_B_ENTRY45 = REG_LCD(0x154),
93936 + GLAMO_REG_LCD_GAMMA_B_ENTRY67 = REG_LCD(0x156),
93937 + GLAMO_REG_LCD_GAMMA_B_ENTRY8 = REG_LCD(0x158),
93938 + /* RES */
93939 + GLAMO_REG_LCD_SRAM_DRIVING1 = REG_LCD(0x160),
93940 + GLAMO_REG_LCD_SRAM_DRIVING2 = REG_LCD(0x162),
93941 + GLAMO_REG_LCD_SRAM_DRIVING3 = REG_LCD(0x164),
93942 +};
93943 +
93944 +enum glamo_reg_lcd_mode1 {
93945 + GLAMO_LCD_MODE1_PWRSAVE = 0x0001,
93946 + GLAMO_LCD_MODE1_PARTIAL_PRT = 0x0002,
93947 + GLAMO_LCD_MODE1_HWFLIP = 0x0004,
93948 + GLAMO_LCD_MODE1_LCD2 = 0x0008,
93949 + /* RES */
93950 + GLAMO_LCD_MODE1_PARTIAL_MODE = 0x0020,
93951 + GLAMO_LCD_MODE1_CURSOR_DSTCOLOR = 0x0040,
93952 + GLAMO_LCD_MODE1_PARTIAL_ENABLE = 0x0080,
93953 + GLAMO_LCD_MODE1_TVCLK_IN_ENABLE = 0x0100,
93954 + GLAMO_LCD_MODE1_HSYNC_HIGH_ACT = 0x0200,
93955 + GLAMO_LCD_MODE1_VSYNC_HIGH_ACT = 0x0400,
93956 + GLAMO_LCD_MODE1_HSYNC_FLIP = 0x0800,
93957 + GLAMO_LCD_MODE1_GAMMA_COR_EN = 0x1000,
93958 + GLAMO_LCD_MODE1_DITHER_EN = 0x2000,
93959 + GLAMO_LCD_MODE1_CURSOR_EN = 0x4000,
93960 + GLAMO_LCD_MODE1_ROTATE_EN = 0x8000,
93961 +};
93962 +
93963 +enum glamo_reg_lcd_mode2 {
93964 + GLAMO_LCD_MODE2_CRC_CHECK_EN = 0x0001,
93965 + GLAMO_LCD_MODE2_DCMD_PER_LINE = 0x0002,
93966 + GLAMO_LCD_MODE2_NOUSE_BDEF = 0x0004,
93967 + GLAMO_LCD_MODE2_OUT_POS_MODE = 0x0008,
93968 + GLAMO_LCD_MODE2_FRATE_CTRL_EN = 0x0010,
93969 + GLAMO_LCD_MODE2_SINGLE_BUFFER = 0x0020,
93970 + GLAMO_LCD_MODE2_SER_LSB_TO_MSB = 0x0040,
93971 + /* FIXME */
93972 +};
93973 +
93974 +enum glamo_reg_lcd_mode3 {
93975 + /* LCD color source data format */
93976 + GLAMO_LCD_SRC_RGB565 = 0x0000,
93977 + GLAMO_LCD_SRC_ARGB1555 = 0x4000,
93978 + GLAMO_LCD_SRC_ARGB4444 = 0x8000,
93979 + /* interface type */
93980 + GLAMO_LCD_MODE3_LCD = 0x1000,
93981 + GLAMO_LCD_MODE3_RGB = 0x0800,
93982 + GLAMO_LCD_MODE3_CPU = 0x0000,
93983 + /* mode */
93984 + GLAMO_LCD_MODE3_RGB332 = 0x0000,
93985 + GLAMO_LCD_MODE3_RGB444 = 0x0100,
93986 + GLAMO_LCD_MODE3_RGB565 = 0x0200,
93987 + GLAMO_LCD_MODE3_RGB666 = 0x0300,
93988 + /* depth */
93989 + GLAMO_LCD_MODE3_6BITS = 0x0000,
93990 + GLAMO_LCD_MODE3_8BITS = 0x0010,
93991 + GLAMO_LCD_MODE3_9BITS = 0x0020,
93992 + GLAMO_LCD_MODE3_16BITS = 0x0030,
93993 + GLAMO_LCD_MODE3_18BITS = 0x0040,
93994 +};
93995 +
93996 +enum glamo_lcd_rot_mode {
93997 + GLAMO_LCD_ROT_MODE_0 = 0x0000,
93998 + GLAMO_LCD_ROT_MODE_180 = 0x2000,
93999 + GLAMO_LCD_ROT_MODE_MIRROR = 0x4000,
94000 + GLAMO_LCD_ROT_MODE_FLIP = 0x6000,
94001 + GLAMO_LCD_ROT_MODE_90 = 0x8000,
94002 + GLAMO_LCD_ROT_MODE_270 = 0xa000,
94003 +};
94004 +#define GLAMO_LCD_ROT_MODE_MASK 0xe000
94005 +
94006 +enum glamo_lcd_cmd_type {
94007 + GLAMO_LCD_CMD_TYPE_DISP = 0x0000,
94008 + GLAMO_LCD_CMD_TYPE_PARALLEL = 0x4000,
94009 + GLAMO_LCD_CMD_TYPE_SERIAL = 0x8000,
94010 + GLAMO_LCD_CMD_TYPE_SERIAL_DIRECT= 0xc000,
94011 +};
94012 +#define GLAMO_LCD_CMD_TYPE_MASK 0xc000
94013 +
94014 +enum glamo_lcd_cmds {
94015 + GLAMO_LCD_CMD_DATA_DISP_FIRE = 0x00,
94016 + GLAMO_LCD_CMD_DATA_DISP_SYNC = 0x01, /* RGB only */
94017 + /* switch to command mode, no display */
94018 + GLAMO_LCD_CMD_DATA_FIRE_NO_DISP = 0x02,
94019 + /* display until VSYNC, switch to command */
94020 + GLAMO_LCD_CMD_DATA_FIRE_VSYNC = 0x11,
94021 + /* display until HSYNC, switch to command */
94022 + GLAMO_LCD_CMD_DATA_FIRE_HSYNC = 0x12,
94023 + /* display until VSYNC, 1 black frame, VSYNC, switch to command */
94024 + GLAMO_LCD_CMD_DATA_FIRE_VSYNC_B = 0x13,
94025 + /* don't care about display and switch to command */
94026 + GLAMO_LCD_CMD_DATA_FIRE_FREE = 0x14, /* RGB only */
94027 + /* don't care about display, keep data display but disable data,
94028 + * and switch to command */
94029 + GLAMO_LCD_CMD_DATA_FIRE_FREE_D = 0x15, /* RGB only */
94030 +};
94031 +
94032 +enum glamo_core_revisions {
94033 + GLAMO_CORE_REV_A0 = 0x0000,
94034 + GLAMO_CORE_REV_A1 = 0x0001,
94035 + GLAMO_CORE_REV_A2 = 0x0002,
94036 + GLAMO_CORE_REV_A3 = 0x0003,
94037 +};
94038 +
94039 +#endif /* _GLAMO_REGS_H */
94040 Index: linux-2.6.28/drivers/mfd/glamo/glamo-spi-gpio.c
94041 ===================================================================
94042 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
94043 +++ linux-2.6.28/drivers/mfd/glamo/glamo-spi-gpio.c 2009-01-02 00:01:56.000000000 +0100
94044 @@ -0,0 +1,288 @@
94045 +/*
94046 + * Copyright (C) 2007 Openmoko, Inc.
94047 + * Author: Harald Welte <laforge@openmoko.org>
94048 + *
94049 + * Smedia Glamo GPIO based SPI driver
94050 + *
94051 + * This program is free software; you can redistribute it and/or modify
94052 + * it under the terms of the GNU General Public License version 2 as
94053 + * published by the Free Software Foundation.
94054 + *
94055 + * This driver currently only implements a minimum subset of the hardware
94056 + * features, esp. those features that are required to drive the jbt6k74
94057 + * LCM controller asic in the TD028TTEC1 LCM.
94058 + *
94059 +*/
94060 +
94061 +#define DEBUG
94062 +
94063 +#include <linux/kernel.h>
94064 +#include <linux/init.h>
94065 +#include <linux/delay.h>
94066 +#include <linux/device.h>
94067 +#include <linux/spinlock.h>
94068 +#include <linux/workqueue.h>
94069 +#include <linux/platform_device.h>
94070 +
94071 +#include <linux/spi/spi.h>
94072 +#include <linux/spi/spi_bitbang.h>
94073 +#include <linux/spi/glamo.h>
94074 +
94075 +#include <linux/glamofb.h>
94076 +
94077 +#include <mach/hardware.h>
94078 +
94079 +#include "glamo-core.h"
94080 +#include "glamo-regs.h"
94081 +
94082 +struct glamo_spigpio {
94083 + struct spi_bitbang bitbang;
94084 + struct spi_master *master;
94085 + struct glamo_spigpio_info *info;
94086 + struct glamo_core *glamo;
94087 +};
94088 +
94089 +static inline struct glamo_spigpio *to_sg(struct spi_device *spi)
94090 +{
94091 + return spi->controller_data;
94092 +}
94093 +
94094 +static inline void setsck(struct spi_device *dev, int on)
94095 +{
94096 + struct glamo_spigpio *sg = to_sg(dev);
94097 + glamo_gpio_setpin(sg->glamo, sg->info->pin_clk, on ? 1 : 0);
94098 +}
94099 +
94100 +static inline void setmosi(struct spi_device *dev, int on)
94101 +{
94102 + struct glamo_spigpio *sg = to_sg(dev);
94103 + glamo_gpio_setpin(sg->glamo, sg->info->pin_mosi, on ? 1 : 0);
94104 +}
94105 +
94106 +static inline u32 getmiso(struct spi_device *dev)
94107 +{
94108 + struct glamo_spigpio *sg = to_sg(dev);
94109 + if (sg->info->pin_miso)
94110 + return glamo_gpio_getpin(sg->glamo, sg->info->pin_miso) ? 1 : 0;
94111 + else
94112 + return 0;
94113 +}
94114 +
94115 +#define spidelay(x) ndelay(x)
94116 +
94117 +#define EXPAND_BITBANG_TXRX
94118 +#include <linux/spi/spi_bitbang.h>
94119 +
94120 +static u32 glamo_spigpio_txrx_mode0(struct spi_device *spi,
94121 + unsigned nsecs, u32 word, u8 bits)
94122 +{
94123 + return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, bits);
94124 +}
94125 +
94126 +static u32 glamo_spigpio_txrx_mode1(struct spi_device *spi,
94127 + unsigned nsecs, u32 word, u8 bits)
94128 +{
94129 + return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, bits);
94130 +}
94131 +
94132 +static u32 glamo_spigpio_txrx_mode2(struct spi_device *spi,
94133 + unsigned nsecs, u32 word, u8 bits)
94134 +{
94135 + return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, bits);
94136 +}
94137 +
94138 +static u32 glamo_spigpio_txrx_mode3(struct spi_device *spi,
94139 + unsigned nsecs, u32 word, u8 bits)
94140 +{
94141 + return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, bits);
94142 +}
94143 +
94144 +
94145 +#if 0
94146 +static int glamo_spigpio_setupxfer(struct spi_device *spi,
94147 + struct spi_transfer *t)
94148 +{
94149 + struct glamo_spi *gs = to_sg(spi);
94150 + unsigned int bpw;
94151 +
94152 + bpw = t ? t->bits_per_word : spi->bits_per_word;
94153 +
94154 + if (bpw != 9 && bpw != 8) {
94155 + dev_err(&spi->dev, "invalid bits-per-word (%d)\n", bpw);
94156 + return -EINVAL;
94157 + }
94158 +
94159 + return 0;
94160 +}
94161 +#endif
94162 +
94163 +static void glamo_spigpio_chipsel(struct spi_device *spi, int value)
94164 +{
94165 + struct glamo_spigpio *gs = to_sg(spi);
94166 +#if 0
94167 + dev_dbg(&spi->dev, "chipsel %d: spi=%p, gs=%p, info=%p, handle=%p\n",
94168 + value, spi, gs, gs->info, gs->info->glamo);
94169 +#endif
94170 + glamo_gpio_setpin(gs->glamo, gs->info->pin_cs, value ? 0 : 1);
94171 +}
94172 +
94173 +
94174 +static int glamo_spigpio_probe(struct platform_device *pdev)
94175 +{
94176 + struct spi_master *master;
94177 + struct glamo_spigpio *sp;
94178 + int ret;
94179 + int i;
94180 +
94181 + master = spi_alloc_master(&pdev->dev, sizeof(struct glamo_spigpio));
94182 + if (master == NULL) {
94183 + dev_err(&pdev->dev, "failed to allocate spi master\n");
94184 + ret = -ENOMEM;
94185 + goto err;
94186 + }
94187 +
94188 + sp = spi_master_get_devdata(master);
94189 + platform_set_drvdata(pdev, sp);
94190 + sp->info = pdev->dev.platform_data;
94191 + if (!sp->info) {
94192 + dev_err(&pdev->dev, "can't operate without platform data\n");
94193 + ret = -EIO;
94194 + goto err_no_pdev;
94195 + }
94196 +
94197 + master->num_chipselect = 1;
94198 + master->bus_num = 2; /* FIXME: use dynamic number */
94199 +
94200 + sp->master = spi_master_get(master);
94201 + sp->glamo = sp->info->glamo;
94202 +
94203 + sp->bitbang.master = sp->master;
94204 + sp->bitbang.chipselect = glamo_spigpio_chipsel;
94205 + sp->bitbang.txrx_word[SPI_MODE_0] = glamo_spigpio_txrx_mode0;
94206 + sp->bitbang.txrx_word[SPI_MODE_1] = glamo_spigpio_txrx_mode1;
94207 + sp->bitbang.txrx_word[SPI_MODE_2] = glamo_spigpio_txrx_mode2;
94208 + sp->bitbang.txrx_word[SPI_MODE_3] = glamo_spigpio_txrx_mode3;
94209 +
94210 + /* set state of spi pins */
94211 + glamo_gpio_setpin(sp->glamo, sp->info->pin_clk, 0);
94212 + glamo_gpio_setpin(sp->glamo, sp->info->pin_mosi, 0);
94213 + glamo_gpio_setpin(sp->glamo, sp->info->pin_cs, 1);
94214 +
94215 + glamo_gpio_cfgpin(sp->glamo, sp->info->pin_clk);
94216 + glamo_gpio_cfgpin(sp->glamo, sp->info->pin_mosi);
94217 + glamo_gpio_cfgpin(sp->glamo, sp->info->pin_cs);
94218 + if (sp->info->pin_miso)
94219 + glamo_gpio_cfgpin(sp->glamo, sp->info->pin_miso);
94220 +
94221 + /* bring the LCM panel out of reset if it isn't already */
94222 +
94223 + glamo_gpio_setpin(sp->glamo, GLAMO_GPIO4, 1);
94224 + glamo_gpio_cfgpin(sp->glamo, GLAMO_GPIO4_OUTPUT);
94225 + msleep(90);
94226 +
94227 +#if 0
94228 + sp->dev = &pdev->dev;
94229 +
94230 + sp->bitbang.setup_transfer = glamo_spi_setupxfer;
94231 + sp->bitbang.txrx_bufs = glamo_spi_txrx;
94232 + sp->bitbang.master->setup = glamo_spi_setup;
94233 +#endif
94234 +
94235 + ret = spi_bitbang_start(&sp->bitbang);
94236 + if (ret)
94237 + goto err_no_bitbang;
94238 +
94239 + /* register the chips to go with the board */
94240 +
94241 + for (i = 0; i < sp->info->board_size; i++) {
94242 + dev_info(&pdev->dev, "registering %p: %s\n",
94243 + &sp->info->board_info[i],
94244 + sp->info->board_info[i].modalias);
94245 +
94246 + sp->info->board_info[i].controller_data = sp;
94247 + spi_new_device(master, sp->info->board_info + i);
94248 + }
94249 +
94250 + return 0;
94251 +
94252 +err_no_bitbang:
94253 + platform_set_drvdata(pdev, NULL);
94254 +err_no_pdev:
94255 + spi_master_put(sp->bitbang.master);
94256 +err:
94257 + return ret;
94258 +
94259 +}
94260 +
94261 +static int glamo_spigpio_remove(struct platform_device *pdev)
94262 +{
94263 + struct glamo_spigpio *sp = platform_get_drvdata(pdev);
94264 +
94265 + spi_bitbang_stop(&sp->bitbang);
94266 + spi_master_put(sp->bitbang.master);
94267 +
94268 + return 0;
94269 +}
94270 +
94271 +/*#define glamo_spigpio_suspend NULL
94272 +#define glamo_spigpio_resume NULL
94273 +*/
94274 +
94275 +
94276 +#ifdef CONFIG_PM
94277 +static int glamo_spigpio_suspend(struct platform_device *pdev, pm_message_t state)
94278 +{
94279 + return 0;
94280 +}
94281 +
94282 +static int glamo_spigpio_resume(struct platform_device *pdev)
94283 +{
94284 + struct glamo_spigpio *sp = platform_get_drvdata(pdev);
94285 +
94286 + if (!sp)
94287 + return 0;
94288 +
94289 + /* set state of spi pins */
94290 + glamo_gpio_setpin(sp->glamo, sp->info->pin_clk, 0);
94291 + glamo_gpio_setpin(sp->glamo, sp->info->pin_mosi, 0);
94292 + glamo_gpio_setpin(sp->glamo, sp->info->pin_cs, 1);
94293 +
94294 + glamo_gpio_cfgpin(sp->glamo, sp->info->pin_clk);
94295 + glamo_gpio_cfgpin(sp->glamo, sp->info->pin_mosi);
94296 + glamo_gpio_cfgpin(sp->glamo, sp->info->pin_cs);
94297 + if (sp->info->pin_miso)
94298 + glamo_gpio_cfgpin(sp->glamo, sp->info->pin_miso);
94299 +
94300 + return 0;
94301 +}
94302 +#endif
94303 +
94304 +static struct platform_driver glamo_spi_drv = {
94305 + .probe = glamo_spigpio_probe,
94306 + .remove = glamo_spigpio_remove,
94307 +#ifdef CONFIG_PM
94308 + .suspend_late = glamo_spigpio_suspend,
94309 + .resume_early = glamo_spigpio_resume,
94310 +#endif
94311 + .driver = {
94312 + .name = "glamo-spi-gpio",
94313 + .owner = THIS_MODULE,
94314 + },
94315 +};
94316 +
94317 +static int __init glamo_spi_init(void)
94318 +{
94319 + return platform_driver_register(&glamo_spi_drv);
94320 +}
94321 +
94322 +static void __exit glamo_spi_exit(void)
94323 +{
94324 + platform_driver_unregister(&glamo_spi_drv);
94325 +}
94326 +
94327 +module_init(glamo_spi_init);
94328 +module_exit(glamo_spi_exit);
94329 +
94330 +MODULE_DESCRIPTION("Smedia Glamo 336x/337x LCM serial command SPI Driver");
94331 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>")
94332 +MODULE_LICENSE("GPL");
94333 Index: linux-2.6.28/drivers/mfd/glamo/Kconfig
94334 ===================================================================
94335 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
94336 +++ linux-2.6.28/drivers/mfd/glamo/Kconfig 2009-01-02 00:01:56.000000000 +0100
94337 @@ -0,0 +1,44 @@
94338 +config MFD_GLAMO
94339 + bool "Smedia Glamo 336x/337x support"
94340 + help
94341 + This enables the core driver for the Smedia Glamo 336x/337x
94342 + multi-function device. It includes irq_chip demultiplex as
94343 + well as clock / power management and GPIO support.
94344 +
94345 +config MFD_GLAMO_FB
94346 + tristate "Smedia Glamo 336x/337x framebuffer support"
94347 + depends on FB && MFD_GLAMO
94348 + help
94349 + Frame buffer driver for the LCD controller in the Smedia Glamo
94350 + 336x/337x.
94351 +
94352 + This driver is also available as a module ( = code which can be
94353 + inserted and removed from the running kernel whenever you want). The
94354 + module will be called glamofb. If you want to compile it as a module,
94355 + say M here and read <file:Documentation/modules.txt>.
94356 +
94357 + If unsure, say N.
94358 +
94359 +config MFD_GLAMO_SPI_GPIO
94360 + tristate "Glamo GPIO SPI bitbang support"
94361 + depends on MFD_GLAMO
94362 + help
94363 + Enable a bitbanging SPI adapter driver for the Smedia Glamo.
94364 +
94365 +config MFD_GLAMO_SPI_FB
94366 + tristate "Glamo LCM control channel SPI support"
94367 + depends on MFD_GLAMO_FB
94368 + help
94369 + Enable a bitbanging SPI adapter driver for the Smedia Glamo LCM
94370 + control channel. This SPI interface is frequently used to
94371 + interconnect the LCM control interface.
94372 +
94373 +config MFD_GLAMO_MCI
94374 + tristate "Glamo S3C SD/MMC Card Interface support"
94375 + depends on MFD_GLAMO && MMC
94376 + help
94377 + This selects a driver for the MCI interface found in
94378 + the S-Media GLAMO chip, as used in Openmoko
94379 + neo1973 GTA-02.
94380 +
94381 + If unsure, say N.
94382 \ No newline at end of file
94383 Index: linux-2.6.28/drivers/mfd/glamo/Makefile
94384 ===================================================================
94385 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
94386 +++ linux-2.6.28/drivers/mfd/glamo/Makefile 2009-01-02 00:01:56.000000000 +0100
94387 @@ -0,0 +1,12 @@
94388 +#
94389 +# Makefile for the Smedia Glamo framebuffer driver
94390 +#
94391 +
94392 +obj-$(CONFIG_MFD_GLAMO) += glamo-core.o glamo-gpio.o
94393 +obj-$(CONFIG_MFD_GLAMO_SPI) += glamo-spi.o
94394 +obj-$(CONFIG_MFD_GLAMO_SPI_GPIO) += glamo-spi-gpio.o
94395 +
94396 +obj-$(CONFIG_MFD_GLAMO_FB) += glamo-fb.o
94397 +obj-$(CONFIG_MFD_GLAMO_SPI_FB) += glamo-lcm-spi.o
94398 +obj-$(CONFIG_MFD_GLAMO_MCI) += glamo-mci.o
94399 +
94400 Index: linux-2.6.28/drivers/mfd/Kconfig
94401 ===================================================================
94402 --- linux-2.6.28.orig/drivers/mfd/Kconfig 2008-12-25 00:26:37.000000000 +0100
94403 +++ linux-2.6.28/drivers/mfd/Kconfig 2009-01-02 00:01:56.000000000 +0100
94404 @@ -153,6 +153,55 @@ config MFD_WM8350_I2C
94405 I2C as the control interface. Additional options must be
94406 selected to enable support for the functionality of the chip.
94407
94408 +config MFD_PCF50633
94409 + tristate "Support for NXP PCF50633"
94410 + depends on I2C
94411 + help
94412 + Say yes here if you have NXP PCF50633 chip on your board.
94413 + This core driver provides register access and IRQ handling
94414 + facilities, and registers devices for the various functions
94415 + so that function-specific drivers can bind to them.
94416 +
94417 +
94418 +config PCF50633_ADC
94419 + tristate "Support for NXP PCF50633 ADC"
94420 + depends on MFD_PCF50633
94421 + help
94422 + Say yes here if you want to include support for ADC in the
94423 + NXP PCF50633 chip.
94424 +
94425 +config PCF50633_GPIO
94426 + tristate "Support for NXP PCF50633 GPIO"
94427 + depends on MFD_PCF50633
94428 + help
94429 + Say yes here if you want to include support GPIO for pins on
94430 + the PCF50633 chip.
94431 +
94432 +config MFD_PCF50606
94433 + tristate "Support for NXP PCF50606"
94434 + depends on I2C
94435 + help
94436 + Say yes here if you have NXP PCF50606 chip on your board.
94437 + This core driver provides register access and IRQ handling
94438 + facilities, and registers devices for the various functions
94439 + so that function-specific drivers can bind to them.
94440 +
94441 +config PCF50606_ADC
94442 + tristate "Support for NXP PCF50606 ADC"
94443 + depends on MFD_PCF50606
94444 + help
94445 + Say yes here if you want to include support for ADC in the
94446 + NXP PCF50606 chip.
94447 +
94448 +config PCF50606_GPO
94449 + tristate "Support for NXP PCF50606 GPO"
94450 + depends on MFD_PCF50606
94451 + help
94452 + Say yes here if you want to include support GPO for pins on
94453 + the PCF50606 chip.
94454 +
94455 +source "drivers/mfd/glamo/Kconfig"
94456 +
94457 endmenu
94458
94459 menu "Multimedia Capabilities Port drivers"
94460 Index: linux-2.6.28/drivers/mfd/Makefile
94461 ===================================================================
94462 --- linux-2.6.28.orig/drivers/mfd/Makefile 2008-12-25 00:26:37.000000000 +0100
94463 +++ linux-2.6.28/drivers/mfd/Makefile 2009-01-02 00:01:56.000000000 +0100
94464 @@ -4,6 +4,7 @@
94465
94466 obj-$(CONFIG_MFD_SM501) += sm501.o
94467 obj-$(CONFIG_MFD_ASIC3) += asic3.o
94468 +obj-$(CONFIG_MFD_GLAMO) += glamo/
94469
94470 obj-$(CONFIG_HTC_EGPIO) += htc-egpio.o
94471 obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
94472 @@ -31,4 +32,13 @@ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-ass
94473 endif
94474 obj-$(CONFIG_UCB1400_CORE) += ucb1400_core.o
94475
94476 -obj-$(CONFIG_PMIC_DA903X) += da903x.o
94477 \ No newline at end of file
94478 +obj-$(CONFIG_PMIC_DA903X) += da903x.o
94479 +
94480 +obj-$(CONFIG_MFD_PCF50633) += pcf50633-core.o
94481 +obj-$(CONFIG_PCF50633_ADC) += pcf50633-adc.o
94482 +obj-$(CONFIG_PCF50633_GPIO) += pcf50633-gpio.o
94483 +
94484 +obj-$(CONFIG_MFD_PCF50606) += pcf50606-core.o
94485 +obj-$(CONFIG_PCF50606_ADC) += pcf50606-adc.o
94486 +obj-$(CONFIG_PCF50606_GPO) += pcf50606-gpo.o
94487 +
94488 Index: linux-2.6.28/drivers/mfd/pcf50606-adc.c
94489 ===================================================================
94490 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
94491 +++ linux-2.6.28/drivers/mfd/pcf50606-adc.c 2009-01-02 00:01:56.000000000 +0100
94492 @@ -0,0 +1,239 @@
94493 +/* Philips PCF50606 ADC Driver
94494 + *
94495 + * (C) 2006-2008 by Openmoko, Inc.
94496 + * Author: Balaji Rao <balajirrao@openmoko.org>
94497 + * All rights reserved.
94498 + *
94499 + * Broken down from monstrous PCF50606 driver mainly by
94500 + * Harald Welte, Andy Green and Werner Almesberger
94501 + *
94502 + * This program is free software; you can redistribute it and/or
94503 + * modify it under the terms of the GNU General Public License as
94504 + * published by the Free Software Foundation; either version 2 of
94505 + * the License, or (at your option) any later version.
94506 + *
94507 + * This program is distributed in the hope that it will be useful,
94508 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
94509 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
94510 + * GNU General Public License for more details.
94511 + *
94512 + * You should have received a copy of the GNU General Public License
94513 + * along with this program; if not, write to the Free Software
94514 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
94515 + * MA 02111-1307 USA
94516 + */
94517 +
94518 +#include <linux/mfd/pcf50606/core.h>
94519 +#include <linux/mfd/pcf50606/adc.h>
94520 +
94521 +struct pcf50606_adc_request {
94522 + int mux;
94523 + int avg;
94524 + int result;
94525 + void (*callback)(struct pcf50606 *, void *, int);
94526 + void *callback_param;
94527 +
94528 + /* Used in case of sync requests */
94529 + struct completion completion;
94530 +
94531 +};
94532 +
94533 +static void adc_read_setup(struct pcf50606 *pcf,
94534 + int channel, int avg)
94535 +{
94536 + channel &= PCF50606_ADCC2_ADCMUX_MASK;
94537 +
94538 + /* start ADC conversion of selected channel */
94539 + pcf50606_reg_write(pcf, PCF50606_REG_ADCC2, channel |
94540 + PCF50606_ADCC2_ADCSTART | PCF50606_ADCC2_RES_10BIT);
94541 +
94542 +}
94543 +
94544 +static void trigger_next_adc_job_if_any(struct pcf50606 *pcf)
94545 +{
94546 + int head, tail;
94547 +
94548 + mutex_lock(&pcf->adc.queue_mutex);
94549 +
94550 + head = pcf->adc.queue_head;
94551 + tail = pcf->adc.queue_tail;
94552 +
94553 + if (!pcf->adc.queue[head])
94554 + goto out;
94555 +
94556 + adc_read_setup(pcf, pcf->adc.queue[head]->mux,
94557 + pcf->adc.queue[head]->avg);
94558 +out:
94559 + mutex_unlock(&pcf->adc.queue_mutex);
94560 +}
94561 +
94562 +static int
94563 +adc_enqueue_request(struct pcf50606 *pcf, struct pcf50606_adc_request *req)
94564 +{
94565 + int head, tail;
94566 +
94567 + mutex_lock(&pcf->adc.queue_mutex);
94568 + head = pcf->adc.queue_head;
94569 + tail = pcf->adc.queue_tail;
94570 +
94571 + if (pcf->adc.queue[tail]) {
94572 + mutex_unlock(&pcf->adc.queue_mutex);
94573 + return -EBUSY;
94574 + }
94575 +
94576 + pcf->adc.queue[tail] = req;
94577 +
94578 + pcf->adc.queue_tail =
94579 + (tail + 1) & (PCF50606_MAX_ADC_FIFO_DEPTH - 1);
94580 +
94581 + mutex_unlock(&pcf->adc.queue_mutex);
94582 +
94583 + trigger_next_adc_job_if_any(pcf);
94584 +
94585 + return 0;
94586 +}
94587 +
94588 +static void
94589 +pcf50606_adc_sync_read_callback(struct pcf50606 *pcf, void *param, int result)
94590 +{
94591 + struct pcf50606_adc_request *req;
94592 +
94593 + /*We know here that the passed param is an adc_request object */
94594 + req = (struct pcf50606_adc_request *)param;
94595 +
94596 + req->result = result;
94597 + complete(&req->completion);
94598 +}
94599 +
94600 +int pcf50606_adc_sync_read(struct pcf50606 *pcf, int mux, int avg)
94601 +{
94602 +
94603 + struct pcf50606_adc_request *req;
94604 + int result;
94605 +
94606 + /* req is freed when the result is ready, in pcf50606_work*/
94607 + req = kzalloc(sizeof(*req), GFP_KERNEL);
94608 + if (!req)
94609 + return -ENOMEM;
94610 +
94611 + req->mux = mux;
94612 + req->avg = avg;
94613 + req->callback = pcf50606_adc_sync_read_callback;
94614 + req->callback_param = req;
94615 + init_completion(&req->completion);
94616 +
94617 + adc_enqueue_request(pcf, req);
94618 +
94619 + wait_for_completion(&req->completion);
94620 + result = req->result;
94621 +
94622 + return result;
94623 +}
94624 +EXPORT_SYMBOL_GPL(pcf50606_adc_sync_read);
94625 +
94626 +int pcf50606_adc_async_read(struct pcf50606 *pcf, int mux, int avg,
94627 + void (*callback)(struct pcf50606 *, void *, int),
94628 + void *callback_param)
94629 +{
94630 + struct pcf50606_adc_request *req;
94631 +
94632 + /* req is freed when the result is ready, in pcf50606_work*/
94633 + req = kmalloc(sizeof(*req), GFP_KERNEL);
94634 + if (!req)
94635 + return -ENOMEM;
94636 +
94637 + req->mux = mux;
94638 + req->avg = avg;
94639 + req->callback = callback;
94640 + req->callback_param = callback_param;
94641 +
94642 + adc_enqueue_request(pcf, req);
94643 +
94644 + return 0;
94645 +}
94646 +EXPORT_SYMBOL_GPL(pcf50606_adc_async_read);
94647 +
94648 +static int adc_result(struct pcf50606 *pcf)
94649 +{
94650 + u16 ret = (pcf50606_reg_read(pcf, PCF50606_REG_ADCS1) << 2) |
94651 + (pcf50606_reg_read(pcf, PCF50606_REG_ADCS2) & 0x03);
94652 +
94653 + dev_info(pcf->dev, "adc result = %d\n", ret);
94654 +
94655 + return ret;
94656 +}
94657 +
94658 +static void pcf50606_adc_irq(struct pcf50606 *pcf, int irq, void *unused)
94659 +{
94660 + struct pcf50606_adc_request *req;
94661 + int head;
94662 +
94663 + mutex_lock(&pcf->adc.queue_mutex);
94664 + head = pcf->adc.queue_head;
94665 +
94666 + req = pcf->adc.queue[head];
94667 + if (!req) {
94668 + dev_err(pcf->dev, "ADC queue empty\n");
94669 + mutex_unlock(&pcf->adc.queue_mutex);
94670 + return;
94671 + }
94672 + pcf->adc.queue[head] = NULL;
94673 + pcf->adc.queue_head = (head + 1) &
94674 + (PCF50606_MAX_ADC_FIFO_DEPTH - 1);
94675 +
94676 + mutex_unlock(&pcf->adc.queue_mutex);
94677 + req->callback(pcf, req->callback_param, adc_result(pcf));
94678 +
94679 + kfree(req);
94680 +
94681 + trigger_next_adc_job_if_any(pcf);
94682 +}
94683 +
94684 +int __init pcf50606_adc_probe(struct platform_device *pdev)
94685 +{
94686 + struct pcf50606 *pcf;
94687 +
94688 + pcf = platform_get_drvdata(pdev);
94689 +
94690 + /* Set up IRQ handlers */
94691 + pcf->irq_handler[PCF50606_IRQ_ADCRDY].handler = pcf50606_adc_irq;
94692 +
94693 + mutex_init(&pcf->adc.queue_mutex);
94694 + return 0;
94695 +}
94696 +
94697 +static int __devexit pcf50606_adc_remove(struct platform_device *pdev)
94698 +{
94699 + struct pcf50606 *pcf;
94700 +
94701 + pcf = platform_get_drvdata(pdev);
94702 + pcf->irq_handler[PCF50606_IRQ_ADCRDY].handler = NULL;
94703 +
94704 + return 0;
94705 +}
94706 +
94707 +struct platform_driver pcf50606_adc_driver = {
94708 + .driver = {
94709 + .name = "pcf50606-adc",
94710 + },
94711 + .probe = pcf50606_adc_probe,
94712 + .remove = __devexit_p(pcf50606_adc_remove),
94713 +};
94714 +
94715 +static int __init pcf50606_adc_init(void)
94716 +{
94717 + return platform_driver_register(&pcf50606_adc_driver);
94718 +}
94719 +module_init(pcf50606_adc_init);
94720 +
94721 +static void __exit pcf50606_adc_exit(void)
94722 +{
94723 + platform_driver_unregister(&pcf50606_adc_driver);
94724 +}
94725 +module_exit(pcf50606_adc_exit);
94726 +
94727 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
94728 +MODULE_DESCRIPTION("PCF50606 adc driver");
94729 +MODULE_LICENSE("GPL");
94730 +MODULE_ALIAS("platform:pcf50606-adc");
94731 +
94732 Index: linux-2.6.28/drivers/mfd/pcf50606-core.c
94733 ===================================================================
94734 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
94735 +++ linux-2.6.28/drivers/mfd/pcf50606-core.c 2009-01-02 00:01:56.000000000 +0100
94736 @@ -0,0 +1,580 @@
94737 +/* Philips PCF50606 Power Management Unit (PMU) driver
94738 + *
94739 + * (C) 2006-2008 by Openmoko, Inc.
94740 + * Author: Harald Welte <laforge@openmoko.org>
94741 + * Matt Hsu <matt@openmoko.org>
94742 + * All rights reserved.
94743 + *
94744 + * This program is free software; you can redistribute it and/or
94745 + * modify it under the terms of the GNU General Public License as
94746 + * published by the Free Software Foundation; either version 2 of
94747 + * the License, or (at your option) any later version.
94748 + *
94749 + * This program is distributed in the hope that it will be useful,
94750 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
94751 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
94752 + * GNU General Public License for more details.
94753 + *
94754 + * You should have received a copy of the GNU General Public License
94755 + * along with this program; if not, write to the Free Software
94756 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
94757 + * MA 02111-1307 USA
94758 + *
94759 + */
94760 +#include <linux/i2c.h>
94761 +#include <linux/irq.h>
94762 +#include <linux/device.h>
94763 +#include <linux/module.h>
94764 +#include <linux/reboot.h>
94765 +#include <linux/interrupt.h>
94766 +#include <linux/workqueue.h>
94767 +#include <linux/platform_device.h>
94768 +
94769 +#include <linux/mfd/pcf50606/core.h>
94770 +
94771 +/* Read a block of upto 32 regs */
94772 +int pcf50606_read_block(struct pcf50606 *pcf , u8 reg,
94773 + int nr_regs, u8 *data)
94774 +{
94775 + int ret;
94776 +
94777 + mutex_lock(&pcf->lock);
94778 + ret = i2c_smbus_read_i2c_block_data(pcf->i2c_client, reg,
94779 + nr_regs, data);
94780 + mutex_unlock(&pcf->lock);
94781 +
94782 + return ret;
94783 +}
94784 +EXPORT_SYMBOL_GPL(pcf50606_read_block);
94785 +
94786 +/* Write a block of upto 32 regs */
94787 +int pcf50606_write_block(struct pcf50606 *pcf , u8 reg,
94788 + int nr_regs, u8 *data)
94789 +{
94790 + int ret;
94791 +
94792 + mutex_lock(&pcf->lock);
94793 + ret = i2c_smbus_write_i2c_block_data(pcf->i2c_client, reg,
94794 + nr_regs, data);
94795 + mutex_unlock(&pcf->lock);
94796 +
94797 + return ret;
94798 +}
94799 +EXPORT_SYMBOL_GPL(pcf50606_write_block);
94800 +
94801 +u8 pcf50606_reg_read(struct pcf50606 *pcf, u8 reg)
94802 +{
94803 + int ret;
94804 +
94805 + mutex_lock(&pcf->lock);
94806 + ret = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
94807 + mutex_unlock(&pcf->lock);
94808 +
94809 + return ret;
94810 +}
94811 +EXPORT_SYMBOL_GPL(pcf50606_reg_read);
94812 +
94813 +int pcf50606_reg_write(struct pcf50606 *pcf, u8 reg, u8 val)
94814 +{
94815 + int ret;
94816 + mutex_lock(&pcf->lock);
94817 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, val);
94818 + mutex_unlock(&pcf->lock);
94819 +
94820 + return ret;
94821 +}
94822 +EXPORT_SYMBOL_GPL(pcf50606_reg_write);
94823 +
94824 +int pcf50606_reg_set_bit_mask(struct pcf50606 *pcf, u8 reg, u8 mask, u8 val)
94825 +{
94826 + int ret;
94827 + u8 tmp;
94828 +
94829 + val &= mask;
94830 +
94831 + mutex_lock(&pcf->lock);
94832 +
94833 + tmp = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
94834 + tmp &= ~mask;
94835 + tmp |= val;
94836 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, tmp);
94837 +
94838 + mutex_unlock(&pcf->lock);
94839 +
94840 + return ret;
94841 +}
94842 +EXPORT_SYMBOL_GPL(pcf50606_reg_set_bit_mask);
94843 +
94844 +int pcf50606_reg_clear_bits(struct pcf50606 *pcf, u8 reg, u8 val)
94845 +{
94846 + int ret;
94847 + u8 tmp;
94848 +
94849 + mutex_lock(&pcf->lock);
94850 +
94851 + tmp = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
94852 + tmp &= ~val;
94853 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, tmp);
94854 +
94855 + mutex_unlock(&pcf->lock);
94856 +
94857 + return ret;
94858 +}
94859 +EXPORT_SYMBOL_GPL(pcf50606_reg_clear_bits);
94860 +
94861 +static ssize_t show_resume_reason(struct device *dev,
94862 + struct device_attribute *attr, char *buf)
94863 +{
94864 + struct pcf50606 *pcf = dev_get_drvdata(dev);
94865 + int n;
94866 +
94867 + n = sprintf(buf, "%02x%02x%02x%02x%02x\n",
94868 + pcf->resume_reason[0],
94869 + pcf->resume_reason[1],
94870 + pcf->resume_reason[2],
94871 + pcf->resume_reason[3],
94872 + pcf->resume_reason[4]);
94873 +
94874 + return n;
94875 +}
94876 +static DEVICE_ATTR(resume_reason, 0400, show_resume_reason, NULL);
94877 +
94878 +static struct attribute *pcf_sysfs_entries[] = {
94879 + &dev_attr_resume_reason.attr,
94880 + NULL,
94881 +};
94882 +
94883 +static struct attribute_group pcf_attr_group = {
94884 + .name = NULL, /* put in device directory */
94885 + .attrs = pcf_sysfs_entries,
94886 +};
94887 +
94888 +
94889 +static int pcf50606_irq_mask_set(struct pcf50606 *pcf, int irq, int mask)
94890 +{
94891 + u8 reg, bits, tmp;
94892 + int ret = 0, idx;
94893 +
94894 + idx = irq / 8;
94895 + reg = PCF50606_REG_INT1M + idx;
94896 + bits = 1 << (irq % 8);
94897 +
94898 + mutex_lock(&pcf->lock);
94899 +
94900 + if (mask) {
94901 + tmp = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
94902 + tmp |= bits;
94903 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, tmp);
94904 +
94905 + pcf->mask_regs[idx] &= ~bits;
94906 + pcf->mask_regs[idx] |= bits;
94907 + } else {
94908 + tmp = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
94909 + tmp &= ~bits;
94910 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, tmp);
94911 +
94912 + pcf->mask_regs[idx] &= ~bits;
94913 + }
94914 +
94915 + mutex_unlock(&pcf->lock);
94916 +
94917 + return 0;
94918 +}
94919 +
94920 +int pcf50606_irq_mask(struct pcf50606 *pcf, int irq)
94921 +{
94922 + dev_info(pcf->dev, "Masking IRQ %d\n", irq);
94923 +
94924 + return pcf50606_irq_mask_set(pcf, irq, 1);
94925 +}
94926 +EXPORT_SYMBOL_GPL(pcf50606_irq_mask);
94927 +
94928 +int pcf50606_irq_unmask(struct pcf50606 *pcf, int irq)
94929 +{
94930 + dev_info(pcf->dev, "Unmasking IRQ %d\n", irq);
94931 +
94932 + return pcf50606_irq_mask_set(pcf, irq, 0);
94933 +}
94934 +EXPORT_SYMBOL_GPL(pcf50606_irq_unmask);
94935 +
94936 +int pcf50606_irq_mask_get(struct pcf50606 *pcf, int irq)
94937 +{
94938 + u8 reg, bits;
94939 +
94940 + reg = (irq / 8);
94941 + bits = (1 << (irq % 8));
94942 +
94943 + return pcf->mask_regs[reg] & bits;
94944 +}
94945 +EXPORT_SYMBOL_GPL(pcf50606_irq_mask_get);
94946 +
94947 +static void pcf50606_irq_call_handler(struct pcf50606 *pcf,
94948 + int irq)
94949 +{
94950 + if (pcf->irq_handler[irq].handler)
94951 + pcf->irq_handler[irq].handler(pcf, irq,
94952 + pcf->irq_handler[irq].data);
94953 +}
94954 +
94955 +#define PCF50606_ONKEY1S_TIMEOUT 8
94956 +
94957 +static void pcf50606_irq_worker(struct work_struct *work)
94958 +{
94959 + struct pcf50606 *pcf;
94960 + int ret, i, j;
94961 + u8 pcf_int[3], chgstat;
94962 +
94963 + pcf = container_of(work, struct pcf50606, irq_work);
94964 +
94965 + /* Read the 3 INT regs in one transaction */
94966 + ret = pcf50606_read_block(pcf, PCF50606_REG_INT1,
94967 + sizeof(pcf_int), pcf_int);
94968 + if (ret != sizeof(pcf_int)) {
94969 + dev_info(pcf->dev, "Error reading INT registers\n");
94970 +
94971 + /* We don't have an option but to retry. Because if
94972 + * we don't, there won't be another interrupt edge.
94973 + */
94974 + goto reschedule;
94975 + }
94976 +
94977 + /* We immediately read the usb and adapter status. We thus make sure
94978 + * only of CHGINS/CHGRM handlers are called */
94979 + if (pcf_int[1] & (PCF50606_INT2_CHGINS | PCF50606_INT2_CHGRM)) {
94980 + chgstat = pcf50606_reg_read(pcf, PCF50606_REG_MBCS1);
94981 + if (chgstat & (0x1 << 4))
94982 + pcf_int[1] &= ~(1 << PCF50606_INT2_CHGRM);
94983 + else
94984 + pcf_int[1] &= ~(1 << PCF50606_INT2_CHGINS);
94985 + }
94986 +
94987 + dev_info(pcf->dev, "INT1=0x%02x INT2=0x%02x INT3=0x%02x",
94988 + pcf_int[0], pcf_int[1], pcf_int[2]);
94989 +
94990 + /* Some revisions of the chip don't have a 8s standby mode on
94991 + * ONKEY1S press. We try to manually do it in such cases. */
94992 +
94993 + if (pcf_int[0] & PCF50606_INT1_SECOND && pcf->onkey1s_held) {
94994 + dev_info(pcf->dev, "ONKEY1S held for %d secs\n",
94995 + pcf->onkey1s_held);
94996 + if (pcf->onkey1s_held++ == PCF50606_ONKEY1S_TIMEOUT)
94997 + if (pcf->pdata->force_shutdown)
94998 + pcf->pdata->force_shutdown(pcf);
94999 + }
95000 +
95001 + if (pcf_int[0] & PCF50606_INT1_ONKEY1S) {
95002 + dev_info(pcf->dev, "ONKEY1S held\n");
95003 + pcf->onkey1s_held = 1 ;
95004 +
95005 + /* Unmask IRQ_SECOND */
95006 + pcf50606_reg_clear_bits(pcf, PCF50606_REG_INT1M,
95007 + PCF50606_INT1_SECOND);
95008 +
95009 + /* Unmask IRQ_ONKEYF */
95010 + pcf50606_reg_clear_bits(pcf, PCF50606_REG_INT1M,
95011 + PCF50606_INT1_ONKEYF);
95012 + }
95013 +
95014 + if ((pcf_int[0] & PCF50606_INT1_ONKEYR) && pcf->onkey1s_held) {
95015 + pcf->onkey1s_held = 0;
95016 +
95017 + /* Mask SECOND and ONKEYF interrupts */
95018 + if (pcf->mask_regs[0] & PCF50606_INT1_SECOND)
95019 + pcf50606_reg_set_bit_mask(pcf,
95020 + PCF50606_REG_INT1M,
95021 + PCF50606_INT1_SECOND,
95022 + PCF50606_INT1_SECOND);
95023 +
95024 + if (pcf->mask_regs[0] & PCF50606_INT1_ONKEYF)
95025 + pcf50606_reg_set_bit_mask(pcf,
95026 + PCF50606_REG_INT1M,
95027 + PCF50606_INT1_ONKEYF,
95028 + PCF50606_INT1_ONKEYF);
95029 + }
95030 +
95031 + /* Have we just resumed ? */
95032 + if (pcf->is_suspended) {
95033 +
95034 + pcf->is_suspended = 0;
95035 +
95036 + /* Set the resume reason filtering out non resumers */
95037 + for (i = 0; i < ARRAY_SIZE(pcf_int); i++)
95038 + pcf->resume_reason[i] = pcf_int[i] &
95039 + pcf->pdata->resumers[i];
95040 +
95041 + /* Make sure we don't pass on any input events to
95042 + * userspace now */
95043 + pcf_int[0] &= ~(PCF50606_INT1_SECOND | PCF50606_INT1_ALARM);
95044 + }
95045 +
95046 + /* Unset masked interrupts */
95047 + for (i = 0; i < ARRAY_SIZE(pcf_int); i++)
95048 + pcf_int[i] &= ~pcf->mask_regs[i];
95049 +
95050 + for (i = 0; i < ARRAY_SIZE(pcf_int); i++)
95051 + for (j = 0; j < 8 ; j++)
95052 + if (pcf_int[i] & (1 << j))
95053 + pcf50606_irq_call_handler(pcf, (i * 8) + j);
95054 +
95055 + put_device(pcf->dev);
95056 +
95057 + return;
95058 +reschedule:
95059 + schedule_work(&pcf->irq_work);
95060 +
95061 + /* Don't put_device here. Will be used when we are rescheduled */
95062 +
95063 + return;
95064 +}
95065 +
95066 +static irqreturn_t pcf50606_irq(int irq, void *data)
95067 +{
95068 + struct pcf50606 *pcf = data;
95069 +
95070 + get_device(pcf->dev);
95071 + schedule_work(&pcf->irq_work);
95072 +
95073 + return IRQ_HANDLED;
95074 +}
95075 +
95076 +static void
95077 +pcf50606_client_dev_register(struct pcf50606 *pcf, const char *name,
95078 + struct platform_device **pdev)
95079 +{
95080 + int ret;
95081 +
95082 + *pdev = platform_device_alloc(name, -1);
95083 +
95084 + if (!pdev) {
95085 + dev_err(pcf->dev, "Falied to allocate %s\n", name);
95086 + return;
95087 + }
95088 +
95089 + (*pdev)->dev.parent = pcf->dev;
95090 + platform_set_drvdata(*pdev, pcf);
95091 +
95092 + ret = platform_device_add(*pdev);
95093 + if (ret != 0) {
95094 + dev_err(pcf->dev, "Failed to register %s: %d\n", name, ret);
95095 + platform_device_put(*pdev);
95096 + *pdev = NULL;
95097 + }
95098 +}
95099 +
95100 +#ifdef CONFIG_PM
95101 +static int pcf50606_suspend(struct device *dev, pm_message_t state)
95102 +{
95103 + struct pcf50606 *pcf;
95104 + int ret, i;
95105 + u8 res[3];
95106 +
95107 + pcf = dev_get_drvdata(dev);
95108 +
95109 + /* Make sure our interrupt handlers are not called
95110 + * henceforth */
95111 + disable_irq(pcf->irq);
95112 +
95113 + /* Make sure that an IRQ worker has quit */
95114 + cancel_work_sync(&pcf->irq_work);
95115 +
95116 + /* Save the masks */
95117 + ret = pcf50606_read_block(pcf, PCF50606_REG_INT1M,
95118 + ARRAY_SIZE(pcf->suspend_irq_masks),
95119 + pcf->suspend_irq_masks);
95120 + if (ret < 0)
95121 + dev_err(pcf->dev, "error saving irq masks\n");
95122 +
95123 + /* Set interrupt masks. So that only those sources we want to wake
95124 + * us up can
95125 + */
95126 + for (i = 0; i < ARRAY_SIZE(res); i++)
95127 + res[i] = ~pcf->pdata->resumers[i];
95128 +
95129 + pcf50606_write_block(pcf, PCF50606_REG_INT1M,
95130 + ARRAY_SIZE(res), &res[0]);
95131 +
95132 + pcf->is_suspended = 1;
95133 +
95134 + return 0;
95135 +}
95136 +
95137 +static int pcf50606_resume(struct device *dev)
95138 +{
95139 + struct pcf50606 *pcf;
95140 +
95141 + pcf = dev_get_drvdata(dev);
95142 +
95143 + /* Write the saved mask registers */
95144 + pcf50606_write_block(pcf, PCF50606_REG_INT1M,
95145 + ARRAY_SIZE(pcf->suspend_irq_masks),
95146 + pcf->suspend_irq_masks);
95147 +
95148 + /* Clear any pending interrupts and set resume reason if any */
95149 + pcf50606_irq_worker(&pcf->irq_work);
95150 +
95151 + enable_irq(pcf->irq);
95152 +
95153 + return 0;
95154 +}
95155 +#else
95156 +#define pcf50606_suspend NULL
95157 +#define pcf50606_resume NULL
95158 +#endif
95159 +
95160 +static int pcf50606_probe(struct i2c_client *client,
95161 + const struct i2c_device_id *ids)
95162 +{
95163 + struct pcf50606 *pcf;
95164 + struct pcf50606_platform_data *pdata;
95165 + int i, ret = 0;
95166 + int version, variant;
95167 + u8 mbcs1;
95168 +
95169 + pdata = client->dev.platform_data;
95170 +
95171 + pcf = kzalloc(sizeof(*pcf), GFP_KERNEL);
95172 + if (!pcf)
95173 + return -ENOMEM;
95174 +
95175 + pcf->pdata = pdata;
95176 + pdata->pcf = pcf;
95177 +
95178 + mutex_init(&pcf->lock);
95179 +
95180 + i2c_set_clientdata(client, pcf);
95181 + pcf->dev = &client->dev;
95182 + pcf->i2c_client = client;
95183 +
95184 + INIT_WORK(&pcf->irq_work, pcf50606_irq_worker);
95185 +
95186 + version = pcf50606_reg_read(pcf, 0);
95187 + if (version < 0) {
95188 + dev_err(pcf->dev, "Unable to probe pcf50606\n");
95189 + kfree(pcf);
95190 + return -ENODEV;
95191 + }
95192 +
95193 + variant = pcf50606_reg_read(pcf, 1);
95194 + if (version < 0) {
95195 + dev_err(pcf->dev, "Unable to probe pcf50606\n");
95196 + kfree(pcf);
95197 + return -ENODEV;
95198 + }
95199 +
95200 + dev_info(pcf->dev, "Probed device version %d variant %d\n",
95201 + version, variant);
95202 +
95203 + /* Enable all inteerupts except RTC SECOND */
95204 + pcf->mask_regs[0] = 0x80;
95205 + pcf50606_reg_write(pcf, PCF50606_REG_INT1M, 0x80);
95206 +
95207 + pcf50606_reg_write(pcf, PCF50606_REG_INT2M, 0x00);
95208 + pcf50606_reg_write(pcf, PCF50606_REG_INT3M, 0x00);
95209 +
95210 + pcf50606_client_dev_register(pcf, "pcf50606-input",
95211 + &pcf->input.pdev);
95212 + pcf50606_client_dev_register(pcf, "pcf50606-rtc",
95213 + &pcf->rtc.pdev);
95214 + pcf50606_client_dev_register(pcf, "pcf50606-mbc",
95215 + &pcf->mbc.pdev);
95216 + pcf50606_client_dev_register(pcf, "pcf50606-adc",
95217 + &pcf->adc.pdev);
95218 + pcf50606_client_dev_register(pcf, "pcf50606-wdt",
95219 + &pcf->wdt.pdev);
95220 + for (i = 0; i < PCF50606_NUM_REGULATORS; i++) {
95221 + struct platform_device *pdev;
95222 +
95223 + pdev = platform_device_alloc("pcf50606-regltr", i);
95224 + if (!pdev) {
95225 + dev_err(pcf->dev, "Cannot create regulator\n");
95226 + continue;
95227 + }
95228 +
95229 + pdev->dev.parent = pcf->dev;
95230 + pdev->dev.platform_data = &pdata->reg_init_data[i];
95231 + pdev->dev.driver_data = pcf;
95232 + pcf->pmic.pdev[i] = pdev;
95233 +
95234 + platform_device_add(pdev);
95235 + }
95236 +
95237 + pcf->irq = client->irq;
95238 +
95239 + if (client->irq) {
95240 + ret = request_irq(client->irq, pcf50606_irq,
95241 + IRQF_TRIGGER_FALLING, "pcf50606", pcf);
95242 +
95243 + if (ret) {
95244 + dev_err(pcf->dev, "Failed to request IRQ %d\n", ret);
95245 + goto err;
95246 + }
95247 + } else {
95248 + dev_err(pcf->dev, "No IRQ configured\n");
95249 + goto err;
95250 + }
95251 +
95252 + if (enable_irq_wake(client->irq) < 0)
95253 + dev_err(pcf->dev, "IRQ %u cannot be enabled as wake-up source"
95254 + "in this hardware revision", client->irq);
95255 +
95256 + /* Cold Intialization */
95257 + mbcs1 = pcf50606_reg_read(pcf, PCF50606_REG_MBCS1);
95258 +
95259 + if (mbcs1 & (0x01 << 4)) /* Charger present ? */
95260 + pcf50606_irq_call_handler(pcf, PCF50606_IRQ_CHGINS);
95261 +
95262 + ret = sysfs_create_group(&client->dev.kobj, &pcf_attr_group);
95263 + if (ret)
95264 + dev_err(pcf->dev, "error creating sysfs entries\n");
95265 +
95266 + if (pdata->probe_done)
95267 + pdata->probe_done(pcf);
95268 +
95269 + return 0;
95270 +
95271 +err:
95272 + kfree(pcf);
95273 + return ret;
95274 +}
95275 +
95276 +static int pcf50606_remove(struct i2c_client *client)
95277 +{
95278 + struct pcf50606 *pcf = i2c_get_clientdata(client);
95279 +
95280 + free_irq(pcf->irq, pcf);
95281 + kfree(pcf);
95282 +
95283 + return 0;
95284 +}
95285 +
95286 +static struct i2c_device_id pcf50606_id_table[] = {
95287 + {"pcf50606", 0x73},
95288 +};
95289 +
95290 +static struct i2c_driver pcf50606_driver = {
95291 + .driver = {
95292 + .name = "pcf50606",
95293 + .suspend = pcf50606_suspend,
95294 + .resume = pcf50606_resume,
95295 + },
95296 + .id_table = pcf50606_id_table,
95297 + .probe = pcf50606_probe,
95298 + .remove = pcf50606_remove,
95299 +};
95300 +
95301 +static int __init pcf50606_init(void)
95302 +{
95303 + return i2c_add_driver(&pcf50606_driver);
95304 +}
95305 +
95306 +static void pcf50606_exit(void)
95307 +{
95308 + i2c_del_driver(&pcf50606_driver);
95309 +}
95310 +
95311 +MODULE_DESCRIPTION("I2C chip driver for NXP PCF50606 PMU");
95312 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
95313 +MODULE_LICENSE("GPL");
95314 +
95315 +module_init(pcf50606_init);
95316 +module_exit(pcf50606_exit);
95317 Index: linux-2.6.28/drivers/mfd/pcf50606-gpo.c
95318 ===================================================================
95319 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
95320 +++ linux-2.6.28/drivers/mfd/pcf50606-gpo.c 2009-01-02 00:01:56.000000000 +0100
95321 @@ -0,0 +1,128 @@
95322 +/* Philips PCF50606 GPO Driver
95323 + *
95324 + * (C) 2006-2008 by Openmoko, Inc.
95325 + * Author: Balaji Rao <balajirrao@openmoko.org>
95326 + * All rights reserved.
95327 + *
95328 + * Broken down from monstrous PCF50606 driver mainly by
95329 + * Harald Welte, Andy Green and Werner Almesberger
95330 + *
95331 + * This program is free software; you can redistribute it and/or
95332 + * modify it under the terms of the GNU General Public License as
95333 + * published by the Free Software Foundation; either version 2 of
95334 + * the License, or (at your option) any later version.
95335 + *
95336 + * This program is distributed in the hope that it will be useful,
95337 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
95338 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95339 + * GNU General Public License for more details.
95340 + *
95341 + * You should have received a copy of the GNU General Public License
95342 + * along with this program; if not, write to the Free Software
95343 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
95344 + * MA 02111-1307 USA
95345 + */
95346 +
95347 +#include <linux/mfd/pcf50606/core.h>
95348 +#include <linux/mfd/pcf50606/gpo.h>
95349 +#include <linux/mfd/pcf50606/pmic.h>
95350 +
95351 +void pcf50606_gpo_set_active(struct pcf50606 *pcf, int gpo, int val)
95352 +{
95353 + u8 reg, value, mask;
95354 +
95355 + reg = gpo;
95356 + value = val;
95357 + mask = 0x07;
95358 +
95359 + if (gpo == PCF50606_GPO2) {
95360 + value = val << 4;
95361 + mask = 0x07 << 4;
95362 + }
95363 + pcf50606_reg_set_bit_mask(pcf, reg, mask, value);
95364 +}
95365 +EXPORT_SYMBOL_GPL(pcf50606_gpo_set_active);
95366 +
95367 +int pcf50606_gpo_get_active(struct pcf50606 *pcf, int gpo)
95368 +{
95369 + u8 reg, value, shift = 0;
95370 +
95371 + reg = gpo;
95372 + if (gpo == PCF50606_GPO2)
95373 + shift = 4;
95374 +
95375 + value = pcf50606_reg_read(pcf, reg);
95376 +
95377 + return (value >> shift) & 0x07;
95378 +}
95379 +EXPORT_SYMBOL_GPL(pcf50606_gpo_get_active);
95380 +
95381 +void pcf50606_gpo_set_standby(struct pcf50606 *pcf, int gpo, int val)
95382 +{
95383 + u8 reg;
95384 +
95385 + if (gpo == PCF50606_GPO1 || gpo == PCF50606_GPO2) {
95386 + dev_err(pcf->dev, "Can't set standby settings for GPO[12]n");
95387 + return;
95388 + }
95389 +
95390 + reg = gpo;
95391 +
95392 + pcf50606_reg_set_bit_mask(pcf, gpo, 0x07 << 3, val);
95393 +}
95394 +EXPORT_SYMBOL_GPL(pcf50606_gpo_set_standby);
95395 +
95396 +int pcf50606_gpo_get_standby(struct pcf50606 *pcf, int gpo)
95397 +{
95398 + u8 reg, value;
95399 +
95400 + if (gpo == PCF50606_GPO1 || gpo == PCF50606_GPO2) {
95401 + dev_err(pcf->dev, "Can't get standby settings for GPO[12]n");
95402 + return -EINVAL;
95403 + }
95404 +
95405 + reg = gpo;
95406 + value = pcf50606_reg_read(pcf, reg);
95407 +
95408 + return (value >> 3) & 0x07;
95409 +}
95410 +EXPORT_SYMBOL_GPL(pcf50606_gpo_get_standby);
95411 +
95412 +void pcf50606_gpo_invert_set(struct pcf50606 *pcf, int gpo, int invert)
95413 +{
95414 + u8 reg, value, mask;
95415 +
95416 + reg = gpo;
95417 + value = !!invert << 6;
95418 + mask = 0x01 << 6;
95419 +
95420 + if (gpo == PCF50606_GPO1) {
95421 + mask = 0x01 << 4;
95422 + value = !!invert << 4;
95423 + }
95424 + else if (gpo == PCF50606_GPO2) {
95425 + mask = 0x01 << 7;
95426 + value = !!invert << 7;
95427 + }
95428 +
95429 + pcf50606_reg_set_bit_mask(pcf, reg, mask, value);
95430 +}
95431 +EXPORT_SYMBOL_GPL(pcf50606_gpo_invert_set);
95432 +
95433 +int pcf50606_gpo_invert_get(struct pcf50606 *pcf, int gpo)
95434 +{
95435 + u8 reg, value, shift;
95436 +
95437 + reg = gpo;
95438 + shift = 6;
95439 +
95440 + if (gpo == PCF50606_GPO1)
95441 + shift = 4;
95442 + else if (gpo == PCF50606_GPO2)
95443 + shift = 7;
95444 +
95445 + value = pcf50606_reg_read(pcf, reg);
95446 +
95447 + return (value >> shift) & 0x01;
95448 +}
95449 +EXPORT_SYMBOL_GPL(pcf50606_gpo_invert_get);
95450 Index: linux-2.6.28/drivers/mfd/pcf50633-adc.c
95451 ===================================================================
95452 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
95453 +++ linux-2.6.28/drivers/mfd/pcf50633-adc.c 2009-01-02 00:01:56.000000000 +0100
95454 @@ -0,0 +1,252 @@
95455 +/* Philips PCF50633 ADC Driver
95456 + *
95457 + * (C) 2006-2008 by Openmoko, Inc.
95458 + * Author: Balaji Rao <balajirrao@openmoko.org>
95459 + * All rights reserved.
95460 + *
95461 + * Broken down from monstrous PCF50633 driver mainly by
95462 + * Harald Welte, Andy Green and Werner Almesberger
95463 + *
95464 + * This program is free software; you can redistribute it and/or
95465 + * modify it under the terms of the GNU General Public License as
95466 + * published by the Free Software Foundation; either version 2 of
95467 + * the License, or (at your option) any later version.
95468 + *
95469 + * This program is distributed in the hope that it will be useful,
95470 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
95471 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95472 + * GNU General Public License for more details.
95473 + *
95474 + * You should have received a copy of the GNU General Public License
95475 + * along with this program; if not, write to the Free Software
95476 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
95477 + * MA 02111-1307 USA
95478 + */
95479 +
95480 +/*
95481 + * NOTE: This driver does not yet support subtractive ADC mode, which means
95482 + * you can do only one measurement per read request.
95483 + */
95484 +
95485 +#include <linux/mfd/pcf50633/core.h>
95486 +#include <linux/mfd/pcf50633/adc.h>
95487 +
95488 +struct pcf50633_adc_request {
95489 + int mux;
95490 + int avg;
95491 + int result;
95492 + void (*callback)(struct pcf50633 *, void *, int);
95493 + void *callback_param;
95494 +
95495 + /* Used in case of sync requests */
95496 + struct completion completion;
95497 +
95498 +};
95499 +
95500 +static void adc_read_setup(struct pcf50633 *pcf,
95501 + int channel, int avg)
95502 +{
95503 + channel &= PCF50633_ADCC1_ADCMUX_MASK;
95504 +
95505 + /* kill ratiometric, but enable ACCSW biasing */
95506 + pcf50633_reg_write(pcf, PCF50633_REG_ADCC2, 0x00);
95507 + pcf50633_reg_write(pcf, PCF50633_REG_ADCC3, 0x01);
95508 +
95509 + /* start ADC conversion on selected channel */
95510 + pcf50633_reg_write(pcf, PCF50633_REG_ADCC1, channel | avg |
95511 + PCF50633_ADCC1_ADCSTART | PCF50633_ADCC1_RES_10BIT);
95512 +
95513 +}
95514 +
95515 +static void trigger_next_adc_job_if_any(struct pcf50633 *pcf)
95516 +{
95517 + int head, tail;
95518 +
95519 + mutex_lock(&pcf->adc.queue_mutex);
95520 +
95521 + head = pcf->adc.queue_head;
95522 + tail = pcf->adc.queue_tail;
95523 +
95524 + if (!pcf->adc.queue[head])
95525 + goto out;
95526 +
95527 + adc_read_setup(pcf, pcf->adc.queue[head]->mux,
95528 + pcf->adc.queue[head]->avg);
95529 +out:
95530 + mutex_unlock(&pcf->adc.queue_mutex);
95531 +}
95532 +
95533 +static int
95534 +adc_enqueue_request(struct pcf50633 *pcf, struct pcf50633_adc_request *req)
95535 +{
95536 + int head, tail;
95537 +
95538 + mutex_lock(&pcf->adc.queue_mutex);
95539 + head = pcf->adc.queue_head;
95540 + tail = pcf->adc.queue_tail;
95541 +
95542 + if (pcf->adc.queue[tail]) {
95543 + mutex_unlock(&pcf->adc.queue_mutex);
95544 + return -EBUSY;
95545 + }
95546 +
95547 + pcf->adc.queue[tail] = req;
95548 +
95549 + pcf->adc.queue_tail =
95550 + (tail + 1) & (PCF50633_MAX_ADC_FIFO_DEPTH - 1);
95551 +
95552 + mutex_unlock(&pcf->adc.queue_mutex);
95553 +
95554 + trigger_next_adc_job_if_any(pcf);
95555 +
95556 + return 0;
95557 +}
95558 +
95559 +static void
95560 +pcf50633_adc_sync_read_callback(struct pcf50633 *pcf, void *param, int result)
95561 +{
95562 + struct pcf50633_adc_request *req;
95563 +
95564 + /*We know here that the passed param is an adc_request object */
95565 + req = (struct pcf50633_adc_request *)param;
95566 +
95567 + req->result = result;
95568 + complete(&req->completion);
95569 +}
95570 +
95571 +int pcf50633_adc_sync_read(struct pcf50633 *pcf, int mux, int avg)
95572 +{
95573 +
95574 + struct pcf50633_adc_request *req;
95575 + int result;
95576 +
95577 + /* req is freed when the result is ready, in interrupt handler */
95578 + req = kzalloc(sizeof(*req), GFP_KERNEL);
95579 + if (!req)
95580 + return -ENOMEM;
95581 +
95582 + req->mux = mux;
95583 + req->avg = avg;
95584 + req->callback = pcf50633_adc_sync_read_callback;
95585 + req->callback_param = req;
95586 + init_completion(&req->completion);
95587 +
95588 + adc_enqueue_request(pcf, req);
95589 +
95590 + wait_for_completion(&req->completion);
95591 + result = req->result;
95592 +
95593 + return result;
95594 +}
95595 +EXPORT_SYMBOL_GPL(pcf50633_adc_sync_read);
95596 +
95597 +int pcf50633_adc_async_read(struct pcf50633 *pcf, int mux, int avg,
95598 + void (*callback)(struct pcf50633 *, void *, int),
95599 + void *callback_param)
95600 +{
95601 + struct pcf50633_adc_request *req;
95602 +
95603 + /* req is freed when the result is ready, in interrupt handler */
95604 + req = kmalloc(sizeof(*req), GFP_KERNEL);
95605 + if (!req)
95606 + return -ENOMEM;
95607 +
95608 + req->mux = mux;
95609 + req->avg = avg;
95610 + req->callback = callback;
95611 + req->callback_param = callback_param;
95612 +
95613 + adc_enqueue_request(pcf, req);
95614 +
95615 + return 0;
95616 +}
95617 +EXPORT_SYMBOL_GPL(pcf50633_adc_async_read);
95618 +
95619 +static int adc_result(struct pcf50633 *pcf)
95620 +{
95621 + u8 adcs1, adcs3;
95622 + u16 result;
95623 +
95624 + adcs1 = pcf50633_reg_read(pcf, PCF50633_REG_ADCS1);
95625 + adcs3 = pcf50633_reg_read(pcf, PCF50633_REG_ADCS3);
95626 + result = (adcs1 << 2) | (adcs3 & PCF50633_ADCS3_ADCDAT1L_MASK);
95627 +
95628 + dev_info(pcf->dev, "adc result = %d\n", result);
95629 +
95630 + return result;
95631 +}
95632 +
95633 +static void pcf50633_adc_irq(struct pcf50633 *pcf, int irq, void *unused)
95634 +{
95635 + struct pcf50633_adc_request *req;
95636 + int head;
95637 +
95638 + mutex_lock(&pcf->adc.queue_mutex);
95639 + head = pcf->adc.queue_head;
95640 +
95641 + req = pcf->adc.queue[head];
95642 + if (!req) {
95643 + dev_err(pcf->dev, "ADC queue empty\n");
95644 + mutex_unlock(&pcf->adc.queue_mutex);
95645 + return;
95646 + }
95647 + pcf->adc.queue[head] = NULL;
95648 + pcf->adc.queue_head = (head + 1) &
95649 + (PCF50633_MAX_ADC_FIFO_DEPTH - 1);
95650 +
95651 + mutex_unlock(&pcf->adc.queue_mutex);
95652 + req->callback(pcf, req->callback_param, adc_result(pcf));
95653 +
95654 + kfree(req);
95655 +
95656 + trigger_next_adc_job_if_any(pcf);
95657 +}
95658 +
95659 +int __init pcf50633_adc_probe(struct platform_device *pdev)
95660 +{
95661 + struct pcf50633 *pcf;
95662 +
95663 + pcf = platform_get_drvdata(pdev);
95664 +
95665 + /* Set up IRQ handlers */
95666 + pcf->irq_handler[PCF50633_IRQ_ADCRDY].handler = pcf50633_adc_irq;
95667 +
95668 + mutex_init(&pcf->adc.queue_mutex);
95669 + return 0;
95670 +}
95671 +
95672 +static int __devexit pcf50633_adc_remove(struct platform_device *pdev)
95673 +{
95674 + struct pcf50633 *pcf;
95675 +
95676 + pcf = platform_get_drvdata(pdev);
95677 + pcf->irq_handler[PCF50633_IRQ_ADCRDY].handler = NULL;
95678 +
95679 + return 0;
95680 +}
95681 +
95682 +struct platform_driver pcf50633_adc_driver = {
95683 + .driver = {
95684 + .name = "pcf50633-adc",
95685 + },
95686 + .probe = pcf50633_adc_probe,
95687 + .remove = __devexit_p(pcf50633_adc_remove),
95688 +};
95689 +
95690 +static int __init pcf50633_adc_init(void)
95691 +{
95692 + return platform_driver_register(&pcf50633_adc_driver);
95693 +}
95694 +module_init(pcf50633_adc_init);
95695 +
95696 +static void __exit pcf50633_adc_exit(void)
95697 +{
95698 + platform_driver_unregister(&pcf50633_adc_driver);
95699 +}
95700 +module_exit(pcf50633_adc_exit);
95701 +
95702 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
95703 +MODULE_DESCRIPTION("PCF50633 adc driver");
95704 +MODULE_LICENSE("GPL");
95705 +MODULE_ALIAS("platform:pcf50633-adc");
95706 +
95707 Index: linux-2.6.28/drivers/mfd/pcf50633-core.c
95708 ===================================================================
95709 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
95710 +++ linux-2.6.28/drivers/mfd/pcf50633-core.c 2009-01-02 00:01:56.000000000 +0100
95711 @@ -0,0 +1,627 @@
95712 +/* Philips PCF50633 Power Management Unit (PMU) driver
95713 + *
95714 + * (C) 2006-2008 by Openmoko, Inc.
95715 + * Author: Harald Welte <laforge@openmoko.org>
95716 + * All rights reserved.
95717 + *
95718 + * This program is free software; you can redistribute it and/or
95719 + * modify it under the terms of the GNU General Public License as
95720 + * published by the Free Software Foundation; either version 2 of
95721 + * the License, or (at your option) any later version.
95722 + *
95723 + * This program is distributed in the hope that it will be useful,
95724 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
95725 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
95726 + * GNU General Public License for more details.
95727 + *
95728 + * You should have received a copy of the GNU General Public License
95729 + * along with this program; if not, write to the Free Software
95730 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
95731 + * MA 02111-1307 USA
95732 + *
95733 + */
95734 +#include <linux/i2c.h>
95735 +#include <linux/irq.h>
95736 +#include <linux/device.h>
95737 +#include <linux/module.h>
95738 +#include <linux/reboot.h>
95739 +#include <linux/interrupt.h>
95740 +#include <linux/workqueue.h>
95741 +#include <linux/platform_device.h>
95742 +
95743 +#include <linux/mfd/pcf50633/core.h>
95744 +
95745 +/* Read a block of upto 32 regs */
95746 +int pcf50633_read_block(struct pcf50633 *pcf , u8 reg,
95747 + int nr_regs, u8 *data)
95748 +{
95749 + int ret;
95750 +
95751 + mutex_lock(&pcf->lock);
95752 + ret = i2c_smbus_read_i2c_block_data(pcf->i2c_client, reg,
95753 + nr_regs, data);
95754 + mutex_unlock(&pcf->lock);
95755 +
95756 + return ret;
95757 +}
95758 +EXPORT_SYMBOL_GPL(pcf50633_read_block);
95759 +
95760 +/* Write a block of upto 32 regs */
95761 +int pcf50633_write_block(struct pcf50633 *pcf , u8 reg,
95762 + int nr_regs, u8 *data)
95763 +{
95764 + int ret;
95765 +
95766 + mutex_lock(&pcf->lock);
95767 + ret = i2c_smbus_write_i2c_block_data(pcf->i2c_client, reg,
95768 + nr_regs, data);
95769 + mutex_unlock(&pcf->lock);
95770 +
95771 + return ret;
95772 +}
95773 +EXPORT_SYMBOL_GPL(pcf50633_write_block);
95774 +
95775 +u8 pcf50633_reg_read(struct pcf50633 *pcf, u8 reg)
95776 +{
95777 + int ret;
95778 +
95779 + mutex_lock(&pcf->lock);
95780 + ret = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
95781 + mutex_unlock(&pcf->lock);
95782 +
95783 + return ret;
95784 +}
95785 +EXPORT_SYMBOL_GPL(pcf50633_reg_read);
95786 +
95787 +int pcf50633_reg_write(struct pcf50633 *pcf, u8 reg, u8 val)
95788 +{
95789 + int ret;
95790 + mutex_lock(&pcf->lock);
95791 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, val);
95792 + mutex_unlock(&pcf->lock);
95793 +
95794 + return ret;
95795 +}
95796 +EXPORT_SYMBOL_GPL(pcf50633_reg_write);
95797 +
95798 +int pcf50633_reg_set_bit_mask(struct pcf50633 *pcf, u8 reg, u8 mask, u8 val)
95799 +{
95800 + int ret;
95801 + u8 tmp;
95802 +
95803 + val &= mask;
95804 +
95805 + mutex_lock(&pcf->lock);
95806 +
95807 + tmp = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
95808 + tmp &= ~mask;
95809 + tmp |= val;
95810 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, tmp);
95811 +
95812 + mutex_unlock(&pcf->lock);
95813 +
95814 + return ret;
95815 +}
95816 +EXPORT_SYMBOL_GPL(pcf50633_reg_set_bit_mask);
95817 +
95818 +int pcf50633_reg_clear_bits(struct pcf50633 *pcf, u8 reg, u8 val)
95819 +{
95820 + int ret;
95821 + u8 tmp;
95822 +
95823 + mutex_lock(&pcf->lock);
95824 +
95825 + tmp = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
95826 + tmp &= ~val;
95827 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, tmp);
95828 +
95829 + mutex_unlock(&pcf->lock);
95830 +
95831 + return ret;
95832 +}
95833 +EXPORT_SYMBOL_GPL(pcf50633_reg_clear_bits);
95834 +
95835 +/* sysfs attributes */
95836 +static ssize_t show_dump_regs(struct device *dev, struct device_attribute *attr,
95837 + char *buf)
95838 +{
95839 + struct pcf50633 *pcf = dev_get_drvdata(dev);
95840 + u8 dump[16];
95841 + int n, n1, idx = 0;
95842 + char *buf1 = buf;
95843 + static u8 address_no_read[] = { /* must be ascending */
95844 + PCF50633_REG_INT1,
95845 + PCF50633_REG_INT2,
95846 + PCF50633_REG_INT3,
95847 + PCF50633_REG_INT4,
95848 + PCF50633_REG_INT5,
95849 + 0 /* terminator */
95850 + };
95851 +
95852 + for (n = 0; n < 256; n += sizeof(dump)) {
95853 + for (n1 = 0; n1 < sizeof(dump); n1++)
95854 + if (n == address_no_read[idx]) {
95855 + idx++;
95856 + dump[n1] = 0x00;
95857 + } else
95858 + dump[n1] = pcf50633_reg_read(pcf, n + n1);
95859 +
95860 + hex_dump_to_buffer(dump, sizeof(dump), 16, 1, buf1, 128, 0);
95861 + buf1 += strlen(buf1);
95862 + *buf1++ = '\n';
95863 + *buf1 = '\0';
95864 + }
95865 +
95866 + return buf1 - buf;
95867 +}
95868 +static DEVICE_ATTR(dump_regs, 0400, show_dump_regs, NULL);
95869 +
95870 +static ssize_t show_resume_reason(struct device *dev,
95871 + struct device_attribute *attr, char *buf)
95872 +{
95873 + struct pcf50633 *pcf = dev_get_drvdata(dev);
95874 + int n;
95875 +
95876 + n = sprintf(buf, "%02x%02x%02x%02x%02x\n",
95877 + pcf->resume_reason[0],
95878 + pcf->resume_reason[1],
95879 + pcf->resume_reason[2],
95880 + pcf->resume_reason[3],
95881 + pcf->resume_reason[4]);
95882 +
95883 + return n;
95884 +}
95885 +static DEVICE_ATTR(resume_reason, 0400, show_resume_reason, NULL);
95886 +
95887 +static struct attribute *pcf_sysfs_entries[] = {
95888 + &dev_attr_dump_regs.attr,
95889 + &dev_attr_resume_reason.attr,
95890 + NULL,
95891 +};
95892 +
95893 +static struct attribute_group pcf_attr_group = {
95894 + .name = NULL, /* put in device directory */
95895 + .attrs = pcf_sysfs_entries,
95896 +};
95897 +
95898 +
95899 +static int pcf50633_irq_mask_set(struct pcf50633 *pcf, int irq, int mask)
95900 +{
95901 + u8 reg, bits, tmp;
95902 + int ret = 0, idx;
95903 +
95904 + idx = irq / 8;
95905 + reg = PCF50633_REG_INT1M + idx;
95906 + bits = 1 << (irq % 8);
95907 +
95908 + mutex_lock(&pcf->lock);
95909 +
95910 + if (mask) {
95911 + tmp = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
95912 + tmp |= bits;
95913 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, tmp);
95914 +
95915 + pcf->mask_regs[idx] &= ~bits;
95916 + pcf->mask_regs[idx] |= bits;
95917 + } else {
95918 + tmp = i2c_smbus_read_byte_data(pcf->i2c_client, reg);
95919 + tmp &= ~bits;
95920 + ret = i2c_smbus_write_byte_data(pcf->i2c_client, reg, tmp);
95921 +
95922 + pcf->mask_regs[idx] &= ~bits;
95923 + }
95924 +
95925 + mutex_unlock(&pcf->lock);
95926 +
95927 + return 0;
95928 +}
95929 +
95930 +int pcf50633_irq_mask(struct pcf50633 *pcf, int irq)
95931 +{
95932 + dev_info(pcf->dev, "Masking IRQ %d\n", irq);
95933 +
95934 + return pcf50633_irq_mask_set(pcf, irq, 1);
95935 +}
95936 +EXPORT_SYMBOL_GPL(pcf50633_irq_mask);
95937 +
95938 +int pcf50633_irq_unmask(struct pcf50633 *pcf, int irq)
95939 +{
95940 + dev_info(pcf->dev, "Unmasking IRQ %d\n", irq);
95941 +
95942 + return pcf50633_irq_mask_set(pcf, irq, 0);
95943 +}
95944 +EXPORT_SYMBOL_GPL(pcf50633_irq_unmask);
95945 +
95946 +int pcf50633_irq_mask_get(struct pcf50633 *pcf, int irq)
95947 +{
95948 + u8 reg, bits;
95949 +
95950 + reg = (irq / 8);
95951 + bits = (1 << (irq % 8));
95952 +
95953 + return pcf->mask_regs[reg] & bits;
95954 +}
95955 +EXPORT_SYMBOL_GPL(pcf50633_irq_mask_get);
95956 +
95957 +static void pcf50633_irq_call_handler(struct pcf50633 *pcf,
95958 + int irq)
95959 +{
95960 + if (pcf->irq_handler[irq].handler) {
95961 + pcf->irq_handler[irq].handler(pcf, irq,
95962 + pcf->irq_handler[irq].data);
95963 + }
95964 +}
95965 +
95966 +#define PCF50633_ONKEY1S_TIMEOUT 8
95967 +
95968 +static void pcf50633_irq_worker(struct work_struct *work)
95969 +{
95970 + struct pcf50633 *pcf;
95971 + int ret, i, j;
95972 + u8 pcf_int[5], chgstat;
95973 +
95974 + pcf = container_of(work, struct pcf50633, irq_work);
95975 +
95976 + /* Read the 5 INT regs in one transaction */
95977 + ret = pcf50633_read_block(pcf, PCF50633_REG_INT1,
95978 + sizeof(pcf_int), pcf_int);
95979 + if (ret != sizeof(pcf_int)) {
95980 + dev_info(pcf->dev, "Error reading INT registers\n");
95981 +
95982 + /* We don't have an option but to retry. Because if
95983 + * we don't, there won't be another interrupt edge.
95984 + */
95985 + goto reschedule;
95986 + }
95987 +
95988 + pcf50633_reg_write(pcf, PCF50633_REG_OOCSHDWN, 0x04 ); /* defeat 8s death from lowsys on A5 */
95989 +
95990 + /* We immediately read the usb and adapter status. We thus make sure
95991 + * only of USBINS/USBREM and ADAPINS/ADPREM IRQ handlers are called */
95992 + if (pcf_int[0] & (PCF50633_INT1_USBINS | PCF50633_INT1_USBREM)) {
95993 + chgstat = pcf50633_reg_read(pcf, PCF50633_REG_MBCS2);
95994 + if (chgstat & (0x3 << 4))
95995 + pcf_int[0] &= ~(1 << PCF50633_INT1_USBREM);
95996 + else
95997 + pcf_int[0] &= ~(1 << PCF50633_INT1_USBINS);
95998 + }
95999 +
96000 + if (pcf_int[0] & (PCF50633_INT1_ADPINS | PCF50633_INT1_ADPREM)) {
96001 + chgstat = pcf50633_reg_read(pcf, PCF50633_REG_MBCS2);
96002 + if (chgstat & (0x3 << 4))
96003 + pcf_int[0] &= ~(1 << PCF50633_INT1_ADPREM);
96004 + else
96005 + pcf_int[0] &= ~(1 << PCF50633_INT1_ADPINS);
96006 + }
96007 +
96008 + dev_info(pcf->dev, "INT1=0x%02x INT2=0x%02x INT3=0x%02x "
96009 + "INT4=0x%02x INT5=0x%02x\n", pcf_int[0],
96010 + pcf_int[1], pcf_int[2], pcf_int[3], pcf_int[4]);
96011 +
96012 + /* Some revisions of the chip don't have a 8s standby mode on
96013 + * ONKEY1S press. We try to manually do it in such cases. */
96014 +
96015 + if ((pcf_int[0] & PCF50633_INT1_SECOND) && pcf->onkey1s_held) {
96016 + dev_info(pcf->dev, "ONKEY1S held for %d secs\n",
96017 + pcf->onkey1s_held);
96018 + if (pcf->onkey1s_held++ == PCF50633_ONKEY1S_TIMEOUT)
96019 + if (pcf->pdata->force_shutdown)
96020 + pcf->pdata->force_shutdown(pcf);
96021 + }
96022 +
96023 + if (pcf_int[2] & PCF50633_INT3_ONKEY1S) {
96024 + dev_info(pcf->dev, "ONKEY1S held\n");
96025 + pcf->onkey1s_held = 1 ;
96026 +
96027 + /* Unmask IRQ_SECOND */
96028 + pcf50633_reg_clear_bits(pcf, PCF50633_REG_INT1M,
96029 + PCF50633_INT1_SECOND);
96030 +
96031 + /* Unmask IRQ_ONKEYR */
96032 + pcf50633_reg_clear_bits(pcf, PCF50633_REG_INT2M,
96033 + PCF50633_INT2_ONKEYR);
96034 + }
96035 +
96036 + if ((pcf_int[1] & PCF50633_INT2_ONKEYR) && pcf->onkey1s_held) {
96037 + pcf->onkey1s_held = 0;
96038 +
96039 + /* Mask SECOND and ONKEYR interrupts */
96040 + if (pcf->mask_regs[0] & PCF50633_INT1_SECOND)
96041 + pcf50633_reg_set_bit_mask(pcf,
96042 + PCF50633_REG_INT1M,
96043 + PCF50633_INT1_SECOND,
96044 + PCF50633_INT1_SECOND);
96045 +
96046 + if (pcf->mask_regs[1] & PCF50633_INT2_ONKEYR)
96047 + pcf50633_reg_set_bit_mask(pcf,
96048 + PCF50633_REG_INT2M,
96049 + PCF50633_INT2_ONKEYR,
96050 + PCF50633_INT2_ONKEYR);
96051 + }
96052 +
96053 + /* Have we just resumed ? */
96054 + if (pcf->is_suspended) {
96055 +
96056 + pcf->is_suspended = 0;
96057 +
96058 + /* Set the resume reason filtering out non resumers */
96059 + for (i = 0; i < ARRAY_SIZE(pcf_int); i++)
96060 + pcf->resume_reason[i] = pcf_int[i] &
96061 + pcf->pdata->resumers[i];
96062 +
96063 + /* Make sure we don't pass on any ONKEY events to
96064 + * userspace now */
96065 + pcf_int[1] &= ~ (PCF50633_INT2_ONKEYR | PCF50633_INT2_ONKEYF);
96066 + }
96067 +
96068 + /* Unset masked interrupts */
96069 + for (i = 0; i < ARRAY_SIZE(pcf_int); i++) {
96070 + pcf_int[i] &= ~pcf->mask_regs[i];
96071 + for (j = 0; j < 8 ; j++)
96072 + if (pcf_int[i] & (1 << j))
96073 + pcf50633_irq_call_handler(pcf, (i * 8) + j);
96074 + }
96075 +
96076 + put_device(pcf->dev);
96077 +
96078 + enable_irq(pcf->irq);
96079 +
96080 + return;
96081 +reschedule:
96082 + schedule_work(&pcf->irq_work);
96083 +
96084 + /* Don't put_device here. Will be used when we are rescheduled */
96085 +
96086 + return;
96087 +}
96088 +
96089 +static irqreturn_t pcf50633_irq(int irq, void *data)
96090 +{
96091 + struct pcf50633 *pcf = data;
96092 +
96093 + get_device(pcf->dev);
96094 +
96095 + disable_irq(pcf->irq);
96096 +
96097 + schedule_work(&pcf->irq_work);
96098 +
96099 + return IRQ_HANDLED;
96100 +}
96101 +
96102 +static void
96103 +pcf50633_client_dev_register(struct pcf50633 *pcf, const char *name,
96104 + struct platform_device **pdev)
96105 +{
96106 + int ret;
96107 +
96108 + *pdev = platform_device_alloc(name, -1);
96109 +
96110 + if (!pdev) {
96111 + dev_err(pcf->dev, "Falied to allocate %s\n", name);
96112 + return;
96113 + }
96114 +
96115 + (*pdev)->dev.parent = pcf->dev;
96116 + platform_set_drvdata(*pdev, pcf);
96117 +
96118 + ret = platform_device_add(*pdev);
96119 + if (ret != 0) {
96120 + dev_err(pcf->dev, "Failed to register %s: %d\n", name, ret);
96121 + platform_device_put(*pdev);
96122 + *pdev = NULL;
96123 + }
96124 +}
96125 +
96126 +#ifdef CONFIG_PM
96127 +static int pcf50633_suspend(struct device *dev, pm_message_t state)
96128 +{
96129 + struct pcf50633 *pcf;
96130 + int ret, i;
96131 + u8 res[5];
96132 +
96133 + pcf = dev_get_drvdata(dev);
96134 +
96135 + /* Make sure our interrupt handlers are not called
96136 + * henceforth */
96137 + disable_irq(pcf->irq);
96138 +
96139 + /* Make sure that an IRQ worker has quit */
96140 + cancel_work_sync(&pcf->irq_work);
96141 +
96142 + /* Save the masks */
96143 + ret = pcf50633_read_block(pcf, PCF50633_REG_INT1M,
96144 + ARRAY_SIZE(pcf->suspend_irq_masks),
96145 + pcf->suspend_irq_masks);
96146 + if (ret < 0)
96147 + dev_err(pcf->dev, "error saving irq masks\n");
96148 +
96149 + /* Set interrupt masks. So that only those sources we want to wake
96150 + * us up can
96151 + */
96152 + for (i = 0; i < ARRAY_SIZE(res); i++)
96153 + res[i] = ~pcf->pdata->resumers[i];
96154 +
96155 + pcf50633_write_block(pcf, PCF50633_REG_INT1M, ARRAY_SIZE(res), &res[0]);
96156 +
96157 + pcf->is_suspended = 1;
96158 +
96159 + return 0;
96160 +}
96161 +
96162 +static int pcf50633_resume(struct device *dev)
96163 +{
96164 + struct pcf50633 *pcf;
96165 +
96166 + pcf = dev_get_drvdata(dev);
96167 +
96168 + /* Write the saved mask registers */
96169 + pcf50633_write_block(pcf, PCF50633_REG_INT1M,
96170 + ARRAY_SIZE(pcf->suspend_irq_masks),
96171 + pcf->suspend_irq_masks);
96172 +
96173 + get_device(pcf->dev);
96174 +
96175 + /*
96176 + * Clear any pending interrupts and set resume reason if any.
96177 + * This will leave with enable_irq()
96178 + */
96179 + pcf50633_irq_worker(&pcf->irq_work);
96180 +
96181 + return 0;
96182 +}
96183 +#else
96184 +#define pcf50633_suspend NULL
96185 +#define pcf50633_resume NULL
96186 +#endif
96187 +
96188 +static int pcf50633_probe(struct i2c_client *client,
96189 + const struct i2c_device_id *ids)
96190 +{
96191 + struct pcf50633 *pcf;
96192 + struct pcf50633_platform_data *pdata;
96193 + int i, ret = 0;
96194 + int version;
96195 + int variant;
96196 +
96197 + pdata = client->dev.platform_data;
96198 +
96199 + pcf = kzalloc(sizeof(*pcf), GFP_KERNEL);
96200 + if (!pcf)
96201 + return -ENOMEM;
96202 +
96203 + pcf->pdata = pdata;
96204 + pdata->pcf = pcf;
96205 +
96206 + mutex_init(&pcf->lock);
96207 +
96208 + i2c_set_clientdata(client, pcf);
96209 + pcf->dev = &client->dev;
96210 + pcf->i2c_client = client;
96211 +
96212 + INIT_WORK(&pcf->irq_work, pcf50633_irq_worker);
96213 +
96214 + version = pcf50633_reg_read(pcf, 0);
96215 + if (version < 0) {
96216 + dev_err(pcf->dev, "Unable to probe pcf50633\n");
96217 + kfree(pcf);
96218 + return -ENODEV;
96219 + }
96220 +
96221 + variant = pcf50633_reg_read(pcf, 1);
96222 + if (variant < 0) {
96223 + dev_err(pcf->dev, "Unable to probe pcf50633\n");
96224 + kfree(pcf);
96225 + return -ENODEV;
96226 + }
96227 +
96228 + dev_info(pcf->dev, "Probed device version %d variant %d\n",
96229 + version, variant);
96230 +
96231 + /* Enable all inteerupts except RTC SECOND */
96232 + pcf->mask_regs[0] = 0x80;
96233 + pcf50633_reg_write(pcf, PCF50633_REG_INT1M, 0x80);
96234 +
96235 + pcf50633_reg_write(pcf, PCF50633_REG_INT2M, 0x00);
96236 + pcf50633_reg_write(pcf, PCF50633_REG_INT3M, 0x00);
96237 + pcf50633_reg_write(pcf, PCF50633_REG_INT4M, 0x00);
96238 + pcf50633_reg_write(pcf, PCF50633_REG_INT5M, 0x00);
96239 +
96240 + pcf50633_client_dev_register(pcf, "pcf50633-input",
96241 + &pcf->input.pdev);
96242 + pcf50633_client_dev_register(pcf, "pcf50633-rtc",
96243 + &pcf->rtc.pdev);
96244 + pcf50633_client_dev_register(pcf, "pcf50633-mbc",
96245 + &pcf->mbc.pdev);
96246 + pcf50633_client_dev_register(pcf, "pcf50633-adc",
96247 + &pcf->adc.pdev);
96248 + for (i = 0; i < PCF50633_NUM_REGULATORS; i++) {
96249 + struct platform_device *pdev;
96250 +
96251 + pdev = platform_device_alloc("pcf50633-regltr", i);
96252 + if (!pdev) {
96253 + dev_err(pcf->dev, "Cannot create regulator\n");
96254 + continue;
96255 + }
96256 +
96257 + pdev->dev.parent = pcf->dev;
96258 + pdev->dev.platform_data = &pdata->reg_init_data[i];
96259 + pdev->dev.driver_data = pcf;
96260 + pcf->pmic.pdev[i] = pdev;
96261 +
96262 + platform_device_add(pdev);
96263 + }
96264 +
96265 + pcf->irq = client->irq;
96266 +
96267 + if (client->irq) {
96268 + ret = request_irq(client->irq, pcf50633_irq,
96269 + IRQF_TRIGGER_LOW, "pcf50633", pcf);
96270 +
96271 + if (ret) {
96272 + dev_err(pcf->dev, "Failed to request IRQ %d\n", ret);
96273 + goto err;
96274 + }
96275 + } else {
96276 + dev_err(pcf->dev, "No IRQ configured\n");
96277 + goto err;
96278 + }
96279 +
96280 + if (enable_irq_wake(client->irq) < 0)
96281 + dev_err(pcf->dev, "IRQ %u cannot be enabled as wake-up "
96282 + "source in this hardware revision\n", client->irq);
96283 +
96284 + ret = sysfs_create_group(&client->dev.kobj, &pcf_attr_group);
96285 + if (ret)
96286 + dev_err(pcf->dev, "error creating sysfs entries\n");
96287 +
96288 + if (pdata->probe_done)
96289 + pdata->probe_done(pcf);
96290 +
96291 + return 0;
96292 +
96293 +err:
96294 + kfree(pcf);
96295 + return ret;
96296 +}
96297 +
96298 +static int pcf50633_remove(struct i2c_client *client)
96299 +{
96300 + struct pcf50633 *pcf = i2c_get_clientdata(client);
96301 +
96302 + free_irq(pcf->irq, pcf);
96303 + kfree(pcf);
96304 +
96305 + return 0;
96306 +}
96307 +
96308 +static struct i2c_device_id pcf50633_id_table[] = {
96309 + {"pcf50633", 0x73},
96310 +};
96311 +
96312 +static struct i2c_driver pcf50633_driver = {
96313 + .driver = {
96314 + .name = "pcf50633",
96315 + .suspend = pcf50633_suspend,
96316 + .resume = pcf50633_resume,
96317 + },
96318 + .id_table = pcf50633_id_table,
96319 + .probe = pcf50633_probe,
96320 + .remove = pcf50633_remove,
96321 +};
96322 +
96323 +static int __init pcf50633_init(void)
96324 +{
96325 + return i2c_add_driver(&pcf50633_driver);
96326 +}
96327 +
96328 +static void pcf50633_exit(void)
96329 +{
96330 + i2c_del_driver(&pcf50633_driver);
96331 +}
96332 +
96333 +MODULE_DESCRIPTION("I2C chip driver for NXP PCF50633 PMU");
96334 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
96335 +MODULE_LICENSE("GPL");
96336 +
96337 +module_init(pcf50633_init);
96338 +module_exit(pcf50633_exit);
96339 Index: linux-2.6.28/drivers/mfd/pcf50633-gpio.c
96340 ===================================================================
96341 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
96342 +++ linux-2.6.28/drivers/mfd/pcf50633-gpio.c 2009-01-02 00:01:56.000000000 +0100
96343 @@ -0,0 +1,100 @@
96344 +/* Philips PCF50633 GPIO Driver
96345 + *
96346 + * (C) 2006-2008 by Openmoko, Inc.
96347 + * Author: Balaji Rao <balajirrao@openmoko.org>
96348 + * All rights reserved.
96349 + *
96350 + * Broken down from monstrous PCF50633 driver mainly by
96351 + * Harald Welte, Andy Green and Werner Almesberger
96352 + *
96353 + * This program is free software; you can redistribute it and/or
96354 + * modify it under the terms of the GNU General Public License as
96355 + * published by the Free Software Foundation; either version 2 of
96356 + * the License, or (at your option) any later version.
96357 + *
96358 + * This program is distributed in the hope that it will be useful,
96359 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
96360 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96361 + * GNU General Public License for more details.
96362 + *
96363 + * You should have received a copy of the GNU General Public License
96364 + * along with this program; if not, write to the Free Software
96365 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
96366 + * MA 02111-1307 USA
96367 + */
96368 +
96369 +#include <linux/mfd/pcf50633/core.h>
96370 +#include <linux/mfd/pcf50633/gpio.h>
96371 +#include <linux/mfd/pcf50633/pmic.h>
96372 +
96373 +void pcf50633_gpio_set(struct pcf50633 *pcf, int gpio, int val)
96374 +{
96375 + u8 reg;
96376 +
96377 + reg = gpio - PCF50633_GPIO1 + PCF50633_REG_GPIO1CFG;
96378 +
96379 + pcf50633_reg_set_bit_mask(pcf, reg, 0x07, val);
96380 +}
96381 +EXPORT_SYMBOL_GPL(pcf50633_gpio_set);
96382 +
96383 +int pcf50633_gpio_get(struct pcf50633 *pcf, int gpio)
96384 +{
96385 + u8 reg, val;
96386 +
96387 + reg = gpio - PCF50633_GPIO1 + PCF50633_REG_GPIO1CFG;
96388 + val = pcf50633_reg_read(pcf, reg) & 0x07;
96389 +
96390 + return val;
96391 +}
96392 +EXPORT_SYMBOL_GPL(pcf50633_gpio_get);
96393 +
96394 +void pcf50633_gpio_invert_set(struct pcf50633 *pcf, int gpio, int invert)
96395 +{
96396 + u8 val, reg;
96397 +
96398 + reg = gpio - PCF50633_GPIO1 + PCF50633_REG_GPIO1CFG;
96399 + val = !!invert << 3;
96400 +
96401 + pcf50633_reg_set_bit_mask(pcf, reg, 1 << 3, val);
96402 +}
96403 +EXPORT_SYMBOL_GPL(pcf50633_gpio_invert_set);
96404 +
96405 +int pcf50633_gpio_invert_get(struct pcf50633 *pcf, int gpio)
96406 +{
96407 + u8 reg, val;
96408 +
96409 + reg = gpio - PCF50633_GPIO1 + PCF50633_REG_GPIO1CFG;
96410 + val = pcf50633_reg_read(pcf, reg);
96411 +
96412 + return val & (1 << 3);
96413 +}
96414 +EXPORT_SYMBOL_GPL(pcf50633_gpio_invert_get);
96415 +
96416 +static const u8 pcf50633_regulator_registers[PCF50633_NUM_REGULATORS] = {
96417 + [PCF50633_REGULATOR_AUTO] = PCF50633_REG_AUTOOUT,
96418 + [PCF50633_REGULATOR_DOWN1] = PCF50633_REG_DOWN1OUT,
96419 + [PCF50633_REGULATOR_DOWN2] = PCF50633_REG_DOWN2OUT,
96420 + [PCF50633_REGULATOR_MEMLDO] = PCF50633_REG_MEMLDOOUT,
96421 + [PCF50633_REGULATOR_LDO1] = PCF50633_REG_LDO1OUT,
96422 + [PCF50633_REGULATOR_LDO2] = PCF50633_REG_LDO2OUT,
96423 + [PCF50633_REGULATOR_LDO3] = PCF50633_REG_LDO3OUT,
96424 + [PCF50633_REGULATOR_LDO4] = PCF50633_REG_LDO4OUT,
96425 + [PCF50633_REGULATOR_LDO5] = PCF50633_REG_LDO5OUT,
96426 + [PCF50633_REGULATOR_LDO6] = PCF50633_REG_LDO6OUT,
96427 + [PCF50633_REGULATOR_HCLDO] = PCF50633_REG_HCLDOOUT,
96428 +};
96429 +
96430 +void pcf50633_gpio_power_supply_set(struct pcf50633 *pcf,
96431 + int gpio, int regulator, int on)
96432 +{
96433 + u8 reg, val, mask;
96434 +
96435 + /* the *ENA register is always one after the *OUT register */
96436 + reg = pcf50633_regulator_registers[regulator] + 1;
96437 +
96438 + val = (!!on << (gpio - PCF50633_GPIO1));
96439 + mask = (1 << (gpio - PCF50633_GPIO1));
96440 +
96441 + pcf50633_reg_set_bit_mask(pcf, reg, mask, val);
96442 +}
96443 +EXPORT_SYMBOL_GPL(pcf50633_gpio_power_supply_set);
96444 Index: linux-2.6.28/drivers/mfd/pcf50633-i2c.c
96445 ===================================================================
96446 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
96447 +++ linux-2.6.28/drivers/mfd/pcf50633-i2c.c 2009-01-02 00:01:56.000000000 +0100
96448 @@ -0,0 +1,3 @@
96449 +
96450 +};
96451 +
96452 Index: linux-2.6.28/drivers/misc/Kconfig
96453 ===================================================================
96454 --- linux-2.6.28.orig/drivers/misc/Kconfig 2008-12-25 00:26:37.000000000 +0100
96455 +++ linux-2.6.28/drivers/misc/Kconfig 2009-01-02 00:01:56.000000000 +0100
96456 @@ -401,6 +401,11 @@ config THINKPAD_ACPI_HOTKEY_POLL
96457 If you are not sure, say Y here. The driver enables polling only if
96458 it is strictly necessary to do so.
96459
96460 +config LOW_MEMORY_KILLER
96461 + tristate "Low Memory Killer"
96462 + ---help---
96463 + Register processes to be killed when memory is low.
96464 +
96465 config ATMEL_SSC
96466 tristate "Device driver for Atmel SSC peripheral"
96467 depends on AVR32 || ARCH_AT91
96468 @@ -500,4 +505,9 @@ config SGI_GRU_DEBUG
96469
96470 source "drivers/misc/c2port/Kconfig"
96471
96472 +config MACH_NEO1973
96473 + bool
96474 + help
96475 + Common machine code for Openmoko GTAxx hardware
96476 +
96477 endif # MISC_DEVICES
96478 Index: linux-2.6.28/drivers/misc/lowmemorykiller.c
96479 ===================================================================
96480 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
96481 +++ linux-2.6.28/drivers/misc/lowmemorykiller.c 2009-01-02 00:01:56.000000000 +0100
96482 @@ -0,0 +1,119 @@
96483 +/* drivers/misc/lowmemorykiller.c
96484 + *
96485 + * Copyright (C) 2007-2008 Google, Inc.
96486 + *
96487 + * This software is licensed under the terms of the GNU General Public
96488 + * License version 2, as published by the Free Software Foundation, and
96489 + * may be copied, distributed, and modified under those terms.
96490 + *
96491 + * This program is distributed in the hope that it will be useful,
96492 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
96493 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
96494 + * GNU General Public License for more details.
96495 + *
96496 + */
96497 +
96498 +#include <linux/module.h>
96499 +#include <linux/kernel.h>
96500 +#include <linux/mm.h>
96501 +#include <linux/oom.h>
96502 +#include <linux/sched.h>
96503 +
96504 +static int lowmem_shrink(int nr_to_scan, gfp_t gfp_mask);
96505 +
96506 +static struct shrinker lowmem_shrinker = {
96507 + .shrink = lowmem_shrink,
96508 + .seeks = DEFAULT_SEEKS * 16
96509 +};
96510 +static uint32_t lowmem_debug_level = 2;
96511 +static int lowmem_adj[6] = {
96512 + 0,
96513 + 1,
96514 + 6,
96515 + 12,
96516 +};
96517 +static int lowmem_adj_size = 4;
96518 +static size_t lowmem_minfree[6] = {
96519 + 3*512, // 6MB
96520 + 2*1024, // 8MB
96521 + 4*1024, // 16MB
96522 + 16*1024, // 64MB
96523 +};
96524 +static int lowmem_minfree_size = 4;
96525 +
96526 +#define lowmem_print(level, x...) do { if(lowmem_debug_level >= (level)) printk(x); } while(0)
96527 +
96528 +module_param_named(cost, lowmem_shrinker.seeks, int, S_IRUGO | S_IWUSR);
96529 +module_param_array_named(adj, lowmem_adj, int, &lowmem_adj_size, S_IRUGO | S_IWUSR);
96530 +module_param_array_named(minfree, lowmem_minfree, uint, &lowmem_minfree_size, S_IRUGO | S_IWUSR);
96531 +module_param_named(debug_level, lowmem_debug_level, uint, S_IRUGO | S_IWUSR);
96532 +
96533 +static int lowmem_shrink(int nr_to_scan, gfp_t gfp_mask)
96534 +{
96535 + struct task_struct *p;
96536 + struct task_struct *selected = NULL;
96537 + int rem = 0;
96538 + int tasksize;
96539 + int i;
96540 + int min_adj = OOM_ADJUST_MAX + 1;
96541 + int selected_tasksize = 0;
96542 + int array_size = ARRAY_SIZE(lowmem_adj);
96543 + int other_free = global_page_state(NR_FREE_PAGES) + global_page_state(NR_FILE_PAGES);
96544 + if(lowmem_adj_size < array_size)
96545 + array_size = lowmem_adj_size;
96546 + if(lowmem_minfree_size < array_size)
96547 + array_size = lowmem_minfree_size;
96548 + for(i = 0; i < array_size; i++) {
96549 + if(other_free < lowmem_minfree[i]) {
96550 + min_adj = lowmem_adj[i];
96551 + break;
96552 + }
96553 + }
96554 + if(nr_to_scan > 0)
96555 + lowmem_print(3, "lowmem_shrink %d, %x, ofree %d, ma %d\n", nr_to_scan, gfp_mask, other_free, min_adj);
96556 + read_lock(&tasklist_lock);
96557 + for_each_process(p) {
96558 + if(p->oomkilladj >= 0 && p->mm) {
96559 + tasksize = get_mm_rss(p->mm);
96560 + if(nr_to_scan > 0 && tasksize > 0 && p->oomkilladj >= min_adj) {
96561 + if(selected == NULL ||
96562 + p->oomkilladj > selected->oomkilladj ||
96563 + (p->oomkilladj == selected->oomkilladj &&
96564 + tasksize > selected_tasksize)) {
96565 + selected = p;
96566 + selected_tasksize = tasksize;
96567 + lowmem_print(2, "select %d (%s), adj %d, size %d, to kill\n",
96568 + p->pid, p->comm, p->oomkilladj, tasksize);
96569 + }
96570 + }
96571 + rem += tasksize;
96572 + }
96573 + }
96574 + if(selected != NULL) {
96575 + lowmem_print(1, "send sigkill to %d (%s), adj %d, size %d\n",
96576 + selected->pid, selected->comm,
96577 + selected->oomkilladj, selected_tasksize);
96578 + force_sig(SIGKILL, selected);
96579 + rem -= selected_tasksize;
96580 + }
96581 + lowmem_print(4, "lowmem_shrink %d, %x, return %d\n", nr_to_scan, gfp_mask, rem);
96582 + read_unlock(&tasklist_lock);
96583 + return rem;
96584 +}
96585 +
96586 +static int __init lowmem_init(void)
96587 +{
96588 + register_shrinker(&lowmem_shrinker);
96589 + return 0;
96590 +}
96591 +
96592 +static void __exit lowmem_exit(void)
96593 +{
96594 + unregister_shrinker(&lowmem_shrinker);
96595 +}
96596 +
96597 +module_init(lowmem_init);
96598 +module_exit(lowmem_exit);
96599 +
96600 +MODULE_LICENSE("GPL");
96601 +
96602 Index: linux-2.6.28/drivers/misc/Makefile
96603 ===================================================================
96604 --- linux-2.6.28.orig/drivers/misc/Makefile 2008-12-25 00:26:37.000000000 +0100
96605 +++ linux-2.6.28/drivers/misc/Makefile 2009-01-02 00:06:11.000000000 +0100
96606 @@ -33,3 +33,8 @@ obj-$(CONFIG_SGI_XP) += sgi-xp/
96607 obj-$(CONFIG_SGI_GRU) += sgi-gru/
96608 obj-$(CONFIG_HP_ILO) += hpilo.o
96609 obj-$(CONFIG_C2PORT) += c2port/
96610 +obj-$(CONFIG_MACH_SMDK6410) += smdk6410-sleeptest.o
96611 +obj-$(CONFIG_LOW_MEMORY_KILLER) += lowmemorykiller.o
96612 +obj-$(CONFIG_MACH_NEO1973) += neo1973_version.o \
96613 + neo1973_pm_host.o \
96614 + neo1973_pm_resume_reason.o
96615 Index: linux-2.6.28/drivers/misc/neo1973_pm_charging_led.c
96616 ===================================================================
96617 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
96618 +++ linux-2.6.28/drivers/misc/neo1973_pm_charging_led.c 2009-01-02 00:01:56.000000000 +0100
96619 @@ -0,0 +1,106 @@
96620 +/*
96621 + * Charging LED sysfs for the FIC Neo1973 GSM Phone
96622 + * (currently only implemented in GTA02 but ready for GTA01 implementation)
96623 + *
96624 + * (C) 2008 by Openmoko Inc.
96625 + * Author: Andy Green <andy@openmoko.com>
96626 + * All rights reserved.
96627 + *
96628 + * This program is free software; you can redistribute it and/or modify
96629 + * it under the terms of the GNU General Public License charging_led 2 as
96630 + * published by the Free Software Foundation
96631 + *
96632 + */
96633 +
96634 +#include <linux/module.h>
96635 +#include <linux/init.h>
96636 +#include <linux/kernel.h>
96637 +#include <linux/platform_device.h>
96638 +
96639 +#include <asm/hardware.h>
96640 +#include <asm/mach-types.h>
96641 +
96642 +#ifdef CONFIG_MACH_NEO1973_GTA02
96643 +#include <asm/arch/gta02.h>
96644 +
96645 +static enum neo1973_charging_led_modes charging_mode;
96646 +
96647 +static char *charging_led_mode_names[] = {
96648 + "Disabled",
96649 + "Aux LED",
96650 + "Power LED"
96651 +};
96652 +
96653 +static ssize_t charging_led_read(struct device *dev,
96654 + struct device_attribute *attr, char *buf)
96655 +{
96656 + return sprintf(buf, "0x%03X\n", gta02_get_pcb_revision());
96657 +}
96658 +
96659 +static ssize_t charging_led_read(struct device *dev,
96660 + struct device_attribute *attr, char *buf)
96661 +{
96662 + return sprintf(buf, "0x%03X\n", gta02_get_pcb_revision());
96663 +}
96664 +
96665 +
96666 +static DEVICE_ATTR(pcb, 0644, charging_led_read, charging_led_write);
96667 +
96668 +static struct attribute *neo1973_charging_led_sysfs_entries[] = {
96669 + &dev_attr_pcb.attr,
96670 + NULL
96671 +};
96672 +
96673 +static struct attribute_group neo1973_charging_led_attr_group = {
96674 + .name = NULL,
96675 + .attrs = neo1973_charging_led_sysfs_entries,
96676 +};
96677 +
96678 +static int __init neo1973_charging_led_probe(struct platform_device *pdev)
96679 +{
96680 + dev_info(&pdev->dev, "starting\n");
96681 +
96682 + switch (machine_arch_type) {
96683 +#ifdef CONFIG_MACH_NEO1973_GTA01
96684 + case MACH_TYPE_NEO1973_GTA01:
96685 + return -EINVAL;
96686 +#endif /* CONFIG_MACH_NEO1973_GTA01 */
96687 + default:
96688 + break;
96689 + }
96690 +
96691 + return sysfs_create_group(&pdev->dev.kobj,
96692 + &neo1973_charging_led_attr_group);
96693 +}
96694 +
96695 +static int neo1973_charging_led_remove(struct platform_device *pdev)
96696 +{
96697 + sysfs_remove_group(&pdev->dev.kobj, &neo1973_charging_led_attr_group);
96698 + return 0;
96699 +}
96700 +
96701 +static struct platform_driver neo1973_charging_led_driver = {
96702 + .probe = neo1973_charging_led_probe,
96703 + .remove = neo1973_charging_led_remove,
96704 + .driver = {
96705 + .name = "neo1973-charging-led",
96706 + },
96707 +};
96708 +
96709 +static int __devinit neo1973_charging_led_init(void)
96710 +{
96711 + return platform_driver_register(&neo1973_charging_led_driver);
96712 +}
96713 +
96714 +static void neo1973_charging_led_exit(void)
96715 +{
96716 + platform_driver_unregister(&neo1973_charging_led_driver);
96717 +}
96718 +
96719 +module_init(neo1973_charging_led_init);
96720 +module_exit(neo1973_charging_led_exit);
96721 +
96722 +MODULE_LICENSE("GPL");
96723 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
96724 +MODULE_DESCRIPTION("Neo1973 PCB charging_led");
96725 +#endif
96726 Index: linux-2.6.28/drivers/misc/neo1973_pm_host.c
96727 ===================================================================
96728 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
96729 +++ linux-2.6.28/drivers/misc/neo1973_pm_host.c 2009-01-02 00:01:56.000000000 +0100
96730 @@ -0,0 +1,109 @@
96731 +/*
96732 + * Bluetooth PM code for the FIC Neo1973 GSM Phone
96733 + *
96734 + * (C) 2007 by Openmoko Inc.
96735 + * Author: Harald Welte <laforge@openmoko.org>
96736 + * All rights reserved.
96737 + *
96738 + * This program is free software; you can redistribute it and/or modify
96739 + * it under the terms of the GNU General Public License version 2 as
96740 + * published by the Free Software Foundation
96741 + *
96742 + */
96743 +
96744 +#include <linux/module.h>
96745 +#include <linux/init.h>
96746 +#include <linux/kernel.h>
96747 +#include <linux/platform_device.h>
96748 +
96749 +#include <mach/hardware.h>
96750 +#include <asm/mach-types.h>
96751 +
96752 +#ifdef CONFIG_MACH_NEO1973_GTA02
96753 +#include <mach/gta02.h>
96754 +#include <linux/mfd/pcf50633/gpio.h>
96755 +
96756 +static ssize_t pm_host_read(struct device *dev, struct device_attribute *attr,
96757 + char *buf)
96758 +{
96759 + return sprintf(buf, "%d\n",
96760 + pcf50633_gpio_get(gta02_pcf_pdata.pcf, PCF50633_GPO)
96761 + == PCF50633_GPOCFG_GPOSEL_1);
96762 +}
96763 +
96764 +static ssize_t pm_host_write(struct device *dev, struct device_attribute *attr,
96765 + const char *buf, size_t count)
96766 +{
96767 + unsigned long on = simple_strtoul(buf, NULL, 10);
96768 + u8 val;
96769 +
96770 + if (on)
96771 + val = PCF50633_GPOCFG_GPOSEL_1;
96772 + else
96773 + val = PCF50633_GPOCFG_GPOSEL_0;
96774 +
96775 +
96776 + pcf50633_gpio_set(gta02_pcf_pdata.pcf, PCF50633_GPO, val);
96777 +
96778 + return count;
96779 +}
96780 +
96781 +static DEVICE_ATTR(hostmode, 0644, pm_host_read, pm_host_write);
96782 +
96783 +static struct attribute *neo1973_pm_host_sysfs_entries[] = {
96784 + &dev_attr_hostmode.attr,
96785 + NULL
96786 +};
96787 +
96788 +static struct attribute_group neo1973_pm_host_attr_group = {
96789 + .name = NULL,
96790 + .attrs = neo1973_pm_host_sysfs_entries,
96791 +};
96792 +
96793 +static int __init neo1973_pm_host_probe(struct platform_device *pdev)
96794 +{
96795 + dev_info(&pdev->dev, "starting\n");
96796 +
96797 + switch (machine_arch_type) {
96798 +#ifdef CONFIG_MACH_NEO1973_GTA01
96799 + case MACH_TYPE_NEO1973_GTA01:
96800 + return -EINVAL;
96801 +#endif /* CONFIG_MACH_NEO1973_GTA01 */
96802 + default:
96803 + break;
96804 + }
96805 +
96806 + return sysfs_create_group(&pdev->dev.kobj, &neo1973_pm_host_attr_group);
96807 +}
96808 +
96809 +static int neo1973_pm_host_remove(struct platform_device *pdev)
96810 +{
96811 + sysfs_remove_group(&pdev->dev.kobj, &neo1973_pm_host_attr_group);
96812 + return 0;
96813 +}
96814 +
96815 +static struct platform_driver neo1973_pm_host_driver = {
96816 + .probe = neo1973_pm_host_probe,
96817 + .remove = neo1973_pm_host_remove,
96818 + .driver = {
96819 + .name = "neo1973-pm-host",
96820 + },
96821 +};
96822 +
96823 +static int __devinit neo1973_pm_host_init(void)
96824 +{
96825 + return platform_driver_register(&neo1973_pm_host_driver);
96826 +}
96827 +
96828 +static void neo1973_pm_host_exit(void)
96829 +{
96830 + platform_driver_unregister(&neo1973_pm_host_driver);
96831 +}
96832 +
96833 +module_init(neo1973_pm_host_init);
96834 +module_exit(neo1973_pm_host_exit);
96835 +
96836 +MODULE_LICENSE("GPL");
96837 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
96838 +MODULE_DESCRIPTION("Neo1973 USB Host Power Management");
96839 +#endif
96840 Index: linux-2.6.28/drivers/misc/neo1973_pm_resume_reason.c
96841 ===================================================================
96842 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
96843 +++ linux-2.6.28/drivers/misc/neo1973_pm_resume_reason.c 2009-01-02 00:01:56.000000000 +0100
96844 @@ -0,0 +1,147 @@
96845 +/*
96846 + * Resume reason sysfs for the FIC Neo1973 GSM Phone
96847 + *
96848 + * (C) 2008 by Openmoko Inc.
96849 + * Author: Andy Green <andy@openmoko.com>
96850 + * All rights reserved.
96851 + *
96852 + * This program is free software; you can redistribute it and/or modify
96853 + * it under the terms of the GNU General Public License resume_reason 2 as
96854 + * published by the Free Software Foundation
96855 + *
96856 + */
96857 +
96858 +#include <linux/module.h>
96859 +#include <linux/init.h>
96860 +#include <linux/kernel.h>
96861 +#include <linux/platform_device.h>
96862 +#include <linux/io.h>
96863 +
96864 +#include <mach/hardware.h>
96865 +#include <asm/mach-types.h>
96866 +
96867 +#ifdef CONFIG_MACH_NEO1973_GTA02
96868 +#include <mach/gta02.h>
96869 +#include <linux/mfd/pcf50633/core.h>
96870 +#endif
96871 +
96872 +static unsigned int *gstatus4_mapped;
96873 +static char *resume_reasons[][17] = { { /* GTA01 */
96874 + "EINT00_NULL",
96875 + "EINT01_GSM",
96876 + "EINT02_NULL",
96877 + "EINT03_NULL",
96878 + "EINT04_JACK",
96879 + "EINT05_SDCARD",
96880 + "EINT06_AUXKEY",
96881 + "EINT07_HOLDKEY",
96882 + "EINT08_NULL",
96883 + "EINT09_NULL",
96884 + "EINT10_NULL",
96885 + "EINT11_NULL",
96886 + "EINT12_NULL",
96887 + "EINT13_NULL",
96888 + "EINT14_NULL",
96889 + "EINT15_NULL",
96890 + NULL
96891 +}, { /* GTA02 */
96892 + "EINT00_ACCEL1",
96893 + "EINT01_GSM",
96894 + "EINT02_BLUETOOTH",
96895 + "EINT03_DEBUGBRD",
96896 + "EINT04_JACK",
96897 + "EINT05_WLAN",
96898 + "EINT06_AUXKEY",
96899 + "EINT07_HOLDKEY",
96900 + "EINT08_ACCEL2",
96901 + "EINT09_PMU",
96902 + "EINT10_NULL",
96903 + "EINT11_NULL",
96904 + "EINT12_GLAMO",
96905 + "EINT13_NULL",
96906 + "EINT14_NULL",
96907 + "EINT15_NULL",
96908 + NULL
96909 +} };
96910 +
96911 +static ssize_t resume_reason_read(struct device *dev,
96912 + struct device_attribute *attr,
96913 + char *buf)
96914 +{
96915 + int bit = 0;
96916 + char *end = buf;
96917 + int gta = !!machine_is_neo1973_gta02();
96918 +
96919 + for (bit = 0; resume_reasons[gta][bit]; bit++) {
96920 + if ((*gstatus4_mapped) & (1 << bit))
96921 + end += sprintf(end, "* %s\n", resume_reasons[gta][bit]);
96922 + else
96923 + end += sprintf(end, " %s\n", resume_reasons[gta][bit]);
96924 +
96925 +#ifdef CONFIG_MACH_NEO1973_GTA02
96926 + if ((gta) && (bit == 9)); /* PMU */
96927 +// end += pcf50633_report_resumers(gta02_pcf_pdata.pcf, end);
96928 +#endif
96929 + }
96930 +
96931 + return end - buf;
96932 +}
96933 +
96934 +
96935 +static DEVICE_ATTR(resume_reason, 0644, resume_reason_read, NULL);
96936 +
96937 +static struct attribute *neo1973_resume_reason_sysfs_entries[] = {
96938 + &dev_attr_resume_reason.attr,
96939 + NULL
96940 +};
96941 +
96942 +static struct attribute_group neo1973_resume_reason_attr_group = {
96943 + .name = NULL,
96944 + .attrs = neo1973_resume_reason_sysfs_entries,
96945 +};
96946 +
96947 +static int __init neo1973_resume_reason_probe(struct platform_device *pdev)
96948 +{
96949 + dev_info(&pdev->dev, "starting\n");
96950 +
96951 + gstatus4_mapped = ioremap(0x560000BC /* GSTATUS4 */, 0x4);
96952 + if (!gstatus4_mapped) {
96953 + dev_err(&pdev->dev, "failed to ioremap() memory region\n");
96954 + return -EINVAL;
96955 + }
96956 +
96957 + return sysfs_create_group(&pdev->dev.kobj,
96958 + &neo1973_resume_reason_attr_group);
96959 +}
96960 +
96961 +static int neo1973_resume_reason_remove(struct platform_device *pdev)
96962 +{
96963 + sysfs_remove_group(&pdev->dev.kobj, &neo1973_resume_reason_attr_group);
96964 + iounmap(gstatus4_mapped);
96965 + return 0;
96966 +}
96967 +
96968 +static struct platform_driver neo1973_resume_reason_driver = {
96969 + .probe = neo1973_resume_reason_probe,
96970 + .remove = neo1973_resume_reason_remove,
96971 + .driver = {
96972 + .name = "neo1973-resume",
96973 + },
96974 +};
96975 +
96976 +static int __devinit neo1973_resume_reason_init(void)
96977 +{
96978 + return platform_driver_register(&neo1973_resume_reason_driver);
96979 +}
96980 +
96981 +static void neo1973_resume_reason_exit(void)
96982 +{
96983 + platform_driver_unregister(&neo1973_resume_reason_driver);
96984 +}
96985 +
96986 +module_init(neo1973_resume_reason_init);
96987 +module_exit(neo1973_resume_reason_exit);
96988 +
96989 +MODULE_LICENSE("GPL");
96990 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
96991 +MODULE_DESCRIPTION("Neo1973 resume_reason");
96992 Index: linux-2.6.28/drivers/misc/neo1973_pm_usbhost.c
96993 ===================================================================
96994 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
96995 +++ linux-2.6.28/drivers/misc/neo1973_pm_usbhost.c 2009-01-02 00:01:56.000000000 +0100
96996 @@ -0,0 +1,132 @@
96997 +/*
96998 + * Bluetooth PM code for the FIC Neo1973 GSM Phone
96999 + *
97000 + * (C) 2007 by OpenMoko Inc.
97001 + * Author: Harald Welte <laforge@openmoko.org>
97002 + * All rights reserved.
97003 + *
97004 + * This program is free software; you can redistribute it and/or modify
97005 + * it under the terms of the GNU General Public License version 2 as
97006 + * published by the Free Software Foundation
97007 + *
97008 + */
97009 +
97010 +#include <linux/module.h>
97011 +#include <linux/init.h>
97012 +#include <linux/kernel.h>
97013 +#include <linux/platform_device.h>
97014 +
97015 +#include <asm/hardware.h>
97016 +#include <asm/mach-types.h>
97017 +
97018 +#ifdef CONFIG_MACH_NEO1973_GTA02
97019 +#include <asm/arch/gta02.h>
97020 +#include <linux/pcf50633.h>
97021 +#endif
97022 +
97023 +static ssize_t pm_usbhost_read(struct device *dev, struct device_attribute *attr,
97024 + char *buf)
97025 +{
97026 + return sprintf(buf, "%d\n",
97027 + pcf50633_gpio_get(pcf50633_global, PCF50633_GPO));
97028 +}
97029 +
97030 +static ssize_t pm_usbhost_write(struct device *dev, struct device_attribute *attr,
97031 + const char *buf, size_t count)
97032 +{
97033 + unsigned long on = simple_strtoul(buf, NULL, 10);
97034 +
97035 + pcf50633_gpio_set(pcf50633_global, PCF50633_GPO, on);
97036 +
97037 + return count;
97038 +}
97039 +
97040 +static DEVICE_ATTR(hostmode, 0644, pm_usbhost_read, pm_usbhost_write);
97041 +
97042 +#ifdef CONFIG_PM
97043 +static int neo1973_usbhost_suspend(struct platform_device *pdev, pm_message_t state)
97044 +{
97045 + dev_dbg(&pdev->dev, "suspending\n");
97046 + /* FIXME: The PMU should save the PMU status, and the GPIO code should
97047 + * preserve the GPIO level, so there shouldn't be anything left to do
97048 + * for us, should there? */
97049 +
97050 + return 0;
97051 +}
97052 +
97053 +static int neo1973_usbhost_resume(struct platform_device *pdev)
97054 +{
97055 + dev_dbg(&pdev->dev, "resuming\n");
97056 +
97057 + return 0;
97058 +}
97059 +#else
97060 +#define neo1973_usbhost_suspend NULL
97061 +#define neo1973_usbhost_resume NULL
97062 +#endif
97063 +
97064 +static struct attribute *neo1973_usbhost_sysfs_entries[] = {
97065 + &dev_attr_hostmode.attr,
97066 + NULL
97067 +};
97068 +
97069 +static struct attribute_group neo1973_usbhost_attr_group = {
97070 + .name = NULL,
97071 + .attrs = neo1973_usbhost_sysfs_entries,
97072 +};
97073 +
97074 +static int __init neo1973_usbhost_probe(struct platform_device *pdev)
97075 +{
97076 + dev_info(&pdev->dev, "starting\n");
97077 +
97078 + switch (machine_arch_type) {
97079 +
97080 +#ifdef CONFIG_MACH_NEO1973_GTA01
97081 + case MACH_TYPE_NEO1973_GTA01:
97082 + return -EINVAL;
97083 +#endif /* CONFIG_MACH_NEO1973_GTA01 */
97084 +
97085 +#ifdef CONFIG_MACH_NEO1973_GTA02
97086 + case MACH_TYPE_NEO1973_GTA02:
97087 +/* race */
97088 +/* pcf50633_gpio_set(pcf50633_global, PCF50633_GPO, 0); */
97089 + break;
97090 +#endif /* CONFIG_MACH_NEO1973_GTA02 */
97091 + }
97092 +
97093 + return sysfs_create_group(&pdev->dev.kobj, &neo1973_usbhost_attr_group);
97094 +}
97095 +
97096 +static int neo1973_usbhost_remove(struct platform_device *pdev)
97097 +{
97098 + sysfs_remove_group(&pdev->dev.kobj, &neo1973_usbhost_attr_group);
97099 +
97100 + return 0;
97101 +}
97102 +
97103 +static struct platform_driver neo1973_usbhost_driver = {
97104 + .probe = neo1973_usbhost_probe,
97105 + .remove = neo1973_usbhost_remove,
97106 + .suspend = neo1973_usbhost_suspend,
97107 + .resume = neo1973_usbhost_resume,
97108 + .driver = {
97109 + .name = "neo1973-pm-host",
97110 + },
97111 +};
97112 +
97113 +static int __devinit neo1973_usbhost_init(void)
97114 +{
97115 + return platform_driver_register(&neo1973_usbhost_driver);
97116 +}
97117 +
97118 +static void neo1973_usbhost_exit(void)
97119 +{
97120 + platform_driver_unregister(&neo1973_usbhost_driver);
97121 +}
97122 +
97123 +module_init(neo1973_usbhost_init);
97124 +module_exit(neo1973_usbhost_exit);
97125 +
97126 +MODULE_LICENSE("GPL");
97127 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
97128 +MODULE_DESCRIPTION("Neo1973 USB Host Power Management");
97129 Index: linux-2.6.28/drivers/misc/neo1973_version.c
97130 ===================================================================
97131 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
97132 +++ linux-2.6.28/drivers/misc/neo1973_version.c 2009-01-02 00:01:56.000000000 +0100
97133 @@ -0,0 +1,90 @@
97134 +/*
97135 + * PCB version sysfs for the FIC Neo1973 GSM Phone
97136 + *
97137 + * (C) 2007 by Openmoko Inc.
97138 + * Author: Andy Green <andy@openmoko.com>
97139 + * All rights reserved.
97140 + *
97141 + * This program is free software; you can redistribute it and/or modify
97142 + * it under the terms of the GNU General Public License version 2 as
97143 + * published by the Free Software Foundation
97144 + *
97145 + */
97146 +
97147 +#include <linux/module.h>
97148 +#include <linux/init.h>
97149 +#include <linux/kernel.h>
97150 +#include <linux/platform_device.h>
97151 +
97152 +#include <mach/hardware.h>
97153 +#include <asm/mach-types.h>
97154 +
97155 +#ifdef CONFIG_MACH_NEO1973_GTA02
97156 +#include <mach/gta02.h>
97157 +
97158 +static ssize_t version_read(struct device *dev, struct device_attribute *attr,
97159 + char *buf)
97160 +{
97161 + return sprintf(buf, "0x%03X\n", gta02_get_pcb_revision());
97162 +}
97163 +
97164 +
97165 +static DEVICE_ATTR(pcb, 0644, version_read, NULL);
97166 +
97167 +static struct attribute *neo1973_version_sysfs_entries[] = {
97168 + &dev_attr_pcb.attr,
97169 + NULL
97170 +};
97171 +
97172 +static struct attribute_group neo1973_version_attr_group = {
97173 + .name = NULL,
97174 + .attrs = neo1973_version_sysfs_entries,
97175 +};
97176 +
97177 +static int __init neo1973_version_probe(struct platform_device *pdev)
97178 +{
97179 + dev_info(&pdev->dev, "starting\n");
97180 +
97181 + switch (machine_arch_type) {
97182 +#ifdef CONFIG_MACH_NEO1973_GTA01
97183 + case MACH_TYPE_NEO1973_GTA01:
97184 + return -EINVAL;
97185 +#endif /* CONFIG_MACH_NEO1973_GTA01 */
97186 + default:
97187 + break;
97188 + }
97189 +
97190 + return sysfs_create_group(&pdev->dev.kobj, &neo1973_version_attr_group);
97191 +}
97192 +
97193 +static int neo1973_version_remove(struct platform_device *pdev)
97194 +{
97195 + sysfs_remove_group(&pdev->dev.kobj, &neo1973_version_attr_group);
97196 + return 0;
97197 +}
97198 +
97199 +static struct platform_driver neo1973_version_driver = {
97200 + .probe = neo1973_version_probe,
97201 + .remove = neo1973_version_remove,
97202 + .driver = {
97203 + .name = "neo1973-version",
97204 + },
97205 +};
97206 +
97207 +static int __devinit neo1973_version_init(void)
97208 +{
97209 + return platform_driver_register(&neo1973_version_driver);
97210 +}
97211 +
97212 +static void neo1973_version_exit(void)
97213 +{
97214 + platform_driver_unregister(&neo1973_version_driver);
97215 +}
97216 +
97217 +module_init(neo1973_version_init);
97218 +module_exit(neo1973_version_exit);
97219 +
97220 +MODULE_LICENSE("GPL");
97221 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
97222 +MODULE_DESCRIPTION("Neo1973 PCB version");
97223 +#endif
97224 Index: linux-2.6.28/drivers/misc/smdk6410-sleeptest.c
97225 ===================================================================
97226 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
97227 +++ linux-2.6.28/drivers/misc/smdk6410-sleeptest.c 2009-01-02 00:01:56.000000000 +0100
97228 @@ -0,0 +1,65 @@
97229 +/* linux/drivers/misc/smdk6410-sleeptest.c
97230 + *
97231 + * Copyright 2008 Simtec Electronics
97232 + * Ben Dooks <ben@simtec.co.uk>
97233 + * http://armlinux.simtec.co.uk/
97234 + *
97235 + * This program is free software; you can redistribute it and/or modify
97236 + * it under the terms of the GNU General Public License version 2 as
97237 + * published by the Free Software Foundation.
97238 +*/
97239 +
97240 +#include <linux/init.h>
97241 +#include <linux/kernel.h>
97242 +#include <linux/module.h>
97243 +#include <linux/init.h>
97244 +#include <linux/gpio.h>
97245 +#include <linux/err.h>
97246 +#include <linux/interrupt.h>
97247 +
97248 +#include <plat/gpio-cfg.h>
97249 +
97250 +static irqreturn_t sleep_action(int irq, void *pw)
97251 +{
97252 + printk(KERN_INFO "%s: irq %d\n", __func__, irq);
97253 + return IRQ_HANDLED;
97254 +}
97255 +
97256 +static void sleep_setup(unsigned int irq, unsigned int gpio)
97257 +{
97258 + int ret;
97259 +
97260 + WARN_ON(s3c_gpio_cfgpin(gpio, S3C_GPIO_SFN(2)) < 0);
97261 + WARN_ON(s3c_gpio_setpull(gpio, S3C_GPIO_PULL_UP) < 0);
97262 +
97263 + ret = request_irq(irq, sleep_action, IRQF_TRIGGER_FALLING,
97264 + "sleep", NULL);
97265 + if (ret < 0)
97266 + printk(KERN_ERR "%s: request_irq() failed\n", __func__);
97267 +
97268 + ret = set_irq_wake(irq, 1);
97269 + if (ret < 0)
97270 + printk(KERN_ERR "%s: set_irq_wake() failed\n", __func__);
97271 +}
97272 +
97273 +static void sleep_led(unsigned int gpio)
97274 +{
97275 + gpio_request(gpio, "sleep led");
97276 + gpio_direction_output(gpio, 0);
97277 +}
97278 +
97279 +static __init int smdk6410_sleeptest_init(void)
97280 +{
97281 + sleep_setup(IRQ_EINT(10), S3C64XX_GPN(10));
97282 + sleep_led(S3C64XX_GPN(15));
97283 + sleep_led(S3C64XX_GPN(14));
97284 + sleep_led(S3C64XX_GPN(13));
97285 + sleep_led(S3C64XX_GPN(12));
97286 +
97287 + return 0;
97288 +}
97289 +
97290 +module_init(smdk6410_sleeptest_init);
97291 +
97292 +MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
97293 +MODULE_LICENSE("GPL");
97294 Index: linux-2.6.28/drivers/mmc/core/core.c
97295 ===================================================================
97296 --- linux-2.6.28.orig/drivers/mmc/core/core.c 2008-12-25 00:26:37.000000000 +0100
97297 +++ linux-2.6.28/drivers/mmc/core/core.c 2009-01-02 00:01:56.000000000 +0100
97298 @@ -57,10 +57,11 @@ static int mmc_schedule_delayed_work(str
97299 /*
97300 * Internal function. Flush all scheduled work from the MMC work queue.
97301 */
97302 -static void mmc_flush_scheduled_work(void)
97303 +void mmc_flush_scheduled_work(void)
97304 {
97305 flush_workqueue(workqueue);
97306 }
97307 +EXPORT_SYMBOL_GPL(mmc_flush_scheduled_work);
97308
97309 /**
97310 * mmc_request_done - finish processing an MMC request
97311 @@ -495,7 +496,13 @@ void mmc_set_timing(struct mmc_host *hos
97312 */
97313 static void mmc_power_up(struct mmc_host *host)
97314 {
97315 - int bit = fls(host->ocr_avail) - 1;
97316 + int bit;
97317 +
97318 + /* If ocr is set, we use it */
97319 + if (host->ocr)
97320 + bit = ffs(host->ocr) - 1;
97321 + else
97322 + bit = fls(host->ocr_avail) - 1;
97323
97324 host->ios.vdd = bit;
97325 if (mmc_host_is_spi(host)) {
97326 Index: linux-2.6.28/drivers/mmc/host/Kconfig
97327 ===================================================================
97328 --- linux-2.6.28.orig/drivers/mmc/host/Kconfig 2009-01-02 00:00:02.000000000 +0100
97329 +++ linux-2.6.28/drivers/mmc/host/Kconfig 2009-01-02 00:01:56.000000000 +0100
97330 @@ -48,6 +48,18 @@ config MMC_SDHCI_PCI
97331
97332 If unsure, say N.
97333
97334 +config MMC_SDHCI_S3C
97335 + tristate "SDHCI support on Samsung S3C SoC"
97336 + depends on MMC_SDHCI && (PLAT_S3C24XX || PLAT_S3C64XX)
97337 + help
97338 + This selects the Secure Digital Host Controller Interface (SDHCI)
97339 + often referrered to as the HSMMC block in some of the Samsung S3C
97340 + range of SoC.
97341 +
97342 + If you have a controller with this interface, say Y or M here.
97343 +
97344 + If unsure, say N.
97345 +
97346 config MMC_RICOH_MMC
97347 tristate "Ricoh MMC Controller Disabler (EXPERIMENTAL)"
97348 depends on MMC_SDHCI_PCI
97349 Index: linux-2.6.28/drivers/mmc/host/Makefile
97350 ===================================================================
97351 --- linux-2.6.28.orig/drivers/mmc/host/Makefile 2009-01-02 00:00:02.000000000 +0100
97352 +++ linux-2.6.28/drivers/mmc/host/Makefile 2009-01-02 00:01:56.000000000 +0100
97353 @@ -11,6 +11,7 @@ obj-$(CONFIG_MMC_PXA) += pxamci.o
97354 obj-$(CONFIG_MMC_IMX) += imxmmc.o
97355 obj-$(CONFIG_MMC_SDHCI) += sdhci.o
97356 obj-$(CONFIG_MMC_SDHCI_PCI) += sdhci-pci.o
97357 +obj-$(CONFIG_MMC_SDHCI_S3C) += sdhci-s3c.o
97358 obj-$(CONFIG_MMC_RICOH_MMC) += ricoh_mmc.o
97359 obj-$(CONFIG_MMC_WBSD) += wbsd.o
97360 obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
97361 Index: linux-2.6.28/drivers/mmc/host/s3cmci.c
97362 ===================================================================
97363 --- linux-2.6.28.orig/drivers/mmc/host/s3cmci.c 2008-12-25 00:26:37.000000000 +0100
97364 +++ linux-2.6.28/drivers/mmc/host/s3cmci.c 2009-01-02 00:01:56.000000000 +0100
97365 @@ -2,6 +2,7 @@
97366 * linux/drivers/mmc/s3cmci.h - Samsung S3C MCI driver
97367 *
97368 * Copyright (C) 2004-2006 maintech GmbH, Thomas Kleffel <tk@maintech.de>
97369 + * Copyright (C) 2007 Harald Welte <laforge@gnumonks.org>
97370 *
97371 * Current driver maintained by Ben Dooks and Simtec Electronics
97372 * Copyright (C) 2008 Simtec Electronics <ben-linux@fluff.org>
97373 @@ -25,7 +26,15 @@
97374 #include <mach/regs-sdi.h>
97375 #include <mach/regs-gpio.h>
97376
97377 -#include <asm/plat-s3c24xx/mci.h>
97378 +#include <plat/mci.h>
97379 +
97380 +#include <asm/dma.h>
97381 +#include <asm/dma-mapping.h>
97382 +
97383 +#include <asm/io.h>
97384 +#include <mach/regs-gpio.h>
97385 +#include <mach/mci.h>
97386 +#include <mach/dma.h>
97387
97388 #include "s3cmci.h"
97389
97390 @@ -47,6 +56,9 @@ static const int dbgmap_err = dbg_fail
97391 static const int dbgmap_info = dbg_info | dbg_conf;
97392 static const int dbgmap_debug = dbg_err | dbg_debug;
97393
97394 +static int f_max = -1; /* override maximum frequency limit */
97395 +static int persist; /* keep interface alive across suspend/resume */
97396 +
97397 #define dbg(host, channels, args...) \
97398 do { \
97399 if (dbgmap_err & channels) \
97400 @@ -280,8 +292,11 @@ static void do_pio_read(struct s3cmci_ho
97401 * an even multiple of 4. */
97402 if (fifo >= host->pio_bytes)
97403 fifo = host->pio_bytes;
97404 - else
97405 + else {
97406 fifo -= fifo & 3;
97407 + if (!fifo)
97408 + break;
97409 + }
97410
97411 host->pio_bytes -= fifo;
97412 host->pio_count += fifo;
97413 @@ -353,8 +368,11 @@ static void do_pio_write(struct s3cmci_h
97414 * words, so round down to an even multiple of 4. */
97415 if (fifo >= host->pio_bytes)
97416 fifo = host->pio_bytes;
97417 - else
97418 + else {
97419 fifo -= fifo & 3;
97420 + if (!fifo)
97421 + break;
97422 + }
97423
97424 host->pio_bytes -= fifo;
97425 host->pio_count += fifo;
97426 @@ -373,7 +391,6 @@ static void pio_tasklet(unsigned long da
97427 {
97428 struct s3cmci_host *host = (struct s3cmci_host *) data;
97429
97430 -
97431 disable_irq(host->irq);
97432
97433 if (host->pio_active == XFER_WRITE)
97434 @@ -614,7 +631,6 @@ irq_out:
97435
97436 spin_unlock_irqrestore(&host->complete_lock, iflags);
97437 return IRQ_HANDLED;
97438 -
97439 }
97440
97441 /*
97442 @@ -1027,6 +1043,7 @@ static void s3cmci_send_request(struct m
97443 dbg(host, dbg_err, "data prepare error %d\n", res);
97444 cmd->error = res;
97445 cmd->data->error = res;
97446 + cmd->data->error = -EIO;
97447
97448 mmc_request_done(mmc, mrq);
97449 return;
97450 @@ -1264,10 +1281,8 @@ static int __devinit s3cmci_probe(struct
97451 host->is2440 = is2440;
97452
97453 host->pdata = pdev->dev.platform_data;
97454 - if (!host->pdata) {
97455 - pdev->dev.platform_data = &s3cmci_def_pdata;
97456 + if (!host->pdata)
97457 host->pdata = &s3cmci_def_pdata;
97458 - }
97459
97460 spin_lock_init(&host->complete_lock);
97461 tasklet_init(&host->pio_tasklet, pio_tasklet, (unsigned long) host);
97462 @@ -1380,6 +1395,18 @@ static int __devinit s3cmci_probe(struct
97463 mmc->f_min = host->clk_rate / (host->clk_div * 256);
97464 mmc->f_max = host->clk_rate / host->clk_div;
97465
97466 + if (f_max >= 0) {
97467 + unsigned f = f_max;
97468 +
97469 + if (f < mmc->f_min)
97470 + f = mmc->f_min;
97471 + if (mmc->f_max > f) {
97472 + dev_info(&pdev->dev, "f_max lowered from %u to %u Hz\n",
97473 + mmc->f_max, f);
97474 + mmc->f_max = f;
97475 + }
97476 + }
97477 +
97478 if (host->pdata->ocr_avail)
97479 mmc->ocr_avail = host->pdata->ocr_avail;
97480
97481 @@ -1492,18 +1519,60 @@ static int __devinit s3cmci_2440_probe(s
97482
97483 #ifdef CONFIG_PM
97484
97485 +static int save_regs(struct mmc_host *mmc)
97486 +{
97487 + struct s3cmci_host *host = mmc_priv(mmc);
97488 + unsigned long flags;
97489 + unsigned from;
97490 + u32 *to = host->saved;
97491 +
97492 + mmc_flush_scheduled_work();
97493 +
97494 + local_irq_save(flags);
97495 + for (from = S3C2410_SDICON; from != S3C2410_SDIIMSK+4; from += 4)
97496 + if (from != host->sdidata)
97497 + *to++ = readl(host->base + from);
97498 + BUG_ON(to-host->saved != ARRAY_SIZE(host->saved));
97499 + local_irq_restore(flags);
97500 +
97501 + return 0;
97502 +}
97503 +
97504 +static int restore_regs(struct mmc_host *mmc)
97505 +{
97506 + struct s3cmci_host *host = mmc_priv(mmc);
97507 + unsigned long flags;
97508 + unsigned to;
97509 + u32 *from = host->saved;
97510 +
97511 + /*
97512 + * Before we begin with the necromancy, make sure we don't
97513 + * inadvertently start something we'll regret microseconds later.
97514 + */
97515 + from[S3C2410_SDICMDCON - S3C2410_SDICON] = 0;
97516 +
97517 + local_irq_save(flags);
97518 + for (to = S3C2410_SDICON; to != S3C2410_SDIIMSK+4; to += 4)
97519 + if (to != host->sdidata)
97520 + writel(*from++, host->base + to);
97521 + BUG_ON(from-host->saved != ARRAY_SIZE(host->saved));
97522 + local_irq_restore(flags);
97523 +
97524 + return 0;
97525 +}
97526 +
97527 static int s3cmci_suspend(struct platform_device *dev, pm_message_t state)
97528 {
97529 struct mmc_host *mmc = platform_get_drvdata(dev);
97530
97531 - return mmc_suspend_host(mmc, state);
97532 + return persist ? save_regs(mmc) : mmc_suspend_host(mmc, state);
97533 }
97534
97535 static int s3cmci_resume(struct platform_device *dev)
97536 {
97537 struct mmc_host *mmc = platform_get_drvdata(dev);
97538
97539 - return mmc_resume_host(mmc);
97540 + return persist ? restore_regs(mmc) : mmc_resume_host(mmc);
97541 }
97542
97543 #else /* CONFIG_PM */
97544 @@ -1561,9 +1630,13 @@ static void __exit s3cmci_exit(void)
97545 module_init(s3cmci_init);
97546 module_exit(s3cmci_exit);
97547
97548 +module_param(f_max, int, 0644);
97549 +module_param(persist, int, 0644);
97550 +
97551 MODULE_DESCRIPTION("Samsung S3C MMC/SD Card Interface driver");
97552 MODULE_LICENSE("GPL v2");
97553 MODULE_AUTHOR("Thomas Kleffel <tk@maintech.de>, Ben Dooks <ben-linux@fluff.org>");
97554 MODULE_ALIAS("platform:s3c2410-sdi");
97555 MODULE_ALIAS("platform:s3c2412-sdi");
97556 MODULE_ALIAS("platform:s3c2440-sdi");
97557 +
97558 Index: linux-2.6.28/drivers/mmc/host/s3cmci.h
97559 ===================================================================
97560 --- linux-2.6.28.orig/drivers/mmc/host/s3cmci.h 2008-12-25 00:26:37.000000000 +0100
97561 +++ linux-2.6.28/drivers/mmc/host/s3cmci.h 2009-01-02 00:01:56.000000000 +0100
97562 @@ -8,6 +8,9 @@
97563 * published by the Free Software Foundation.
97564 */
97565
97566 +
97567 +#include <mach/regs-sdi.h>
97568 +
97569 /* FIXME: DMA Resource management ?! */
97570 #define S3CMCI_DMA 0
97571
97572 @@ -68,6 +71,13 @@ struct s3cmci_host {
97573 unsigned int ccnt, dcnt;
97574 struct tasklet_struct pio_tasklet;
97575
97576 + /*
97577 + * Here's where we save the registers during suspend. Note that we skip
97578 + * SDIDATA, which is at different positions on 2410 and 2440, so
97579 + * there's no "+1" in the array size.
97580 + */
97581 + u32 saved[(S3C2410_SDIIMSK-S3C2410_SDICON)/4];
97582 +
97583 #ifdef CONFIG_CPU_FREQ
97584 struct notifier_block freq_transition;
97585 #endif
97586 Index: linux-2.6.28/drivers/mmc/host/sdhci.c
97587 ===================================================================
97588 --- linux-2.6.28.orig/drivers/mmc/host/sdhci.c 2008-12-25 00:26:37.000000000 +0100
97589 +++ linux-2.6.28/drivers/mmc/host/sdhci.c 2009-01-02 00:01:56.000000000 +0100
97590 @@ -73,6 +73,11 @@ static void sdhci_dumpregs(struct sdhci_
97591 readl(host->ioaddr + SDHCI_CAPABILITIES),
97592 readl(host->ioaddr + SDHCI_MAX_CURRENT));
97593
97594 + if (host->flags & SDHCI_USE_ADMA)
97595 + printk(KERN_DEBUG DRIVER_NAME ": ADMA Err: 0x%08x | ADMA Ptr: 0x%08x\n",
97596 + readl(host->ioaddr + SDHCI_ADMA_ERROR),
97597 + readl(host->ioaddr + SDHCI_ADMA_ADDRESS));
97598 +
97599 printk(KERN_DEBUG DRIVER_NAME ": ===========================================\n");
97600 }
97601
97602 @@ -731,6 +736,23 @@ static void sdhci_set_transfer_mode(stru
97603 writew(mode, host->ioaddr + SDHCI_TRANSFER_MODE);
97604 }
97605
97606 +static void shdci_check_dma_overrun(struct sdhci_host *host, struct mmc_data *data)
97607 +{
97608 + u32 dma_pos = readl(host->ioaddr + SDHCI_DMA_ADDRESS);
97609 + u32 dma_start = sg_dma_address(data->sg);
97610 + u32 dma_end = dma_start + data->sg->length;
97611 +
97612 + /* Test whether we ended up moving more data than
97613 + * was originally requested. */
97614 +
97615 + if (dma_pos <= dma_end)
97616 + return;
97617 +
97618 + printk(KERN_ERR "%s: dma overrun, dma %08x, req %08x..%08x\n",
97619 + mmc_hostname(host->mmc), dma_pos,
97620 + dma_start, dma_end);
97621 +}
97622 +
97623 static void sdhci_finish_data(struct sdhci_host *host)
97624 {
97625 struct mmc_data *data;
97626 @@ -744,6 +766,8 @@ static void sdhci_finish_data(struct sdh
97627 if (host->flags & SDHCI_USE_ADMA)
97628 sdhci_adma_table_post(host, data);
97629 else {
97630 + shdci_check_dma_overrun(host, data);
97631 +
97632 dma_unmap_sg(mmc_dev(host->mmc), data->sg,
97633 data->sg_len, (data->flags & MMC_DATA_READ) ?
97634 DMA_FROM_DEVICE : DMA_TO_DEVICE);
97635 @@ -883,13 +907,18 @@ static void sdhci_finish_command(struct
97636
97637 static void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
97638 {
97639 + if (clock == host->clock)
97640 + return;
97641 +
97642 + host->ops->change_clock(host, clock);
97643 +}
97644 +
97645 +void sdhci_change_clock(struct sdhci_host *host, unsigned int clock)
97646 +{
97647 int div;
97648 u16 clk;
97649 unsigned long timeout;
97650
97651 - if (clock == host->clock)
97652 - return;
97653 -
97654 writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL);
97655
97656 if (clock == 0)
97657 @@ -926,6 +955,8 @@ out:
97658 host->clock = clock;
97659 }
97660
97661 +EXPORT_SYMBOL_GPL(sdhci_set_clock);
97662 +
97663 static void sdhci_set_power(struct sdhci_host *host, unsigned short power)
97664 {
97665 u8 pwr;
97666 @@ -999,12 +1030,13 @@ static void sdhci_request(struct mmc_hos
97667 #endif
97668
97669 host->mrq = mrq;
97670 -
97671 +/*
97672 if (!(readl(host->ioaddr + SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT)
97673 || (host->flags & SDHCI_DEVICE_DEAD)) {
97674 host->mrq->cmd->error = -ENOMEDIUM;
97675 tasklet_schedule(&host->finish_tasklet);
97676 } else
97677 +*/
97678 sdhci_send_command(host, mrq->cmd);
97679
97680 mmiowb();
97681 @@ -1033,6 +1065,9 @@ static void sdhci_set_ios(struct mmc_hos
97682 sdhci_init(host);
97683 }
97684
97685 + if (host->ops->set_ios)
97686 + host->ops->set_ios(host, ios);
97687 +
97688 sdhci_set_clock(host, ios->clock);
97689
97690 if (ios->power_mode == MMC_POWER_OFF)
97691 @@ -1136,7 +1171,7 @@ static void sdhci_tasklet_card(unsigned
97692 host = (struct sdhci_host*)param;
97693
97694 spin_lock_irqsave(&host->lock, flags);
97695 -
97696 +/*
97697 if (!(readl(host->ioaddr + SDHCI_PRESENT_STATE) & SDHCI_CARD_PRESENT)) {
97698 if (host->mrq) {
97699 printk(KERN_ERR "%s: Card removed during transfer!\n",
97700 @@ -1151,7 +1186,7 @@ static void sdhci_tasklet_card(unsigned
97701 tasklet_schedule(&host->finish_tasklet);
97702 }
97703 }
97704 -
97705 +*/
97706 spin_unlock_irqrestore(&host->lock, flags);
97707
97708 mmc_detect_change(host->mmc, msecs_to_jiffies(200));
97709 @@ -1283,11 +1318,24 @@ static void sdhci_cmd_irq(struct sdhci_h
97710 * controllers.
97711 */
97712 if (host->cmd->flags & MMC_RSP_BUSY) {
97713 + u32 present;
97714 +
97715 if (host->cmd->data)
97716 DBG("Cannot wait for busy signal when also "
97717 "doing a data transfer");
97718 - else
97719 + else if (!(host->quirks & SDHCI_QUIRK_NO_TCIRQ_ON_NOT_BUSY))
97720 return;
97721 +
97722 + /* The Samsung SDHCI does not seem to provide an INT_DATA_END
97723 + * when the system goes non-busy, so check the state of the
97724 + * transfer by reading SDHCI_PRESENT_STATE to see if the
97725 + * controller is ready
97726 + */
97727 +
97728 + present = readl(host->ioaddr + SDHCI_PRESENT_STATE);
97729 + DBG("busy? present %08x, intstat %08x\n", present, intmask);
97730 +
97731 + /* fall through and take the SDHCI_INT_RESPONSE */
97732 }
97733
97734 if (intmask & SDHCI_INT_RESPONSE)
97735 @@ -1604,17 +1652,23 @@ int sdhci_add_host(struct sdhci_host *ho
97736 mmc_dev(host->mmc)->dma_mask = &host->dma_mask;
97737 }
97738
97739 - host->max_clk =
97740 - (caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT;
97741 + if (host->ops->get_max_clock)
97742 + host->max_clk = host->ops->get_max_clock(host);
97743 + else {
97744 + host->max_clk = (caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT;
97745 + host->max_clk *= 1000000;
97746 + }
97747 if (host->max_clk == 0) {
97748 printk(KERN_ERR "%s: Hardware doesn't specify base clock "
97749 "frequency.\n", mmc_hostname(mmc));
97750 return -ENODEV;
97751 }
97752 - host->max_clk *= 1000000;
97753
97754 - host->timeout_clk =
97755 - (caps & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT;
97756 + if (host->ops->get_timeout_clock)
97757 + host->timeout_clk = host->ops->get_timeout_clock(host);
97758 + else
97759 + host->timeout_clk =
97760 + (caps & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT;
97761 if (host->timeout_clk == 0) {
97762 printk(KERN_ERR "%s: Hardware doesn't specify timeout clock "
97763 "frequency.\n", mmc_hostname(mmc));
97764 Index: linux-2.6.28/drivers/mmc/host/sdhci.h
97765 ===================================================================
97766 --- linux-2.6.28.orig/drivers/mmc/host/sdhci.h 2008-12-25 00:26:37.000000000 +0100
97767 +++ linux-2.6.28/drivers/mmc/host/sdhci.h 2009-01-02 00:01:56.000000000 +0100
97768 @@ -57,6 +57,7 @@
97769 #define SDHCI_DATA_AVAILABLE 0x00000800
97770 #define SDHCI_CARD_PRESENT 0x00010000
97771 #define SDHCI_WRITE_PROTECT 0x00080000
97772 +#define SDHCI_DATA_BIT(x) (1 << ((x) + 20))
97773
97774 #define SDHCI_HOST_CONTROL 0x28
97775 #define SDHCI_CTRL_LED 0x01
97776 @@ -210,6 +211,8 @@ struct sdhci_host {
97777 #define SDHCI_QUIRK_BROKEN_SMALL_PIO (1<<13)
97778 /* Controller supports high speed but doesn't have the caps bit set */
97779 #define SDHCI_QUIRK_FORCE_HIGHSPEED (1<<14)
97780 +/* Controller does not provide transfer-complete interrupt when not busy */
97781 +#define SDHCI_QUIRK_NO_TCIRQ_ON_NOT_BUSY (1<<15)
97782
97783 int irq; /* Device IRQ */
97784 void __iomem * ioaddr; /* Mapped address */
97785 @@ -267,6 +270,14 @@ struct sdhci_host {
97786
97787 struct sdhci_ops {
97788 int (*enable_dma)(struct sdhci_host *host);
97789 + unsigned int (*get_max_clock)(struct sdhci_host *host);
97790 + unsigned int (*get_timeout_clock)(struct sdhci_host *host);
97791 +
97792 + void (*change_clock)(struct sdhci_host *host,
97793 + unsigned int clock);
97794 +
97795 + void (*set_ios)(struct sdhci_host *host,
97796 + struct mmc_ios *ios);
97797 };
97798
97799
97800 @@ -274,6 +285,8 @@ extern struct sdhci_host *sdhci_alloc_ho
97801 size_t priv_size);
97802 extern void sdhci_free_host(struct sdhci_host *host);
97803
97804 +extern void sdhci_change_clock(struct sdhci_host *host, unsigned int clock);
97805 +
97806 static inline void *sdhci_priv(struct sdhci_host *host)
97807 {
97808 return (void *)host->private;
97809 Index: linux-2.6.28/drivers/mmc/host/sdhci-pci.c
97810 ===================================================================
97811 --- linux-2.6.28.orig/drivers/mmc/host/sdhci-pci.c 2008-12-25 00:26:37.000000000 +0100
97812 +++ linux-2.6.28/drivers/mmc/host/sdhci-pci.c 2009-01-02 00:01:56.000000000 +0100
97813 @@ -391,6 +391,7 @@ static int sdhci_pci_enable_dma(struct s
97814
97815 static struct sdhci_ops sdhci_pci_ops = {
97816 .enable_dma = sdhci_pci_enable_dma,
97817 + .change_clock = sdhci_change_clock,
97818 };
97819
97820 /*****************************************************************************\
97821 Index: linux-2.6.28/drivers/mmc/host/sdhci-s3c.c
97822 ===================================================================
97823 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
97824 +++ linux-2.6.28/drivers/mmc/host/sdhci-s3c.c 2009-01-02 00:01:56.000000000 +0100
97825 @@ -0,0 +1,419 @@
97826 +/* linux/drivers/mmc/host/sdhci-s3c.c
97827 + *
97828 + * Copyright 2008 Openmoko Inc.
97829 + * Copyright 2008 Simtec Electronics
97830 + * Ben Dooks <ben@simtec.co.uk>
97831 + * http://armlinux.simtec.co.uk/
97832 + *
97833 + * SDHCI (HSMMC) support for Samsung SoC
97834 + *
97835 + * This program is free software; you can redistribute it and/or modify
97836 + * it under the terms of the GNU General Public License version 2 as
97837 + * published by the Free Software Foundation.
97838 + */
97839 +
97840 +#include <linux/delay.h>
97841 +#include <linux/dma-mapping.h>
97842 +#include <linux/platform_device.h>
97843 +#include <linux/clk.h>
97844 +#include <linux/io.h>
97845 +
97846 +#include <linux/mmc/host.h>
97847 +
97848 +#include <plat/regs-sdhci.h>
97849 +#include <plat/sdhci.h>
97850 +
97851 +#include "sdhci.h"
97852 +
97853 +#define MAX_BUS_CLK (4)
97854 +
97855 +struct sdhci_s3c {
97856 + struct sdhci_host *host;
97857 + struct platform_device *pdev;
97858 + struct resource *ioarea;
97859 + struct s3c_sdhci_platdata *pdata;
97860 + unsigned int cur_clk;
97861 +
97862 + struct clk *clk_io; /* clock for io bus */
97863 + struct clk *clk_bus[MAX_BUS_CLK];
97864 +};
97865 +
97866 +static inline struct sdhci_s3c *to_s3c(struct sdhci_host *host)
97867 +{
97868 + return sdhci_priv(host);
97869 +}
97870 +
97871 +static u32 get_curclk(u32 ctrl2)
97872 +{
97873 + ctrl2 &= S3C_SDHCI_CTRL2_SELBASECLK_MASK;
97874 + ctrl2 >>= S3C_SDHCI_CTRL2_SELBASECLK_SHIFT;
97875 +
97876 + return ctrl2;
97877 +}
97878 +
97879 +static void sdhci_s3c_check_sclk(struct sdhci_host *host)
97880 +{
97881 + struct sdhci_s3c *ourhost = to_s3c(host);
97882 + u32 tmp = readl(host->ioaddr + S3C_SDHCI_CONTROL2);
97883 +
97884 + if (get_curclk(tmp) != ourhost->cur_clk) {
97885 + dev_dbg(&ourhost->pdev->dev, "restored ctrl2 clock setting\n");
97886 +
97887 + tmp &= ~S3C_SDHCI_CTRL2_SELBASECLK_MASK;
97888 + tmp |= ourhost->cur_clk << S3C_SDHCI_CTRL2_SELBASECLK_SHIFT;
97889 + writel(tmp, host->ioaddr + 0x80);
97890 + }
97891 +}
97892 +
97893 +static unsigned int sdhci_s3c_get_max_clk(struct sdhci_host *host)
97894 +{
97895 + struct sdhci_s3c *ourhost = to_s3c(host);
97896 + struct clk *busclk;
97897 + unsigned int rate, max;
97898 + int clk;
97899 +
97900 + /* note, a reset will reset the clock source */
97901 +
97902 + sdhci_s3c_check_sclk(host);
97903 +
97904 + for (max = 0, clk = 0; clk < MAX_BUS_CLK; clk++) {
97905 + busclk = ourhost->clk_bus[clk];
97906 + if (!busclk)
97907 + continue;
97908 +
97909 + rate = clk_get_rate(busclk);
97910 + if (rate > max)
97911 + max = rate;
97912 + }
97913 +
97914 + return max;
97915 +}
97916 +
97917 +static unsigned int sdhci_s3c_get_timeout_clk(struct sdhci_host *host)
97918 +{
97919 + return sdhci_s3c_get_max_clk(host) / 1000000;
97920 +}
97921 +
97922 +static void sdhci_s3c_set_ios(struct sdhci_host *host,
97923 + struct mmc_ios *ios)
97924 +{
97925 + struct sdhci_s3c *ourhost = to_s3c(host);
97926 + struct s3c_sdhci_platdata *pdata = ourhost->pdata;
97927 + int width;
97928 +
97929 + sdhci_s3c_check_sclk(host);
97930 +
97931 + if (ios->power_mode != MMC_POWER_OFF) {
97932 + switch (ios->bus_width) {
97933 + case MMC_BUS_WIDTH_4:
97934 + width = 4;
97935 + break;
97936 + case MMC_BUS_WIDTH_1:
97937 + width = 1;
97938 + break;
97939 + default:
97940 + BUG();
97941 + }
97942 +
97943 + if (pdata->cfg_gpio)
97944 + pdata->cfg_gpio(ourhost->pdev, width);
97945 + }
97946 +
97947 + if (pdata->cfg_card)
97948 + pdata->cfg_card(ourhost->pdev, host->ioaddr,
97949 + ios, host->mmc->card);
97950 +}
97951 +
97952 +static unsigned int sdhci_s3c_consider_clock(struct sdhci_s3c *ourhost,
97953 + unsigned int src,
97954 + unsigned int wanted)
97955 +{
97956 + unsigned long rate;
97957 + struct clk *clksrc = ourhost->clk_bus[src];
97958 + int div;
97959 +
97960 + if (!clksrc)
97961 + return UINT_MAX;
97962 +
97963 + rate = clk_get_rate(clksrc);
97964 +
97965 + for (div = 1; div < 256; div *= 2) {
97966 + if ((rate / div) <= wanted)
97967 + break;
97968 + }
97969 +
97970 + dev_dbg(&ourhost->pdev->dev, "clk %d: rate %ld, want %d, got %ld\n",
97971 + src, rate, wanted, rate / div);
97972 +
97973 + return (wanted - (rate / div));
97974 +}
97975 +
97976 +static void sdhci_s3c_change_clock(struct sdhci_host *host, unsigned int clock)
97977 +{
97978 + struct sdhci_s3c *ourhost = to_s3c(host);
97979 + unsigned int best = UINT_MAX;
97980 + unsigned int delta;
97981 + int best_src = 0;
97982 + int src;
97983 + u32 ctrl;
97984 +
97985 + for (src = 0; src < MAX_BUS_CLK; src++) {
97986 + delta = sdhci_s3c_consider_clock(ourhost, src, clock);
97987 + if (delta < best) {
97988 + best = delta;
97989 + best_src = src;
97990 + }
97991 + }
97992 +
97993 + dev_dbg(&ourhost->pdev->dev,
97994 + "selected source %d, clock %d, delta %d\n",
97995 + best_src, clock, best);
97996 +
97997 + /* turn clock off to card before changing clock source */
97998 + writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL);
97999 +
98000 + /* select the new clock source */
98001 +
98002 + if (ourhost->cur_clk != best_src) {
98003 + struct clk *clk = ourhost->clk_bus[best_src];
98004 +
98005 + ourhost->cur_clk = best_src;
98006 + host->max_clk = clk_get_rate(clk);
98007 + host->timeout_clk = host->max_clk / 1000000;
98008 +
98009 + ctrl = readl(host->ioaddr + S3C_SDHCI_CONTROL2);
98010 + ctrl &= ~S3C_SDHCI_CTRL2_SELBASECLK_MASK;
98011 + ctrl |= best_src << S3C_SDHCI_CTRL2_SELBASECLK_SHIFT;
98012 + writel(ctrl, host->ioaddr + S3C_SDHCI_CONTROL2);
98013 + }
98014 +
98015 + sdhci_change_clock(host, clock);
98016 +}
98017 +
98018 +static struct sdhci_ops sdhci_s3c_ops = {
98019 + .get_max_clock = sdhci_s3c_get_max_clk,
98020 + .get_timeout_clock = sdhci_s3c_get_timeout_clk,
98021 + .change_clock = sdhci_s3c_change_clock,
98022 + .set_ios = sdhci_s3c_set_ios,
98023 +};
98024 +
98025 +/*
98026 + * call this when you need sd stack to recognize insertion or removal of card
98027 + * that can't be told by SDHCI regs
98028 + */
98029 +
98030 +void sdhci_s3c_force_presence_change(struct platform_device *pdev)
98031 +{
98032 + struct s3c_sdhci_platdata *pdata = pdev->dev.platform_data;
98033 +
98034 + dev_info(&pdev->dev, "sdhci_s3c_force_presence_change called\n");
98035 + mmc_detect_change(pdata->sdhci_host->mmc, msecs_to_jiffies(200));
98036 +}
98037 +EXPORT_SYMBOL_GPL(sdhci_s3c_force_presence_change);
98038 +
98039 +
98040 +static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
98041 +{
98042 + struct s3c_sdhci_platdata *pdata = pdev->dev.platform_data;
98043 + struct device *dev = &pdev->dev;
98044 + struct sdhci_host *host;
98045 + struct sdhci_s3c *sc;
98046 + struct resource *res;
98047 + int ret, irq, ptr, clks;
98048 +
98049 + if (!pdata) {
98050 + dev_err(dev, "no device data specified\n");
98051 + return -ENOENT;
98052 + }
98053 +
98054 + irq = platform_get_irq(pdev, 0);
98055 + if (irq < 0) {
98056 + dev_err(dev, "no irq specified\n");
98057 + return irq;
98058 + }
98059 +
98060 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
98061 + if (!res) {
98062 + dev_err(dev, "no memory specified\n");
98063 + return -ENOENT;
98064 + }
98065 +
98066 + host = sdhci_alloc_host(dev, sizeof(struct sdhci_s3c));
98067 + if (IS_ERR(host)) {
98068 + dev_err(dev, "sdhci_alloc_host() failed\n");
98069 + return PTR_ERR(host);
98070 + }
98071 +
98072 + pdata->sdhci_host = host;
98073 +
98074 + sc = sdhci_priv(host);
98075 +
98076 + sc->host = host;
98077 + sc->pdev = pdev;
98078 + sc->pdata = pdata;
98079 +
98080 + platform_set_drvdata(pdev, host);
98081 +
98082 + sc->clk_io = clk_get(dev, "hsmmc");
98083 + if (IS_ERR(sc->clk_io)) {
98084 + dev_err(dev, "failed to get io clock\n");
98085 + ret = PTR_ERR(sc->clk_io);
98086 + goto err_io_clk;
98087 + }
98088 +
98089 + /* enable the local io clock and keep it running for the moment. */
98090 + clk_enable(sc->clk_io);
98091 +
98092 + for (clks = 0, ptr = 0; ptr < MAX_BUS_CLK; ptr++) {
98093 + struct clk *clk;
98094 + char *name = pdata->clocks[ptr];
98095 +
98096 + if (name == NULL)
98097 + continue;
98098 +
98099 + clk = clk_get(dev, name);
98100 + if (IS_ERR(clk)) {
98101 + dev_err(dev, "failed to get clock %s\n", name);
98102 + continue;
98103 + }
98104 +
98105 + clks++;
98106 + sc->clk_bus[ptr] = clk;
98107 + clk_enable(clk);
98108 +
98109 + dev_info(dev, "clock source %d: %s (%ld Hz)\n",
98110 + ptr, name, clk_get_rate(clk));
98111 + }
98112 +
98113 + if (clks == 0) {
98114 + dev_err(dev, "failed to find any bus clocks\n");
98115 + ret = -ENOENT;
98116 + goto err_no_busclks;
98117 + }
98118 +
98119 + sc->ioarea = request_mem_region(res->start, resource_size(res),
98120 + mmc_hostname(host->mmc));
98121 + if (!sc->ioarea) {
98122 + dev_err(dev, "failed to reserve register area\n");
98123 + ret = -ENXIO;
98124 + goto err_req_regs;
98125 + }
98126 +
98127 + host->ioaddr = ioremap_nocache(res->start, resource_size(res));
98128 + if (!host->ioaddr) {
98129 + dev_err(dev, "failed to map registers\n");
98130 + ret = -ENXIO;
98131 + goto err_req_regs;
98132 + }
98133 +
98134 + /* Ensure we have minimal gpio selected CMD/CLK/Detect */
98135 + if (pdata->cfg_gpio)
98136 + pdata->cfg_gpio(pdev, 0);
98137 +
98138 + sdhci_s3c_check_sclk(host);
98139 +
98140 + host->hw_name = "samsung-hsmmc";
98141 + host->ops = &sdhci_s3c_ops;
98142 + host->quirks = 0;
98143 + host->irq = irq;
98144 +
98145 + /* Setup quirks for the controller */
98146 +
98147 + /* Currently with ADMA enabled we are getting some length
98148 + * interrupts that are not being dealt with, do disable
98149 + * ADMA until this is sorted out. */
98150 + host->quirks |= SDHCI_QUIRK_BROKEN_ADMA;
98151 + host->quirks |= SDHCI_QUIRK_32BIT_ADMA_SIZE;
98152 +
98153 + /* It seems we do not get an DATA transfer complete on non-busy
98154 + * transfers, not sure if this is a problem with this specific
98155 + * SDHCI block, or a missing configuration that needs to be set. */
98156 + host->quirks |= SDHCI_QUIRK_NO_TCIRQ_ON_NOT_BUSY;
98157 +
98158 + host->quirks |= (SDHCI_QUIRK_32BIT_DMA_ADDR |
98159 + SDHCI_QUIRK_32BIT_DMA_SIZE);
98160 +
98161 + ret = sdhci_add_host(host);
98162 + if (ret) {
98163 + dev_err(dev, "sdhci_add_host() failed\n");
98164 + goto err_add_host;
98165 + }
98166 +
98167 + return 0;
98168 +
98169 + err_add_host:
98170 + release_resource(sc->ioarea);
98171 + kfree(sc->ioarea);
98172 +
98173 + err_req_regs:
98174 + for (ptr = 0; ptr < MAX_BUS_CLK; ptr++) {
98175 + clk_disable(sc->clk_bus[ptr]);
98176 + clk_put(sc->clk_bus[ptr]);
98177 + }
98178 +
98179 + err_no_busclks:
98180 + clk_disable(sc->clk_io);
98181 + clk_put(sc->clk_io);
98182 +
98183 + err_io_clk:
98184 + sdhci_free_host(host);
98185 +
98186 + return ret;
98187 +}
98188 +
98189 +static int __devexit sdhci_s3c_remove(struct platform_device *pdev)
98190 +{
98191 + return 0;
98192 +}
98193 +
98194 +#ifdef CONFIG_PM
98195 +
98196 +static int sdhci_s3c_suspend(struct platform_device *dev, pm_message_t pm)
98197 +{
98198 + struct sdhci_host *host = platform_get_drvdata(dev);
98199 +
98200 + sdhci_suspend_host(host, pm);
98201 + return 0;
98202 +}
98203 +
98204 +static int sdhci_s3c_resume(struct platform_device *dev)
98205 +{
98206 + struct sdhci_host *host = platform_get_drvdata(dev);
98207 +
98208 + sdhci_resume_host(host);
98209 + return 0;
98210 +}
98211 +
98212 +#else
98213 +#define sdhci_s3c_suspend NULL
98214 +#define sdhci_s3c_resume NULL
98215 +#endif
98216 +
98217 +static struct platform_driver sdhci_s3c_driver = {
98218 + .probe = sdhci_s3c_probe,
98219 + .remove = __devexit_p(sdhci_s3c_remove),
98220 + .suspend = sdhci_s3c_suspend,
98221 + .resume = sdhci_s3c_resume,
98222 + .driver = {
98223 + .owner = THIS_MODULE,
98224 + .name = "s3c-sdhci",
98225 + },
98226 +};
98227 +
98228 +static int __init sdhci_s3c_init(void)
98229 +{
98230 + return platform_driver_register(&sdhci_s3c_driver);
98231 +}
98232 +
98233 +static void __exit sdhci_s3c_exit(void)
98234 +{
98235 + platform_driver_unregister(&sdhci_s3c_driver);
98236 +}
98237 +
98238 +module_init(sdhci_s3c_init);
98239 +module_exit(sdhci_s3c_exit);
98240 +
98241 +MODULE_DESCRIPTION("Samsung SDHCI (HSMMC) glue");
98242 +MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
98243 +MODULE_LICENSE("GPL v2");
98244 +MODULE_ALIAS("platform:s3c-sdhci");
98245 Index: linux-2.6.28/drivers/mtd/nand/s3c2410.c
98246 ===================================================================
98247 --- linux-2.6.28.orig/drivers/mtd/nand/s3c2410.c 2008-12-25 00:26:37.000000000 +0100
98248 +++ linux-2.6.28/drivers/mtd/nand/s3c2410.c 2009-01-02 00:01:56.000000000 +0100
98249 @@ -45,8 +45,8 @@
98250
98251 #include <asm/io.h>
98252
98253 -#include <asm/plat-s3c/regs-nand.h>
98254 -#include <asm/plat-s3c/nand.h>
98255 +#include <plat/regs-nand.h>
98256 +#include <plat/nand.h>
98257
98258 #ifdef CONFIG_MTD_NAND_S3C2410_HWECC
98259 static int hardware_ecc = 1;
98260 @@ -231,8 +231,6 @@ static int s3c2410_nand_setrate(struct s
98261 BUG();
98262 }
98263
98264 - dev_dbg(info->device, "NF_CONF is 0x%lx\n", cfg);
98265 -
98266 local_irq_save(flags);
98267
98268 cfg = readl(info->regs + S3C2410_NFCONF);
98269 @@ -240,6 +238,8 @@ static int s3c2410_nand_setrate(struct s
98270 cfg |= set;
98271 writel(cfg, info->regs + S3C2410_NFCONF);
98272
98273 + dev_dbg(info->device, "NF_CONF is 0x%lx\n", cfg);
98274 +
98275 local_irq_restore(flags);
98276
98277 return 0;
98278 @@ -438,7 +438,7 @@ static int s3c2410_nand_correct_data(str
98279 if ((diff0 & ~(1<<fls(diff0))) == 0)
98280 return 1;
98281
98282 - return -1;
98283 + return -EBADMSG;
98284 }
98285
98286 /* ECC functions
98287 @@ -530,7 +530,12 @@ static void s3c2410_nand_read_buf(struct
98288 static void s3c2440_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len)
98289 {
98290 struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd);
98291 + u8 *ptr = buf + (len & ~3);
98292 + int i;
98293 +
98294 readsl(info->regs + S3C2440_NFDATA, buf, len / 4);
98295 + for (i = 0; i != (len & 3); i++)
98296 + ptr[i] = readb(info->regs + S3C2440_NFDATA);
98297 }
98298
98299 static void s3c2410_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int len)
98300 @@ -645,17 +650,31 @@ static int s3c2410_nand_remove(struct pl
98301 }
98302
98303 #ifdef CONFIG_MTD_PARTITIONS
98304 +const char *part_probes[] = { "cmdlinepart", NULL };
98305 static int s3c2410_nand_add_partition(struct s3c2410_nand_info *info,
98306 struct s3c2410_nand_mtd *mtd,
98307 struct s3c2410_nand_set *set)
98308 {
98309 + struct mtd_partition *part_info;
98310 + int nr_part = 0;
98311 +
98312 if (set == NULL)
98313 return add_mtd_device(&mtd->mtd);
98314
98315 - if (set->nr_partitions > 0 && set->partitions != NULL) {
98316 - return add_mtd_partitions(&mtd->mtd, set->partitions, set->nr_partitions);
98317 + if (set->nr_partitions == 0) {
98318 + mtd->mtd.name = set->name;
98319 + nr_part = parse_mtd_partitions(&mtd->mtd, part_probes,
98320 + &part_info, 0);
98321 + } else {
98322 + if (set->nr_partitions > 0 && set->partitions != NULL) {
98323 + nr_part = set->nr_partitions;
98324 + part_info = set->partitions;
98325 + }
98326 }
98327
98328 + if (nr_part > 0 && part_info)
98329 + return add_mtd_partitions(&mtd->mtd, part_info, nr_part);
98330 +
98331 return add_mtd_device(&mtd->mtd);
98332 }
98333 #else
98334 @@ -684,9 +703,13 @@ static void s3c2410_nand_init_chip(struc
98335 chip->select_chip = s3c2410_nand_select_chip;
98336 chip->chip_delay = 50;
98337 chip->priv = nmtd;
98338 - chip->options = 0;
98339 chip->controller = &info->controller;
98340
98341 + if (set->flags & S3C2410_NAND_BBT)
98342 + chip->options = NAND_USE_FLASH_BBT;
98343 + else
98344 + chip->options = 0;
98345 +
98346 switch (info->cpu_type) {
98347 case TYPE_S3C2410:
98348 chip->IO_ADDR_W = regs + S3C2410_NFDATA;
98349 @@ -726,7 +749,7 @@ static void s3c2410_nand_init_chip(struc
98350 nmtd->mtd.owner = THIS_MODULE;
98351 nmtd->set = set;
98352
98353 - if (hardware_ecc) {
98354 + if (!info->platform->software_ecc && hardware_ecc) {
98355 chip->ecc.calculate = s3c2410_nand_calculate_ecc;
98356 chip->ecc.correct = s3c2410_nand_correct_data;
98357 chip->ecc.mode = NAND_ECC_HW;
98358 Index: linux-2.6.28/drivers/net/wireless/libertas/if_sdio.c
98359 ===================================================================
98360 --- linux-2.6.28.orig/drivers/net/wireless/libertas/if_sdio.c 2008-12-25 00:26:37.000000000 +0100
98361 +++ linux-2.6.28/drivers/net/wireless/libertas/if_sdio.c 2009-01-02 00:01:56.000000000 +0100
98362 @@ -48,6 +48,7 @@ module_param_named(fw_name, lbs_fw_name,
98363
98364 static const struct sdio_device_id if_sdio_ids[] = {
98365 { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_LIBERTAS) },
98366 + { SDIO_DEVICE(SDIO_VENDOR_ID_MARVELL, SDIO_DEVICE_ID_MARVELL_88W8688) },
98367 { /* end: all zeroes */ },
98368 };
98369
98370 @@ -72,7 +73,12 @@ static struct if_sdio_model if_sdio_mode
98371 .helper = "sd8686_helper.bin",
98372 .firmware = "sd8686.bin",
98373 },
98374 -};
98375 + {
98376 + /* 8688 */
98377 + .model = 0x10,
98378 + .helper = "sd8688_helper.bin",
98379 + .firmware = "sd8688.bin",
98380 + },};
98381
98382 struct if_sdio_packet {
98383 struct if_sdio_packet *next;
98384 Index: linux-2.6.28/drivers/pnp/Kconfig
98385 ===================================================================
98386 --- linux-2.6.28.orig/drivers/pnp/Kconfig 2008-12-25 00:26:37.000000000 +0100
98387 +++ linux-2.6.28/drivers/pnp/Kconfig 2009-01-02 00:01:56.000000000 +0100
98388 @@ -5,7 +5,7 @@
98389 menuconfig PNP
98390 bool "Plug and Play support"
98391 depends on HAS_IOMEM
98392 - depends on ISA || ACPI
98393 + depends on ISA || ACPI || SDIO
98394 ---help---
98395 Plug and Play (PnP) is a standard for peripherals which allows those
98396 peripherals to be configured by software, e.g. assign IRQ's or other
98397 Index: linux-2.6.28/drivers/pnp/resource.c
98398 ===================================================================
98399 --- linux-2.6.28.orig/drivers/pnp/resource.c 2008-12-25 00:26:37.000000000 +0100
98400 +++ linux-2.6.28/drivers/pnp/resource.c 2009-01-02 00:01:56.000000000 +0100
98401 @@ -436,6 +436,7 @@ int pnp_check_dma(struct pnp_dev *dev, s
98402 }
98403 }
98404
98405 +#if 0
98406 /* check if the resource is already in use, skip if the
98407 * device is active because it itself may be in use */
98408 if (!dev->active) {
98409 @@ -443,6 +444,7 @@ int pnp_check_dma(struct pnp_dev *dev, s
98410 return 0;
98411 free_dma(*dma);
98412 }
98413 +#endif
98414
98415 /* check for conflicts with other pnp devices */
98416 pnp_for_each_dev(tdev) {
98417 Index: linux-2.6.28/drivers/power/bq27000_battery.c
98418 ===================================================================
98419 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
98420 +++ linux-2.6.28/drivers/power/bq27000_battery.c 2009-01-02 00:01:56.000000000 +0100
98421 @@ -0,0 +1,463 @@
98422 +/*
98423 + * Driver for batteries with bq27000 chips inside via HDQ
98424 + *
98425 + * Copyright 2008 Openmoko, Inc
98426 + * Andy Green <andy@openmoko.com>
98427 + *
98428 + * based on ds2760 driver, original copyright notice for that --->
98429 + *
98430 + * Copyright © 2007 Anton Vorontsov
98431 + * 2004-2007 Matt Reimer
98432 + * 2004 Szabolcs Gyurko
98433 + *
98434 + * Use consistent with the GNU GPL is permitted,
98435 + * provided that this copyright notice is
98436 + * preserved in its entirety in all copies and derived works.
98437 + *
98438 + * Author: Anton Vorontsov <cbou@mail.ru>
98439 + * February 2007
98440 + *
98441 + * Matt Reimer <mreimer@vpop.net>
98442 + * April 2004, 2005, 2007
98443 + *
98444 + * Szabolcs Gyurko <szabolcs.gyurko@tlt.hu>
98445 + * September 2004
98446 + */
98447 +
98448 +#include <linux/module.h>
98449 +#include <linux/param.h>
98450 +#include <linux/jiffies.h>
98451 +#include <linux/delay.h>
98452 +#include <linux/pm.h>
98453 +#include <linux/workqueue.h>
98454 +#include <linux/platform_device.h>
98455 +#include <linux/power_supply.h>
98456 +#include <linux/bq27000_battery.h>
98457 +
98458 +enum bq27000_regs {
98459 + /* RAM regs */
98460 + /* read-write after this */
98461 + BQ27000_CTRL = 0, /* Device Control Register */
98462 + BQ27000_MODE, /* Device Mode Register */
98463 + BQ27000_AR_L, /* At-Rate H L */
98464 + BQ27000_AR_H,
98465 + /* read-only after this */
98466 + BQ27000_ARTTE_L, /* At-Rate Time To Empty H L */
98467 + BQ27000_ARTTE_H,
98468 + BQ27000_TEMP_L, /* Reported Temperature H L */
98469 + BQ27000_TEMP_H,
98470 + BQ27000_VOLT_L, /* Reported Voltage H L */
98471 + BQ27000_VOLT_H,
98472 + BQ27000_FLAGS, /* Status Flags */
98473 + BQ27000_RSOC, /* Relative State of Charge */
98474 + BQ27000_NAC_L, /* Nominal Available Capacity H L */
98475 + BQ27000_NAC_H,
98476 + BQ27000_CACD_L, /* Discharge Compensated H L */
98477 + BQ27000_CACD_H,
98478 + BQ27000_CACT_L, /* Temperature Compensated H L */
98479 + BQ27000_CACT_H,
98480 + BQ27000_LMD_L, /* Last measured discharge H L */
98481 + BQ27000_LMD_H,
98482 + BQ27000_AI_L, /* Average Current H L */
98483 + BQ27000_AI_H,
98484 + BQ27000_TTE_L, /* Time to Empty H L */
98485 + BQ27000_TTE_H,
98486 + BQ27000_TTF_L, /* Time to Full H L */
98487 + BQ27000_TTF_H,
98488 + BQ27000_SI_L, /* Standby Current H L */
98489 + BQ27000_SI_H,
98490 + BQ27000_STTE_L, /* Standby Time To Empty H L */
98491 + BQ27000_STTE_H,
98492 + BQ27000_MLI_L, /* Max Load Current H L */
98493 + BQ27000_MLI_H,
98494 + BQ27000_MLTTE_L, /* Max Load Time To Empty H L */
98495 + BQ27000_MLTTE_H,
98496 + BQ27000_SAE_L, /* Available Energy H L */
98497 + BQ27000_SAE_H,
98498 + BQ27000_AP_L, /* Available Power H L */
98499 + BQ27000_AP_H,
98500 + BQ27000_TTECP_L, /* Time to Empty at Constant Power H L */
98501 + BQ27000_TTECP_H,
98502 + BQ27000_CYCL_L, /* Cycle count since learning cycle H L */
98503 + BQ27000_CYCL_H,
98504 + BQ27000_CYCT_L, /* Cycle Count Total H L */
98505 + BQ27000_CYCT_H,
98506 + BQ27000_CSOC, /* Compensated State Of Charge */
98507 + /* EEPROM regs */
98508 + /* read-write after this */
98509 + BQ27000_EE_EE_EN = 0x6e, /* EEPROM Program Enable */
98510 + BQ27000_EE_ILMD = 0x76, /* Initial Last Measured Discharge High Byte */
98511 + BQ27000_EE_SEDVF, /* Scaled EDVF Threshold */
98512 + BQ27000_EE_SEDV1, /* Scaled EDV1 Threshold */
98513 + BQ27000_EE_ISLC, /* Initial Standby Load Current */
98514 + BQ27000_EE_DMFSD, /* Digital Magnitude Filter and Self Discharge */
98515 + BQ27000_EE_TAPER, /* Aging Estimate Enable, Charge Termination Taper */
98516 + BQ27000_EE_PKCFG, /* Pack Configuration Values */
98517 + BQ27000_EE_IMLC, /* Initial Max Load Current or ID #3 */
98518 + BQ27000_EE_DCOMP, /* Discharge rate compensation constants or ID #2 */
98519 + BQ27000_EE_TCOMP, /* Temperature Compensation constants or ID #1 */
98520 +};
98521 +
98522 +enum bq27000_status_flags {
98523 + BQ27000_STATUS_CHGS = 0x80, /* 1 = being charged */
98524 + BQ27000_STATUS_NOACT = 0x40, /* 1 = no activity */
98525 + BQ27000_STATUS_IMIN = 0x20, /* 1 = Lion taper current mode */
98526 + BQ27000_STATUS_CI = 0x10, /* 1 = capacity likely innacurate */
98527 + BQ27000_STATUS_CALIP = 0x08, /* 1 = calibration in progress */
98528 + BQ27000_STATUS_VDQ = 0x04, /* 1 = capacity should be accurate */
98529 + BQ27000_STATUS_EDV1 = 0x02, /* 1 = end of discharge.. <6% left */
98530 + BQ27000_STATUS_EDVF = 0x01, /* 1 = no, it's really empty now */
98531 +};
98532 +
98533 +#define NANOVOLTS_UNIT 3750
98534 +
98535 +struct bq27000_bat_regs {
98536 + int ai;
98537 + int flags;
98538 + int lmd;
98539 + int rsoc;
98540 + int temp;
98541 + int tte;
98542 + int ttf;
98543 + int volt;
98544 +};
98545 +
98546 +struct bq27000_device_info {
98547 + struct device *dev;
98548 + struct power_supply bat;
98549 + struct delayed_work work;
98550 + struct bq27000_platform_data *pdata;
98551 +
98552 + struct bq27000_bat_regs regs;
98553 +};
98554 +
98555 +static unsigned int cache_time = 10000;
98556 +module_param(cache_time, uint, 0644);
98557 +MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
98558 +
98559 +/*
98560 + * reading 16 bit values over HDQ has a special hazard where the
98561 + * hdq device firmware can update the 16-bit register during the time we
98562 + * read the two halves. TI document SLUS556D recommends the algorithm here
98563 + * to avoid trouble
98564 + */
98565 +
98566 +static int hdq_read16(struct bq27000_device_info *di, int address)
98567 +{
98568 + int acc;
98569 + int high;
98570 + int retries = 3;
98571 +
98572 + while (retries--) {
98573 +
98574 + high = (di->pdata->hdq_read)(address + 1); /* high part */
98575 +
98576 + if (high < 0)
98577 + return high;
98578 + acc = (di->pdata->hdq_read)(address);
98579 + if (acc < 0)
98580 + return acc;
98581 +
98582 + /* confirm high didn't change between reading it and low */
98583 + if (high == (di->pdata->hdq_read)(address + 1))
98584 + return (high << 8) | acc;
98585 + }
98586 +
98587 + return -ETIME;
98588 +}
98589 +
98590 +static void bq27000_battery_external_power_changed(struct power_supply *psy)
98591 +{
98592 + struct bq27000_device_info *di = container_of(psy, struct bq27000_device_info, bat);
98593 +
98594 + power_supply_changed(&di->bat);
98595 + dev_dbg(di->dev, "%s\n", __FUNCTION__);
98596 +}
98597 +
98598 +static int bq27000_battery_get_property(struct power_supply *psy,
98599 + enum power_supply_property psp,
98600 + union power_supply_propval *val)
98601 +{
98602 + int n;
98603 + struct bq27000_device_info *di = container_of(psy, struct bq27000_device_info, bat);
98604 +
98605 + switch (psp) {
98606 + case POWER_SUPPLY_PROP_STATUS:
98607 + val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
98608 +
98609 + if (!di->pdata->get_charger_online_status)
98610 + goto use_bat;
98611 + if ((di->pdata->get_charger_online_status)()) {
98612 + /*
98613 + * charger is definitively present
98614 + * we report our state in terms of what it says it
98615 + * is doing
98616 + */
98617 + if (!di->pdata->get_charger_active_status)
98618 + goto use_bat;
98619 +
98620 + if ((di->pdata->get_charger_active_status)()) {
98621 + val->intval = POWER_SUPPLY_STATUS_CHARGING;
98622 + break;
98623 + }
98624 + val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
98625 + break;
98626 + }
98627 +
98628 + /*
98629 + * platform provided definite indication of charger presence,
98630 + * and it is telling us it isn't there... but we are on so we
98631 + * must be running from battery --->
98632 + */
98633 +
98634 + val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
98635 + break;
98636 +
98637 +use_bat:
98638 + /*
98639 + * either the charger is not connected, or the
98640 + * platform doesn't give info about charger, use battery state
98641 + * but... battery state can be out of date by 4 seconds or
98642 + * so... use the platform callbacks if possible.
98643 + */
98644 +
98645 + /* no real activity on the battery */
98646 + if (di->regs.ai < 2) {
98647 + if (!di->regs.ttf)
98648 + val->intval = POWER_SUPPLY_STATUS_FULL;
98649 + else
98650 + val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
98651 + break;
98652 + }
98653 + /* power is actually going in or out... */
98654 + if (di->regs.flags < 0)
98655 + return di->regs.flags;
98656 + if (di->regs.flags & BQ27000_STATUS_CHGS)
98657 + val->intval = POWER_SUPPLY_STATUS_CHARGING;
98658 + else
98659 + val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
98660 + break;
98661 + case POWER_SUPPLY_PROP_HEALTH:
98662 + val->intval = POWER_SUPPLY_HEALTH_UNKNOWN;
98663 + /* Do we have accurate readings... */
98664 + if (di->regs.flags < 0)
98665 + return di->regs.flags;
98666 + if (di->regs.flags & BQ27000_STATUS_VDQ)
98667 + val->intval = POWER_SUPPLY_HEALTH_GOOD;
98668 + break;
98669 + case POWER_SUPPLY_PROP_VOLTAGE_NOW:
98670 + if (di->regs.volt < 0)
98671 + return di->regs.volt;
98672 + /* mV -> uV */
98673 + val->intval = di->regs.volt * 1000;
98674 + break;
98675 + case POWER_SUPPLY_PROP_CURRENT_NOW:
98676 + if (di->regs.flags < 0)
98677 + return di->regs.flags;
98678 + if (di->regs.flags & BQ27000_STATUS_CHGS)
98679 + n = -NANOVOLTS_UNIT;
98680 + else
98681 + n = NANOVOLTS_UNIT;
98682 + if (di->regs.ai < 0)
98683 + return di->regs.ai;
98684 + val->intval = (di->regs.ai * n) / di->pdata->rsense_mohms;
98685 + break;
98686 + case POWER_SUPPLY_PROP_CHARGE_FULL:
98687 + if (di->regs.lmd < 0)
98688 + return di->regs.lmd;
98689 + val->intval = (di->regs.lmd * 3570) / di->pdata->rsense_mohms;
98690 + break;
98691 + case POWER_SUPPLY_PROP_TEMP:
98692 + if (di->regs.temp < 0)
98693 + return di->regs.temp;
98694 + /* K (in 0.25K units) is 273.15 up from C (in 0.1C)*/
98695 + /* 10926 = 27315 * 4 / 10 */
98696 + val->intval = (((long)di->regs.temp * 10l) - 10926) / 4;
98697 + break;
98698 + case POWER_SUPPLY_PROP_TECHNOLOGY:
98699 + val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
98700 + break;
98701 + case POWER_SUPPLY_PROP_CAPACITY:
98702 + val->intval = di->regs.rsoc;
98703 + if (val->intval < 0)
98704 + return val->intval;
98705 + break;
98706 + case POWER_SUPPLY_PROP_PRESENT:
98707 + val->intval = !(di->regs.rsoc < 0);
98708 + break;
98709 + case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW:
98710 + if (di->regs.tte < 0)
98711 + return di->regs.tte;
98712 + val->intval = 60 * di->regs.tte;
98713 + break;
98714 + case POWER_SUPPLY_PROP_TIME_TO_FULL_NOW:
98715 + if (di->regs.ttf < 0)
98716 + return di->regs.ttf;
98717 + val->intval = 60 * di->regs.ttf;
98718 + break;
98719 + case POWER_SUPPLY_PROP_ONLINE:
98720 + if (di->pdata->get_charger_online_status)
98721 + val->intval = (di->pdata->get_charger_online_status)();
98722 + else
98723 + return -EINVAL;
98724 + break;
98725 + default:
98726 + return -EINVAL;
98727 + }
98728 +
98729 + return 0;
98730 +}
98731 +
98732 +static void bq27000_battery_work(struct work_struct *work)
98733 +{
98734 + struct bq27000_device_info *di =
98735 + container_of(work, struct bq27000_device_info, work.work);
98736 +
98737 + if ((di->pdata->hdq_initialized)()) {
98738 + struct bq27000_bat_regs regs;
98739 +
98740 + regs.ai = hdq_read16(di, BQ27000_AI_L);
98741 + regs.flags = (di->pdata->hdq_read)(BQ27000_FLAGS);
98742 + regs.lmd = hdq_read16(di, BQ27000_LMD_L);
98743 + regs.rsoc = (di->pdata->hdq_read)(BQ27000_RSOC);
98744 + regs.temp = hdq_read16(di, BQ27000_TEMP_L);
98745 + regs.tte = hdq_read16(di, BQ27000_TTE_L);
98746 + regs.ttf = hdq_read16(di, BQ27000_TTF_L);
98747 + regs.volt = hdq_read16(di, BQ27000_VOLT_L);
98748 +
98749 + if (memcmp (&regs, &di->regs, sizeof(regs)) != 0) {
98750 + di->regs = regs;
98751 + power_supply_changed(&di->bat);
98752 + }
98753 + }
98754 +
98755 + if (!schedule_delayed_work(&di->work, cache_time))
98756 + dev_err(di->dev, "battery service reschedule failed\n");
98757 +}
98758 +
98759 +static enum power_supply_property bq27000_battery_props[] = {
98760 + POWER_SUPPLY_PROP_STATUS,
98761 + POWER_SUPPLY_PROP_HEALTH,
98762 + POWER_SUPPLY_PROP_VOLTAGE_NOW,
98763 + POWER_SUPPLY_PROP_CURRENT_NOW,
98764 + POWER_SUPPLY_PROP_CHARGE_FULL,
98765 + POWER_SUPPLY_PROP_TEMP,
98766 + POWER_SUPPLY_PROP_TECHNOLOGY,
98767 + POWER_SUPPLY_PROP_PRESENT,
98768 + POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
98769 + POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
98770 + POWER_SUPPLY_PROP_CAPACITY,
98771 + POWER_SUPPLY_PROP_ONLINE
98772 +};
98773 +
98774 +static int bq27000_battery_probe(struct platform_device *pdev)
98775 +{
98776 + int retval = 0;
98777 + struct bq27000_device_info *di;
98778 + struct bq27000_platform_data *pdata;
98779 +
98780 + dev_info(&pdev->dev, "BQ27000 Battery Driver (C) 2008 Openmoko, Inc\n");
98781 +
98782 + di = kzalloc(sizeof(*di), GFP_KERNEL);
98783 + if (!di) {
98784 + retval = -ENOMEM;
98785 + goto di_alloc_failed;
98786 + }
98787 +
98788 + platform_set_drvdata(pdev, di);
98789 +
98790 + pdata = pdev->dev.platform_data;
98791 + di->dev = &pdev->dev;
98792 + /* di->w1_dev = pdev->dev.parent; */
98793 + di->bat.name = pdata->name;
98794 + di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
98795 + di->bat.properties = bq27000_battery_props;
98796 + di->bat.num_properties = ARRAY_SIZE(bq27000_battery_props);
98797 + di->bat.get_property = bq27000_battery_get_property;
98798 + di->bat.external_power_changed =
98799 + bq27000_battery_external_power_changed;
98800 + di->bat.use_for_apm = 1;
98801 + di->pdata = pdata;
98802 +
98803 + retval = power_supply_register(&pdev->dev, &di->bat);
98804 + if (retval) {
98805 + dev_err(di->dev, "failed to register battery\n");
98806 + goto batt_failed;
98807 + }
98808 +
98809 + INIT_DELAYED_WORK(&di->work, bq27000_battery_work);
98810 +
98811 + if (!schedule_delayed_work(&di->work, 0))
98812 + dev_err(di->dev, "failed to schedule bq27000_battery_work\n");
98813 +
98814 + return 0;
98815 +
98816 +batt_failed:
98817 + kfree(di);
98818 +di_alloc_failed:
98819 + return retval;
98820 +}
98821 +
98822 +static int bq27000_battery_remove(struct platform_device *pdev)
98823 +{
98824 + struct bq27000_device_info *di = platform_get_drvdata(pdev);
98825 +
98826 + cancel_delayed_work(&di->work);
98827 +
98828 + power_supply_unregister(&di->bat);
98829 +
98830 + return 0;
98831 +}
98832 +
98833 +#ifdef CONFIG_PM
98834 +
98835 +static int bq27000_battery_suspend(struct platform_device *pdev,
98836 + pm_message_t state)
98837 +{
98838 + struct bq27000_device_info *di = platform_get_drvdata(pdev);
98839 +
98840 + cancel_delayed_work(&di->work);
98841 + return 0;
98842 +}
98843 +
98844 +static int bq27000_battery_resume(struct platform_device *pdev)
98845 +{
98846 + struct bq27000_device_info *di = platform_get_drvdata(pdev);
98847 +
98848 + schedule_delayed_work(&di->work, 0);
98849 + return 0;
98850 +}
98851 +
98852 +#else
98853 +
98854 +#define bq27000_battery_suspend NULL
98855 +#define bq27000_battery_resume NULL
98856 +
98857 +#endif /* CONFIG_PM */
98858 +
98859 +static struct platform_driver bq27000_battery_driver = {
98860 + .driver = {
98861 + .name = "bq27000-battery",
98862 + },
98863 + .probe = bq27000_battery_probe,
98864 + .remove = bq27000_battery_remove,
98865 + .suspend = bq27000_battery_suspend,
98866 + .resume = bq27000_battery_resume,
98867 +};
98868 +
98869 +static int __init bq27000_battery_init(void)
98870 +{
98871 + return platform_driver_register(&bq27000_battery_driver);
98872 +}
98873 +
98874 +static void __exit bq27000_battery_exit(void)
98875 +{
98876 + platform_driver_unregister(&bq27000_battery_driver);
98877 +}
98878 +
98879 +module_init(bq27000_battery_init);
98880 +module_exit(bq27000_battery_exit);
98881 +
98882 +MODULE_LICENSE("GPL");
98883 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
98884 +MODULE_DESCRIPTION("bq27000 battery driver");
98885 Index: linux-2.6.28/drivers/power/gta02_hdq.c
98886 ===================================================================
98887 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
98888 +++ linux-2.6.28/drivers/power/gta02_hdq.c 2009-01-02 00:01:56.000000000 +0100
98889 @@ -0,0 +1,292 @@
98890 +/*
98891 + * HDQ driver for the FIC Neo1973 GTA02 GSM phone
98892 + *
98893 + * (C) 2006-2007 by Openmoko, Inc.
98894 + * Author: Andy Green <andy@openmoko.com>
98895 + * All rights reserved.
98896 + *
98897 + * This program is free software; you can redistribute it and/or modify
98898 + * it under the terms of the GNU General Public License version 2 as
98899 + * published by the Free Software Foundation.
98900 + *
98901 + */
98902 +
98903 +#include <linux/kernel.h>
98904 +#include <linux/init.h>
98905 +#include <linux/delay.h>
98906 +#include <linux/platform_device.h>
98907 +#include <mach/hardware.h>
98908 +#include <linux/gta02_hdq.h>
98909 +#include <asm/mach-types.h>
98910 +#include <mach/gta02.h>
98911 +#include <mach/fiq_ipc_gta02.h>
98912 +
98913 +
98914 +
98915 +#define HDQ_READ 0
98916 +#define HDQ_WRITE 0x80
98917 +
98918 +static int fiq_busy(void)
98919 +{
98920 + int request = (volatile u8)fiq_ipc.hdq_request_ctr;
98921 + int transact = (volatile u8)fiq_ipc.hdq_transaction_ctr;
98922 +
98923 + return (request != transact);
98924 +}
98925 +
98926 +int gta02hdq_initialized(void)
98927 +{
98928 + return fiq_ipc.hdq_probed;
98929 +}
98930 +EXPORT_SYMBOL_GPL(gta02hdq_initialized);
98931 +
98932 +int gta02hdq_read(int address)
98933 +{
98934 + int count_sleeps = 5;
98935 + int ret = -ETIME;
98936 +
98937 + if (!fiq_ipc.hdq_probed)
98938 + return -EINVAL;
98939 +
98940 + mutex_lock(&fiq_ipc.hdq_lock);
98941 +
98942 + fiq_ipc.hdq_error = 0;
98943 + fiq_ipc.hdq_ads = address | HDQ_READ;
98944 + fiq_ipc.hdq_request_ctr++;
98945 + fiq_kick();
98946 + /*
98947 + * FIQ takes care of it while we block our calling process
98948 + * But we're not spinning -- other processes run normally while
98949 + * we wait for the result
98950 + */
98951 + while (count_sleeps--) {
98952 + msleep(10); /* valid transaction always completes in < 10ms */
98953 +
98954 + if (fiq_busy())
98955 + continue;
98956 +
98957 + if (fiq_ipc.hdq_error)
98958 + goto done; /* didn't see a response in good time */
98959 +
98960 + ret = fiq_ipc.hdq_rx_data;
98961 + goto done;
98962 + }
98963 +
98964 +done:
98965 + mutex_unlock(&fiq_ipc.hdq_lock);
98966 + return ret;
98967 +}
98968 +EXPORT_SYMBOL_GPL(gta02hdq_read);
98969 +
98970 +int gta02hdq_write(int address, u8 data)
98971 +{
98972 + int count_sleeps = 5;
98973 + int ret = -ETIME;
98974 +
98975 + if (!fiq_ipc.hdq_probed)
98976 + return -EINVAL;
98977 +
98978 + mutex_lock(&fiq_ipc.hdq_lock);
98979 +
98980 + fiq_ipc.hdq_error = 0;
98981 + fiq_ipc.hdq_ads = address | HDQ_WRITE;
98982 + fiq_ipc.hdq_tx_data = data;
98983 + fiq_ipc.hdq_request_ctr++;
98984 + fiq_kick();
98985 + /*
98986 + * FIQ takes care of it while we block our calling process
98987 + * But we're not spinning -- other processes run normally while
98988 + * we wait for the result
98989 + */
98990 + while (count_sleeps--) {
98991 + msleep(10); /* valid transaction always completes in < 10ms */
98992 +
98993 + if (fiq_busy())
98994 + continue; /* something bad with FIQ */
98995 +
98996 + if (fiq_ipc.hdq_error)
98997 + goto done; /* didn't see a response in good time */
98998 +
98999 + ret = 0;
99000 + goto done;
99001 + }
99002 +
99003 +done:
99004 + mutex_unlock(&fiq_ipc.hdq_lock);
99005 + return ret;
99006 +}
99007 +EXPORT_SYMBOL_GPL(gta02hdq_write);
99008 +
99009 +/* sysfs */
99010 +
99011 +static ssize_t hdq_sysfs_dump(struct device *dev, struct device_attribute *attr,
99012 + char *buf)
99013 +{
99014 + int n;
99015 + int v;
99016 + u8 u8a[128]; /* whole address space for HDQ */
99017 + char *end = buf;
99018 +
99019 + if (!fiq_ipc.hdq_probed)
99020 + return -EINVAL;
99021 +
99022 + /* the dump does not take care about 16 bit regs, because at this
99023 + * bus level we don't know about the chip details
99024 + */
99025 + for (n = 0; n < sizeof(u8a); n++) {
99026 + v = gta02hdq_read(n);
99027 + if (v < 0)
99028 + goto bail;
99029 + u8a[n] = v;
99030 + }
99031 +
99032 + for (n = 0; n < sizeof(u8a); n += 16) {
99033 + hex_dump_to_buffer(u8a + n, sizeof(u8a), 16, 1, end, 4096, 0);
99034 + end += strlen(end);
99035 + *end++ = '\n';
99036 + *end = '\0';
99037 + }
99038 + return (end - buf);
99039 +
99040 +bail:
99041 + return sprintf(buf, "ERROR %d\n", v);
99042 +}
99043 +
99044 +/* you write by <address> <data>, eg, "34 128" */
99045 +
99046 +#define atoi(str) simple_strtoul(((str != NULL) ? str : ""), NULL, 0)
99047 +
99048 +static ssize_t hdq_sysfs_write(struct device *dev,
99049 + struct device_attribute *attr,
99050 + const char *buf, size_t count)
99051 +{
99052 + const char *end = buf + count;
99053 + int address = atoi(buf);
99054 +
99055 + if (!fiq_ipc.hdq_probed)
99056 + return -EINVAL;
99057 +
99058 + while ((buf != end) && (*buf != ' '))
99059 + buf++;
99060 + if (buf >= end)
99061 + return 0;
99062 + while ((buf < end) && (*buf == ' '))
99063 + buf++;
99064 + if (buf >= end)
99065 + return 0;
99066 +
99067 + gta02hdq_write(address, atoi(buf));
99068 +
99069 + return count;
99070 +}
99071 +
99072 +static DEVICE_ATTR(dump, 0400, hdq_sysfs_dump, NULL);
99073 +static DEVICE_ATTR(write, 0600, NULL, hdq_sysfs_write);
99074 +
99075 +static struct attribute *gta02hdq_sysfs_entries[] = {
99076 + &dev_attr_dump.attr,
99077 + &dev_attr_write.attr,
99078 + NULL
99079 +};
99080 +
99081 +static struct attribute_group gta02hdq_attr_group = {
99082 + .name = "hdq",
99083 + .attrs = gta02hdq_sysfs_entries,
99084 +};
99085 +
99086 +
99087 +#ifdef CONFIG_PM
99088 +static int gta02hdq_suspend(struct platform_device *pdev, pm_message_t state)
99089 +{
99090 + /* after 18s of this, the battery monitor will also go to sleep */
99091 + s3c2410_gpio_setpin(fiq_ipc.hdq_gpio_pin, 0);
99092 + s3c2410_gpio_cfgpin(fiq_ipc.hdq_gpio_pin, S3C2410_GPIO_OUTPUT);
99093 + return 0;
99094 +}
99095 +
99096 +static int gta02hdq_resume(struct platform_device *pdev)
99097 +{
99098 + s3c2410_gpio_setpin(fiq_ipc.hdq_gpio_pin, 1);
99099 + s3c2410_gpio_cfgpin(fiq_ipc.hdq_gpio_pin, S3C2410_GPIO_OUTPUT);
99100 + return 0;
99101 +}
99102 +#endif
99103 +
99104 +static int __init gta02hdq_probe(struct platform_device *pdev)
99105 +{
99106 + struct resource *r = platform_get_resource(pdev, 0, 0);
99107 + int ret;
99108 + struct gta02_hdq_platform_data *pdata = pdev->dev.platform_data;
99109 +
99110 + if (!machine_is_neo1973_gta02())
99111 + return -EIO;
99112 +
99113 + if (!r)
99114 + return -EINVAL;
99115 +
99116 + if (!fiq_ready) {
99117 + printk(KERN_ERR "hdq probe fails on fiq not ready\n");
99118 + return -EINVAL;
99119 + }
99120 +
99121 + platform_set_drvdata(pdev, NULL);
99122 +
99123 + mutex_init(&fiq_ipc.hdq_lock);
99124 +
99125 + /* set our HDQ comms pin from the platform data */
99126 + fiq_ipc.hdq_gpio_pin = r->start;
99127 +
99128 + s3c2410_gpio_setpin(fiq_ipc.hdq_gpio_pin, 1);
99129 + s3c2410_gpio_cfgpin(fiq_ipc.hdq_gpio_pin, S3C2410_GPIO_OUTPUT);
99130 +
99131 + ret = sysfs_create_group(&pdev->dev.kobj, &gta02hdq_attr_group);
99132 + if (ret)
99133 + return ret;
99134 +
99135 + fiq_ipc.hdq_probed = 1; /* we are ready to do stuff now */
99136 +
99137 + /*
99138 + * if wanted, users can defer registration of devices
99139 + * that depend on HDQ until after we register, and can use our
99140 + * device as parent so suspend-resume ordering is correct
99141 + */
99142 + if (pdata->attach_child_devices)
99143 + (pdata->attach_child_devices)(&pdev->dev);
99144 +
99145 + return 0;
99146 +}
99147 +
99148 +static int gta02hdq_remove(struct platform_device *pdev)
99149 +{
99150 + sysfs_remove_group(&pdev->dev.kobj, &gta02hdq_attr_group);
99151 + return 0;
99152 +}
99153 +
99154 +static struct platform_driver gta02hdq_driver = {
99155 + .probe = gta02hdq_probe,
99156 + .remove = gta02hdq_remove,
99157 +#ifdef CONFIG_PM
99158 + .suspend = gta02hdq_suspend,
99159 + .resume = gta02hdq_resume,
99160 +#endif
99161 + .driver = {
99162 + .name = "gta02-hdq",
99163 + },
99164 +};
99165 +
99166 +static int __init gta02hdq_init(void)
99167 +{
99168 + return platform_driver_register(&gta02hdq_driver);
99169 +}
99170 +
99171 +static void __exit gta02hdq_exit(void)
99172 +{
99173 + platform_driver_unregister(&gta02hdq_driver);
99174 +}
99175 +
99176 +module_init(gta02hdq_init);
99177 +module_exit(gta02hdq_exit);
99178 +
99179 +MODULE_AUTHOR("Andy Green <andy@openmoko.com>");
99180 +MODULE_DESCRIPTION("GTA02 HDQ driver");
99181 +MODULE_LICENSE("GPL");
99182 Index: linux-2.6.28/drivers/power/Kconfig
99183 ===================================================================
99184 --- linux-2.6.28.orig/drivers/power/Kconfig 2008-12-25 00:26:37.000000000 +0100
99185 +++ linux-2.6.28/drivers/power/Kconfig 2009-01-02 00:01:56.000000000 +0100
99186 @@ -68,4 +68,24 @@ config BATTERY_BQ27x00
99187 help
99188 Say Y here to enable support for batteries with BQ27200(I2C) chip.
99189
99190 +config BATTERY_BQ27000_HDQ
99191 + tristate "BQ27000 HDQ battery monitor driver"
99192 + help
99193 + Say Y to enable support for the battery on the Neo Freerunner
99194 +
99195 +config GTA02_HDQ
99196 + tristate "Neo Freerunner HDQ"
99197 + depends on MACH_NEO1973_GTA02 && FIQ && S3C2440_C_FIQ
99198 + help
99199 + Say Y to enable support for communicating with an HDQ battery
99200 + on the Neo Freerunner. You probably want to select
99201 + at least BATTERY_BQ27000_HDQ as well
99202 +
99203 +config CHARGER_PCF50633
99204 + tristate "Support for NXP PCF50633 MBC"
99205 + depends on MFD_PCF50633
99206 + help
99207 + Say Y to include support for NXP PCF50633 Main Battery Charger.
99208 +
99209 endif # POWER_SUPPLY
99210 +
99211 Index: linux-2.6.28/drivers/power/Makefile
99212 ===================================================================
99213 --- linux-2.6.28.orig/drivers/power/Makefile 2008-12-25 00:26:37.000000000 +0100
99214 +++ linux-2.6.28/drivers/power/Makefile 2009-01-02 00:01:56.000000000 +0100
99215 @@ -23,3 +23,9 @@ obj-$(CONFIG_BATTERY_OLPC) += olpc_batte
99216 obj-$(CONFIG_BATTERY_TOSA) += tosa_battery.o
99217 obj-$(CONFIG_BATTERY_WM97XX) += wm97xx_battery.o
99218 obj-$(CONFIG_BATTERY_BQ27x00) += bq27x00_battery.o
99219 +obj-$(CONFIG_BATTERY_PALMTX) += palmtx_battery.o
99220 +obj-$(CONFIG_BATTERY_BQ27000_HDQ) += bq27000_battery.o
99221 +
99222 +obj-$(CONFIG_GTA02_HDQ) += gta02_hdq.o
99223 +
99224 +obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o
99225 Index: linux-2.6.28/drivers/power/pcf50633-charger.c
99226 ===================================================================
99227 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
99228 +++ linux-2.6.28/drivers/power/pcf50633-charger.c 2009-01-02 00:01:56.000000000 +0100
99229 @@ -0,0 +1,415 @@
99230 +/* Philips PCF50633 Main Battery Charger Driver
99231 + *
99232 + * (C) 2006-2008 by Openmoko, Inc.
99233 + * Author: Balaji Rao <balajirrao@openmoko.org>
99234 + * All rights reserved.
99235 + *
99236 + * Broken down from monstrous PCF50633 driver mainly by
99237 + * Harald Welte, Andy Green and Werner Almesberger
99238 + *
99239 + * This program is free software; you can redistribute it and/or
99240 + * modify it under the terms of the GNU General Public License as
99241 + * published by the Free Software Foundation; either version 2 of
99242 + * the License, or (at your option) any later version.
99243 + *
99244 + * This program is distributed in the hope that it will be useful,
99245 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
99246 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
99247 + * GNU General Public License for more details.
99248 + *
99249 + * You should have received a copy of the GNU General Public License
99250 + * along with this program; if not, write to the Free Software
99251 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
99252 + * MA 02111-1307 USA
99253 + */
99254 +
99255 +#include <linux/mfd/pcf50633/core.h>
99256 +#include <linux/mfd/pcf50633/mbc.h>
99257 +
99258 +void pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma)
99259 +{
99260 + int ret;
99261 + u8 bits;
99262 + int charging_start = 1;
99263 + u8 mbcs2, chgmod;
99264 +
99265 + if (ma >= 1000)
99266 + bits = PCF50633_MBCC7_USB_1000mA;
99267 + else if (ma >= 500)
99268 + bits = PCF50633_MBCC7_USB_500mA;
99269 + else if (ma >= 100)
99270 + bits = PCF50633_MBCC7_USB_100mA;
99271 + else {
99272 + bits = PCF50633_MBCC7_USB_SUSPEND;
99273 + charging_start = 0;
99274 + }
99275 +
99276 + ret = pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC7,
99277 + PCF50633_MBCC7_USB_MASK, bits);
99278 + if (ret)
99279 + dev_err(pcf->dev, "error setting usb curlim to %d mA\n", ma);
99280 + else
99281 + dev_info(pcf->dev, "usb curlim to %d mA\n", ma);
99282 +
99283 + mbcs2 = pcf50633_reg_read(pcf, PCF50633_REG_MBCS2);
99284 + chgmod = (mbcs2 & PCF50633_MBCS2_MBC_MASK);
99285 +
99286 + /* If chgmod == BATFULL, setting chgena has no effect.
99287 + * We need to set resume instead.
99288 + */
99289 + if (chgmod != PCF50633_MBCS2_MBC_BAT_FULL)
99290 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC1,
99291 + PCF50633_MBCC1_CHGENA, PCF50633_MBCC1_CHGENA);
99292 + else
99293 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC1,
99294 + PCF50633_MBCC1_RESUME, PCF50633_MBCC1_RESUME);
99295 +
99296 + pcf->mbc.usb_active = charging_start;
99297 + power_supply_changed(&pcf->mbc.usb);
99298 +}
99299 +EXPORT_SYMBOL_GPL(pcf50633_mbc_usb_curlim_set);
99300 +
99301 +static const char *chgmode_names[] = {
99302 + [PCF50633_MBCS2_MBC_PLAY] = "play-only",
99303 + [PCF50633_MBCS2_MBC_USB_PRE] = "pre",
99304 + [PCF50633_MBCS2_MBC_ADP_PRE] = "pre",
99305 + [PCF50633_MBCS2_MBC_USB_PRE_WAIT] = "pre-wait",
99306 + [PCF50633_MBCS2_MBC_ADP_PRE_WAIT] = "pre-wait",
99307 + [PCF50633_MBCS2_MBC_USB_FAST] = "fast",
99308 + [PCF50633_MBCS2_MBC_ADP_FAST] = "fast",
99309 + [PCF50633_MBCS2_MBC_USB_FAST_WAIT] = "fast-wait",
99310 + [PCF50633_MBCS2_MBC_ADP_FAST_WAIT] = "fast-wait",
99311 + [PCF50633_MBCS2_MBC_BAT_FULL] = "bat-full",
99312 +};
99313 +
99314 +static ssize_t show_chgmode(struct device *dev, struct device_attribute *attr,
99315 + char *buf)
99316 +{
99317 + struct pcf50633 *pcf = dev_get_drvdata(dev);
99318 +
99319 + u8 mbcs2 = pcf50633_reg_read(pcf, PCF50633_REG_MBCS2);
99320 + u8 chgmod = (mbcs2 & PCF50633_MBCS2_MBC_MASK);
99321 +
99322 + return sprintf(buf, "%s %d\n", chgmode_names[chgmod], chgmod);
99323 +}
99324 +static DEVICE_ATTR(chgmode, S_IRUGO | S_IWUSR, show_chgmode, NULL);
99325 +
99326 +static ssize_t show_usblim(struct device *dev, struct device_attribute *attr,
99327 + char *buf)
99328 +{
99329 + struct pcf50633 *pcf = dev_get_drvdata(dev);
99330 + u8 usblim = pcf50633_reg_read(pcf, PCF50633_REG_MBCC7) &
99331 + PCF50633_MBCC7_USB_MASK;
99332 + unsigned int ma;
99333 +
99334 + if (usblim == PCF50633_MBCC7_USB_1000mA)
99335 + ma = 1000;
99336 + else if (usblim == PCF50633_MBCC7_USB_500mA)
99337 + ma = 500;
99338 + else if (usblim == PCF50633_MBCC7_USB_100mA)
99339 + ma = 100;
99340 + else
99341 + ma = 0;
99342 +
99343 + return sprintf(buf, "%u\n", ma);
99344 +}
99345 +static DEVICE_ATTR(usb_curlim, S_IRUGO | S_IWUSR, show_usblim, NULL);
99346 +
99347 +static ssize_t force_usb_limit_dangerous(struct device *dev,
99348 + struct device_attribute *attr, const char *buf, size_t count)
99349 +{
99350 + struct pcf50633 *pcf = dev_get_drvdata(dev);
99351 + unsigned long ma;
99352 +
99353 + strict_strtoul(buf, 10, &ma);
99354 +
99355 + pcf50633_mbc_usb_curlim_set(pcf, ma);
99356 +
99357 + return count;
99358 +}
99359 +
99360 +static DEVICE_ATTR(force_usb_limit_dangerous, 0600,
99361 + NULL, force_usb_limit_dangerous);
99362 +
99363 +static struct attribute *mbc_sysfs_entries[] = {
99364 + &dev_attr_chgmode.attr,
99365 + &dev_attr_usb_curlim.attr,
99366 + &dev_attr_force_usb_limit_dangerous.attr,
99367 + NULL,
99368 +};
99369 +
99370 +static struct attribute_group mbc_attr_group = {
99371 + .name = NULL, /* put in device directory */
99372 + .attrs = mbc_sysfs_entries,
99373 +};
99374 +
99375 +/* MBC state machine switches into charging mode when the battery voltage
99376 + * falls below 96% of a battery float voltage. But the voltage drop in Li-ion
99377 + * batteries is marginal(1~2 %) till about 80% of its capacity - which means,
99378 + * after a BATFULL, charging won't be restarted until 80%.
99379 + *
99380 + * This work_struct function restarts charging every
99381 + * CHARGING_RESTART_TIMEOUT seconds and makes sure we don't discharge too much
99382 + */
99383 +
99384 +#define CHARGING_RESTART_TIMEOUT (900 * HZ) /* 15 minutes */
99385 +
99386 +static void pcf50633_mbc_charging_restart(struct work_struct *work)
99387 +{
99388 + struct pcf50633_mbc *mbc;
99389 + struct pcf50633 *pcf;
99390 + u8 mbcs2, chgmod;
99391 +
99392 + mbc = container_of(work, struct pcf50633_mbc,
99393 + charging_restart_work.work);
99394 + pcf = container_of(mbc, struct pcf50633, mbc);
99395 +
99396 + mbcs2 = pcf50633_reg_read(pcf, PCF50633_REG_MBCS2);
99397 + chgmod = (mbcs2 & PCF50633_MBCS2_MBC_MASK);
99398 +
99399 + if (chgmod != PCF50633_MBCS2_MBC_BAT_FULL)
99400 + return;
99401 +
99402 + /* Restart charging */
99403 + pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_MBCC1, PCF50633_MBCC1_RESUME,
99404 + PCF50633_MBCC1_RESUME);
99405 + mbc->usb_active = 1;
99406 + power_supply_changed(&mbc->usb);
99407 +
99408 + dev_info(pcf->dev, "Charging restarted..\n");
99409 +}
99410 +
99411 +static void pcf50633_mbc_irq_handler(struct pcf50633 *pcf, int irq, void *data)
99412 +{
99413 + struct pcf50633_mbc *mbc;
99414 +
99415 + mbc = &pcf->mbc;
99416 +
99417 + /* USB */
99418 + if (irq == PCF50633_IRQ_USBINS)
99419 + mbc->usb_online = 1;
99420 + else if (irq == PCF50633_IRQ_USBREM) {
99421 + mbc->usb_online = 0;
99422 + mbc->usb_active = 0;
99423 + pcf50633_mbc_usb_curlim_set(pcf, 0);
99424 + cancel_delayed_work_sync(&mbc->charging_restart_work);
99425 + }
99426 +
99427 + /* Adapter */
99428 + if (irq == PCF50633_IRQ_ADPINS) {
99429 + pcf->mbc.adapter_online = 1;
99430 + pcf->mbc.adapter_active = 1;
99431 + } else if (irq == PCF50633_IRQ_ADPREM) {
99432 + mbc->adapter_online = 0;
99433 + mbc->adapter_active = 0;
99434 + }
99435 +
99436 + if (irq == PCF50633_IRQ_BATFULL) {
99437 + mbc->usb_active = 0;
99438 + mbc->adapter_active = 0;
99439 + schedule_delayed_work(&mbc->charging_restart_work,
99440 + CHARGING_RESTART_TIMEOUT);
99441 + } else if (irq == PCF50633_IRQ_USBLIMON)
99442 + mbc->usb_active = 0;
99443 + else if (irq == PCF50633_IRQ_USBLIMOFF)
99444 + mbc->usb_active = 1;
99445 +
99446 + power_supply_changed(&mbc->ac);
99447 + power_supply_changed(&mbc->usb);
99448 + power_supply_changed(&mbc->adapter);
99449 +
99450 + if (pcf->pdata->mbc_event_callback)
99451 + pcf->pdata->mbc_event_callback(pcf, irq);
99452 +}
99453 +
99454 +static int adapter_get_property(struct power_supply *psy,
99455 + enum power_supply_property psp,
99456 + union power_supply_propval *val)
99457 +{
99458 + int ret = 0;
99459 + struct pcf50633_mbc *mbc = container_of(psy, struct pcf50633_mbc, usb);
99460 +
99461 + switch (psp) {
99462 + case POWER_SUPPLY_PROP_ONLINE:
99463 + val->intval = mbc->adapter_online;
99464 + break;
99465 + default:
99466 + ret = -EINVAL;
99467 + break;
99468 + }
99469 + return ret;
99470 +}
99471 +
99472 +static int usb_get_property(struct power_supply *psy,
99473 + enum power_supply_property psp,
99474 + union power_supply_propval *val)
99475 +{
99476 + int ret = 0;
99477 + struct pcf50633_mbc *mbc = container_of(psy, struct pcf50633_mbc, usb);
99478 + struct pcf50633 *pcf = container_of(mbc, struct pcf50633, mbc);
99479 +
99480 + u8 usblim = pcf50633_reg_read(pcf, PCF50633_REG_MBCC7) &
99481 + PCF50633_MBCC7_USB_MASK;
99482 +
99483 + switch (psp) {
99484 + case POWER_SUPPLY_PROP_ONLINE:
99485 + val->intval = mbc->usb_online && (usblim == PCF50633_MBCC7_USB_500mA);
99486 + break;
99487 + default:
99488 + ret = -EINVAL;
99489 + break;
99490 + }
99491 + return ret;
99492 +}
99493 +
99494 +static int ac_get_property(struct power_supply *psy,
99495 + enum power_supply_property psp,
99496 + union power_supply_propval *val)
99497 +{
99498 + int ret = 0;
99499 + struct pcf50633_mbc *mbc = container_of(psy, struct pcf50633_mbc, ac);
99500 + struct pcf50633 *pcf = container_of(mbc, struct pcf50633, mbc);
99501 +
99502 + u8 usblim = pcf50633_reg_read(pcf, PCF50633_REG_MBCC7) &
99503 + PCF50633_MBCC7_USB_MASK;
99504 +
99505 + switch (psp) {
99506 + case POWER_SUPPLY_PROP_ONLINE:
99507 + val->intval = mbc->usb_online && (usblim == PCF50633_MBCC7_USB_1000mA);
99508 + break;
99509 + default:
99510 + ret = -EINVAL;
99511 + break;
99512 + }
99513 + return ret;
99514 +}
99515 +
99516 +static enum power_supply_property power_props[] = {
99517 + POWER_SUPPLY_PROP_ONLINE,
99518 +};
99519 +
99520 +int __init pcf50633_mbc_probe(struct platform_device *pdev)
99521 +{
99522 + struct pcf50633 *pcf;
99523 + struct pcf50633_mbc *mbc;
99524 + int ret;
99525 + u8 mbcs1;
99526 +
99527 + pcf = platform_get_drvdata(pdev);
99528 + mbc = &pcf->mbc;
99529 +
99530 + /* Set up IRQ handlers */
99531 + pcf->irq_handler[PCF50633_IRQ_ADPINS].handler =
99532 + pcf50633_mbc_irq_handler;
99533 + pcf->irq_handler[PCF50633_IRQ_ADPREM].handler =
99534 + pcf50633_mbc_irq_handler;
99535 + pcf->irq_handler[PCF50633_IRQ_USBINS].handler =
99536 + pcf50633_mbc_irq_handler;
99537 + pcf->irq_handler[PCF50633_IRQ_USBREM].handler =
99538 + pcf50633_mbc_irq_handler;
99539 + pcf->irq_handler[PCF50633_IRQ_BATFULL].handler =
99540 + pcf50633_mbc_irq_handler;
99541 + pcf->irq_handler[PCF50633_IRQ_CHGHALT].handler =
99542 + pcf50633_mbc_irq_handler;
99543 + pcf->irq_handler[PCF50633_IRQ_THLIMON].handler =
99544 + pcf50633_mbc_irq_handler;
99545 + pcf->irq_handler[PCF50633_IRQ_THLIMOFF].handler =
99546 + pcf50633_mbc_irq_handler;
99547 + pcf->irq_handler[PCF50633_IRQ_USBLIMON].handler =
99548 + pcf50633_mbc_irq_handler;
99549 + pcf->irq_handler[PCF50633_IRQ_USBLIMOFF].handler =
99550 + pcf50633_mbc_irq_handler;
99551 + pcf->irq_handler[PCF50633_IRQ_LOWSYS].handler =
99552 + pcf50633_mbc_irq_handler;
99553 + pcf->irq_handler[PCF50633_IRQ_LOWBAT].handler =
99554 + pcf50633_mbc_irq_handler;
99555 +
99556 + /* Create power supplies */
99557 +
99558 + mbc->adapter.name = "adapter";
99559 + mbc->adapter.type = POWER_SUPPLY_TYPE_MAINS;
99560 + mbc->adapter.properties = power_props;
99561 + mbc->adapter.num_properties = ARRAY_SIZE(power_props);
99562 + mbc->adapter.get_property = &adapter_get_property;
99563 + mbc->adapter.supplied_to = pcf->pdata->batteries;
99564 + mbc->adapter.num_supplicants = pcf->pdata->num_batteries;
99565 +
99566 + mbc->usb.name = "usb";
99567 + mbc->usb.type = POWER_SUPPLY_TYPE_USB;
99568 + mbc->usb.properties = power_props;
99569 + mbc->usb.num_properties = ARRAY_SIZE(power_props);
99570 + mbc->usb.get_property = usb_get_property;
99571 + mbc->usb.supplied_to = pcf->pdata->batteries;
99572 + mbc->usb.num_supplicants = pcf->pdata->num_batteries;
99573 +
99574 + mbc->ac.name = "ac";
99575 + mbc->ac.type = POWER_SUPPLY_TYPE_MAINS;
99576 + mbc->ac.properties = power_props;
99577 + mbc->ac.num_properties = ARRAY_SIZE(power_props);
99578 + mbc->ac.get_property = ac_get_property;
99579 + mbc->ac.supplied_to = pcf->pdata->batteries;
99580 + mbc->ac.num_supplicants = pcf->pdata->num_batteries;
99581 +
99582 + INIT_DELAYED_WORK(&mbc->charging_restart_work,
99583 + pcf50633_mbc_charging_restart);
99584 +
99585 + ret = power_supply_register(&pdev->dev, &mbc->adapter);
99586 + if (ret)
99587 + dev_err(pcf->dev, "failed to register adapter\n");
99588 +
99589 + ret = power_supply_register(&pdev->dev, &mbc->usb);
99590 + if (ret)
99591 + dev_err(pcf->dev, "failed to register usb\n");
99592 +
99593 + ret = power_supply_register(&pdev->dev, &mbc->ac);
99594 + if (ret)
99595 + dev_err(pcf->dev, "failed to register ac\n");
99596 +
99597 + mbcs1 = pcf50633_reg_read(pcf, PCF50633_REG_MBCS1);
99598 + if (mbcs1 & 0x01)
99599 + pcf50633_mbc_irq_handler(pcf, PCF50633_IRQ_USBINS, NULL);
99600 + if (mbcs1 & 0x04)
99601 + pcf50633_mbc_irq_handler(pcf, PCF50633_IRQ_ADPINS, NULL);
99602 +
99603 + /* Disable automatic charging restart. Manually setting RESUME
99604 + * won't have effect otherwise
99605 + */
99606 + pcf50633_reg_clear_bits(pcf, PCF50633_REG_MBCC1,
99607 + PCF50633_MBCC1_AUTORES);
99608 +
99609 + return sysfs_create_group(&pdev->dev.kobj, &mbc_attr_group);
99610 +}
99611 +
99612 +static int __devexit pcf50633_mbc_remove(struct platform_device *pdev)
99613 +{
99614 + struct pcf50633 *pcf;
99615 +
99616 + pcf = platform_get_drvdata(pdev);
99617 +
99618 + return 0;
99619 +}
99620 +
99621 +struct platform_driver pcf50633_mbc_driver = {
99622 + .driver = {
99623 + .name = "pcf50633-mbc",
99624 + },
99625 + .probe = pcf50633_mbc_probe,
99626 + .remove = __devexit_p(pcf50633_mbc_remove),
99627 +};
99628 +
99629 +static int __init pcf50633_mbc_init(void)
99630 +{
99631 + return platform_driver_register(&pcf50633_mbc_driver);
99632 +}
99633 +module_init(pcf50633_mbc_init);
99634 +
99635 +static void __exit pcf50633_mbc_exit(void)
99636 +{
99637 + platform_driver_unregister(&pcf50633_mbc_driver);
99638 +}
99639 +module_exit(pcf50633_mbc_exit);
99640 +
99641 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
99642 +MODULE_DESCRIPTION("PCF50633 mbc driver");
99643 +MODULE_LICENSE("GPL");
99644 +MODULE_ALIAS("platform:pcf50633-mbc");
99645 Index: linux-2.6.28/drivers/regulator/core.c
99646 ===================================================================
99647 --- linux-2.6.28.orig/drivers/regulator/core.c 2008-12-25 00:26:37.000000000 +0100
99648 +++ linux-2.6.28/drivers/regulator/core.c 2009-01-02 00:01:56.000000000 +0100
99649 @@ -1113,6 +1113,7 @@ int regulator_disable(struct regulator *
99650 if (!regulator->enabled) {
99651 printk(KERN_ERR "%s: not in use by this consumer\n",
99652 __func__);
99653 + WARN_ON(1);
99654 return 0;
99655 }
99656
99657 Index: linux-2.6.28/drivers/regulator/Kconfig
99658 ===================================================================
99659 --- linux-2.6.28.orig/drivers/regulator/Kconfig 2008-12-25 00:26:37.000000000 +0100
99660 +++ linux-2.6.28/drivers/regulator/Kconfig 2009-01-02 00:01:56.000000000 +0100
99661 @@ -73,4 +73,10 @@ config REGULATOR_DA903X
99662 Say y here to support the BUCKs and LDOs regulators found on
99663 Dialog Semiconductor DA9030/DA9034 PMIC.
99664
99665 +config REGULATOR_PCF50633
99666 + bool "PCF50633 regulator driver"
99667 + depends on MFD_PCF50633
99668 + help
99669 + Say Y here to support the voltage regulators and convertors
99670 + on PCF50633
99671 endif
99672 Index: linux-2.6.28/drivers/regulator/Makefile
99673 ===================================================================
99674 --- linux-2.6.28.orig/drivers/regulator/Makefile 2008-12-25 00:26:37.000000000 +0100
99675 +++ linux-2.6.28/drivers/regulator/Makefile 2009-01-02 00:01:56.000000000 +0100
99676 @@ -11,5 +11,6 @@ obj-$(CONFIG_REGULATOR_BQ24022) += bq240
99677 obj-$(CONFIG_REGULATOR_WM8350) += wm8350-regulator.o
99678 obj-$(CONFIG_REGULATOR_WM8400) += wm8400-regulator.o
99679 obj-$(CONFIG_REGULATOR_DA903X) += da903x.o
99680 +obj-$(CONFIG_REGULATOR_PCF50633) += pcf50633-regulator.o
99681
99682 ccflags-$(CONFIG_REGULATOR_DEBUG) += -DDEBUG
99683 Index: linux-2.6.28/drivers/regulator/pcf50633-regulator.c
99684 ===================================================================
99685 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
99686 +++ linux-2.6.28/drivers/regulator/pcf50633-regulator.c 2009-01-02 00:01:56.000000000 +0100
99687 @@ -0,0 +1,330 @@
99688 +/* Philips PCF50633 PMIC Driver
99689 + *
99690 + * (C) 2006-2008 by Openmoko, Inc.
99691 + * Author: Balaji Rao <balajirrao@openmoko.org>
99692 + * All rights reserved.
99693 + *
99694 + * Broken down from monstrous PCF50633 driver mainly by
99695 + * Harald Welte and Andy Green
99696 + *
99697 + * This program is free software; you can redistribute it and/or
99698 + * modify it under the terms of the GNU General Public License as
99699 + * published by the Free Software Foundation; either version 2 of
99700 + * the License, or (at your option) any later version.
99701 + *
99702 + * This program is distributed in the hope that it will be useful,
99703 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
99704 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
99705 + * GNU General Public License for more details.
99706 + *
99707 + * You should have received a copy of the GNU General Public License
99708 + * along with this program; if not, write to the Free Software
99709 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
99710 + * MA 02111-1307 USA
99711 + */
99712 +
99713 +#include <linux/regulator/driver.h>
99714 +#include <linux/platform_device.h>
99715 +#include <linux/err.h>
99716 +
99717 +#include <linux/mfd/pcf50633/core.h>
99718 +#include <linux/mfd/pcf50633/pmic.h>
99719 +
99720 +#define PCF50633_REGULATOR(_name, _id) \
99721 + { \
99722 + .name = _name, \
99723 + .id = _id, \
99724 + .ops = &pcf50633_regulator_ops, \
99725 + .type = REGULATOR_VOLTAGE, \
99726 + .owner = THIS_MODULE, \
99727 + }
99728 +static const u8 pcf50633_regulator_registers[PCF50633_NUM_REGULATORS] = {
99729 + [PCF50633_REGULATOR_AUTO] = PCF50633_REG_AUTOOUT,
99730 + [PCF50633_REGULATOR_DOWN1] = PCF50633_REG_DOWN1OUT,
99731 + [PCF50633_REGULATOR_DOWN2] = PCF50633_REG_DOWN2OUT,
99732 + [PCF50633_REGULATOR_MEMLDO] = PCF50633_REG_MEMLDOOUT,
99733 + [PCF50633_REGULATOR_LDO1] = PCF50633_REG_LDO1OUT,
99734 + [PCF50633_REGULATOR_LDO2] = PCF50633_REG_LDO2OUT,
99735 + [PCF50633_REGULATOR_LDO3] = PCF50633_REG_LDO3OUT,
99736 + [PCF50633_REGULATOR_LDO4] = PCF50633_REG_LDO4OUT,
99737 + [PCF50633_REGULATOR_LDO5] = PCF50633_REG_LDO5OUT,
99738 + [PCF50633_REGULATOR_LDO6] = PCF50633_REG_LDO6OUT,
99739 + [PCF50633_REGULATOR_HCLDO] = PCF50633_REG_HCLDOOUT,
99740 +};
99741 +
99742 +/* Bits from voltage value */
99743 +static u_int8_t auto_voltage_bits(unsigned int millivolts)
99744 +{
99745 + if (millivolts < 1800)
99746 + return 0;
99747 + if (millivolts > 3800)
99748 + return 0xff;
99749 +
99750 + millivolts -= 625;
99751 + return millivolts/25;
99752 +}
99753 +
99754 +static u_int8_t down_voltage_bits(unsigned int millivolts)
99755 +{
99756 + if (millivolts < 625)
99757 + return 0;
99758 + else if (millivolts > 3000)
99759 + return 0xff;
99760 +
99761 + millivolts -= 625;
99762 + return millivolts/25;
99763 +}
99764 +
99765 +static u_int8_t ldo_voltage_bits(unsigned int millivolts)
99766 +{
99767 + if (millivolts < 900)
99768 + return 0;
99769 + else if (millivolts > 3600)
99770 + return 0x1f;
99771 +
99772 + millivolts -= 900;
99773 + return millivolts/100;
99774 +}
99775 +
99776 +/* Obtain voltage value from bits */
99777 +
99778 +static unsigned int auto_voltage_value(uint8_t bits)
99779 +{
99780 + if (bits < 0x2f)
99781 + return 0;
99782 + return 625 + (bits * 25);
99783 +}
99784 +
99785 +
99786 +static unsigned int down_voltage_value(uint8_t bits)
99787 +{
99788 + return 625 + (bits*25);
99789 +}
99790 +
99791 +
99792 +static unsigned int ldo_voltage_value(uint8_t bits)
99793 +{
99794 + bits &= 0x1f;
99795 + return 900 + (bits * 100);
99796 +}
99797 +
99798 +static int pcf50633_regulator_set_voltage(struct regulator_dev *rdev,
99799 + int min_uV, int max_uV)
99800 +{
99801 + uint8_t volt_bits;
99802 + uint8_t regnr;
99803 + int regulator_id;
99804 + int millivolts;
99805 + struct pcf50633 *pcf = rdev_get_drvdata(rdev);;
99806 +
99807 + regulator_id = rdev_get_id(rdev);
99808 +
99809 + if (regulator_id >= PCF50633_NUM_REGULATORS)
99810 + return -EINVAL;
99811 +
99812 + millivolts = min_uV / 1000;
99813 +
99814 + regnr = pcf50633_regulator_registers[regulator_id];
99815 +
99816 + switch (regulator_id) {
99817 + case PCF50633_REGULATOR_AUTO:
99818 + volt_bits = auto_voltage_bits(millivolts);
99819 + break;
99820 + case PCF50633_REGULATOR_DOWN1:
99821 + volt_bits = down_voltage_bits(millivolts);
99822 + break;
99823 + case PCF50633_REGULATOR_DOWN2:
99824 + volt_bits = down_voltage_bits(millivolts);
99825 + break;
99826 + case PCF50633_REGULATOR_LDO1:
99827 + case PCF50633_REGULATOR_LDO2:
99828 + case PCF50633_REGULATOR_LDO3:
99829 + case PCF50633_REGULATOR_LDO4:
99830 + case PCF50633_REGULATOR_LDO5:
99831 + case PCF50633_REGULATOR_LDO6:
99832 + case PCF50633_REGULATOR_HCLDO:
99833 + volt_bits = ldo_voltage_bits(millivolts);
99834 + break;
99835 + default:
99836 + return -EINVAL;
99837 + }
99838 +
99839 + return pcf50633_reg_write(pcf, regnr, volt_bits);
99840 +}
99841 +
99842 +static int pcf50633_regulator_get_voltage(struct regulator_dev *rdev)
99843 +{
99844 + uint8_t volt_bits;
99845 + uint8_t regnr;
99846 + unsigned int rc = 0;
99847 + int regulator_id = rdev_get_id(rdev);
99848 + struct pcf50633 *pcf = rdev_get_drvdata(rdev);
99849 +
99850 + if (regulator_id >= PCF50633_NUM_REGULATORS)
99851 + return -EINVAL;
99852 +
99853 + regnr = pcf50633_regulator_registers[regulator_id];
99854 + volt_bits = pcf50633_reg_read(pcf, regnr);
99855 +
99856 + switch (regulator_id) {
99857 + case PCF50633_REGULATOR_AUTO:
99858 + rc = auto_voltage_value(volt_bits);
99859 + break;
99860 + case PCF50633_REGULATOR_DOWN1:
99861 + rc = down_voltage_value(volt_bits);
99862 + break;
99863 + case PCF50633_REGULATOR_DOWN2:
99864 + rc = down_voltage_value(volt_bits);
99865 + break;
99866 + case PCF50633_REGULATOR_LDO1:
99867 + case PCF50633_REGULATOR_LDO2:
99868 + case PCF50633_REGULATOR_LDO3:
99869 + case PCF50633_REGULATOR_LDO4:
99870 + case PCF50633_REGULATOR_LDO5:
99871 + case PCF50633_REGULATOR_LDO6:
99872 + case PCF50633_REGULATOR_HCLDO:
99873 + rc = ldo_voltage_value(volt_bits);
99874 + break;
99875 + default:
99876 + return -EINVAL;
99877 + }
99878 +
99879 + return rc * 1000;
99880 +}
99881 +
99882 +static int pcf50633_regulator_enable(struct regulator_dev *rdev)
99883 +{
99884 + uint8_t regnr;
99885 + int regulator_id = rdev_get_id(rdev);
99886 + struct pcf50633 *pcf = rdev_get_drvdata(rdev);
99887 +
99888 + if (regulator_id >= PCF50633_NUM_REGULATORS)
99889 + return -EINVAL;
99890 +
99891 + /* the *ENA register is always one after the *OUT register */
99892 + regnr = pcf50633_regulator_registers[regulator_id] + 1;
99893 +
99894 + pcf50633_reg_set_bit_mask(pcf, regnr, PCF50633_REGULATOR_ON,
99895 + PCF50633_REGULATOR_ON);
99896 +
99897 + return 0;
99898 +}
99899 +
99900 +static int pcf50633_regulator_disable(struct regulator_dev *rdev)
99901 +{
99902 + uint8_t regnr;
99903 + int regulator_id = rdev_get_id(rdev);
99904 + struct pcf50633 *pcf = rdev_get_drvdata(rdev);
99905 +
99906 + if (regulator_id >= PCF50633_NUM_REGULATORS)
99907 + return -EINVAL;
99908 +
99909 + /* the *ENA register is always one after the *OUT register */
99910 + regnr = pcf50633_regulator_registers[regulator_id] + 1;
99911 +
99912 + pcf50633_reg_set_bit_mask(pcf, regnr, PCF50633_REGULATOR_ON, 0);
99913 +
99914 + return 0;
99915 +}
99916 +
99917 +static int pcf50633_regulator_is_enabled(struct regulator_dev *rdev)
99918 +{
99919 + uint8_t val, regnr;
99920 + int regulator_id = rdev_get_id(rdev);
99921 + struct pcf50633 *pcf = rdev_get_drvdata(rdev);
99922 +
99923 + if (regulator_id >= PCF50633_NUM_REGULATORS)
99924 + return -EINVAL;
99925 +
99926 + /* the *ENA register is always one after the *OUT register */
99927 + regnr = pcf50633_regulator_registers[regulator_id] + 1;
99928 + val = pcf50633_reg_read(pcf, regnr) & PCF50633_REGULATOR_ON;
99929 +
99930 + return val;
99931 +}
99932 +
99933 +struct regulator_ops pcf50633_regulator_ops = {
99934 + .set_voltage = pcf50633_regulator_set_voltage,
99935 + .get_voltage = pcf50633_regulator_get_voltage,
99936 + .enable = pcf50633_regulator_enable,
99937 + .disable = pcf50633_regulator_disable,
99938 + .is_enabled = pcf50633_regulator_is_enabled,
99939 + .set_suspend_enable = pcf50633_regulator_enable,
99940 + .set_suspend_disable = pcf50633_regulator_disable,
99941 +};
99942 +
99943 +static struct regulator_desc regulators[] = {
99944 + [PCF50633_REGULATOR_AUTO] =
99945 + PCF50633_REGULATOR("auto", PCF50633_REGULATOR_AUTO),
99946 + [PCF50633_REGULATOR_DOWN1] =
99947 + PCF50633_REGULATOR("down1", PCF50633_REGULATOR_DOWN1),
99948 + [PCF50633_REGULATOR_DOWN2] =
99949 + PCF50633_REGULATOR("down2", PCF50633_REGULATOR_DOWN2),
99950 + [PCF50633_REGULATOR_LDO1] =
99951 + PCF50633_REGULATOR("ldo1", PCF50633_REGULATOR_LDO1),
99952 + [PCF50633_REGULATOR_LDO2] =
99953 + PCF50633_REGULATOR("ldo2", PCF50633_REGULATOR_LDO2),
99954 + [PCF50633_REGULATOR_LDO3] =
99955 + PCF50633_REGULATOR("ldo3", PCF50633_REGULATOR_LDO3),
99956 + [PCF50633_REGULATOR_LDO4] =
99957 + PCF50633_REGULATOR("ldo4", PCF50633_REGULATOR_LDO4),
99958 + [PCF50633_REGULATOR_LDO5] =
99959 + PCF50633_REGULATOR("ldo5", PCF50633_REGULATOR_LDO5),
99960 + [PCF50633_REGULATOR_LDO6] =
99961 + PCF50633_REGULATOR("ldo6", PCF50633_REGULATOR_LDO6),
99962 + [PCF50633_REGULATOR_HCLDO] =
99963 + PCF50633_REGULATOR("hcldo", PCF50633_REGULATOR_HCLDO),
99964 + [PCF50633_REGULATOR_MEMLDO] =
99965 + PCF50633_REGULATOR("memldo", PCF50633_REGULATOR_MEMLDO),
99966 +};
99967 +
99968 +int __init pcf50633_regulator_probe(struct platform_device *pdev)
99969 +{
99970 + struct regulator_dev *rdev;
99971 + struct pcf50633 *pcf;
99972 +
99973 + pcf = pdev->dev.driver_data;
99974 +
99975 + rdev = regulator_register(&regulators[pdev->id], &pdev->dev, pcf);
99976 + if (IS_ERR(rdev))
99977 + return PTR_ERR(rdev);
99978 +
99979 + if (pcf->pdata->regulator_registered)
99980 + pcf->pdata->regulator_registered(pcf, pdev->id);
99981 +
99982 + return 0;
99983 +}
99984 +
99985 +static int __devexit pcf50633_regulator_remove(struct platform_device *pdev)
99986 +{
99987 + struct regulator_dev *rdev = platform_get_drvdata(pdev);
99988 +
99989 + regulator_unregister(rdev);
99990 +
99991 + return 0;
99992 +}
99993 +
99994 +struct platform_driver pcf50633_regulator_driver = {
99995 + .driver = {
99996 + .name = "pcf50633-regltr",
99997 + },
99998 + .probe = pcf50633_regulator_probe,
99999 + .remove = __devexit_p(pcf50633_regulator_remove),
100000 +};
100001 +
100002 +static int __init pcf50633_regulator_init(void)
100003 +{
100004 + return platform_driver_register(&pcf50633_regulator_driver);
100005 +}
100006 +module_init(pcf50633_regulator_init);
100007 +
100008 +static void __exit pcf50633_regulator_exit(void)
100009 +{
100010 + platform_driver_unregister(&pcf50633_regulator_driver);
100011 +}
100012 +module_exit(pcf50633_regulator_exit);
100013 +
100014 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
100015 +MODULE_DESCRIPTION("PCF50633 regulator driver");
100016 +MODULE_LICENSE("GPL");
100017 +MODULE_ALIAS("platform:pcf50633-regulator");
100018 Index: linux-2.6.28/drivers/rtc/Kconfig
100019 ===================================================================
100020 --- linux-2.6.28.orig/drivers/rtc/Kconfig 2008-12-25 00:26:37.000000000 +0100
100021 +++ linux-2.6.28/drivers/rtc/Kconfig 2009-01-02 00:01:56.000000000 +0100
100022 @@ -219,6 +219,18 @@ config RTC_DRV_PCF8583
100023 This driver can also be built as a module. If so, the module
100024 will be called rtc-pcf8583.
100025
100026 +config RTC_DRV_PCF50633
100027 + tristate "Philips PCF50633"
100028 + help
100029 + If you say yes here you get support for the Philips PCF50633
100030 + PMU's RTC.
100031 +
100032 +config RTC_DRV_PCF50606
100033 + tristate "Philips PCF50606"
100034 + help
100035 + If you say yes here you get support for the Philips PCF50606
100036 + PMU's RTC.
100037 +
100038 config RTC_DRV_M41T80
100039 tristate "ST M41T65/M41T80/81/82/83/84/85/87"
100040 help
100041 Index: linux-2.6.28/drivers/rtc/Makefile
100042 ===================================================================
100043 --- linux-2.6.28.orig/drivers/rtc/Makefile 2008-12-25 00:26:37.000000000 +0100
100044 +++ linux-2.6.28/drivers/rtc/Makefile 2009-01-02 00:01:56.000000000 +0100
100045 @@ -50,6 +50,8 @@ obj-$(CONFIG_RTC_DRV_MAX6902) += rtc-max
100046 obj-$(CONFIG_RTC_DRV_OMAP) += rtc-omap.o
100047 obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o
100048 obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o
100049 +obj-$(CONFIG_RTC_DRV_PCF50633) += rtc-pcf50633.o
100050 +obj-$(CONFIG_RTC_DRV_PCF50606) += rtc-pcf50606.o
100051 obj-$(CONFIG_RTC_DRV_PL030) += rtc-pl030.o
100052 obj-$(CONFIG_RTC_DRV_PL031) += rtc-pl031.o
100053 obj-$(CONFIG_RTC_DRV_PARISC) += rtc-parisc.o
100054 Index: linux-2.6.28/drivers/rtc/rtc-pcf50606.c
100055 ===================================================================
100056 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
100057 +++ linux-2.6.28/drivers/rtc/rtc-pcf50606.c 2009-01-02 00:01:56.000000000 +0100
100058 @@ -0,0 +1,300 @@
100059 +/* Philips PCF50606 RTC Driver
100060 + *
100061 + * (C) 2006-2008 by Openmoko, Inc.
100062 + * Author: Balaji Rao <balajirrao@openmoko.org>
100063 + * All rights reserved.
100064 + *
100065 + * Broken down from monstrous PCF50606 driver mainly by
100066 + * Harald Welte, Andy Green and Werner Almesberger
100067 + *
100068 + * This program is free software; you can redistribute it and/or
100069 + * modify it under the terms of the GNU General Public License as
100070 + * published by the Free Software Foundation; either version 2 of
100071 + * the License, or (at your option) any later version.
100072 + *
100073 + * This program is distributed in the hope that it will be useful,
100074 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
100075 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
100076 + * GNU General Public License for more details.
100077 + *
100078 + * You should have received a copy of the GNU General Public License
100079 + * along with this program; if not, write to the Free Software
100080 + * Foundation, Inc., 59 Temple Place, Suite 060, Boston,
100081 + * MA 02111-1307 USA
100082 + */
100083 +
100084 +#include <linux/rtc.h>
100085 +#include <linux/platform_device.h>
100086 +#include <linux/bcd.h>
100087 +
100088 +#include <linux/mfd/pcf50606/core.h>
100089 +#include <linux/mfd/pcf50606/rtc.h>
100090 +
100091 +enum pcf50606_time_indexes {
100092 + PCF50606_TI_SEC = 0,
100093 + PCF50606_TI_MIN,
100094 + PCF50606_TI_HOUR,
100095 + PCF50606_TI_WKDAY,
100096 + PCF50606_TI_DAY,
100097 + PCF50606_TI_MONTH,
100098 + PCF50606_TI_YEAR,
100099 + PCF50606_TI_EXTENT /* always last */
100100 +};
100101 +
100102 +
100103 +struct pcf50606_time {
100104 + u_int8_t time[PCF50606_TI_EXTENT];
100105 +};
100106 +
100107 +static void pcf2rtc_time(struct rtc_time *rtc, struct pcf50606_time *pcf)
100108 +{
100109 + rtc->tm_sec = bcd2bin(pcf->time[PCF50606_TI_SEC]);
100110 + rtc->tm_min = bcd2bin(pcf->time[PCF50606_TI_MIN]);
100111 + rtc->tm_hour = bcd2bin(pcf->time[PCF50606_TI_HOUR]);
100112 + rtc->tm_wday = bcd2bin(pcf->time[PCF50606_TI_WKDAY]);
100113 + rtc->tm_mday = bcd2bin(pcf->time[PCF50606_TI_DAY]);
100114 + rtc->tm_mon = bcd2bin(pcf->time[PCF50606_TI_MONTH]);
100115 + rtc->tm_year = bcd2bin(pcf->time[PCF50606_TI_YEAR]) + 100;
100116 +}
100117 +
100118 +static void rtc2pcf_time(struct pcf50606_time *pcf, struct rtc_time *rtc)
100119 +{
100120 + pcf->time[PCF50606_TI_SEC] = bin2bcd(rtc->tm_sec);
100121 + pcf->time[PCF50606_TI_MIN] = bin2bcd(rtc->tm_min);
100122 + pcf->time[PCF50606_TI_HOUR] = bin2bcd(rtc->tm_hour);
100123 + pcf->time[PCF50606_TI_WKDAY] = bin2bcd(rtc->tm_wday);
100124 + pcf->time[PCF50606_TI_DAY] = bin2bcd(rtc->tm_mday);
100125 + pcf->time[PCF50606_TI_MONTH] = bin2bcd(rtc->tm_mon);
100126 + pcf->time[PCF50606_TI_YEAR] = bin2bcd(rtc->tm_year - 100);
100127 +}
100128 +
100129 +static int pcf50606_rtc_ioctl(struct device *dev, unsigned int cmd,
100130 + unsigned long arg)
100131 +{
100132 + struct pcf50606 *pcf;
100133 +
100134 + pcf = dev_get_drvdata(dev);
100135 +
100136 + switch (cmd) {
100137 + case RTC_AIE_OFF:
100138 + /* disable the alarm interrupt */
100139 + pcf->rtc.alarm_enabled = 0;
100140 + pcf50606_irq_mask(pcf, PCF50606_IRQ_ALARM);
100141 + return 0;
100142 + case RTC_AIE_ON:
100143 + /* enable the alarm interrupt */
100144 + pcf->rtc.alarm_enabled = 1;
100145 + pcf50606_irq_unmask(pcf, PCF50606_IRQ_ALARM);
100146 + return 0;
100147 + case RTC_PIE_OFF:
100148 + /* disable periodic interrupt (hz tick) */
100149 + pcf->rtc.second_enabled = 0;
100150 + pcf50606_irq_mask(pcf, PCF50606_IRQ_SECOND);
100151 + return 0;
100152 + case RTC_PIE_ON:
100153 + /* ensable periodic interrupt (hz tick) */
100154 + pcf->rtc.second_enabled = 1;
100155 + pcf50606_irq_unmask(pcf, PCF50606_IRQ_SECOND);
100156 + return 0;
100157 + }
100158 + return -ENOIOCTLCMD;
100159 +}
100160 +
100161 +static int pcf50606_rtc_read_time(struct device *dev, struct rtc_time *tm)
100162 +{
100163 + struct pcf50606 *pcf;
100164 + struct pcf50606_time pcf_tm;
100165 + int ret;
100166 +
100167 + pcf = dev_get_drvdata(dev);
100168 +
100169 + ret = pcf50606_read_block(pcf, PCF50606_REG_RTCSC,
100170 + PCF50606_TI_EXTENT,
100171 + &pcf_tm.time[0]);
100172 + if (ret != PCF50606_TI_EXTENT)
100173 + dev_err(dev, "Failed to read time\n");
100174 +
100175 + dev_dbg(dev, "PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x\n",
100176 + pcf_tm.time[PCF50606_TI_DAY],
100177 + pcf_tm.time[PCF50606_TI_MONTH],
100178 + pcf_tm.time[PCF50606_TI_YEAR],
100179 + pcf_tm.time[PCF50606_TI_HOUR],
100180 + pcf_tm.time[PCF50606_TI_MIN],
100181 + pcf_tm.time[PCF50606_TI_SEC]);
100182 +
100183 + pcf2rtc_time(tm, &pcf_tm);
100184 +
100185 + dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n",
100186 + tm->tm_mday, tm->tm_mon, tm->tm_year,
100187 + tm->tm_hour, tm->tm_min, tm->tm_sec);
100188 +
100189 + return 0;
100190 +}
100191 +
100192 +static int pcf50606_rtc_set_time(struct device *dev, struct rtc_time *tm)
100193 +{
100194 + struct pcf50606 *pcf;
100195 + struct pcf50606_time pcf_tm;
100196 + int ret;
100197 + int second_masked, alarm_masked;
100198 +
100199 + pcf = dev_get_drvdata(dev);
100200 +
100201 + dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n",
100202 + tm->tm_mday, tm->tm_mon, tm->tm_year,
100203 + tm->tm_hour, tm->tm_min, tm->tm_sec);
100204 + rtc2pcf_time(&pcf_tm, tm);
100205 + dev_dbg(dev, "PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x\n",
100206 + pcf_tm.time[PCF50606_TI_DAY],
100207 + pcf_tm.time[PCF50606_TI_MONTH],
100208 + pcf_tm.time[PCF50606_TI_YEAR],
100209 + pcf_tm.time[PCF50606_TI_HOUR],
100210 + pcf_tm.time[PCF50606_TI_MIN],
100211 + pcf_tm.time[PCF50606_TI_SEC]);
100212 +
100213 +
100214 + second_masked = pcf50606_irq_mask_get(pcf, PCF50606_IRQ_SECOND);
100215 + alarm_masked = pcf50606_irq_mask_get(pcf, PCF50606_IRQ_ALARM);
100216 +
100217 + if (!second_masked)
100218 + pcf50606_irq_mask(pcf, PCF50606_IRQ_SECOND);
100219 + if (!alarm_masked)
100220 + pcf50606_irq_mask(pcf, PCF50606_IRQ_ALARM);
100221 +
100222 + ret = pcf50606_write_block(pcf, PCF50606_REG_RTCSC,
100223 + PCF50606_TI_EXTENT,
100224 + &pcf_tm.time[0]);
100225 + if (ret)
100226 + dev_err(dev, "Failed to set time %d\n", ret);
100227 +
100228 + if (!second_masked)
100229 + pcf50606_irq_unmask(pcf, PCF50606_IRQ_SECOND);
100230 + if (!alarm_masked)
100231 + pcf50606_irq_unmask(pcf, PCF50606_IRQ_ALARM);
100232 +
100233 +
100234 + return 0;
100235 +}
100236 +
100237 +static int pcf50606_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
100238 +{
100239 + struct pcf50606 *pcf;
100240 + struct pcf50606_time pcf_tm;
100241 + int ret;
100242 +
100243 + pcf = dev_get_drvdata(dev);
100244 +
100245 + alrm->enabled = pcf->rtc.alarm_enabled;
100246 +
100247 + ret = pcf50606_read_block(pcf, PCF50606_REG_RTCSCA,
100248 + PCF50606_TI_EXTENT, &pcf_tm.time[0]);
100249 +
100250 + if (ret != PCF50606_TI_EXTENT)
100251 + dev_err(dev, "Failed to read Alarm time :-(\n");
100252 +
100253 + pcf2rtc_time(&alrm->time, &pcf_tm);
100254 +
100255 + return 0;
100256 +}
100257 +
100258 +static int pcf50606_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
100259 +{
100260 + struct pcf50606 *pcf;
100261 + struct pcf50606_time pcf_tm;
100262 + int ret, alarm_masked;
100263 +
100264 + pcf = dev_get_drvdata(dev);
100265 +
100266 + rtc2pcf_time(&pcf_tm, &alrm->time);
100267 +
100268 + /* do like mktime does and ignore tm_wday */
100269 + pcf_tm.time[PCF50606_TI_WKDAY] = 7;
100270 +
100271 + alarm_masked = pcf50606_irq_mask_get(pcf, PCF50606_IRQ_ALARM);
100272 +
100273 + /* disable alarm interrupt */
100274 + if (!alarm_masked)
100275 + pcf50606_irq_mask(pcf, PCF50606_IRQ_ALARM);
100276 +
100277 + ret = pcf50606_write_block(pcf, PCF50606_REG_RTCSCA,
100278 + PCF50606_TI_EXTENT, &pcf_tm.time[0]);
100279 + if (ret)
100280 + dev_err(dev, "Failed to write alarm time %d\n", ret);
100281 +
100282 + if (!alarm_masked)
100283 + pcf50606_irq_unmask(pcf, PCF50606_IRQ_ALARM);
100284 +
100285 + return 0;
100286 +}
100287 +static struct rtc_class_ops pcf50606_rtc_ops = {
100288 + .ioctl = pcf50606_rtc_ioctl,
100289 + .read_time = pcf50606_rtc_read_time,
100290 + .set_time = pcf50606_rtc_set_time,
100291 + .read_alarm = pcf50606_rtc_read_alarm,
100292 + .set_alarm = pcf50606_rtc_set_alarm,
100293 +};
100294 +
100295 +static void pcf50606_rtc_irq(struct pcf50606 *pcf, int irq, void *unused)
100296 +{
100297 + switch (irq) {
100298 + case PCF50606_IRQ_ALARM:
100299 + rtc_update_irq(pcf->rtc.rtc_dev, 1, RTC_AF | RTC_IRQF);
100300 + break;
100301 + case PCF50606_IRQ_SECOND:
100302 + rtc_update_irq(pcf->rtc.rtc_dev, 1, RTC_PF | RTC_IRQF);
100303 + break;
100304 + }
100305 +}
100306 +
100307 +static int pcf50606_rtc_probe(struct platform_device *pdev)
100308 +{
100309 + struct rtc_device *rtc;
100310 + struct pcf50606 *pcf;
100311 +
100312 + rtc = rtc_device_register("pcf50606", &pdev->dev,
100313 + &pcf50606_rtc_ops, THIS_MODULE);
100314 + if (IS_ERR(rtc))
100315 + return -ENODEV;
100316 +
100317 + pcf = platform_get_drvdata(pdev);
100318 +
100319 + /* Set up IRQ handlers */
100320 + pcf->irq_handler[PCF50606_IRQ_ALARM].handler = pcf50606_rtc_irq;
100321 + pcf->irq_handler[PCF50606_IRQ_SECOND].handler = pcf50606_rtc_irq;
100322 +
100323 + pcf->rtc.rtc_dev = rtc;
100324 +
100325 + return 0;
100326 +}
100327 +
100328 +static int pcf50606_rtc_remove(struct platform_device *pdev)
100329 +{
100330 + return 0;
100331 +}
100332 +
100333 +
100334 +static struct platform_driver pcf50606_rtc_driver = {
100335 + .driver = {
100336 + .name = "pcf50606-rtc",
100337 + },
100338 + .probe = pcf50606_rtc_probe,
100339 + .remove = __devexit_p(pcf50606_rtc_remove),
100340 +};
100341 +
100342 +static int __init pcf50606_rtc_init(void)
100343 +{
100344 + return platform_driver_register(&pcf50606_rtc_driver);
100345 +}
100346 +module_init(pcf50606_rtc_init);
100347 +
100348 +static void __exit pcf50606_rtc_exit(void)
100349 +{
100350 + platform_driver_unregister(&pcf50606_rtc_driver);
100351 +}
100352 +module_exit(pcf50606_rtc_exit);
100353 +
100354 +
100355 +MODULE_DESCRIPTION("RTC driver for NXP PCF50606 power management unit");
100356 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
100357 +MODULE_LICENSE("GPL");
100358 +
100359 Index: linux-2.6.28/drivers/rtc/rtc-pcf50633.c
100360 ===================================================================
100361 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
100362 +++ linux-2.6.28/drivers/rtc/rtc-pcf50633.c 2009-01-02 00:01:56.000000000 +0100
100363 @@ -0,0 +1,300 @@
100364 +/* Philips PCF50633 RTC Driver
100365 + *
100366 + * (C) 2006-2008 by Openmoko, Inc.
100367 + * Author: Balaji Rao <balajirrao@openmoko.org>
100368 + * All rights reserved.
100369 + *
100370 + * Broken down from monstrous PCF50633 driver mainly by
100371 + * Harald Welte, Andy Green and Werner Almesberger
100372 + *
100373 + * This program is free software; you can redistribute it and/or
100374 + * modify it under the terms of the GNU General Public License as
100375 + * published by the Free Software Foundation; either version 2 of
100376 + * the License, or (at your option) any later version.
100377 + *
100378 + * This program is distributed in the hope that it will be useful,
100379 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
100380 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
100381 + * GNU General Public License for more details.
100382 + *
100383 + * You should have received a copy of the GNU General Public License
100384 + * along with this program; if not, write to the Free Software
100385 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
100386 + * MA 02111-1307 USA
100387 + */
100388 +
100389 +#include <linux/rtc.h>
100390 +#include <linux/platform_device.h>
100391 +#include <linux/bcd.h>
100392 +
100393 +#include <linux/mfd/pcf50633/core.h>
100394 +#include <linux/mfd/pcf50633/rtc.h>
100395 +
100396 +enum pcf50633_time_indexes {
100397 + PCF50633_TI_SEC = 0,
100398 + PCF50633_TI_MIN,
100399 + PCF50633_TI_HOUR,
100400 + PCF50633_TI_WKDAY,
100401 + PCF50633_TI_DAY,
100402 + PCF50633_TI_MONTH,
100403 + PCF50633_TI_YEAR,
100404 + PCF50633_TI_EXTENT /* always last */
100405 +};
100406 +
100407 +
100408 +struct pcf50633_time {
100409 + u_int8_t time[PCF50633_TI_EXTENT];
100410 +};
100411 +
100412 +static void pcf2rtc_time(struct rtc_time *rtc, struct pcf50633_time *pcf)
100413 +{
100414 + rtc->tm_sec = bcd2bin(pcf->time[PCF50633_TI_SEC]);
100415 + rtc->tm_min = bcd2bin(pcf->time[PCF50633_TI_MIN]);
100416 + rtc->tm_hour = bcd2bin(pcf->time[PCF50633_TI_HOUR]);
100417 + rtc->tm_wday = bcd2bin(pcf->time[PCF50633_TI_WKDAY]);
100418 + rtc->tm_mday = bcd2bin(pcf->time[PCF50633_TI_DAY]);
100419 + rtc->tm_mon = bcd2bin(pcf->time[PCF50633_TI_MONTH]);
100420 + rtc->tm_year = bcd2bin(pcf->time[PCF50633_TI_YEAR]) + 100;
100421 +}
100422 +
100423 +static void rtc2pcf_time(struct pcf50633_time *pcf, struct rtc_time *rtc)
100424 +{
100425 + pcf->time[PCF50633_TI_SEC] = bin2bcd(rtc->tm_sec);
100426 + pcf->time[PCF50633_TI_MIN] = bin2bcd(rtc->tm_min);
100427 + pcf->time[PCF50633_TI_HOUR] = bin2bcd(rtc->tm_hour);
100428 + pcf->time[PCF50633_TI_WKDAY] = bin2bcd(rtc->tm_wday);
100429 + pcf->time[PCF50633_TI_DAY] = bin2bcd(rtc->tm_mday);
100430 + pcf->time[PCF50633_TI_MONTH] = bin2bcd(rtc->tm_mon);
100431 + pcf->time[PCF50633_TI_YEAR] = bin2bcd(rtc->tm_year - 100);
100432 +}
100433 +
100434 +static int pcf50633_rtc_ioctl(struct device *dev, unsigned int cmd,
100435 + unsigned long arg)
100436 +{
100437 + struct pcf50633 *pcf;
100438 +
100439 + pcf = dev_get_drvdata(dev);
100440 +
100441 + switch (cmd) {
100442 + case RTC_AIE_OFF:
100443 + /* disable the alarm interrupt */
100444 + pcf->rtc.alarm_enabled = 0;
100445 + pcf50633_irq_mask(pcf, PCF50633_IRQ_ALARM);
100446 + return 0;
100447 + case RTC_AIE_ON:
100448 + /* enable the alarm interrupt */
100449 + pcf->rtc.alarm_enabled = 1;
100450 + pcf50633_irq_unmask(pcf, PCF50633_IRQ_ALARM);
100451 + return 0;
100452 + case RTC_PIE_OFF:
100453 + /* disable periodic interrupt (hz tick) */
100454 + pcf->rtc.second_enabled = 0;
100455 + pcf50633_irq_mask(pcf, PCF50633_IRQ_SECOND);
100456 + return 0;
100457 + case RTC_PIE_ON:
100458 + /* ensable periodic interrupt (hz tick) */
100459 + pcf->rtc.second_enabled = 1;
100460 + pcf50633_irq_unmask(pcf, PCF50633_IRQ_SECOND);
100461 + return 0;
100462 + }
100463 + return -ENOIOCTLCMD;
100464 +}
100465 +
100466 +static int pcf50633_rtc_read_time(struct device *dev, struct rtc_time *tm)
100467 +{
100468 + struct pcf50633 *pcf;
100469 + struct pcf50633_time pcf_tm;
100470 + int ret;
100471 +
100472 + pcf = dev_get_drvdata(dev);
100473 +
100474 + ret = pcf50633_read_block(pcf, PCF50633_REG_RTCSC,
100475 + PCF50633_TI_EXTENT,
100476 + &pcf_tm.time[0]);
100477 + if (ret != PCF50633_TI_EXTENT)
100478 + dev_err(dev, "Failed to read time\n");
100479 +
100480 + dev_dbg(dev, "PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x\n",
100481 + pcf_tm.time[PCF50633_TI_DAY],
100482 + pcf_tm.time[PCF50633_TI_MONTH],
100483 + pcf_tm.time[PCF50633_TI_YEAR],
100484 + pcf_tm.time[PCF50633_TI_HOUR],
100485 + pcf_tm.time[PCF50633_TI_MIN],
100486 + pcf_tm.time[PCF50633_TI_SEC]);
100487 +
100488 + pcf2rtc_time(tm, &pcf_tm);
100489 +
100490 + dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n",
100491 + tm->tm_mday, tm->tm_mon, tm->tm_year,
100492 + tm->tm_hour, tm->tm_min, tm->tm_sec);
100493 +
100494 + return 0;
100495 +}
100496 +
100497 +static int pcf50633_rtc_set_time(struct device *dev, struct rtc_time *tm)
100498 +{
100499 + struct pcf50633 *pcf;
100500 + struct pcf50633_time pcf_tm;
100501 + int ret;
100502 + int second_masked, alarm_masked;
100503 +
100504 + pcf = dev_get_drvdata(dev);
100505 +
100506 + dev_dbg(dev, "RTC_TIME: %u.%u.%u %u:%u:%u\n",
100507 + tm->tm_mday, tm->tm_mon, tm->tm_year,
100508 + tm->tm_hour, tm->tm_min, tm->tm_sec);
100509 + rtc2pcf_time(&pcf_tm, tm);
100510 + dev_dbg(dev, "PCF_TIME: %02x.%02x.%02x %02x:%02x:%02x\n",
100511 + pcf_tm.time[PCF50633_TI_DAY],
100512 + pcf_tm.time[PCF50633_TI_MONTH],
100513 + pcf_tm.time[PCF50633_TI_YEAR],
100514 + pcf_tm.time[PCF50633_TI_HOUR],
100515 + pcf_tm.time[PCF50633_TI_MIN],
100516 + pcf_tm.time[PCF50633_TI_SEC]);
100517 +
100518 +
100519 + second_masked = pcf50633_irq_mask_get(pcf, PCF50633_IRQ_SECOND);
100520 + alarm_masked = pcf50633_irq_mask_get(pcf, PCF50633_IRQ_ALARM);
100521 +
100522 + if (!second_masked)
100523 + pcf50633_irq_mask(pcf, PCF50633_IRQ_SECOND);
100524 + if (!alarm_masked)
100525 + pcf50633_irq_mask(pcf, PCF50633_IRQ_ALARM);
100526 +
100527 + ret = pcf50633_write_block(pcf, PCF50633_REG_RTCSC,
100528 + PCF50633_TI_EXTENT,
100529 + &pcf_tm.time[0]);
100530 + if (ret)
100531 + dev_err(dev, "Failed to set time %d\n", ret);
100532 +
100533 + if (!second_masked)
100534 + pcf50633_irq_unmask(pcf, PCF50633_IRQ_SECOND);
100535 + if (!alarm_masked)
100536 + pcf50633_irq_unmask(pcf, PCF50633_IRQ_ALARM);
100537 +
100538 +
100539 + return 0;
100540 +}
100541 +
100542 +static int pcf50633_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
100543 +{
100544 + struct pcf50633 *pcf;
100545 + struct pcf50633_time pcf_tm;
100546 + int ret;
100547 +
100548 + pcf = dev_get_drvdata(dev);
100549 +
100550 + alrm->enabled = pcf->rtc.alarm_enabled;
100551 +
100552 + ret = pcf50633_read_block(pcf, PCF50633_REG_RTCSCA,
100553 + PCF50633_TI_EXTENT, &pcf_tm.time[0]);
100554 +
100555 + if (ret != PCF50633_TI_EXTENT)
100556 + dev_err(dev, "Failed to read Alarm time :-(\n");
100557 +
100558 + pcf2rtc_time(&alrm->time, &pcf_tm);
100559 +
100560 + return 0;
100561 +}
100562 +
100563 +static int pcf50633_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
100564 +{
100565 + struct pcf50633 *pcf;
100566 + struct pcf50633_time pcf_tm;
100567 + int ret, alarm_masked;
100568 +
100569 + pcf = dev_get_drvdata(dev);
100570 +
100571 + rtc2pcf_time(&pcf_tm, &alrm->time);
100572 +
100573 + /* do like mktime does and ignore tm_wday */
100574 + pcf_tm.time[PCF50633_TI_WKDAY] = 7;
100575 +
100576 + alarm_masked = pcf50633_irq_mask_get(pcf, PCF50633_IRQ_ALARM);
100577 +
100578 + /* disable alarm interrupt */
100579 + if (!alarm_masked)
100580 + pcf50633_irq_mask(pcf, PCF50633_IRQ_ALARM);
100581 +
100582 + ret = pcf50633_write_block(pcf, PCF50633_REG_RTCSCA,
100583 + PCF50633_TI_EXTENT, &pcf_tm.time[0]);
100584 + if (ret)
100585 + dev_err(dev, "Failed to write alarm time %d\n", ret);
100586 +
100587 + if (!alarm_masked)
100588 + pcf50633_irq_unmask(pcf, PCF50633_IRQ_ALARM);
100589 +
100590 + return 0;
100591 +}
100592 +static struct rtc_class_ops pcf50633_rtc_ops = {
100593 + .ioctl = pcf50633_rtc_ioctl,
100594 + .read_time = pcf50633_rtc_read_time,
100595 + .set_time = pcf50633_rtc_set_time,
100596 + .read_alarm = pcf50633_rtc_read_alarm,
100597 + .set_alarm = pcf50633_rtc_set_alarm,
100598 +};
100599 +
100600 +static void pcf50633_rtc_irq(struct pcf50633 *pcf, int irq, void *unused)
100601 +{
100602 + switch (irq) {
100603 + case PCF50633_IRQ_ALARM:
100604 + rtc_update_irq(pcf->rtc.rtc_dev, 1, RTC_AF | RTC_IRQF);
100605 + break;
100606 + case PCF50633_IRQ_SECOND:
100607 + rtc_update_irq(pcf->rtc.rtc_dev, 1, RTC_PF | RTC_IRQF);
100608 + break;
100609 + }
100610 +}
100611 +
100612 +static int pcf50633_rtc_probe(struct platform_device *pdev)
100613 +{
100614 + struct rtc_device *rtc;
100615 + struct pcf50633 *pcf;
100616 +
100617 + rtc = rtc_device_register("pcf50633", &pdev->dev,
100618 + &pcf50633_rtc_ops, THIS_MODULE);
100619 + if (IS_ERR(rtc))
100620 + return -ENODEV;
100621 +
100622 + pcf = platform_get_drvdata(pdev);
100623 +
100624 + /* Set up IRQ handlers */
100625 + pcf->irq_handler[PCF50633_IRQ_ALARM].handler = pcf50633_rtc_irq;
100626 + pcf->irq_handler[PCF50633_IRQ_SECOND].handler = pcf50633_rtc_irq;
100627 +
100628 + pcf->rtc.rtc_dev = rtc;
100629 +
100630 + return 0;
100631 +}
100632 +
100633 +static int pcf50633_rtc_remove(struct platform_device *pdev)
100634 +{
100635 + return 0;
100636 +}
100637 +
100638 +
100639 +static struct platform_driver pcf50633_rtc_driver = {
100640 + .driver = {
100641 + .name = "pcf50633-rtc",
100642 + },
100643 + .probe = pcf50633_rtc_probe,
100644 + .remove = __devexit_p(pcf50633_rtc_remove),
100645 +};
100646 +
100647 +static int __init pcf50633_rtc_init(void)
100648 +{
100649 + return platform_driver_register(&pcf50633_rtc_driver);
100650 +}
100651 +module_init(pcf50633_rtc_init);
100652 +
100653 +static void __exit pcf50633_rtc_exit(void)
100654 +{
100655 + platform_driver_unregister(&pcf50633_rtc_driver);
100656 +}
100657 +module_exit(pcf50633_rtc_exit);
100658 +
100659 +
100660 +MODULE_DESCRIPTION("RTC driver for NXP PCF50633 power management unit");
100661 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
100662 +MODULE_LICENSE("GPL");
100663 +
100664 Index: linux-2.6.28/drivers/rtc/rtc-s3c.c
100665 ===================================================================
100666 --- linux-2.6.28.orig/drivers/rtc/rtc-s3c.c 2008-12-25 00:26:37.000000000 +0100
100667 +++ linux-2.6.28/drivers/rtc/rtc-s3c.c 2009-01-02 00:01:56.000000000 +0100
100668 @@ -26,7 +26,7 @@
100669 #include <asm/uaccess.h>
100670 #include <asm/io.h>
100671 #include <asm/irq.h>
100672 -#include <asm/plat-s3c/regs-rtc.h>
100673 +#include <plat/regs-rtc.h>
100674
100675 /* I have yet to find an S3C implementation with more than one
100676 * of these rtc blocks in */
100677 Index: linux-2.6.28/drivers/serial/Kconfig
100678 ===================================================================
100679 --- linux-2.6.28.orig/drivers/serial/Kconfig 2008-12-25 00:26:37.000000000 +0100
100680 +++ linux-2.6.28/drivers/serial/Kconfig 2009-01-02 00:01:56.000000000 +0100
100681 @@ -447,7 +447,7 @@ config SERIAL_CLPS711X_CONSOLE
100682
100683 config SERIAL_SAMSUNG
100684 tristate "Samsung SoC serial support"
100685 - depends on ARM && PLAT_S3C24XX
100686 + depends on ARM && PLAT_S3C
100687 select SERIAL_CORE
100688 help
100689 Support for the on-chip UARTs on the Samsung S3C24XX series CPUs,
100690 @@ -455,6 +455,16 @@ config SERIAL_SAMSUNG
100691 provide all of these ports, depending on how the serial port
100692 pins are configured.
100693
100694 +config SERIAL_SAMSUNG_UARTS
100695 + int
100696 + depends on SERIAL_SAMSUNG
100697 + default 2 if ARCH_S3C2400
100698 + default 4 if ARCH_S3C64XX || CPU_S3C2443
100699 + default 3
100700 + help
100701 + Select the number of available UART ports for the Samsung S3C
100702 + serial driver
100703 +
100704 config SERIAL_SAMSUNG_DEBUG
100705 bool "Samsung SoC serial debug"
100706 depends on SERIAL_SAMSUNG && DEBUG_LL
100707 @@ -508,7 +518,20 @@ config SERIAL_S3C2440
100708 help
100709 Serial port support for the Samsung S3C2440 and S3C2442 SoC
100710
100711 -
100712 +config SERIAL_S3C24A0
100713 + tristate "Samsung S3C24A0 Serial port support"
100714 + depends on SERIAL_SAMSUNG && CPU_S3C24A0
100715 + default y if CPU_S3C24A0
100716 + help
100717 + Serial port support for the Samsung S3C24A0 SoC
100718 +
100719 +config SERIAL_S3C6400
100720 + tristate "Samsung S3C6400/S3C6410 Serial port support"
100721 + depends on SERIAL_SAMSUNG && (CPU_S3C600 || CPU_S3C6410)
100722 + default y
100723 + help
100724 + Serial port support for the Samsung S3C6400 and S3C6410
100725 + SoCs
100726
100727 config SERIAL_DZ
100728 bool "DECstation DZ serial driver"
100729 Index: linux-2.6.28/drivers/serial/Makefile
100730 ===================================================================
100731 --- linux-2.6.28.orig/drivers/serial/Makefile 2008-12-25 00:26:37.000000000 +0100
100732 +++ linux-2.6.28/drivers/serial/Makefile 2009-01-02 00:01:56.000000000 +0100
100733 @@ -41,6 +41,8 @@ obj-$(CONFIG_SERIAL_S3C2400) += s3c2400.
100734 obj-$(CONFIG_SERIAL_S3C2410) += s3c2410.o
100735 obj-$(CONFIG_SERIAL_S3C2412) += s3c2412.o
100736 obj-$(CONFIG_SERIAL_S3C2440) += s3c2440.o
100737 +obj-$(CONFIG_SERIAL_S3C24A0) += s3c24a0.o
100738 +obj-$(CONFIG_SERIAL_S3C6400) += s3c6400.o
100739 obj-$(CONFIG_SERIAL_IP22_ZILOG) += ip22zilog.o
100740 obj-$(CONFIG_SERIAL_MUX) += mux.o
100741 obj-$(CONFIG_SERIAL_68328) += 68328serial.o
100742 Index: linux-2.6.28/drivers/serial/s3c2410.c
100743 ===================================================================
100744 --- linux-2.6.28.orig/drivers/serial/s3c2410.c 2008-12-25 00:26:37.000000000 +0100
100745 +++ linux-2.6.28/drivers/serial/s3c2410.c 2009-01-02 00:01:56.000000000 +0100
100746 @@ -19,6 +19,7 @@
100747 #include <linux/serial.h>
100748
100749 #include <asm/irq.h>
100750 +
100751 #include <mach/hardware.h>
100752
100753 #include <plat/regs-serial.h>
100754 Index: linux-2.6.28/drivers/serial/s3c24a0.c
100755 ===================================================================
100756 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
100757 +++ linux-2.6.28/drivers/serial/s3c24a0.c 2009-01-02 00:01:56.000000000 +0100
100758 @@ -0,0 +1,118 @@
100759 +/* linux/drivers/serial/s3c24a0.c
100760 + *
100761 + * Driver for Samsung S3C24A0 SoC onboard UARTs.
100762 + *
100763 + * Based on drivers/serial/s3c2410.c
100764 + *
100765 + * Author: Sandeep Patil <sandeep.patil@azingo.com>
100766 + *
100767 + * Ben Dooks, Copyright (c) 2003-2005,2008 Simtec Electronics
100768 + * http://armlinux.simtec.co.uk/
100769 + *
100770 + * This program is free software; you can redistribute it and/or modify
100771 + * it under the terms of the GNU General Public License version 2 as
100772 + * published by the Free Software Foundation.
100773 +*/
100774 +
100775 +#include <linux/module.h>
100776 +#include <linux/ioport.h>
100777 +#include <linux/platform_device.h>
100778 +#include <linux/init.h>
100779 +#include <linux/serial_core.h>
100780 +#include <linux/serial.h>
100781 +#include <linux/io.h>
100782 +#include <linux/irq.h>
100783 +
100784 +#include <mach/hardware.h>
100785 +
100786 +#include <plat/regs-serial.h>
100787 +#include <mach/regs-gpio.h>
100788 +
100789 +#include "samsung.h"
100790 +
100791 +static int s3c24a0_serial_setsource(struct uart_port *port,
100792 + struct s3c24xx_uart_clksrc *clk)
100793 +{
100794 + unsigned long ucon = rd_regl(port, S3C2410_UCON);
100795 +
100796 + if (strcmp(clk->name, "uclk") == 0)
100797 + ucon |= S3C2410_UCON_UCLK;
100798 + else
100799 + ucon &= ~S3C2410_UCON_UCLK;
100800 +
100801 + wr_regl(port, S3C2410_UCON, ucon);
100802 + return 0;
100803 +}
100804 +
100805 +static int s3c24a0_serial_getsource(struct uart_port *port,
100806 + struct s3c24xx_uart_clksrc *clk)
100807 +{
100808 + unsigned long ucon = rd_regl(port, S3C2410_UCON);
100809 +
100810 + clk->divisor = 1;
100811 + clk->name = (ucon & S3C2410_UCON_UCLK) ? "uclk" : "pclk";
100812 +
100813 + return 0;
100814 +}
100815 +
100816 +static int s3c24a0_serial_resetport(struct uart_port *port,
100817 + struct s3c2410_uartcfg *cfg)
100818 +{
100819 + dbg("s3c24a0_serial_resetport: port=%p (%08lx), cfg=%p\n",
100820 + port, port->mapbase, cfg);
100821 +
100822 + wr_regl(port, S3C2410_UCON, cfg->ucon);
100823 + wr_regl(port, S3C2410_ULCON, cfg->ulcon);
100824 +
100825 + /* reset both fifos */
100826 +
100827 + wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
100828 + wr_regl(port, S3C2410_UFCON, cfg->ufcon);
100829 +
100830 + return 0;
100831 +}
100832 +
100833 +static struct s3c24xx_uart_info s3c24a0_uart_inf = {
100834 + .name = "Samsung S3C24A0 UART",
100835 + .type = PORT_S3C2410,
100836 + .fifosize = 16,
100837 + .rx_fifomask = S3C24A0_UFSTAT_RXMASK,
100838 + .rx_fifoshift = S3C24A0_UFSTAT_RXSHIFT,
100839 + .rx_fifofull = S3C24A0_UFSTAT_RXFULL,
100840 + .tx_fifofull = S3C24A0_UFSTAT_TXFULL,
100841 + .tx_fifomask = S3C24A0_UFSTAT_TXMASK,
100842 + .tx_fifoshift = S3C24A0_UFSTAT_TXSHIFT,
100843 + .get_clksrc = s3c24a0_serial_getsource,
100844 + .set_clksrc = s3c24a0_serial_setsource,
100845 + .reset_port = s3c24a0_serial_resetport,
100846 +};
100847 +
100848 +static int s3c24a0_serial_probe(struct platform_device *dev)
100849 +{
100850 + return s3c24xx_serial_probe(dev, &s3c24a0_uart_inf);
100851 +}
100852 +
100853 +static struct platform_driver s3c24a0_serial_drv = {
100854 + .probe = s3c24a0_serial_probe,
100855 + .remove = s3c24xx_serial_remove,
100856 + .driver = {
100857 + .name = "s3c24a0-uart",
100858 + .owner = THIS_MODULE,
100859 + },
100860 +};
100861 +
100862 +s3c24xx_console_init(&s3c24a0_serial_drv, &s3c24a0_uart_inf);
100863 +
100864 +static int __init s3c24a0_serial_init(void)
100865 +{
100866 + return s3c24xx_serial_init(&s3c24a0_serial_drv, &s3c24a0_uart_inf);
100867 +}
100868 +
100869 +static void __exit s3c24a0_serial_exit(void)
100870 +{
100871 + platform_driver_unregister(&s3c24a0_serial_drv);
100872 +}
100873 +
100874 +module_init(s3c24a0_serial_init);
100875 +module_exit(s3c24a0_serial_exit);
100876 +
100877 Index: linux-2.6.28/drivers/serial/s3c6400.c
100878 ===================================================================
100879 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
100880 +++ linux-2.6.28/drivers/serial/s3c6400.c 2009-01-02 00:01:56.000000000 +0100
100881 @@ -0,0 +1,152 @@
100882 +/* linux/drivers/serial/s3c6400.c
100883 + *
100884 + * Driver for Samsung S3C6400 and S3C6410 SoC onboard UARTs.
100885 + *
100886 + * Copyright 2008 Openmoko, Inc.
100887 + * Copyright 2008 Simtec Electronics
100888 + * Ben Dooks <ben@simtec.co.uk>
100889 + * http://armlinux.simtec.co.uk/
100890 + *
100891 + * This program is free software; you can redistribute it and/or modify
100892 + * it under the terms of the GNU General Public License version 2 as
100893 + * published by the Free Software Foundation.
100894 +*/
100895 +
100896 +#include <linux/module.h>
100897 +#include <linux/ioport.h>
100898 +#include <linux/io.h>
100899 +#include <linux/platform_device.h>
100900 +#include <linux/init.h>
100901 +#include <linux/serial_core.h>
100902 +#include <linux/serial.h>
100903 +
100904 +#include <asm/irq.h>
100905 +#include <mach/hardware.h>
100906 +
100907 +#include <plat/regs-serial.h>
100908 +
100909 +#include "samsung.h"
100910 +
100911 +static int s3c6400_serial_setsource(struct uart_port *port,
100912 + struct s3c24xx_uart_clksrc *clk)
100913 +{
100914 + unsigned long ucon = rd_regl(port, S3C2410_UCON);
100915 +
100916 + if (strcmp(clk->name, "uclk0") == 0) {
100917 + ucon &= ~S3C6400_UCON_CLKMASK;
100918 + ucon |= S3C6400_UCON_UCLK0;
100919 + } else if (strcmp(clk->name, "uclk1") == 0)
100920 + ucon |= S3C6400_UCON_UCLK1;
100921 + else if (strcmp(clk->name, "pclk") == 0) {
100922 + /* See notes about transitioning from UCLK to PCLK */
100923 + ucon &= ~S3C6400_UCON_UCLK0;
100924 + } else {
100925 + printk(KERN_ERR "unknown clock source %s\n", clk->name);
100926 + return -EINVAL;
100927 + }
100928 +
100929 + wr_regl(port, S3C2410_UCON, ucon);
100930 + return 0;
100931 +}
100932 +
100933 +
100934 +static int s3c6400_serial_getsource(struct uart_port *port,
100935 + struct s3c24xx_uart_clksrc *clk)
100936 +{
100937 + u32 ucon = rd_regl(port, S3C2410_UCON);
100938 +
100939 + clk->divisor = 1;
100940 +
100941 + switch (ucon & S3C6400_UCON_CLKMASK) {
100942 + case S3C6400_UCON_UCLK0:
100943 + clk->name = "uclk0";
100944 + break;
100945 +
100946 + case S3C6400_UCON_UCLK1:
100947 + clk->name = "uclk1";
100948 + break;
100949 +
100950 + case S3C6400_UCON_PCLK:
100951 + case S3C6400_UCON_PCLK2:
100952 + clk->name = "pclk";
100953 + break;
100954 + }
100955 +
100956 + return 0;
100957 +}
100958 +
100959 +static int s3c6400_serial_resetport(struct uart_port *port,
100960 + struct s3c2410_uartcfg *cfg)
100961 +{
100962 + unsigned long ucon = rd_regl(port, S3C2410_UCON);
100963 +
100964 + dbg("s3c6400_serial_resetport: port=%p (%08lx), cfg=%p\n",
100965 + port, port->mapbase, cfg);
100966 +
100967 + /* ensure we don't change the clock settings... */
100968 +
100969 + ucon &= S3C6400_UCON_CLKMASK;
100970 +
100971 + wr_regl(port, S3C2410_UCON, ucon | cfg->ucon);
100972 + wr_regl(port, S3C2410_ULCON, cfg->ulcon);
100973 +
100974 + /* reset both fifos */
100975 +
100976 + wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
100977 + wr_regl(port, S3C2410_UFCON, cfg->ufcon);
100978 +
100979 + return 0;
100980 +}
100981 +
100982 +static struct s3c24xx_uart_info s3c6400_uart_inf = {
100983 + .name = "Samsung S3C6400 UART",
100984 + .type = PORT_S3C6400,
100985 + .fifosize = 64,
100986 + .has_divslot = 1,
100987 + .rx_fifomask = S3C2440_UFSTAT_RXMASK,
100988 + .rx_fifoshift = S3C2440_UFSTAT_RXSHIFT,
100989 + .rx_fifofull = S3C2440_UFSTAT_RXFULL,
100990 + .tx_fifofull = S3C2440_UFSTAT_TXFULL,
100991 + .tx_fifomask = S3C2440_UFSTAT_TXMASK,
100992 + .tx_fifoshift = S3C2440_UFSTAT_TXSHIFT,
100993 + .get_clksrc = s3c6400_serial_getsource,
100994 + .set_clksrc = s3c6400_serial_setsource,
100995 + .reset_port = s3c6400_serial_resetport,
100996 +};
100997 +
100998 +/* device management */
100999 +
101000 +static int s3c6400_serial_probe(struct platform_device *dev)
101001 +{
101002 + dbg("s3c6400_serial_probe: dev=%p\n", dev);
101003 + return s3c24xx_serial_probe(dev, &s3c6400_uart_inf);
101004 +}
101005 +
101006 +static struct platform_driver s3c6400_serial_drv = {
101007 + .probe = s3c6400_serial_probe,
101008 + .remove = s3c24xx_serial_remove,
101009 + .driver = {
101010 + .name = "s3c6400-uart",
101011 + .owner = THIS_MODULE,
101012 + },
101013 +};
101014 +
101015 +s3c24xx_console_init(&s3c6400_serial_drv, &s3c6400_uart_inf);
101016 +
101017 +static int __init s3c6400_serial_init(void)
101018 +{
101019 + return s3c24xx_serial_init(&s3c6400_serial_drv, &s3c6400_uart_inf);
101020 +}
101021 +
101022 +static void __exit s3c6400_serial_exit(void)
101023 +{
101024 + platform_driver_unregister(&s3c6400_serial_drv);
101025 +}
101026 +
101027 +module_init(s3c6400_serial_init);
101028 +module_exit(s3c6400_serial_exit);
101029 +
101030 +MODULE_DESCRIPTION("Samsung S3C6400,S3C6410 SoC Serial port driver");
101031 +MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
101032 +MODULE_LICENSE("GPL v2");
101033 +MODULE_ALIAS("platform:s3c6400-uart");
101034 Index: linux-2.6.28/drivers/serial/samsung.c
101035 ===================================================================
101036 --- linux-2.6.28.orig/drivers/serial/samsung.c 2008-12-25 00:26:37.000000000 +0100
101037 +++ linux-2.6.28/drivers/serial/samsung.c 2009-01-02 00:01:56.000000000 +0100
101038 @@ -42,13 +42,18 @@
101039 #include <linux/serial.h>
101040 #include <linux/delay.h>
101041 #include <linux/clk.h>
101042 +#include <linux/cpufreq.h>
101043
101044 #include <asm/irq.h>
101045
101046 #include <mach/hardware.h>
101047 +#include <mach/map.h>
101048
101049 #include <plat/regs-serial.h>
101050 +#if defined(CONFIG_MACH_NEO1973) && !defined(CONFIG_CPU_S3C6410)
101051 #include <mach/regs-gpio.h>
101052 +#include <mach/regs-clock.h>
101053 +#endif
101054
101055 #include "samsung.h"
101056
101057 @@ -58,19 +63,6 @@
101058 #define S3C24XX_SERIAL_MAJOR 204
101059 #define S3C24XX_SERIAL_MINOR 64
101060
101061 -/* we can support 3 uarts, but not always use them */
101062 -
101063 -#ifdef CONFIG_CPU_S3C2400
101064 -#define NR_PORTS (2)
101065 -#else
101066 -#define NR_PORTS (3)
101067 -#endif
101068 -
101069 -/* port irq numbers */
101070 -
101071 -#define TX_IRQ(port) ((port)->irq + 1)
101072 -#define RX_IRQ(port) ((port)->irq)
101073 -
101074 /* macros to change one thing to another */
101075
101076 #define tx_enabled(port) ((port)->unused[0])
101077 @@ -136,8 +128,10 @@ static void s3c24xx_serial_rx_disable(st
101078
101079 static void s3c24xx_serial_stop_tx(struct uart_port *port)
101080 {
101081 + struct s3c24xx_uart_port *ourport = to_ourport(port);
101082 +
101083 if (tx_enabled(port)) {
101084 - disable_irq(TX_IRQ(port));
101085 + disable_irq(ourport->tx_irq);
101086 tx_enabled(port) = 0;
101087 if (port->flags & UPF_CONS_FLOW)
101088 s3c24xx_serial_rx_enable(port);
101089 @@ -146,11 +140,13 @@ static void s3c24xx_serial_stop_tx(struc
101090
101091 static void s3c24xx_serial_start_tx(struct uart_port *port)
101092 {
101093 + struct s3c24xx_uart_port *ourport = to_ourport(port);
101094 +
101095 if (!tx_enabled(port)) {
101096 if (port->flags & UPF_CONS_FLOW)
101097 s3c24xx_serial_rx_disable(port);
101098
101099 - enable_irq(TX_IRQ(port));
101100 + enable_irq(ourport->tx_irq);
101101 tx_enabled(port) = 1;
101102 }
101103 }
101104 @@ -158,9 +154,11 @@ static void s3c24xx_serial_start_tx(stru
101105
101106 static void s3c24xx_serial_stop_rx(struct uart_port *port)
101107 {
101108 + struct s3c24xx_uart_port *ourport = to_ourport(port);
101109 +
101110 if (rx_enabled(port)) {
101111 dbg("s3c24xx_serial_stop_rx: port=%p\n", port);
101112 - disable_irq(RX_IRQ(port));
101113 + disable_irq(ourport->rx_irq);
101114 rx_enabled(port) = 0;
101115 }
101116 }
101117 @@ -241,7 +239,7 @@ s3c24xx_serial_rx_chars(int irq, void *d
101118 port->icount.rx++;
101119
101120 if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) {
101121 - dbg("rxerr: port ch=0x%02x, rxs=0x%08x\n",
101122 + printk(KERN_DEBUG "rxerr: port ch=0x%02x, rxs=0x%08x\n",
101123 ch, uerstat);
101124
101125 /* check for break */
101126 @@ -384,13 +382,13 @@ static void s3c24xx_serial_shutdown(stru
101127 struct s3c24xx_uart_port *ourport = to_ourport(port);
101128
101129 if (ourport->tx_claimed) {
101130 - free_irq(TX_IRQ(port), ourport);
101131 + free_irq(ourport->tx_irq, ourport);
101132 tx_enabled(port) = 0;
101133 ourport->tx_claimed = 0;
101134 }
101135
101136 if (ourport->rx_claimed) {
101137 - free_irq(RX_IRQ(port), ourport);
101138 + free_irq(ourport->rx_irq, ourport);
101139 ourport->rx_claimed = 0;
101140 rx_enabled(port) = 0;
101141 }
101142 @@ -407,12 +405,11 @@ static int s3c24xx_serial_startup(struct
101143
101144 rx_enabled(port) = 1;
101145
101146 - ret = request_irq(RX_IRQ(port),
101147 - s3c24xx_serial_rx_chars, 0,
101148 + ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,
101149 s3c24xx_serial_portname(port), ourport);
101150
101151 if (ret != 0) {
101152 - printk(KERN_ERR "cannot get irq %d\n", RX_IRQ(port));
101153 + printk(KERN_ERR "cannot get irq %d\n", ourport->rx_irq);
101154 return ret;
101155 }
101156
101157 @@ -422,12 +419,11 @@ static int s3c24xx_serial_startup(struct
101158
101159 tx_enabled(port) = 1;
101160
101161 - ret = request_irq(TX_IRQ(port),
101162 - s3c24xx_serial_tx_chars, 0,
101163 + ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,
101164 s3c24xx_serial_portname(port), ourport);
101165
101166 if (ret) {
101167 - printk(KERN_ERR "cannot get irq %d\n", TX_IRQ(port));
101168 + printk(KERN_ERR "cannot get irq %d\n", ourport->tx_irq);
101169 goto err;
101170 }
101171
101172 @@ -452,6 +448,8 @@ static void s3c24xx_serial_pm(struct uar
101173 {
101174 struct s3c24xx_uart_port *ourport = to_ourport(port);
101175
101176 + ourport->pm_level = level;
101177 +
101178 switch (level) {
101179 case 3:
101180 if (!IS_ERR(ourport->baudclk) && ourport->baudclk != NULL)
101181 @@ -514,6 +512,7 @@ s3c24xx_serial_setsource(struct uart_por
101182 struct baud_calc {
101183 struct s3c24xx_uart_clksrc *clksrc;
101184 unsigned int calc;
101185 + unsigned int divslot;
101186 unsigned int quot;
101187 struct clk *src;
101188 };
101189 @@ -523,6 +522,7 @@ static int s3c24xx_serial_calcbaud(struc
101190 struct s3c24xx_uart_clksrc *clksrc,
101191 unsigned int baud)
101192 {
101193 + struct s3c24xx_uart_port *ourport = to_ourport(port);
101194 unsigned long rate;
101195
101196 calc->src = clk_get(port->dev, clksrc->name);
101197 @@ -533,8 +533,24 @@ static int s3c24xx_serial_calcbaud(struc
101198 rate /= clksrc->divisor;
101199
101200 calc->clksrc = clksrc;
101201 - calc->quot = (rate + (8 * baud)) / (16 * baud);
101202 - calc->calc = (rate / (calc->quot * 16));
101203 +
101204 + if (ourport->info->has_divslot) {
101205 + unsigned long div = rate / baud;
101206 +
101207 + /* The UDIVSLOT register on the newer UARTs allows us to
101208 + * get a divisor adjustment of 1/16th on the baud clock.
101209 + *
101210 + * We don't keep the UDIVSLOT value (the 16ths we calculated
101211 + * by not multiplying the baud by 16) as it is easy enough
101212 + * to recalculate.
101213 + */
101214 +
101215 + calc->quot = div / 16;
101216 + calc->calc = rate / div;
101217 + } else {
101218 + calc->quot = (rate + (8 * baud)) / (16 * baud);
101219 + calc->calc = (rate / (calc->quot * 16));
101220 + }
101221
101222 calc->quot--;
101223 return 1;
101224 @@ -617,6 +633,30 @@ static unsigned int s3c24xx_serial_getcl
101225 return best->quot;
101226 }
101227
101228 +/* udivslot_table[]
101229 + *
101230 + * This table takes the fractional value of the baud divisor and gives
101231 + * the recommended setting for the UDIVSLOT register.
101232 + */
101233 +static u16 udivslot_table[16] = {
101234 + [0] = 0x0000,
101235 + [1] = 0x0080,
101236 + [2] = 0x0808,
101237 + [3] = 0x0888,
101238 + [4] = 0x2222,
101239 + [5] = 0x4924,
101240 + [6] = 0x4A52,
101241 + [7] = 0x54AA,
101242 + [8] = 0x5555,
101243 + [9] = 0xD555,
101244 + [10] = 0xD5D5,
101245 + [11] = 0xDDD5,
101246 + [12] = 0xDDDD,
101247 + [13] = 0xDFDD,
101248 + [14] = 0xDFDF,
101249 + [15] = 0xFFDF,
101250 +};
101251 +
101252 static void s3c24xx_serial_set_termios(struct uart_port *port,
101253 struct ktermios *termios,
101254 struct ktermios *old)
101255 @@ -629,6 +669,7 @@ static void s3c24xx_serial_set_termios(s
101256 unsigned int baud, quot;
101257 unsigned int ulcon;
101258 unsigned int umcon;
101259 + unsigned int udivslot = 0;
101260
101261 /*
101262 * We don't support modem control lines.
101263 @@ -650,6 +691,7 @@ static void s3c24xx_serial_set_termios(s
101264 /* check to see if we need to change clock source */
101265
101266 if (ourport->clksrc != clksrc || ourport->baudclk != clk) {
101267 + dbg("selecting clock %p\n", clk);
101268 s3c24xx_serial_setsource(port, clksrc);
101269
101270 if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) {
101271 @@ -661,6 +703,14 @@ static void s3c24xx_serial_set_termios(s
101272
101273 ourport->clksrc = clksrc;
101274 ourport->baudclk = clk;
101275 + ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0;
101276 + }
101277 +
101278 + if (ourport->info->has_divslot) {
101279 + unsigned int div = ourport->baudclk_rate / baud;
101280 +
101281 + udivslot = udivslot_table[div & 15];
101282 + dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
101283 }
101284
101285 switch (termios->c_cflag & CSIZE) {
101286 @@ -702,12 +752,16 @@ static void s3c24xx_serial_set_termios(s
101287
101288 spin_lock_irqsave(&port->lock, flags);
101289
101290 - dbg("setting ulcon to %08x, brddiv to %d\n", ulcon, quot);
101291 + dbg("setting ulcon to %08x, brddiv to %d, udivslot %08x\n",
101292 + ulcon, quot, udivslot);
101293
101294 wr_regl(port, S3C2410_ULCON, ulcon);
101295 wr_regl(port, S3C2410_UBRDIV, quot);
101296 wr_regl(port, S3C2410_UMCON, umcon);
101297
101298 + if (ourport->info->has_divslot)
101299 + wr_regl(port, S3C2443_DIVSLOT, udivslot);
101300 +
101301 dbg("uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n",
101302 rd_regl(port, S3C2410_ULCON),
101303 rd_regl(port, S3C2410_UCON),
101304 @@ -752,6 +806,8 @@ static const char *s3c24xx_serial_type(s
101305 return "S3C2440";
101306 case PORT_S3C2412:
101307 return "S3C2412";
101308 + case PORT_S3C6400:
101309 + return "S3C6400/10";
101310 default:
101311 return NULL;
101312 }
101313 @@ -827,14 +883,14 @@ static struct uart_ops s3c24xx_serial_op
101314 static struct uart_driver s3c24xx_uart_drv = {
101315 .owner = THIS_MODULE,
101316 .dev_name = "s3c2410_serial",
101317 - .nr = 3,
101318 + .nr = CONFIG_SERIAL_SAMSUNG_UARTS,
101319 .cons = S3C24XX_SERIAL_CONSOLE,
101320 .driver_name = S3C24XX_SERIAL_NAME,
101321 .major = S3C24XX_SERIAL_MAJOR,
101322 .minor = S3C24XX_SERIAL_MINOR,
101323 };
101324
101325 -static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] = {
101326 +static struct s3c24xx_uart_port s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
101327 [0] = {
101328 .port = {
101329 .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock),
101330 @@ -859,7 +915,7 @@ static struct s3c24xx_uart_port s3c24xx_
101331 .line = 1,
101332 }
101333 },
101334 -#if NR_PORTS > 2
101335 +#if CONFIG_SERIAL_SAMSUNG_UARTS > 2
101336
101337 [2] = {
101338 .port = {
101339 @@ -872,10 +928,88 @@ static struct s3c24xx_uart_port s3c24xx_
101340 .flags = UPF_BOOT_AUTOCONF,
101341 .line = 2,
101342 }
101343 + },
101344 +#endif
101345 +#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
101346 + [3] = {
101347 + .port = {
101348 + .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[3].port.lock),
101349 + .iotype = UPIO_MEM,
101350 + .irq = IRQ_S3CUART_RX3,
101351 + .uartclk = 0,
101352 + .fifosize = 16,
101353 + .ops = &s3c24xx_serial_ops,
101354 + .flags = UPF_BOOT_AUTOCONF,
101355 + .line = 3,
101356 + }
101357 }
101358 #endif
101359 };
101360
101361 +#ifdef CONFIG_MACH_NEO1973_GTA02
101362 +static void s3c24xx_serial_force_debug_port_up(void)
101363 +{
101364 + struct s3c24xx_uart_port *ourport = &s3c24xx_serial_ports[
101365 + CONFIG_DEBUG_S3C_UART];
101366 + struct s3c24xx_uart_clksrc *clksrc = NULL;
101367 + struct clk *clk = NULL;
101368 + unsigned long tmp;
101369 +
101370 + s3c24xx_serial_getclk(&ourport->port, &clksrc, &clk, 115200);
101371 +
101372 + tmp = __raw_readl(S3C2410_CLKCON);
101373 +
101374 + /* re-start uart clocks */
101375 + tmp |= S3C2410_CLKCON_UART0;
101376 + tmp |= S3C2410_CLKCON_UART1;
101377 + tmp |= S3C2410_CLKCON_UART2;
101378 +
101379 + __raw_writel(tmp, S3C2410_CLKCON);
101380 + udelay(10);
101381 +
101382 + s3c24xx_serial_setsource(&ourport->port, clksrc);
101383 +
101384 + if (ourport->baudclk != NULL && !IS_ERR(ourport->baudclk)) {
101385 + clk_disable(ourport->baudclk);
101386 + ourport->baudclk = NULL;
101387 + }
101388 +
101389 + clk_enable(clk);
101390 +
101391 + ourport->clksrc = clksrc;
101392 + ourport->baudclk = clk;
101393 +}
101394 +
101395 +static void s3c2410_printascii(const char *sz)
101396 +{
101397 + struct s3c24xx_uart_port *ourport = &s3c24xx_serial_ports[
101398 + CONFIG_DEBUG_S3C_UART];
101399 + struct uart_port *port = &ourport->port;
101400 +
101401 + /* 8 N 1 */
101402 + wr_regl(port, S3C2410_ULCON, (rd_regl(port, S3C2410_ULCON)) | 3);
101403 + /* polling mode */
101404 + wr_regl(port, S3C2410_UCON, (rd_regl(port, S3C2410_UCON) & ~0xc0f) | 5);
101405 + /* disable FIFO */
101406 + wr_regl(port, S3C2410_UFCON, (rd_regl(port, S3C2410_UFCON) & ~0x01));
101407 + /* fix baud rate */
101408 + wr_regl(port, S3C2410_UBRDIV, 26);
101409 +
101410 + while (*sz) {
101411 + int timeout = 10000000;
101412 +
101413 + /* spin on it being busy */
101414 + while ((!(rd_regl(port, S3C2410_UTRSTAT) & 2)) && timeout--)
101415 + ;
101416 +
101417 + /* transmit register */
101418 + wr_regl(port, S3C2410_UTXH, *sz);
101419 +
101420 + sz++;
101421 + }
101422 +}
101423 +#endif
101424 +
101425 /* s3c24xx_serial_resetport
101426 *
101427 * wrapper to call the specific reset for this port (reset the fifos
101428 @@ -890,6 +1024,93 @@ static inline int s3c24xx_serial_resetpo
101429 return (info->reset_port)(port, cfg);
101430 }
101431
101432 +
101433 +#ifdef CONFIG_CPU_FREQ
101434 +
101435 +static int s3c24xx_serial_cpufreq_transition(struct notifier_block *nb,
101436 + unsigned long val, void *data)
101437 +{
101438 + struct s3c24xx_uart_port *port;
101439 + struct uart_port *uport;
101440 +
101441 + port = container_of(nb, struct s3c24xx_uart_port, freq_transition);
101442 + uport = &port->port;
101443 +
101444 + /* check to see if port is enabled */
101445 +
101446 + if (port->pm_level != 0)
101447 + return 0;
101448 +
101449 + /* try and work out if the baudrate is changing, we can detect
101450 + * a change in rate, but we do not have support for detecting
101451 + * a disturbance in the clock-rate over the change.
101452 + */
101453 +
101454 + if (IS_ERR(port->clk))
101455 + goto exit;
101456 +
101457 + if (port->baudclk_rate == clk_get_rate(port->clk))
101458 + goto exit;
101459 +
101460 + if (val == CPUFREQ_PRECHANGE) {
101461 + /* we should really shut the port down whilst the
101462 + * frequency change is in progress. */
101463 +
101464 + } else if (val == CPUFREQ_POSTCHANGE) {
101465 + struct ktermios *termios;
101466 + struct tty_struct *tty;
101467 +
101468 + if (uport->info == NULL) {
101469 + printk(KERN_WARNING "%s: info NULL\n", __func__);
101470 + goto exit;
101471 + }
101472 +
101473 + tty = uport->info->port.tty;
101474 +
101475 + if (tty == NULL) {
101476 + printk(KERN_WARNING "%s: tty is NULL\n", __func__);
101477 + goto exit;
101478 + }
101479 +
101480 + termios = tty->termios;
101481 +
101482 + if (termios == NULL) {
101483 + printk(KERN_WARNING "%s: no termios?\n", __func__);
101484 + goto exit;
101485 + }
101486 +
101487 + s3c24xx_serial_set_termios(uport, termios, NULL);
101488 + }
101489 +
101490 + exit:
101491 + return 0;
101492 +}
101493 +
101494 +static inline int s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
101495 +{
101496 + port->freq_transition.notifier_call = s3c24xx_serial_cpufreq_transition;
101497 +
101498 + return cpufreq_register_notifier(&port->freq_transition,
101499 + CPUFREQ_TRANSITION_NOTIFIER);
101500 +}
101501 +
101502 +static inline void s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
101503 +{
101504 + cpufreq_unregister_notifier(&port->freq_transition,
101505 + CPUFREQ_TRANSITION_NOTIFIER);
101506 +}
101507 +
101508 +#else
101509 +static inline int s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
101510 +{
101511 + return 0;
101512 +}
101513 +
101514 +static inline void s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
101515 +{
101516 +}
101517 +#endif
101518 +
101519 /* s3c24xx_serial_init_port
101520 *
101521 * initialise a single serial port from the platform device given
101522 @@ -914,8 +1135,11 @@ static int s3c24xx_serial_init_port(stru
101523 if (port->mapbase != 0)
101524 return 0;
101525
101526 - if (cfg->hwport > 3)
101527 - return -EINVAL;
101528 + if (cfg->hwport > CONFIG_SERIAL_SAMSUNG_UARTS) {
101529 + printk(KERN_ERR "%s: port %d bigger than %d\n", __func__,
101530 + cfg->hwport, CONFIG_SERIAL_SAMSUNG_UARTS);
101531 + return -ERANGE;
101532 + }
101533
101534 /* setup info for port */
101535 port->dev = &platdev->dev;
101536 @@ -943,18 +1167,26 @@ static int s3c24xx_serial_init_port(stru
101537
101538 dbg("resource %p (%lx..%lx)\n", res, res->start, res->end);
101539
101540 - port->mapbase = res->start;
101541 - port->membase = S3C24XX_VA_UART + (res->start - S3C24XX_PA_UART);
101542 + port->mapbase = res->start;
101543 + port->membase = S3C_VA_UART + res->start - (S3C_PA_UART & 0xfff00000);
101544 ret = platform_get_irq(platdev, 0);
101545 if (ret < 0)
101546 port->irq = 0;
101547 - else
101548 + else {
101549 port->irq = ret;
101550 + ourport->rx_irq = ret;
101551 + ourport->tx_irq = ret + 1;
101552 + }
101553 +
101554 + ret = platform_get_irq(platdev, 1);
101555 + if (ret > 0)
101556 + ourport->tx_irq = ret;
101557
101558 ourport->clk = clk_get(&platdev->dev, "uart");
101559
101560 - dbg("port: map=%08x, mem=%08x, irq=%d, clock=%ld\n",
101561 - port->mapbase, port->membase, port->irq, port->uartclk);
101562 + dbg("port: map=%08x, mem=%08x, irq=%d (%d,%d), clock=%ld\n",
101563 + port->mapbase, port->membase, port->irq,
101564 + ourport->rx_irq, ourport->tx_irq, port->uartclk);
101565
101566 /* reset the fifos (and setup the uart) */
101567 s3c24xx_serial_resetport(port, cfg);
101568 @@ -987,6 +1219,7 @@ int s3c24xx_serial_probe(struct platform
101569
101570 ourport = &s3c24xx_serial_ports[probe_index];
101571 probe_index++;
101572 + init_resume_dependency_list(&ourport->resume_dependency);
101573
101574 dbg("%s: initialising port %p...\n", __func__, ourport);
101575
101576 @@ -1002,6 +1235,10 @@ int s3c24xx_serial_probe(struct platform
101577 if (ret < 0)
101578 printk(KERN_ERR "%s: failed to add clksrc attr.\n", __func__);
101579
101580 + ret = s3c24xx_serial_cpufreq_register(ourport);
101581 + if (ret < 0)
101582 + dev_err(&dev->dev, "failed to add cpufreq notifier\n");
101583 +
101584 return 0;
101585
101586 probe_err:
101587 @@ -1015,6 +1252,7 @@ int s3c24xx_serial_remove(struct platfor
101588 struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
101589
101590 if (port) {
101591 + s3c24xx_serial_cpufreq_deregister(to_ourport(port));
101592 device_remove_file(&dev->dev, &dev_attr_clock_source);
101593 uart_remove_one_port(&s3c24xx_uart_drv, port);
101594 }
101595 @@ -1038,6 +1276,16 @@ static int s3c24xx_serial_suspend(struct
101596 return 0;
101597 }
101598
101599 +void s3c24xx_serial_register_resume_dependency(struct resume_dependency *
101600 + resume_dependency, int uart_index)
101601 +{
101602 + struct s3c24xx_uart_port *ourport = &s3c24xx_serial_ports[uart_index];
101603 +
101604 + register_resume_dependency(&ourport->resume_dependency,
101605 + resume_dependency);
101606 +}
101607 +EXPORT_SYMBOL(s3c24xx_serial_register_resume_dependency);
101608 +
101609 static int s3c24xx_serial_resume(struct platform_device *dev)
101610 {
101611 struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
101612 @@ -1049,6 +1297,9 @@ static int s3c24xx_serial_resume(struct
101613 clk_disable(ourport->clk);
101614
101615 uart_resume_port(&s3c24xx_uart_drv, port);
101616 +
101617 + callback_all_resume_dependencies(&ourport->resume_dependency);
101618 +
101619 }
101620
101621 return 0;
101622 @@ -1059,6 +1310,12 @@ int s3c24xx_serial_init(struct platform_
101623 struct s3c24xx_uart_info *info)
101624 {
101625 dbg("s3c24xx_serial_init(%p,%p)\n", drv, info);
101626 +#ifdef CONFIG_MACH_NEO1973_GTA02
101627 + /* set up the emergency debug UART functions */
101628 +
101629 + printk_emergency_debug_spew_init = s3c24xx_serial_force_debug_port_up;
101630 + printk_emergency_debug_spew_send_string = s3c2410_printascii;
101631 +#endif
101632
101633 #ifdef CONFIG_PM
101634 drv->suspend = s3c24xx_serial_suspend;
101635 @@ -1098,6 +1355,13 @@ module_exit(s3c24xx_serial_modexit);
101636 #ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
101637
101638 static struct uart_port *cons_uart;
101639 +static int cons_silenced;
101640 +
101641 +void s3c24xx_serial_console_set_silence(int silenced)
101642 +{
101643 + cons_silenced = silenced;
101644 +}
101645 +EXPORT_SYMBOL(s3c24xx_serial_console_set_silence);
101646
101647 static int
101648 s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon)
101649 @@ -1122,9 +1386,21 @@ static void
101650 s3c24xx_serial_console_putchar(struct uart_port *port, int ch)
101651 {
101652 unsigned int ufcon = rd_regl(cons_uart, S3C2410_UFCON);
101653 + unsigned int umcon = rd_regl(cons_uart, S3C2410_UMCON);
101654 +
101655 + if (cons_silenced)
101656 + return;
101657 +
101658 + /* If auto HW flow control enabled, temporarily turn it off */
101659 + if (umcon & S3C2410_UMCOM_AFC)
101660 + wr_regl(port, S3C2410_UMCON, (umcon & !S3C2410_UMCOM_AFC));
101661 +
101662 while (!s3c24xx_serial_console_txrdy(port, ufcon))
101663 barrier();
101664 wr_regb(cons_uart, S3C2410_UTXH, ch);
101665 +
101666 + if (umcon & S3C2410_UMCOM_AFC)
101667 + wr_regl(port, S3C2410_UMCON, umcon);
101668 }
101669
101670 static void
101671 @@ -1219,7 +1495,7 @@ static int s3c24xx_serial_init_ports(str
101672
101673 platdev_ptr = s3c24xx_uart_devs;
101674
101675 - for (i = 0; i < NR_PORTS; i++, ptr++, platdev_ptr++) {
101676 + for (i = 0; i < CONFIG_SERIAL_SAMSUNG_UARTS; i++, ptr++, platdev_ptr++) {
101677 s3c24xx_serial_init_port(ptr, info, *platdev_ptr);
101678 }
101679
101680 @@ -1240,7 +1516,7 @@ s3c24xx_serial_console_setup(struct cons
101681
101682 /* is this a valid port */
101683
101684 - if (co->index == -1 || co->index >= NR_PORTS)
101685 + if (co->index == -1 || co->index >= CONFIG_SERIAL_SAMSUNG_UARTS)
101686 co->index = 0;
101687
101688 port = &s3c24xx_serial_ports[co->index].port;
101689 Index: linux-2.6.28/drivers/serial/samsung.h
101690 ===================================================================
101691 --- linux-2.6.28.orig/drivers/serial/samsung.h 2008-12-25 00:26:37.000000000 +0100
101692 +++ linux-2.6.28/drivers/serial/samsung.h 2009-01-02 00:01:56.000000000 +0100
101693 @@ -10,6 +10,8 @@
101694 * published by the Free Software Foundation.
101695 */
101696
101697 +#include <linux/resume-dependency.h>
101698 +
101699 struct s3c24xx_uart_info {
101700 char *name;
101701 unsigned int type;
101702 @@ -21,6 +23,10 @@ struct s3c24xx_uart_info {
101703 unsigned long tx_fifoshift;
101704 unsigned long tx_fifofull;
101705
101706 + /* uart port features */
101707 +
101708 + unsigned int has_divslot:1;
101709 +
101710 /* clock source control */
101711
101712 int (*get_clksrc)(struct uart_port *, struct s3c24xx_uart_clksrc *clk);
101713 @@ -33,12 +39,23 @@ struct s3c24xx_uart_info {
101714 struct s3c24xx_uart_port {
101715 unsigned char rx_claimed;
101716 unsigned char tx_claimed;
101717 + unsigned int pm_level;
101718 + unsigned long baudclk_rate;
101719 +
101720 + unsigned int rx_irq;
101721 + unsigned int tx_irq;
101722
101723 struct s3c24xx_uart_info *info;
101724 struct s3c24xx_uart_clksrc *clksrc;
101725 struct clk *clk;
101726 struct clk *baudclk;
101727 struct uart_port port;
101728 +
101729 +#ifdef CONFIG_CPU_FREQ
101730 + struct notifier_block freq_transition;
101731 +#endif
101732 +
101733 + struct resume_dependency resume_dependency;
101734 };
101735
101736 /* conversion functions */
101737 Index: linux-2.6.28/drivers/spi/spi_s3c24xx.c
101738 ===================================================================
101739 --- linux-2.6.28.orig/drivers/spi/spi_s3c24xx.c 2008-12-25 00:26:37.000000000 +0100
101740 +++ linux-2.6.28/drivers/spi/spi_s3c24xx.c 2009-01-02 00:01:56.000000000 +0100
101741 @@ -28,7 +28,7 @@
101742 #include <mach/hardware.h>
101743
101744 #include <mach/regs-gpio.h>
101745 -#include <asm/plat-s3c24xx/regs-spi.h>
101746 +#include <plat/regs-spi.h>
101747 #include <mach/spi.h>
101748
101749 struct s3c24xx_spi {
101750 Index: linux-2.6.28/drivers/spi/spi_s3c24xx_gpio.c
101751 ===================================================================
101752 --- linux-2.6.28.orig/drivers/spi/spi_s3c24xx_gpio.c 2008-12-25 00:26:37.000000000 +0100
101753 +++ linux-2.6.28/drivers/spi/spi_s3c24xx_gpio.c 2009-01-02 00:01:56.000000000 +0100
101754 @@ -91,7 +91,7 @@ static void s3c2410_spigpio_chipselect(s
101755 struct s3c2410_spigpio *sg = spidev_to_sg(dev);
101756
101757 if (sg->info && sg->info->chip_select)
101758 - (sg->info->chip_select)(sg->info, value);
101759 + (sg->info->chip_select)(sg->info, dev->chip_select, value);
101760 }
101761
101762 static int s3c2410_spigpio_probe(struct platform_device *dev)
101763 @@ -100,6 +100,7 @@ static int s3c2410_spigpio_probe(struct
101764 struct spi_master *master;
101765 struct s3c2410_spigpio *sp;
101766 int ret;
101767 + int i;
101768
101769 master = spi_alloc_master(&dev->dev, sizeof(struct s3c2410_spigpio));
101770 if (master == NULL) {
101771 @@ -112,9 +113,11 @@ static int s3c2410_spigpio_probe(struct
101772
101773 platform_set_drvdata(dev, sp);
101774
101775 - /* copy in the plkatform data */
101776 + /* copy in the platform data */
101777 info = sp->info = dev->dev.platform_data;
101778
101779 + master->num_chipselect = info->num_chipselect;
101780 +
101781 /* setup spi bitbang adaptor */
101782 sp->bitbang.master = spi_master_get(master);
101783 sp->bitbang.master->bus_num = info->bus_num;
101784 @@ -143,6 +146,22 @@ static int s3c2410_spigpio_probe(struct
101785 if (ret)
101786 goto err_no_bitbang;
101787
101788 + /* register the chips to go with the board */
101789 +
101790 + for (i = 0; i < sp->info->board_size; i++) {
101791 + struct spi_device *spidev;
101792 +
101793 + dev_info(&dev->dev, "registering %p: %s\n",
101794 + &sp->info->board_info[i],
101795 + sp->info->board_info[i].modalias);
101796 +
101797 + sp->info->board_info[i].controller_data = sp;
101798 + spidev = spi_new_device(master, sp->info->board_info + i);
101799 + if (spidev)
101800 + spidev->max_speed_hz =
101801 + sp->info->board_info[i].max_speed_hz;
101802 + }
101803 +
101804 return 0;
101805
101806 err_no_bitbang:
101807 Index: linux-2.6.28/drivers/usb/gadget/composite.c
101808 ===================================================================
101809 --- linux-2.6.28.orig/drivers/usb/gadget/composite.c 2008-12-25 00:26:37.000000000 +0100
101810 +++ linux-2.6.28/drivers/usb/gadget/composite.c 2009-01-02 00:01:56.000000000 +0100
101811 @@ -1045,7 +1045,11 @@ composite_resume(struct usb_gadget *gadg
101812 /*-------------------------------------------------------------------------*/
101813
101814 static struct usb_gadget_driver composite_driver = {
101815 +#ifdef CONFIG_USB_GADGET_DUALSPEED
101816 .speed = USB_SPEED_HIGH,
101817 +#else
101818 + .speed = USB_SPEED_FULL,
101819 +#endif
101820
101821 .bind = composite_bind,
101822 .unbind = __exit_p(composite_unbind),
101823 Index: linux-2.6.28/drivers/usb/gadget/ether.c
101824 ===================================================================
101825 --- linux-2.6.28.orig/drivers/usb/gadget/ether.c 2008-12-25 00:26:37.000000000 +0100
101826 +++ linux-2.6.28/drivers/usb/gadget/ether.c 2009-01-02 00:01:56.000000000 +0100
101827 @@ -122,11 +122,16 @@ static inline bool has_rndis(void)
101828 * Instead: allocate your own, using normal USB-IF procedures.
101829 */
101830
101831 +#if 0
101832 /* Thanks to NetChip Technologies for donating this product ID.
101833 * It's for devices with only CDC Ethernet configurations.
101834 */
101835 #define CDC_VENDOR_NUM 0x0525 /* NetChip */
101836 #define CDC_PRODUCT_NUM 0xa4a1 /* Linux-USB Ethernet Gadget */
101837 +#else
101838 +#define CDC_VENDOR_NUM 0x1457 /* First International Computer */
101839 +#define CDC_PRODUCT_NUM 0x5117 /* Linux-USB Ethernet Gadget */
101840 +#endif
101841
101842 /* For hardware that can't talk CDC, we use the same vendor ID that
101843 * ARM Linux has used for ethernet-over-usb, both with sa1100 and
101844 @@ -147,8 +152,8 @@ static inline bool has_rndis(void)
101845 * used with CDC Ethernet, Linux 2.4 hosts will need updates to choose
101846 * the non-RNDIS configuration.
101847 */
101848 -#define RNDIS_VENDOR_NUM 0x0525 /* NetChip */
101849 -#define RNDIS_PRODUCT_NUM 0xa4a2 /* Ethernet/RNDIS Gadget */
101850 +#define RNDIS_VENDOR_NUM 0x1457 /* NetChip */
101851 +#define RNDIS_PRODUCT_NUM 0x5122 /* Ethernet/RNDIS Gadget */
101852
101853 /*-------------------------------------------------------------------------*/
101854
101855 Index: linux-2.6.28/drivers/usb/gadget/s3c2410_udc.c
101856 ===================================================================
101857 --- linux-2.6.28.orig/drivers/usb/gadget/s3c2410_udc.c 2008-12-25 00:26:37.000000000 +0100
101858 +++ linux-2.6.28/drivers/usb/gadget/s3c2410_udc.c 2009-01-02 00:01:56.000000000 +0100
101859 @@ -53,8 +53,8 @@
101860 #include <mach/hardware.h>
101861 #include <mach/regs-gpio.h>
101862
101863 -#include <asm/plat-s3c24xx/regs-udc.h>
101864 -#include <asm/plat-s3c24xx/udc.h>
101865 +#include <plat/regs-udc.h>
101866 +#include <plat/udc.h>
101867
101868
101869 #include "s3c2410_udc.h"
101870 @@ -134,6 +134,8 @@ static int dprintk(int level, const char
101871 return 0;
101872 }
101873 #endif
101874 +
101875 +#ifdef CONFIG_USB_GADGET_DEBUG_FS
101876 static int s3c2410_udc_debugfs_seq_show(struct seq_file *m, void *p)
101877 {
101878 u32 addr_reg,pwr_reg,ep_int_reg,usb_int_reg;
101879 @@ -197,6 +199,7 @@ static const struct file_operations s3c2
101880 .release = single_release,
101881 .owner = THIS_MODULE,
101882 };
101883 +#endif
101884
101885 /* io macros */
101886
101887 @@ -843,6 +846,7 @@ static void s3c2410_udc_handle_ep(struct
101888 u32 ep_csr1;
101889 u32 idx;
101890
101891 +handle_ep_again:
101892 if (likely (!list_empty(&ep->queue)))
101893 req = list_entry(ep->queue.next,
101894 struct s3c2410_request, queue);
101895 @@ -882,6 +886,8 @@ static void s3c2410_udc_handle_ep(struct
101896
101897 if ((ep_csr1 & S3C2410_UDC_OCSR1_PKTRDY) && req) {
101898 s3c2410_udc_read_fifo(ep,req);
101899 + if (s3c2410_udc_fifo_count_out())
101900 + goto handle_ep_again;
101901 }
101902 }
101903 }
101904 @@ -1890,6 +1896,7 @@ static int s3c2410_udc_probe(struct plat
101905 udc->vbus = 1;
101906 }
101907
101908 +#ifdef CONFIG_USB_GADGET_DEBUG_FS
101909 if (s3c2410_udc_debugfs_root) {
101910 udc->regs_info = debugfs_create_file("registers", S_IRUGO,
101911 s3c2410_udc_debugfs_root,
101912 @@ -1897,6 +1904,7 @@ static int s3c2410_udc_probe(struct plat
101913 if (!udc->regs_info)
101914 dev_warn(dev, "debugfs file creation failed\n");
101915 }
101916 +#endif
101917
101918 dev_dbg(dev, "probe ok\n");
101919
101920 @@ -2003,12 +2011,14 @@ static int __init udc_init(void)
101921
101922 dprintk(DEBUG_NORMAL, "%s: version %s\n", gadget_name, DRIVER_VERSION);
101923
101924 +#ifdef CONFIG_USB_GADGET_DEBUG_FS
101925 s3c2410_udc_debugfs_root = debugfs_create_dir(gadget_name, NULL);
101926 if (IS_ERR(s3c2410_udc_debugfs_root)) {
101927 printk(KERN_ERR "%s: debugfs dir creation failed %ld\n",
101928 gadget_name, PTR_ERR(s3c2410_udc_debugfs_root));
101929 s3c2410_udc_debugfs_root = NULL;
101930 }
101931 +#endif
101932
101933 retval = platform_driver_register(&udc_driver_2410);
101934 if (retval)
101935 Index: linux-2.6.28/drivers/usb/host/ohci-s3c2410.c
101936 ===================================================================
101937 --- linux-2.6.28.orig/drivers/usb/host/ohci-s3c2410.c 2008-12-25 00:26:37.000000000 +0100
101938 +++ linux-2.6.28/drivers/usb/host/ohci-s3c2410.c 2009-01-02 00:01:56.000000000 +0100
101939 @@ -24,6 +24,7 @@
101940
101941 #include <mach/hardware.h>
101942 #include <mach/usb-control.h>
101943 +#include <mach/regs-gpio.h>
101944
101945 #define valid_port(idx) ((idx) == 1 || (idx) == 2)
101946
101947 @@ -308,6 +309,42 @@ static void s3c2410_hcd_oc(struct s3c241
101948 local_irq_restore(flags);
101949 }
101950
101951 +/* switching of USB pads */
101952 +static ssize_t show_usb_mode(struct device *dev, struct device_attribute *attr,
101953 + char *buf)
101954 +{
101955 + if (__raw_readl(S3C24XX_MISCCR) & S3C2410_MISCCR_USBHOST)
101956 + return sprintf(buf, "host\n");
101957 +
101958 + return sprintf(buf, "device\n");
101959 +}
101960 +
101961 +static ssize_t set_usb_mode(struct device *dev, struct device_attribute *attr,
101962 + const char *buf, size_t count)
101963 +{
101964 + if (!strncmp(buf, "host", 4)) {
101965 + printk("s3c2410: changing usb to host\n");
101966 + s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST,
101967 + S3C2410_MISCCR_USBHOST);
101968 + /* FIXME:
101969 + * - call machine-specific disable-pullup function i
101970 + * - enable +Vbus (if hardware supports it)
101971 + */
101972 + s3c2410_gpio_setpin(S3C2410_GPB9, 0);
101973 + } else if (!strncmp(buf, "device", 6)) {
101974 + printk("s3c2410: changing usb to device\n");
101975 + s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST, 0);
101976 + s3c2410_gpio_setpin(S3C2410_GPB9, 1);
101977 + } else {
101978 + printk("s3c2410: unknown mode\n");
101979 + return -EINVAL;
101980 + }
101981 +
101982 + return count;
101983 +}
101984 +
101985 +static DEVICE_ATTR(usb_mode, S_IRUGO | S_IWUSR, show_usb_mode, set_usb_mode);
101986 +
101987 /* may be called without controller electrically present */
101988 /* may be called with controller, bus, and devices active */
101989
101990 @@ -325,6 +362,7 @@ static void s3c2410_hcd_oc(struct s3c241
101991 static void
101992 usb_hcd_s3c2410_remove (struct usb_hcd *hcd, struct platform_device *dev)
101993 {
101994 + device_remove_file(&dev->dev, &dev_attr_usb_mode);
101995 usb_remove_hcd(hcd);
101996 s3c2410_stop_hc(dev);
101997 iounmap(hcd->regs);
101998 @@ -392,8 +430,15 @@ static int usb_hcd_s3c2410_probe (const
101999 if (retval != 0)
102000 goto err_ioremap;
102001
102002 + retval = device_create_file(&dev->dev, &dev_attr_usb_mode);
102003 + if (retval != 0)
102004 + goto err_hcd;
102005 +
102006 return 0;
102007
102008 + err_hcd:
102009 + usb_remove_hcd(hcd);
102010 +
102011 err_ioremap:
102012 s3c2410_stop_hc(dev);
102013 iounmap(hcd->regs);
102014 Index: linux-2.6.28/drivers/video/backlight/gta01_bl.c
102015 ===================================================================
102016 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
102017 +++ linux-2.6.28/drivers/video/backlight/gta01_bl.c 2009-01-02 00:01:56.000000000 +0100
102018 @@ -0,0 +1,269 @@
102019 +/*
102020 + * Backlight Driver for FIC GTA01 (Neo1973) GSM Phone
102021 + *
102022 + * Copyright (C) 2006-2007 by Openmoko, Inc.
102023 + * Author: Harald Welte <laforge@openmoko.org>
102024 + * All rights reserved.
102025 + *
102026 + * based on corgi_cl.c, Copyright (c) 2004-2006 Richard Purdie
102027 + *
102028 + * This program is free software; you can redistribute it and/or
102029 + * modify it under the terms of the GNU General Public License as
102030 + * published by the Free Software Foundation, version 2.
102031 + *
102032 + * This program is distributed in the hope that it will be useful,
102033 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
102034 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
102035 + * GNU General Public License for more details.
102036 + *
102037 + * You should have received a copy of the GNU General Public License
102038 + * along with this program; if not, write to the Free Software
102039 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
102040 + * MA 02111-1307 USA
102041 + *
102042 + * Javi Roman <javiroman@kernel-labs.org>:
102043 + * implement PWM, instead of simple on/off switching
102044 + *
102045 + */
102046 +
102047 +#include <linux/module.h>
102048 +#include <linux/kernel.h>
102049 +#include <linux/init.h>
102050 +#include <linux/platform_device.h>
102051 +#include <linux/mutex.h>
102052 +#include <linux/fb.h>
102053 +#include <linux/backlight.h>
102054 +#include <linux/clk.h>
102055 +
102056 +#include <mach/hardware.h>
102057 +#include <mach/gta01.h>
102058 +#include <mach/pwm.h>
102059 +
102060 +#include <plat/regs-timer.h>
102061 +#include <asm/plat-s3c24xx/neo1973.h>
102062 +
102063 +static struct backlight_properties gta01bl_prop;
102064 +static struct backlight_device *gta01_backlight_device;
102065 +static struct gta01bl_machinfo *bl_machinfo;
102066 +
102067 +static unsigned long gta01bl_flags;
102068 +
102069 +struct gta01bl_data {
102070 + int intensity;
102071 + struct mutex mutex;
102072 + struct clk *clk;
102073 + struct s3c2410_pwm pwm;
102074 +};
102075 +
102076 +static struct gta01bl_data gta01bl;
102077 +
102078 +static int gta01bl_defer_resume_backlight;
102079 +
102080 +#define GTA01BL_SUSPENDED 0x01
102081 +#define GTA01BL_BATTLOW 0x02
102082 +
102083 +/* On the GTA01 / Neo1973, we use a 50 or 66MHz PCLK, which gives
102084 + * us a 6.25..8.25MHz DIV8 clock, which is further divided by a
102085 + * prescaler of 4, resulting in a 1.56..2.06MHz tick. This results in a
102086 + * minimum frequency of 24..31Hz. At 400Hz, we need to set the count
102087 + * to something like 3906..5156, providing us a way sufficient resolution
102088 + * for display brightness adjustment. */
102089 +#define GTA01BL_COUNTER 5156
102090 +
102091 +static int gta01bl_send_intensity(struct backlight_device *bd)
102092 +{
102093 + int intensity = bd->props.brightness;
102094 +
102095 + if (bd->props.power != FB_BLANK_UNBLANK)
102096 + intensity = 0;
102097 + if (bd->props.fb_blank != FB_BLANK_UNBLANK)
102098 + intensity = 0;
102099 + if (gta01bl_flags & GTA01BL_SUSPENDED)
102100 + intensity = 0;
102101 + if (gta01bl_flags & GTA01BL_BATTLOW)
102102 + intensity &= bl_machinfo->limit_mask;
102103 +
102104 + mutex_lock(&gta01bl.mutex);
102105 +#ifdef GTA01_BACKLIGHT_ONOFF_ONLY
102106 + if (intensity)
102107 + neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 1);
102108 + else
102109 + neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 0);
102110 +#else
102111 + if (intensity == bd->props.max_brightness) {
102112 + neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 1);
102113 + s3c2410_gpio_cfgpin(GTA01_GPIO_BACKLIGHT, S3C2410_GPIO_OUTPUT);
102114 + } else {
102115 + s3c2410_pwm_duty_cycle(intensity & 0xffff, &gta01bl.pwm);
102116 + s3c2410_gpio_cfgpin(GTA01_GPIO_BACKLIGHT, S3C2410_GPB0_TOUT0);
102117 + }
102118 +#endif
102119 + mutex_unlock(&gta01bl.mutex);
102120 +
102121 + gta01bl.intensity = intensity;
102122 + return 0;
102123 +}
102124 +
102125 +static int gta01bl_init_hw(void)
102126 +{
102127 + int rc;
102128 +
102129 + rc = s3c2410_pwm_init(&gta01bl.pwm);
102130 + if (rc)
102131 + return rc;
102132 +
102133 + gta01bl.pwm.timerid = PWM0;
102134 + gta01bl.pwm.prescaler = (4 - 1);
102135 + gta01bl.pwm.divider = S3C2410_TCFG1_MUX0_DIV8;
102136 + gta01bl.pwm.counter = GTA01BL_COUNTER;
102137 + gta01bl.pwm.comparer = gta01bl.pwm.counter;
102138 +
102139 + rc = s3c2410_pwm_enable(&gta01bl.pwm);
102140 + if (rc)
102141 + return rc;
102142 +
102143 + s3c2410_pwm_start(&gta01bl.pwm);
102144 +
102145 + gta01bl_prop.max_brightness = gta01bl.pwm.counter;
102146 +
102147 + return 0;
102148 +}
102149 +
102150 +#ifdef CONFIG_PM
102151 +static int gta01bl_suspend(struct platform_device *dev, pm_message_t state)
102152 +{
102153 + gta01bl_flags |= GTA01BL_SUSPENDED;
102154 + gta01bl_send_intensity(gta01_backlight_device);
102155 + neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 0);
102156 + s3c2410_gpio_cfgpin(GTA01_GPIO_BACKLIGHT, S3C2410_GPIO_OUTPUT);
102157 + return 0;
102158 +}
102159 +
102160 +void gta01bl_deferred_resume(void)
102161 +{
102162 + mutex_lock(&gta01bl.mutex);
102163 + gta01bl_init_hw();
102164 + mutex_unlock(&gta01bl.mutex);
102165 +
102166 + gta01bl_flags &= ~GTA01BL_SUSPENDED;
102167 + gta01bl_send_intensity(gta01_backlight_device);
102168 +}
102169 +EXPORT_SYMBOL_GPL(gta01bl_deferred_resume);
102170 +
102171 +static int gta01bl_resume(struct platform_device *dev)
102172 +{
102173 + if (!gta01bl_defer_resume_backlight)
102174 + gta01bl_deferred_resume();
102175 + return 0;
102176 +}
102177 +#else
102178 +#define gta01bl_suspend NULL
102179 +#define gta01bl_resume NULL
102180 +#endif
102181 +
102182 +static int gta01bl_get_intensity(struct backlight_device *bd)
102183 +{
102184 + return gta01bl.intensity;
102185 +}
102186 +
102187 +static int gta01bl_set_intensity(struct backlight_device *bd)
102188 +{
102189 + gta01bl_send_intensity(gta01_backlight_device);
102190 + return 0;
102191 +}
102192 +
102193 +/*
102194 + * Called when the battery is low to limit the backlight intensity.
102195 + * If limit==0 clear any limit, otherwise limit the intensity
102196 + */
102197 +void gta01bl_limit_intensity(int limit)
102198 +{
102199 + if (limit)
102200 + gta01bl_flags |= GTA01BL_BATTLOW;
102201 + else
102202 + gta01bl_flags &= ~GTA01BL_BATTLOW;
102203 + gta01bl_send_intensity(gta01_backlight_device);
102204 +}
102205 +EXPORT_SYMBOL_GPL(gta01bl_limit_intensity);
102206 +
102207 +
102208 +static struct backlight_ops gta01bl_ops = {
102209 + .get_brightness = gta01bl_get_intensity,
102210 + .update_status = gta01bl_set_intensity,
102211 +};
102212 +
102213 +static int __init gta01bl_probe(struct platform_device *pdev)
102214 +{
102215 + struct gta01bl_machinfo *machinfo = pdev->dev.platform_data;
102216 + int rc;
102217 +
102218 +#ifdef GTA01_BACKLIGHT_ONOFF_ONLY
102219 + s3c2410_gpio_cfgpin(GTA01_GPIO_BACKLIGHT, S3C2410_GPIO_OUTPUT);
102220 + gta01bl_prop.max_brightness = 1;
102221 +#else
102222 + rc = gta01bl_init_hw();
102223 + if (rc < 0)
102224 + return rc;
102225 +#endif
102226 + mutex_init(&gta01bl.mutex);
102227 +
102228 + if (!machinfo->limit_mask)
102229 + machinfo->limit_mask = -1;
102230 +
102231 + gta01bl_defer_resume_backlight = machinfo->defer_resume_backlight;
102232 +
102233 + gta01_backlight_device = backlight_device_register("gta01-bl",
102234 + &pdev->dev, NULL,
102235 + &gta01bl_ops);
102236 + if (IS_ERR(gta01_backlight_device))
102237 + return PTR_ERR(gta01_backlight_device);
102238 +
102239 + gta01bl_prop.power = FB_BLANK_UNBLANK;
102240 + gta01bl_prop.brightness = gta01bl_prop.max_brightness;
102241 + memcpy(&gta01_backlight_device->props,
102242 + &gta01bl_prop, sizeof(gta01bl_prop));
102243 + gta01bl_send_intensity(gta01_backlight_device);
102244 +
102245 + return 0;
102246 +}
102247 +
102248 +static int gta01bl_remove(struct platform_device *dev)
102249 +{
102250 +#ifndef GTA01_BACKLIGHT_ONOFF_ONLY
102251 + s3c2410_pwm_disable(&gta01bl.pwm);
102252 +#endif
102253 + backlight_device_unregister(gta01_backlight_device);
102254 + mutex_destroy(&gta01bl.mutex);
102255 +
102256 + s3c2410_gpio_cfgpin(GTA01_GPIO_BACKLIGHT, S3C2410_GPIO_OUTPUT);
102257 + neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 1);
102258 +
102259 + return 0;
102260 +}
102261 +
102262 +static struct platform_driver gta01bl_driver = {
102263 + .probe = gta01bl_probe,
102264 + .remove = gta01bl_remove,
102265 + .suspend = gta01bl_suspend,
102266 + .resume = gta01bl_resume,
102267 + .driver = {
102268 + .name = "gta01-bl",
102269 + },
102270 +};
102271 +
102272 +static int __init gta01bl_init(void)
102273 +{
102274 + return platform_driver_register(&gta01bl_driver);
102275 +}
102276 +
102277 +static void __exit gta01bl_exit(void)
102278 +{
102279 + platform_driver_unregister(&gta01bl_driver);
102280 +}
102281 +
102282 +module_init(gta01bl_init);
102283 +module_exit(gta01bl_exit);
102284 +
102285 +MODULE_DESCRIPTION("FIC GTA01 (Neo1973) Backlight Driver");
102286 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
102287 +MODULE_LICENSE("GPL");
102288 Index: linux-2.6.28/drivers/video/backlight/Kconfig
102289 ===================================================================
102290 --- linux-2.6.28.orig/drivers/video/backlight/Kconfig 2008-12-25 00:26:37.000000000 +0100
102291 +++ linux-2.6.28/drivers/video/backlight/Kconfig 2009-01-02 00:01:56.000000000 +0100
102292 @@ -152,6 +152,13 @@ config BACKLIGHT_OMAP1
102293 the PWL module of OMAP1 processors. Say Y if your board
102294 uses this hardware.
102295
102296 +config BACKLIGHT_GTA01
102297 + tristate "FIC Neo1973 GTA01 Backlight Driver"
102298 + depends on BACKLIGHT_CLASS_DEVICE && MACH_NEO1973_GTA01
102299 + default y
102300 + help
102301 + If you have a FIC Neo1973 GTA01, say y to enable the backlight driver.
102302 +
102303 config BACKLIGHT_HP680
102304 tristate "HP Jornada 680 Backlight Driver"
102305 depends on BACKLIGHT_CLASS_DEVICE && SH_HP6XX
102306 Index: linux-2.6.28/drivers/video/backlight/Makefile
102307 ===================================================================
102308 --- linux-2.6.28.orig/drivers/video/backlight/Makefile 2008-12-25 00:26:37.000000000 +0100
102309 +++ linux-2.6.28/drivers/video/backlight/Makefile 2009-01-02 00:01:56.000000000 +0100
102310 @@ -12,6 +12,7 @@ obj-$(CONFIG_LCD_TOSA) += tosa_lcd.o
102311 obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
102312 obj-$(CONFIG_BACKLIGHT_ATMEL_PWM) += atmel-pwm-bl.o
102313 obj-$(CONFIG_BACKLIGHT_CORGI) += corgi_bl.o
102314 +obj-$(CONFIG_BACKLIGHT_GTA01) += gta01_bl.o
102315 obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
102316 obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
102317 obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o
102318 Index: linux-2.6.28/drivers/video/console/fbcon.c
102319 ===================================================================
102320 --- linux-2.6.28.orig/drivers/video/console/fbcon.c 2008-12-25 00:26:37.000000000 +0100
102321 +++ linux-2.6.28/drivers/video/console/fbcon.c 2009-01-02 00:01:56.000000000 +0100
102322 @@ -401,6 +401,9 @@ static void fb_flashcursor(struct work_s
102323 int c;
102324 int mode;
102325
102326 + if (info->state != FBINFO_STATE_RUNNING)
102327 + return;
102328 +
102329 acquire_console_sem();
102330 if (ops && ops->currcon != -1)
102331 vc = vc_cons[ops->currcon].d;
102332 @@ -3225,13 +3228,17 @@ static void fbcon_get_requirement(struct
102333 static int fbcon_event_notify(struct notifier_block *self,
102334 unsigned long action, void *data)
102335 {
102336 - struct fb_event *event = data;
102337 - struct fb_info *info = event->info;
102338 + struct fb_event *event;
102339 + struct fb_info *info;
102340 struct fb_videomode *mode;
102341 struct fb_con2fbmap *con2fb;
102342 struct fb_blit_caps *caps;
102343 int ret = 0;
102344
102345 + printk(KERN_INFO "fbcon_event_notify action=%ld, data=%p\n", action, data);
102346 +
102347 + event = data;
102348 + info = event->info;
102349 /*
102350 * ignore all events except driver registration and deregistration
102351 * if fbcon is not active
102352 Index: linux-2.6.28/drivers/video/display/jbt6k74.c
102353 ===================================================================
102354 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
102355 +++ linux-2.6.28/drivers/video/display/jbt6k74.c 2009-01-02 00:01:56.000000000 +0100
102356 @@ -0,0 +1,809 @@
102357 +/* Linux kernel driver for the tpo JBT6K74-AS LCM ASIC
102358 + *
102359 + * Copyright (C) 2006-2007 by Openmoko, Inc.
102360 + * Author: Harald Welte <laforge@openmoko.org>,
102361 + * Stefan Schmidt <stefan@openmoko.org>
102362 + * Copyright (C) 2008 by Harald Welte <laforge@openmoko.org>
102363 + * All rights reserved.
102364 + *
102365 + * This program is free software; you can redistribute it and/or
102366 + * modify it under the terms of the GNU General Public License as
102367 + * published by the Free Software Foundation; either version 2 of
102368 + * the License, or (at your option) any later version.
102369 + *
102370 + * This program is distributed in the hope that it will be useful,
102371 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
102372 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
102373 + * GNU General Public License for more details.
102374 + *
102375 + * You should have received a copy of the GNU General Public License
102376 + * along with this program; if not, write to the Free Software
102377 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
102378 + * MA 02111-1307 USA
102379 + *
102380 + */
102381 +
102382 +#include <linux/kernel.h>
102383 +#include <linux/types.h>
102384 +#include <linux/module.h>
102385 +#include <linux/device.h>
102386 +#include <linux/platform_device.h>
102387 +#include <linux/delay.h>
102388 +#include <linux/jbt6k74.h>
102389 +#include <linux/fb.h>
102390 +
102391 +enum jbt_register {
102392 + JBT_REG_SLEEP_IN = 0x10,
102393 + JBT_REG_SLEEP_OUT = 0x11,
102394 +
102395 + JBT_REG_DISPLAY_OFF = 0x28,
102396 + JBT_REG_DISPLAY_ON = 0x29,
102397 +
102398 + JBT_REG_RGB_FORMAT = 0x3a,
102399 + JBT_REG_QUAD_RATE = 0x3b,
102400 +
102401 + JBT_REG_POWER_ON_OFF = 0xb0,
102402 + JBT_REG_BOOSTER_OP = 0xb1,
102403 + JBT_REG_BOOSTER_MODE = 0xb2,
102404 + JBT_REG_BOOSTER_FREQ = 0xb3,
102405 + JBT_REG_OPAMP_SYSCLK = 0xb4,
102406 + JBT_REG_VSC_VOLTAGE = 0xb5,
102407 + JBT_REG_VCOM_VOLTAGE = 0xb6,
102408 + JBT_REG_EXT_DISPL = 0xb7,
102409 + JBT_REG_OUTPUT_CONTROL = 0xb8,
102410 + JBT_REG_DCCLK_DCEV = 0xb9,
102411 + JBT_REG_DISPLAY_MODE1 = 0xba,
102412 + JBT_REG_DISPLAY_MODE2 = 0xbb,
102413 + JBT_REG_DISPLAY_MODE = 0xbc,
102414 + JBT_REG_ASW_SLEW = 0xbd,
102415 + JBT_REG_DUMMY_DISPLAY = 0xbe,
102416 + JBT_REG_DRIVE_SYSTEM = 0xbf,
102417 +
102418 + JBT_REG_SLEEP_OUT_FR_A = 0xc0,
102419 + JBT_REG_SLEEP_OUT_FR_B = 0xc1,
102420 + JBT_REG_SLEEP_OUT_FR_C = 0xc2,
102421 + JBT_REG_SLEEP_IN_LCCNT_D = 0xc3,
102422 + JBT_REG_SLEEP_IN_LCCNT_E = 0xc4,
102423 + JBT_REG_SLEEP_IN_LCCNT_F = 0xc5,
102424 + JBT_REG_SLEEP_IN_LCCNT_G = 0xc6,
102425 +
102426 + JBT_REG_GAMMA1_FINE_1 = 0xc7,
102427 + JBT_REG_GAMMA1_FINE_2 = 0xc8,
102428 + JBT_REG_GAMMA1_INCLINATION = 0xc9,
102429 + JBT_REG_GAMMA1_BLUE_OFFSET = 0xca,
102430 +
102431 + /* VGA */
102432 + JBT_REG_BLANK_CONTROL = 0xcf,
102433 + JBT_REG_BLANK_TH_TV = 0xd0,
102434 + JBT_REG_CKV_ON_OFF = 0xd1,
102435 + JBT_REG_CKV_1_2 = 0xd2,
102436 + JBT_REG_OEV_TIMING = 0xd3,
102437 + JBT_REG_ASW_TIMING_1 = 0xd4,
102438 + JBT_REG_ASW_TIMING_2 = 0xd5,
102439 +
102440 + /* QVGA */
102441 + JBT_REG_BLANK_CONTROL_QVGA = 0xd6,
102442 + JBT_REG_BLANK_TH_TV_QVGA = 0xd7,
102443 + JBT_REG_CKV_ON_OFF_QVGA = 0xd8,
102444 + JBT_REG_CKV_1_2_QVGA = 0xd9,
102445 + JBT_REG_OEV_TIMING_QVGA = 0xde,
102446 + JBT_REG_ASW_TIMING_1_QVGA = 0xdf,
102447 + JBT_REG_ASW_TIMING_2_QVGA = 0xe0,
102448 +
102449 +
102450 + JBT_REG_HCLOCK_VGA = 0xec,
102451 + JBT_REG_HCLOCK_QVGA = 0xed,
102452 +
102453 +};
102454 +
102455 +enum jbt_state {
102456 + JBT_STATE_DEEP_STANDBY,
102457 + JBT_STATE_SLEEP,
102458 + JBT_STATE_NORMAL,
102459 + JBT_STATE_QVGA_NORMAL,
102460 +};
102461 +
102462 +static const char *jbt_state_names[] = {
102463 + [JBT_STATE_DEEP_STANDBY] = "deep-standby",
102464 + [JBT_STATE_SLEEP] = "sleep",
102465 + [JBT_STATE_NORMAL] = "normal",
102466 + [JBT_STATE_QVGA_NORMAL] = "qvga-normal",
102467 +};
102468 +
102469 +struct jbt_info {
102470 + enum jbt_state state, last_state;
102471 + struct spi_device *spi_dev;
102472 + struct mutex lock; /* protects tx_buf and reg_cache */
102473 + struct notifier_block fb_notif;
102474 + u16 tx_buf[8];
102475 + u16 reg_cache[0xEE];
102476 + int have_resumed;
102477 +};
102478 +
102479 +#define JBT_COMMAND 0x000
102480 +#define JBT_DATA 0x100
102481 +
102482 +
102483 +static int jbt_reg_write_nodata(struct jbt_info *jbt, u8 reg)
102484 +{
102485 + int rc;
102486 +
102487 + mutex_lock(&jbt->lock);
102488 +
102489 + jbt->tx_buf[0] = JBT_COMMAND | reg;
102490 + rc = spi_write(jbt->spi_dev, (u8 *)jbt->tx_buf,
102491 + 1*sizeof(u16));
102492 + if (rc == 0)
102493 + jbt->reg_cache[reg] = 0;
102494 + else
102495 + printk(KERN_ERR"jbt_reg_write_nodata spi_write ret %d\n",
102496 + rc);
102497 +
102498 + mutex_unlock(&jbt->lock);
102499 +
102500 + return rc;
102501 +}
102502 +
102503 +
102504 +static int jbt_reg_write(struct jbt_info *jbt, u8 reg, u8 data)
102505 +{
102506 + int rc;
102507 +
102508 + mutex_lock(&jbt->lock);
102509 +
102510 + jbt->tx_buf[0] = JBT_COMMAND | reg;
102511 + jbt->tx_buf[1] = JBT_DATA | data;
102512 + rc = spi_write(jbt->spi_dev, (u8 *)jbt->tx_buf,
102513 + 2*sizeof(u16));
102514 + if (rc == 0)
102515 + jbt->reg_cache[reg] = data;
102516 + else
102517 + printk(KERN_ERR"jbt_reg_write spi_write ret %d\n", rc);
102518 +
102519 + mutex_unlock(&jbt->lock);
102520 +
102521 + return rc;
102522 +}
102523 +
102524 +static int jbt_reg_write16(struct jbt_info *jbt, u8 reg, u16 data)
102525 +{
102526 + int rc;
102527 +
102528 + mutex_lock(&jbt->lock);
102529 +
102530 + jbt->tx_buf[0] = JBT_COMMAND | reg;
102531 + jbt->tx_buf[1] = JBT_DATA | (data >> 8);
102532 + jbt->tx_buf[2] = JBT_DATA | (data & 0xff);
102533 +
102534 + rc = spi_write(jbt->spi_dev, (u8 *)jbt->tx_buf,
102535 + 3*sizeof(u16));
102536 + if (rc == 0)
102537 + jbt->reg_cache[reg] = data;
102538 + else
102539 + printk(KERN_ERR"jbt_reg_write16 spi_write ret %d\n", rc);
102540 +
102541 + mutex_unlock(&jbt->lock);
102542 +
102543 + return rc;
102544 +}
102545 +
102546 +static int jbt_init_regs(struct jbt_info *jbt, int qvga)
102547 +{
102548 + int rc;
102549 +
102550 + dev_dbg(&jbt->spi_dev->dev, "entering %cVGA mode\n", qvga ? 'Q' : ' ');
102551 +
102552 + rc = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE1, 0x01);
102553 + rc |= jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE2, 0x00);
102554 + rc |= jbt_reg_write(jbt, JBT_REG_RGB_FORMAT, 0x60);
102555 + rc |= jbt_reg_write(jbt, JBT_REG_DRIVE_SYSTEM, 0x10);
102556 + rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_OP, 0x56);
102557 + rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_MODE, 0x33);
102558 + rc |= jbt_reg_write(jbt, JBT_REG_BOOSTER_FREQ, 0x11);
102559 + rc |= jbt_reg_write(jbt, JBT_REG_OPAMP_SYSCLK, 0x02);
102560 + rc |= jbt_reg_write(jbt, JBT_REG_VSC_VOLTAGE, 0x2b);
102561 + rc |= jbt_reg_write(jbt, JBT_REG_VCOM_VOLTAGE, 0x40);
102562 + rc |= jbt_reg_write(jbt, JBT_REG_EXT_DISPL, 0x03);
102563 + rc |= jbt_reg_write(jbt, JBT_REG_DCCLK_DCEV, 0x04);
102564 + /*
102565 + * default of 0x02 in JBT_REG_ASW_SLEW responsible for 72Hz requirement
102566 + * to avoid red / blue flicker
102567 + */
102568 + rc |= jbt_reg_write(jbt, JBT_REG_ASW_SLEW, 0x04);
102569 + rc |= jbt_reg_write(jbt, JBT_REG_DUMMY_DISPLAY, 0x00);
102570 +
102571 + rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_A, 0x11);
102572 + rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_B, 0x11);
102573 + rc |= jbt_reg_write(jbt, JBT_REG_SLEEP_OUT_FR_C, 0x11);
102574 + rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_D, 0x2040);
102575 + rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_E, 0x60c0);
102576 + rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_F, 0x1020);
102577 + rc |= jbt_reg_write16(jbt, JBT_REG_SLEEP_IN_LCCNT_G, 0x60c0);
102578 +
102579 + rc |= jbt_reg_write16(jbt, JBT_REG_GAMMA1_FINE_1, 0x5533);
102580 + rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_FINE_2, 0x00);
102581 + rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_INCLINATION, 0x00);
102582 + rc |= jbt_reg_write(jbt, JBT_REG_GAMMA1_BLUE_OFFSET, 0x00);
102583 +
102584 + if (!qvga) {
102585 + rc |= jbt_reg_write16(jbt, JBT_REG_HCLOCK_VGA, 0x1f0);
102586 + rc |= jbt_reg_write(jbt, JBT_REG_BLANK_CONTROL, 0x02);
102587 + rc |= jbt_reg_write16(jbt, JBT_REG_BLANK_TH_TV, 0x0804);
102588 +
102589 + rc |= jbt_reg_write(jbt, JBT_REG_CKV_ON_OFF, 0x01);
102590 + rc |= jbt_reg_write16(jbt, JBT_REG_CKV_1_2, 0x0000);
102591 +
102592 + rc |= jbt_reg_write16(jbt, JBT_REG_OEV_TIMING, 0x0d0e);
102593 + rc |= jbt_reg_write16(jbt, JBT_REG_ASW_TIMING_1, 0x11a4);
102594 + rc |= jbt_reg_write(jbt, JBT_REG_ASW_TIMING_2, 0x0e);
102595 + } else {
102596 + rc |= jbt_reg_write16(jbt, JBT_REG_HCLOCK_QVGA, 0x00ff);
102597 + rc |= jbt_reg_write(jbt, JBT_REG_BLANK_CONTROL_QVGA, 0x02);
102598 + rc |= jbt_reg_write16(jbt, JBT_REG_BLANK_TH_TV_QVGA, 0x0804);
102599 +
102600 + rc |= jbt_reg_write(jbt, JBT_REG_CKV_ON_OFF_QVGA, 0x01);
102601 + rc |= jbt_reg_write16(jbt, JBT_REG_CKV_1_2_QVGA, 0x0008);
102602 +
102603 + rc |= jbt_reg_write16(jbt, JBT_REG_OEV_TIMING_QVGA, 0x050a);
102604 + rc |= jbt_reg_write16(jbt, JBT_REG_ASW_TIMING_1_QVGA, 0x0a19);
102605 + rc |= jbt_reg_write(jbt, JBT_REG_ASW_TIMING_2_QVGA, 0x0a);
102606 + }
102607 +
102608 + return rc ? -EIO : 0;
102609 +}
102610 +
102611 +static int standby_to_sleep(struct jbt_info *jbt)
102612 +{
102613 + int rc;
102614 +
102615 + /* three times command zero */
102616 + rc = jbt_reg_write_nodata(jbt, 0x00);
102617 + mdelay(1);
102618 + rc |= jbt_reg_write_nodata(jbt, 0x00);
102619 + mdelay(1);
102620 + rc |= jbt_reg_write_nodata(jbt, 0x00);
102621 + mdelay(1);
102622 +
102623 + /* deep standby out */
102624 + rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x17);
102625 +
102626 + return rc ? -EIO : 0;
102627 +}
102628 +
102629 +static int sleep_to_normal(struct jbt_info *jbt)
102630 +{
102631 + int rc;
102632 +
102633 + /* RGB I/F on, RAM wirte off, QVGA through, SIGCON enable */
102634 + rc = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x80);
102635 +
102636 + /* Quad mode off */
102637 + rc |= jbt_reg_write(jbt, JBT_REG_QUAD_RATE, 0x00);
102638 +
102639 + /* AVDD on, XVDD on */
102640 + rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x16);
102641 +
102642 + /* Output control */
102643 + rc |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0xfff9);
102644 +
102645 + /* Sleep mode off */
102646 + rc |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_OUT);
102647 +
102648 + /* initialize register set */
102649 + rc |= jbt_init_regs(jbt, 0);
102650 +
102651 + /* Turn on display */
102652 + rc |= jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_ON);
102653 +
102654 + return rc ? -EIO : 0;
102655 +}
102656 +
102657 +static int sleep_to_qvga_normal(struct jbt_info *jbt)
102658 +{
102659 + int rc;
102660 +
102661 + /* RGB I/F on, RAM wirte off, QVGA through, SIGCON enable */
102662 + rc = jbt_reg_write(jbt, JBT_REG_DISPLAY_MODE, 0x81);
102663 +
102664 + /* Quad mode on */
102665 + rc |= jbt_reg_write(jbt, JBT_REG_QUAD_RATE, 0x22);
102666 +
102667 + /* AVDD on, XVDD on */
102668 + rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x16);
102669 +
102670 + /* Output control */
102671 + rc |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0xfff9);
102672 +
102673 + /* Sleep mode off */
102674 + rc |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_OUT);
102675 +
102676 + /* initialize register set for qvga*/
102677 + rc |= jbt_init_regs(jbt, 1);
102678 +
102679 + /* Turn on display */
102680 + rc |= jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_ON);
102681 +
102682 + return rc ? -EIO : 0;
102683 +}
102684 +
102685 +static int normal_to_sleep(struct jbt_info *jbt)
102686 +{
102687 + int rc;
102688 +
102689 + rc = jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF);
102690 + rc |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0x8002);
102691 + rc |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_IN);
102692 +
102693 + return rc ? -EIO : 0;
102694 +}
102695 +
102696 +static int sleep_to_standby(struct jbt_info *jbt)
102697 +{
102698 + return jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x00);
102699 +}
102700 +
102701 +/* frontend function */
102702 +int jbt6k74_enter_state(struct jbt_info *jbt, enum jbt_state new_state)
102703 +{
102704 + int rc = -EINVAL;
102705 +
102706 + dev_dbg(&jbt->spi_dev->dev, "entering (old_state=%u, "
102707 + "new_state=%u)\n", jbt->state, new_state);
102708 +
102709 + switch (jbt->state) {
102710 + case JBT_STATE_DEEP_STANDBY:
102711 + switch (new_state) {
102712 + case JBT_STATE_DEEP_STANDBY:
102713 + rc = 0;
102714 + break;
102715 + case JBT_STATE_SLEEP:
102716 + rc = standby_to_sleep(jbt);
102717 + break;
102718 + case JBT_STATE_NORMAL:
102719 + /* first transition into sleep */
102720 + rc = standby_to_sleep(jbt);
102721 + /* then transition into normal */
102722 + rc |= sleep_to_normal(jbt);
102723 + break;
102724 + case JBT_STATE_QVGA_NORMAL:
102725 + /* first transition into sleep */
102726 + rc = standby_to_sleep(jbt);
102727 + /* then transition into normal */
102728 + rc |= sleep_to_qvga_normal(jbt);
102729 + break;
102730 + }
102731 + break;
102732 + case JBT_STATE_SLEEP:
102733 + switch (new_state) {
102734 + case JBT_STATE_SLEEP:
102735 + rc = 0;
102736 + break;
102737 + case JBT_STATE_DEEP_STANDBY:
102738 + rc = sleep_to_standby(jbt);
102739 + break;
102740 + case JBT_STATE_NORMAL:
102741 + rc = sleep_to_normal(jbt);
102742 + break;
102743 + case JBT_STATE_QVGA_NORMAL:
102744 + rc = sleep_to_qvga_normal(jbt);
102745 + break;
102746 + }
102747 + break;
102748 + case JBT_STATE_NORMAL:
102749 + switch (new_state) {
102750 + case JBT_STATE_NORMAL:
102751 + rc = 0;
102752 + break;
102753 + case JBT_STATE_DEEP_STANDBY:
102754 + /* first transition into sleep */
102755 + rc = normal_to_sleep(jbt);
102756 + /* then transition into deep standby */
102757 + rc |= sleep_to_standby(jbt);
102758 + break;
102759 + case JBT_STATE_SLEEP:
102760 + rc = normal_to_sleep(jbt);
102761 + break;
102762 + case JBT_STATE_QVGA_NORMAL:
102763 + /* first transition into sleep */
102764 + rc = normal_to_sleep(jbt);
102765 + /* second transition into deep standby */
102766 + rc |= sleep_to_standby(jbt);
102767 + /* third transition into sleep */
102768 + rc |= standby_to_sleep(jbt);
102769 + /* fourth transition into normal */
102770 + rc |= sleep_to_qvga_normal(jbt);
102771 + break;
102772 + }
102773 + break;
102774 + case JBT_STATE_QVGA_NORMAL:
102775 + switch (new_state) {
102776 + case JBT_STATE_QVGA_NORMAL:
102777 + rc = 0;
102778 + break;
102779 + case JBT_STATE_DEEP_STANDBY:
102780 + /* first transition into sleep */
102781 + rc = normal_to_sleep(jbt);
102782 + /* then transition into deep standby */
102783 + rc |= sleep_to_standby(jbt);
102784 + break;
102785 + case JBT_STATE_SLEEP:
102786 + rc = normal_to_sleep(jbt);
102787 + break;
102788 + case JBT_STATE_NORMAL:
102789 + /* first transition into sleep */
102790 + rc = normal_to_sleep(jbt);
102791 + /* second transition into deep standby */
102792 + rc |= sleep_to_standby(jbt);
102793 + /* third transition into sleep */
102794 + rc |= standby_to_sleep(jbt);
102795 + /* fourth transition into normal */
102796 + rc |= sleep_to_normal(jbt);
102797 + break;
102798 + }
102799 + break;
102800 + }
102801 +
102802 + if (rc == 0)
102803 + jbt->state = new_state;
102804 +
102805 + return rc;
102806 +}
102807 +EXPORT_SYMBOL_GPL(jbt6k74_enter_state);
102808 +
102809 +static ssize_t state_read(struct device *dev, struct device_attribute *attr,
102810 + char *buf)
102811 +{
102812 + struct jbt_info *jbt = dev_get_drvdata(dev);
102813 +
102814 + if (jbt->state >= ARRAY_SIZE(jbt_state_names))
102815 + return -EIO;
102816 +
102817 + return sprintf(buf, "%s\n", jbt_state_names[jbt->state]);
102818 +}
102819 +
102820 +static ssize_t state_write(struct device *dev, struct device_attribute *attr,
102821 + const char *buf, size_t count)
102822 +{
102823 + struct jbt_info *jbt = dev_get_drvdata(dev);
102824 + int i, rc;
102825 +
102826 + for (i = 0; i < ARRAY_SIZE(jbt_state_names); i++) {
102827 + if (!strncmp(buf, jbt_state_names[i],
102828 + strlen(jbt_state_names[i]))) {
102829 + rc = jbt6k74_enter_state(jbt, i);
102830 + if (rc)
102831 + return rc;
102832 + return count;
102833 + }
102834 + }
102835 +
102836 + return -EINVAL;
102837 +}
102838 +
102839 +static DEVICE_ATTR(state, 0644, state_read, state_write);
102840 +
102841 +static int reg_by_string(const char *name)
102842 +{
102843 + if (!strcmp(name, "gamma_fine1"))
102844 + return JBT_REG_GAMMA1_FINE_1;
102845 + else if (!strcmp(name, "gamma_fine2"))
102846 + return JBT_REG_GAMMA1_FINE_2;
102847 + else if (!strcmp(name, "gamma_inclination"))
102848 + return JBT_REG_GAMMA1_INCLINATION;
102849 + else
102850 + return JBT_REG_GAMMA1_BLUE_OFFSET;
102851 +}
102852 +
102853 +static ssize_t gamma_read(struct device *dev, struct device_attribute *attr,
102854 + char *buf)
102855 +{
102856 + struct jbt_info *jbt = dev_get_drvdata(dev);
102857 + int reg = reg_by_string(attr->attr.name);
102858 + u16 val;
102859 +
102860 + mutex_lock(&jbt->lock);
102861 + val = jbt->reg_cache[reg];
102862 + mutex_unlock(&jbt->lock);
102863 +
102864 + return sprintf(buf, "0x%04x\n", val);
102865 +}
102866 +
102867 +static ssize_t gamma_write(struct device *dev, struct device_attribute *attr,
102868 + const char *buf, size_t count)
102869 +{
102870 + struct jbt_info *jbt = dev_get_drvdata(dev);
102871 + int reg = reg_by_string(attr->attr.name);
102872 + unsigned long val = simple_strtoul(buf, NULL, 10);
102873 +
102874 + dev_info(dev, "**** jbt6k74 writing gama %lu\n", val & 0xff);
102875 +
102876 + jbt_reg_write(jbt, reg, val & 0xff);
102877 +
102878 + return count;
102879 +}
102880 +
102881 +static ssize_t reset_write(struct device *dev, struct device_attribute *attr,
102882 + const char *buf, size_t count)
102883 +{
102884 + struct jbt_info *jbt = dev_get_drvdata(dev);
102885 + struct jbt6k74_platform_data *jbt6k74_pdata = jbt->spi_dev->dev.platform_data;
102886 + int rc;
102887 +
102888 + dev_info(dev, "**** jbt6k74 reset\n");
102889 +
102890 + /* hard reset the jbt6k74 */
102891 +
102892 + (jbt6k74_pdata->reset)(0, 0);
102893 + mdelay(1);
102894 + (jbt6k74_pdata->reset)(0, 1);
102895 + mdelay(120);
102896 +
102897 + rc = jbt_reg_write_nodata(jbt, 0x01);
102898 + if (rc < 0)
102899 + dev_err(dev, "cannot soft reset\n");
102900 +
102901 + mdelay(120);
102902 +
102903 + jbt->state = JBT_STATE_DEEP_STANDBY;
102904 +
102905 + switch (jbt->last_state) {
102906 + case JBT_STATE_QVGA_NORMAL:
102907 + jbt6k74_enter_state(jbt, JBT_STATE_QVGA_NORMAL);
102908 + break;
102909 + default:
102910 + jbt6k74_enter_state(jbt, JBT_STATE_NORMAL);
102911 + break;
102912 + }
102913 +
102914 + return count;
102915 +}
102916 +
102917 +static DEVICE_ATTR(gamma_fine1, 0644, gamma_read, gamma_write);
102918 +static DEVICE_ATTR(gamma_fine2, 0644, gamma_read, gamma_write);
102919 +static DEVICE_ATTR(gamma_inclination, 0644, gamma_read, gamma_write);
102920 +static DEVICE_ATTR(gamma_blue_offset, 0644, gamma_read, gamma_write);
102921 +static DEVICE_ATTR(reset, 0600, NULL, reset_write);
102922 +
102923 +static struct attribute *jbt_sysfs_entries[] = {
102924 + &dev_attr_state.attr,
102925 + &dev_attr_gamma_fine1.attr,
102926 + &dev_attr_gamma_fine2.attr,
102927 + &dev_attr_gamma_inclination.attr,
102928 + &dev_attr_gamma_blue_offset.attr,
102929 + &dev_attr_reset.attr,
102930 + NULL,
102931 +};
102932 +
102933 +static struct attribute_group jbt_attr_group = {
102934 + .name = NULL,
102935 + .attrs = jbt_sysfs_entries,
102936 +};
102937 +
102938 +static int fb_notifier_callback(struct notifier_block *self,
102939 + unsigned long event, void *data)
102940 +{
102941 + struct jbt_info *jbt;
102942 + struct fb_event *evdata = data;
102943 + int fb_blank;
102944 +
102945 + if (event != FB_EVENT_BLANK && event != FB_EVENT_CONBLANK)
102946 + return 0;
102947 +
102948 + fb_blank = *(int *)evdata->data;
102949 + jbt = container_of(self, struct jbt_info, fb_notif);
102950 +
102951 + switch (fb_blank) {
102952 + case FB_BLANK_UNBLANK:
102953 + dev_info(&jbt->spi_dev->dev, "**** jbt6k74 unblank\n");
102954 + jbt6k74_enter_state(jbt, JBT_STATE_NORMAL);
102955 + break;
102956 + case FB_BLANK_NORMAL:
102957 + dev_info(&jbt->spi_dev->dev, "**** jbt6k74 normal\n");
102958 + break;
102959 + case FB_BLANK_VSYNC_SUSPEND:
102960 + dev_info(&jbt->spi_dev->dev, "**** jbt6k74 vsync suspend\n");
102961 + break;
102962 + case FB_BLANK_HSYNC_SUSPEND:
102963 + dev_info(&jbt->spi_dev->dev, "**** jbt6k74 hsync suspend\n");
102964 + /* FIXME: we disable SLEEP since it would result in
102965 + * a visible artefact (white screen) before the backlight
102966 + * is dimmed to a dark enough level */
102967 + /* jbt6k74_enter_state(jbt, JBT_STATE_SLEEP); */
102968 + break;
102969 + case FB_BLANK_POWERDOWN:
102970 + dev_info(&jbt->spi_dev->dev, "**** jbt6k74 powerdown\n");
102971 + /* FIXME: deep standby causes WSOD on certain devices. We use
102972 + * sleep as workaround */
102973 + jbt6k74_enter_state(jbt, JBT_STATE_SLEEP);
102974 + break;
102975 + }
102976 +
102977 + return 0;
102978 +}
102979 +
102980 +/* linux device model infrastructure */
102981 +
102982 +static int __devinit jbt_probe(struct spi_device *spi)
102983 +{
102984 + int rc;
102985 + struct jbt_info *jbt;
102986 + struct jbt6k74_platform_data *jbt6k74_pdata = spi->dev.platform_data;
102987 +
102988 + /* the controller doesn't have a MISO pin; we can't do detection */
102989 +
102990 + spi->mode = SPI_CPOL | SPI_CPHA;
102991 + spi->bits_per_word = 9;
102992 +
102993 + rc = spi_setup(spi);
102994 + if (rc < 0) {
102995 + dev_err(&spi->dev,
102996 + "error during spi_setup of jbt6k74 driver\n");
102997 + return rc;
102998 + }
102999 +
103000 + jbt = kzalloc(sizeof(*jbt), GFP_KERNEL);
103001 + if (!jbt)
103002 + return -ENOMEM;
103003 +
103004 + jbt->spi_dev = spi;
103005 + jbt->state = JBT_STATE_DEEP_STANDBY;
103006 + mutex_init(&jbt->lock);
103007 +
103008 + dev_set_drvdata(&spi->dev, jbt);
103009 +
103010 + /* hard reset the jbt6k74 */
103011 +
103012 + (jbt6k74_pdata->reset)(0, 0);
103013 + mdelay(1);
103014 + (jbt6k74_pdata->reset)(0, 1);
103015 + mdelay(120);
103016 +
103017 + rc = jbt_reg_write_nodata(jbt, 0x01);
103018 + if (rc < 0)
103019 + dev_err(&spi->dev, "cannot soft reset\n");
103020 +
103021 + mdelay(120);
103022 +
103023 +
103024 + rc = jbt6k74_enter_state(jbt, JBT_STATE_NORMAL);
103025 + if (rc < 0) {
103026 + dev_err(&spi->dev, "cannot enter NORMAL state\n");
103027 + goto err_free_drvdata;
103028 + }
103029 +
103030 + rc = sysfs_create_group(&spi->dev.kobj, &jbt_attr_group);
103031 + if (rc < 0) {
103032 + dev_err(&spi->dev, "cannot create sysfs group\n");
103033 + goto err_standby;
103034 + }
103035 +
103036 + jbt->fb_notif.notifier_call = fb_notifier_callback;
103037 + rc = fb_register_client(&jbt->fb_notif);
103038 + if (rc < 0) {
103039 + dev_err(&spi->dev, "cannot register notifier\n");
103040 + goto err_sysfs;
103041 + }
103042 +
103043 + if (jbt6k74_pdata->probe_completed)
103044 + jbt6k74_pdata->probe_completed(&spi->dev);
103045 +
103046 + return 0;
103047 +
103048 +err_sysfs:
103049 + sysfs_remove_group(&spi->dev.kobj, &jbt_attr_group);
103050 +err_standby:
103051 + jbt6k74_enter_state(jbt, JBT_STATE_DEEP_STANDBY);
103052 +err_free_drvdata:
103053 + dev_set_drvdata(&spi->dev, NULL);
103054 + kfree(jbt);
103055 +
103056 + return rc;
103057 +}
103058 +
103059 +static int __devexit jbt_remove(struct spi_device *spi)
103060 +{
103061 + struct jbt_info *jbt = dev_get_drvdata(&spi->dev);
103062 +
103063 + /* We don't want to switch off the display in case the user
103064 + * accidentially onloads the module (whose use count normally is 0) */
103065 +
103066 + fb_unregister_client(&jbt->fb_notif);
103067 + sysfs_remove_group(&spi->dev.kobj, &jbt_attr_group);
103068 + dev_set_drvdata(&spi->dev, NULL);
103069 + kfree(jbt);
103070 +
103071 + return 0;
103072 +}
103073 +
103074 +#ifdef CONFIG_PM
103075 +static int jbt_suspend(struct spi_device *spi, pm_message_t state)
103076 +{
103077 + struct jbt_info *jbt = dev_get_drvdata(&spi->dev);
103078 +
103079 + /* Save mode for resume */
103080 + jbt->last_state = jbt->state;
103081 + /* FIXME: deep standby causes WSOD on certain devices. We use
103082 + * sleep as workaround */
103083 + jbt6k74_enter_state(jbt, JBT_STATE_SLEEP);
103084 +
103085 + jbt->have_resumed = 0;
103086 +
103087 + dev_info(&spi->dev, "**** jbt6k74 suspend end\n");
103088 +
103089 + return 0;
103090 +}
103091 +
103092 +int jbt6k74_resume(struct spi_device *spi)
103093 +{
103094 + struct jbt_info *jbt = dev_get_drvdata(&spi->dev);
103095 + struct jbt6k74_platform_data *jbt6k74_pdata = spi->dev.platform_data;
103096 + int rc;
103097 +
103098 + dev_info(&spi->dev, "**** jbt6k74 resume start\n");
103099 +
103100 + /* hard reset the jbt6k74 */
103101 +
103102 + (jbt6k74_pdata->reset)(0, 0);
103103 + mdelay(1);
103104 + (jbt6k74_pdata->reset)(0, 1);
103105 + mdelay(120);
103106 +
103107 + rc = jbt_reg_write_nodata(jbt, 0x01);
103108 + if (rc < 0)
103109 + dev_err(&spi->dev, "cannot soft reset\n");
103110 +
103111 + mdelay(120);
103112 +
103113 + jbt->state = JBT_STATE_DEEP_STANDBY;
103114 +
103115 + switch (jbt->last_state) {
103116 + case JBT_STATE_QVGA_NORMAL:
103117 + jbt6k74_enter_state(jbt, JBT_STATE_QVGA_NORMAL);
103118 + break;
103119 + default:
103120 + jbt6k74_enter_state(jbt, JBT_STATE_NORMAL);
103121 + break;
103122 + }
103123 +
103124 + if (jbt6k74_pdata->resuming)
103125 + (jbt6k74_pdata->resuming)(0);
103126 +
103127 + dev_info(&spi->dev, "**** jbt6k74 resume end\n");
103128 +
103129 + return 0;
103130 +}
103131 +EXPORT_SYMBOL_GPL(jbt6k74_resume);
103132 +
103133 +#else
103134 +#define jbt_suspend NULL
103135 +#define jbt_resume NULL
103136 +#endif
103137 +
103138 +static struct spi_driver jbt6k74_driver = {
103139 + .driver = {
103140 + .name = "jbt6k74",
103141 + .owner = THIS_MODULE,
103142 + },
103143 +
103144 + .probe = jbt_probe,
103145 + .remove = __devexit_p(jbt_remove),
103146 + .suspend = jbt_suspend,
103147 + .resume = jbt6k74_resume,
103148 +};
103149 +
103150 +static int __init jbt_init(void)
103151 +{
103152 + return spi_register_driver(&jbt6k74_driver);
103153 +}
103154 +
103155 +static void __exit jbt_exit(void)
103156 +{
103157 + spi_unregister_driver(&jbt6k74_driver);
103158 +}
103159 +
103160 +MODULE_DESCRIPTION("SPI driver for tpo JBT6K74-AS LCM control interface");
103161 +MODULE_AUTHOR("Harald Welte <laforge@openmoko.org>");
103162 +MODULE_LICENSE("GPL");
103163 +
103164 +module_init(jbt_init);
103165 +module_exit(jbt_exit);
103166 Index: linux-2.6.28/drivers/video/display/Kconfig
103167 ===================================================================
103168 --- linux-2.6.28.orig/drivers/video/display/Kconfig 2008-12-25 00:26:37.000000000 +0100
103169 +++ linux-2.6.28/drivers/video/display/Kconfig 2009-01-02 00:01:56.000000000 +0100
103170 @@ -21,4 +21,15 @@ config DISPLAY_SUPPORT
103171 comment "Display hardware drivers"
103172 depends on DISPLAY_SUPPORT
103173
103174 +config DISPLAY_JBT6K74
103175 + tristate "TPO JBT6K74-AS TFT display ASIC control interface"
103176 + depends on SPI_MASTER && SYSFS
103177 + help
103178 + SPI driver for the control interface of TFT panels containing
103179 + the TPO JBT6K74-AS controller ASIC, such as the TPO TD028TTEC1
103180 + TFT diplay module used in the FIC/Openmoko Neo1973 GSM phones.
103181 +
103182 + The control interface is required for display operation, as it
103183 + controls power management, display timing and gamma calibration.
103184 +
103185 endmenu
103186 Index: linux-2.6.28/drivers/video/display/Makefile
103187 ===================================================================
103188 --- linux-2.6.28.orig/drivers/video/display/Makefile 2008-12-25 00:26:37.000000000 +0100
103189 +++ linux-2.6.28/drivers/video/display/Makefile 2009-01-02 00:01:56.000000000 +0100
103190 @@ -3,4 +3,5 @@
103191 display-objs := display-sysfs.o
103192
103193 obj-$(CONFIG_DISPLAY_SUPPORT) += display.o
103194 +obj-$(CONFIG_DISPLAY_JBT6K74) += jbt6k74.o
103195
103196 Index: linux-2.6.28/drivers/video/Kconfig
103197 ===================================================================
103198 --- linux-2.6.28.orig/drivers/video/Kconfig 2008-12-25 00:26:37.000000000 +0100
103199 +++ linux-2.6.28/drivers/video/Kconfig 2009-01-02 00:01:56.000000000 +0100
103200 @@ -1918,6 +1918,30 @@ config FB_TMIO_ACCELL
103201 depends on FB_TMIO
103202 default y
103203
103204 +config FB_S3C
103205 + tristate "Samsung S3C framebuffer support"
103206 + depends on FB && ARCH_S3C64XX
103207 + select FB_CFB_FILLRECT
103208 + select FB_CFB_COPYAREA
103209 + select FB_CFB_IMAGEBLIT
103210 + ---help---
103211 + Frame buffer driver for the built-in FB controller in the Samsung
103212 + SoC line from the S3C2443 onwards, including the S3C2416, S3C2450,
103213 + and the S3C64XX series such as the S3C6400 and S3C6410.
103214 +
103215 + These chips all have the same basic framebuffer design with the
103216 + actual capabilities depending on the chip. For instance the S3C6400
103217 + and S3C6410 support 4 hardware windows whereas the S3C24XX series
103218 + currently only have two.
103219 +
103220 + Currently the support is only for the S3C6400 and S3C6410 SoCs.
103221 +
103222 +config FB_S3C_DEBUG_REGWRITE
103223 + bool "Debug register writes"
103224 + depends on FB_S3C
103225 + ---help---
103226 + Show all register writes via printk(KERN_DEBUG)
103227 +
103228 config FB_S3C2410
103229 tristate "S3C2410 LCD framebuffer support"
103230 depends on FB && ARCH_S3C2410
103231 Index: linux-2.6.28/drivers/video/logo/Kconfig
103232 ===================================================================
103233 --- linux-2.6.28.orig/drivers/video/logo/Kconfig 2008-12-25 00:26:37.000000000 +0100
103234 +++ linux-2.6.28/drivers/video/logo/Kconfig 2009-01-02 00:01:56.000000000 +0100
103235 @@ -77,6 +77,11 @@ config LOGO_SUPERH_CLUT224
103236 depends on SUPERH
103237 default y
103238
103239 +config LOGO_OPENMOKO_CLUT224
103240 + bool "224-color Openmoko Linux logo"
103241 + depends on MACH_NEO1973_GTA01 || MACH_NEO1973_GTA02
103242 + default y
103243 +
103244 config LOGO_M32R_CLUT224
103245 bool "224-color M32R Linux logo"
103246 depends on M32R
103247 Index: linux-2.6.28/drivers/video/logo/logo.c
103248 ===================================================================
103249 --- linux-2.6.28.orig/drivers/video/logo/logo.c 2008-12-25 00:26:37.000000000 +0100
103250 +++ linux-2.6.28/drivers/video/logo/logo.c 2009-01-02 00:01:56.000000000 +0100
103251 @@ -35,6 +35,7 @@ extern const struct linux_logo logo_supe
103252 extern const struct linux_logo logo_superh_vga16;
103253 extern const struct linux_logo logo_superh_clut224;
103254 extern const struct linux_logo logo_m32r_clut224;
103255 +extern const struct linux_logo logo_openmoko_clut224;
103256
103257 static int nologo;
103258 module_param(nologo, bool, 0);
103259 @@ -115,6 +116,10 @@ const struct linux_logo * __init_refok f
103260 /* M32R Linux logo */
103261 logo = &logo_m32r_clut224;
103262 #endif
103263 +#ifdef CONFIG_LOGO_OPENMOKO_CLUT224
103264 + /* Openmoko Linux logo */
103265 + logo = &logo_openmoko_clut224;
103266 +#endif
103267 }
103268 return logo;
103269 }
103270 Index: linux-2.6.28/drivers/video/logo/logo_openmoko_clut224.ppm
103271 ===================================================================
103272 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
103273 +++ linux-2.6.28/drivers/video/logo/logo_openmoko_clut224.ppm 2009-01-02 00:01:57.000000000 +0100
103274 @@ -0,0 +1,40003 @@
103275 +P3
103276 +480 500
103277 +255
103278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
103999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
104999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
105999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
106999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
107999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
108999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
109999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
110999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
111999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
112999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
113999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
114999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115075 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
115076 +1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 1
115077 +3 3 1 3 3 1 3 3 1 3 3 1 3 3 1 3 3 1
115078 +3 3 1 3 3 1 3 3 1 3 3 1 3 3 1 2 2 2
115079 +2 2 2 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
115080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115155 +0 0 0 1 1 1 2 2 2 3 3 1 4 3 1 4 3 1
115156 +5 4 1 5 4 1 5 4 1 5 4 1 5 4 1 7 5 2
115157 +7 5 2 7 5 2 7 5 2 7 5 2 7 5 2 7 5 2
115158 +7 5 2 7 5 2 7 5 2 7 5 2 5 4 1 5 4 1
115159 +5 4 1 5 4 1 5 4 1 4 3 1 4 3 1 3 3 1
115160 +3 3 1 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0
115161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
115235 +3 3 1 4 3 1 5 4 1 7 5 2 7 5 2 9 7 3
115236 +9 7 3 9 7 3 10 9 3 10 9 3 11 9 3 11 9 3
115237 +10 9 3 13 11 4 11 9 3 13 11 4 13 11 4 13 11 4
115238 +13 11 4 11 9 3 13 11 4 11 9 3 11 9 3 11 9 3
115239 +10 9 3 9 7 3 9 7 3 9 7 3 7 5 2 7 5 2
115240 +7 5 2 5 4 1 5 4 1 4 3 1 3 3 1 3 3 1
115241 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
115242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115314 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 1 5 4 1
115315 +7 5 2 9 7 3 10 9 3 11 9 3 13 11 4 14 11 4
115316 +15 13 4 15 13 4 15 13 4 16 14 4 18 15 5 18 15 5
115317 +18 15 5 18 15 5 18 15 5 18 15 5 18 15 5 18 15 5
115318 +18 15 5 18 15 5 18 15 5 18 15 5 18 15 5 16 14 4
115319 +16 14 4 15 13 4 15 13 4 14 11 4 13 11 4 13 11 4
115320 +11 9 3 10 9 3 9 7 3 9 7 3 7 5 2 7 5 2
115321 +5 4 1 5 4 1 3 3 1 3 3 1 1 1 1 1 1 1
115322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115394 +0 0 0 0 0 0 2 2 2 4 3 1 7 5 2 9 7 3
115395 +11 9 3 13 11 4 15 13 4 16 14 4 18 15 5 18 15 5
115396 +20 17 5 22 17 5 23 19 6 23 19 6 24 21 6 24 21 6
115397 +24 21 6 25 20 6 25 20 6 25 20 6 25 20 6 25 20 6
115398 +25 20 6 25 20 6 25 20 6 24 21 6 24 21 6 23 19 6
115399 +23 19 6 23 19 6 22 17 5 20 17 5 18 15 5 18 15 5
115400 +18 15 5 16 14 4 15 13 4 14 11 4 13 11 4 13 11 4
115401 +10 9 3 9 7 3 7 5 2 7 5 2 5 4 1 4 3 1
115402 +3 3 1 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
115403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115474 +0 0 0 3 3 1 5 4 1 7 5 2 10 9 3 13 11 4
115475 +16 14 4 18 15 5 22 17 5 23 19 6 24 21 6 25 20 6
115476 +27 23 7 29 24 7 29 24 7 29 24 7 31 27 8 31 27 8
115477 +31 27 8 31 27 8 31 27 8 31 27 8 31 27 8 31 27 8
115478 +31 27 8 31 27 8 31 27 8 31 27 8 31 27 8 31 27 8
115479 +29 24 7 29 24 7 27 23 7 27 23 7 25 20 6 25 20 6
115480 +24 21 6 23 19 6 22 17 5 20 17 5 18 15 5 18 15 5
115481 +16 14 4 15 13 4 13 11 4 11 9 3 10 9 3 9 7 3
115482 +7 5 2 5 4 1 4 3 1 3 3 1 1 1 1 1 1 1
115483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115554 +3 3 1 5 4 1 9 7 3 13 11 4 15 13 4 18 15 5
115555 +22 17 5 24 21 6 27 23 7 29 24 7 31 27 8 31 27 8
115556 +31 27 8 37 31 10 37 31 10 37 31 10 37 31 10 37 31 10
115557 +37 31 10 37 31 10 37 31 10 37 31 10 37 31 10 41 32 10
115558 +37 31 10 37 31 10 37 31 10 37 31 10 37 31 10 37 31 10
115559 +37 31 10 37 31 10 37 31 10 37 31 10 31 27 8 31 27 8
115560 +31 27 8 29 24 7 29 24 7 27 23 7 25 20 6 24 21 6
115561 +23 19 6 20 17 5 18 15 5 18 15 5 15 13 4 14 11 4
115562 +13 11 4 10 9 3 9 7 3 7 5 2 5 4 1 4 3 1
115563 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
115564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115633 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 1
115634 +5 4 1 9 7 3 13 11 4 16 14 4 20 17 5 24 21 6
115635 +27 23 7 31 27 8 31 27 8 37 31 10 37 31 10 37 31 10
115636 +44 35 11 41 32 10 44 35 11 44 35 11 47 39 13 44 35 11
115637 +47 39 13 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
115638 +47 39 13 47 39 13 47 39 13 47 39 13 44 35 11 44 35 11
115639 +41 32 10 44 35 11 37 31 10 41 32 10 37 31 10 37 31 10
115640 +37 31 10 37 31 10 37 31 10 31 27 8 31 27 8 31 27 8
115641 +29 24 7 27 23 7 25 20 6 23 19 6 22 17 5 18 15 5
115642 +18 15 5 15 13 4 14 11 4 13 11 4 10 9 3 7 5 2
115643 +5 4 1 4 3 1 3 3 1 1 1 1 0 0 0 0 0 0
115644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115713 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 1 5 4 1
115714 +9 7 3 14 11 4 18 15 5 22 17 5 25 20 6 29 24 7
115715 +31 27 8 37 31 10 37 31 10 44 35 11 47 39 13 47 39 13
115716 +47 39 13 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
115717 +56 48 15 47 39 13 47 39 13 47 39 13 56 48 15 47 39 13
115718 +47 39 13 47 39 13 47 39 13 56 48 15 47 39 13 47 39 13
115719 +47 39 13 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
115720 +47 39 13 44 35 11 41 32 10 44 35 11 37 31 10 37 31 10
115721 +37 31 10 37 31 10 31 27 8 29 24 7 27 23 7 25 20 6
115722 +24 21 6 22 17 5 18 15 5 18 15 5 15 13 4 13 11 4
115723 +11 9 3 9 7 3 7 5 2 5 4 1 3 3 1 1 1 1
115724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115793 +0 0 0 0 0 0 0 0 0 3 3 1 5 4 1 9 7 3
115794 +14 11 4 18 15 5 23 19 6 27 23 7 31 27 8 37 31 10
115795 +37 31 10 44 35 11 47 39 13 47 39 13 47 39 13 56 48 15
115796 +47 39 13 57 50 17 57 50 17 57 50 17 56 48 15 57 50 17
115797 +56 48 15 57 50 17 57 50 17 57 50 17 56 48 15 57 50 17
115798 +57 50 17 57 50 17 57 50 17 56 48 15 57 50 17 57 50 17
115799 +56 48 15 56 48 15 47 39 13 56 48 15 47 39 13 47 39 13
115800 +47 39 13 47 39 13 47 39 13 47 39 13 47 39 13 44 35 11
115801 +44 35 11 37 31 10 37 31 10 37 31 10 37 31 10 31 27 8
115802 +31 27 8 27 23 7 25 20 6 23 19 6 22 17 5 18 15 5
115803 +16 14 4 14 11 4 13 11 4 9 7 3 7 5 2 5 4 1
115804 +3 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
115805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115873 +0 0 0 0 0 0 3 3 1 5 4 1 9 7 3 13 11 4
115874 +18 15 5 23 19 6 27 23 7 31 27 8 37 31 10 37 31 10
115875 +47 39 13 47 39 13 47 39 13 56 48 15 56 48 15 57 50 17
115876 +57 50 17 57 50 17 56 48 15 57 50 17 56 48 15 57 50 17
115877 +56 48 15 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
115878 +57 50 17 57 50 17 57 50 17 57 50 17 56 48 15 56 48 15
115879 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
115880 +57 50 17 57 50 17 47 39 13 56 48 15 47 39 13 47 39 13
115881 +47 39 13 47 39 13 47 39 13 44 35 11 44 35 11 37 31 10
115882 +37 31 10 37 31 10 31 27 8 29 24 7 27 23 7 25 20 6
115883 +23 19 6 18 15 5 18 15 5 15 13 4 13 11 4 10 9 3
115884 +7 5 2 5 4 1 3 3 1 1 1 1 0 0 0 0 0 0
115885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115953 +0 0 0 2 2 2 5 4 1 9 7 3 13 11 4 18 15 5
115954 +23 19 6 27 23 7 31 27 8 37 31 10 37 31 10 47 39 13
115955 +47 39 13 47 39 13 57 50 17 57 50 17 57 50 17 57 50 17
115956 +57 50 17 57 50 17 57 50 17 56 48 15 57 50 17 57 50 17
115957 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
115958 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
115959 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
115960 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 56 48 15
115961 +56 48 15 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
115962 +44 35 11 37 31 10 37 31 10 37 31 10 31 27 8 31 27 8
115963 +29 24 7 25 20 6 23 19 6 20 17 5 18 15 5 15 13 4
115964 +13 11 4 9 7 3 7 5 2 5 4 1 3 3 1 1 1 1
115965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
115999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116033 +1 1 1 4 3 1 7 5 2 13 11 4 16 14 4 22 17 5
116034 +27 23 7 31 27 8 37 31 10 37 31 10 47 39 13 47 39 13
116035 +57 50 16 70 58 37 71 64 51 100 76 42 66 66 66 114 84 45
116036 +138 129 110 140 134 120 163 154 123 176 168 138 185 178 149 192 187 164
116037 +200 196 176 216 206 146 200 196 176 227 222 178 227 222 178 227 222 178
116038 +227 221 169 224 217 160 185 178 149 224 212 126 185 178 149 163 154 123
116039 +150 141 118 149 122 79 142 111 68 100 76 42 70 58 37 57 50 17
116040 +57 50 17 56 48 15 57 50 17 57 50 17 57 50 17 57 50 17
116041 +56 48 15 57 50 17 57 50 17 56 48 15 56 48 15 47 39 13
116042 +47 39 13 47 39 13 47 39 13 44 35 11 37 31 10 37 31 10
116043 +37 31 10 31 27 8 29 24 7 25 20 6 23 19 6 20 17 5
116044 +18 15 5 15 13 4 13 11 4 9 7 3 7 5 2 4 3 1
116045 +2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116113 +3 3 1 7 5 2 11 9 3 15 13 4 20 17 5 25 20 6
116114 +31 27 8 37 31 10 44 40 33 71 64 51 135 101 60 138 129 110
116115 +138 129 110 138 129 110 140 134 120 140 134 120 163 154 123 150 141 118
116116 +150 141 118 140 134 120 138 129 110 138 129 110 138 129 110 138 129 110
116117 +138 129 110 138 129 110 138 129 110 138 129 110 138 129 110 150 141 118
116118 +150 141 118 176 168 138 176 168 138 185 178 149 216 206 146 227 221 169
116119 +227 221 169 227 220 160 227 221 169 227 219 152 226 218 148 216 206 146
116120 +176 168 138 149 122 79 142 111 68 68 60 43 57 50 16 57 50 17
116121 +57 50 17 57 50 17 57 50 17 56 48 15 56 48 15 57 50 17
116122 +56 48 15 47 39 13 47 39 13 47 39 13 47 39 13 44 35 11
116123 +37 31 10 37 31 10 37 31 10 31 27 8 29 24 7 25 20 6
116124 +23 19 6 20 17 5 18 15 5 14 11 4 11 9 3 9 7 3
116125 +5 4 1 3 3 1 1 1 1 0 0 0 0 0 0 0 0 0
116126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2
116193 +5 4 1 9 7 3 14 11 4 20 17 5 33 28 19 71 64 51
116194 +66 66 66 138 129 110 138 129 110 140 134 120 138 129 110 138 129 110
116195 +138 129 110 140 134 120 138 129 110 140 134 120 176 168 138 192 187 164
116196 +192 187 164 185 178 149 150 141 118 138 129 110 138 129 110 138 129 110
116197 +138 129 110 138 129 110 138 129 110 138 129 110 138 129 110 138 129 110
116198 +138 129 110 138 129 110 138 129 110 138 129 110 138 129 110 138 129 110
116199 +150 141 118 163 154 123 185 178 149 224 217 160 228 223 179 227 221 169
116200 +227 219 152 227 219 152 226 218 148 226 218 148 224 212 126 163 154 123
116201 +142 111 68 70 58 37 57 50 17 57 50 17 57 50 17 57 50 17
116202 +57 50 17 57 50 17 57 50 17 47 39 13 56 48 15 47 39 13
116203 +47 39 13 47 39 13 44 35 11 37 31 10 37 31 10 31 27 8
116204 +29 24 7 25 20 6 23 19 6 18 15 5 16 14 4 13 11 4
116205 +10 9 3 7 5 2 5 4 1 3 3 1 1 1 1 0 0 0
116206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116272 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 1
116273 +7 5 2 20 20 20 63 58 50 135 101 60 140 134 120 138 129 110
116274 +140 134 120 138 129 110 138 129 110 140 134 120 138 129 110 140 134 120
116275 +138 129 110 138 129 110 163 154 123 229 226 192 229 226 192 229 226 192
116276 +229 225 190 229 225 190 229 226 192 200 196 176 163 154 123 138 129 110
116277 +138 129 110 135 101 60 138 129 110 66 66 66 138 129 110 138 129 110
116278 +135 101 60 138 129 110 66 66 66 138 129 110 135 101 60 138 129 110
116279 +135 101 60 138 129 110 138 129 110 135 101 60 138 129 110 150 141 118
116280 +192 187 164 227 221 169 227 221 169 227 220 160 227 219 152 226 218 148
116281 +226 217 139 226 218 148 176 168 138 149 122 79 75 62 40 57 50 16
116282 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 47 39 13
116283 +57 50 17 47 39 13 47 39 13 47 39 13 37 31 10 37 31 10
116284 +37 31 10 31 27 8 29 24 7 25 20 6 22 17 5 18 15 5
116285 +15 13 4 13 11 4 9 7 3 5 4 1 3 3 1 1 1 1
116286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116352 +0 0 0 0 0 0 0 0 0 0 0 0 5 5 5 52 52 52
116353 +66 66 66 138 129 110 138 129 110 138 129 110 138 129 110 138 129 110
116354 +138 129 110 138 129 110 138 129 110 138 129 110 138 129 110 138 129 110
116355 +138 129 110 192 187 164 229 226 192 229 226 192 229 225 190 229 225 190
116356 +229 226 192 229 224 185 229 226 192 229 226 192 229 226 192 138 129 110
116357 +138 129 110 138 129 110 138 129 110 138 129 110 138 129 110 138 129 110
116358 +66 66 66 138 129 110 138 129 110 138 129 110 138 129 110 66 66 66
116359 +138 129 110 66 66 66 138 129 110 66 66 66 138 129 110 135 101 60
116360 +138 129 110 142 111 68 150 141 118 176 168 138 227 221 169 227 221 169
116361 +227 220 160 226 218 148 227 218 146 227 218 146 226 217 137 176 168 138
116362 +149 122 79 70 58 37 57 50 17 57 50 17 57 50 17 57 50 17
116363 +56 48 15 57 50 17 47 39 13 47 39 13 47 39 13 47 39 13
116364 +41 32 10 37 31 10 37 31 10 31 27 8 27 23 7 24 21 6
116365 +20 17 5 16 14 4 14 11 4 10 9 3 7 5 2 5 4 1
116366 +2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116432 +0 0 0 0 0 0 17 17 17 66 66 66 138 129 110 138 129 110
116433 +138 129 110 138 129 110 138 129 110 138 129 110 138 129 110 138 129 110
116434 +138 129 110 138 129 110 140 134 120 138 129 110 138 129 110 138 129 110
116435 +185 178 149 229 226 196 229 226 192 229 226 192 229 225 190 229 225 190
116436 +229 226 192 229 226 192 229 225 190 229 226 192 200 196 176 138 129 110
116437 +138 129 110 66 66 66 138 129 110 138 129 110 66 66 66 138 129 110
116438 +138 129 110 135 101 60 66 66 66 138 129 110 66 66 66 140 134 120
116439 +138 129 110 138 129 110 66 66 66 138 129 110 138 129 110 66 66 66
116440 +138 129 110 66 66 66 138 129 110 114 84 45 138 129 110 138 129 110
116441 +192 187 164 227 221 169 227 221 169 227 219 152 227 219 152 227 217 139
116442 +226 217 139 226 217 139 163 154 123 110 81 38 57 50 17 57 50 17
116443 +57 50 17 56 48 15 57 50 17 56 48 15 47 39 13 47 39 13
116444 +47 39 13 47 39 13 37 31 10 37 31 10 31 27 8 29 24 7
116445 +25 20 6 23 19 6 18 15 5 15 13 4 13 11 4 9 7 3
116446 +5 4 1 3 3 1 1 1 1 0 0 0 0 0 0 0 0 0
116447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116512 +24 24 24 66 66 66 138 129 110 138 129 110 140 134 120 66 66 66
116513 +138 129 110 140 134 120 66 66 66 140 134 120 66 66 66 138 129 110
116514 +138 129 110 138 129 110 138 129 110 138 129 110 140 134 120 163 154 123
116515 +229 226 196 229 226 192 229 226 192 229 226 192 229 226 192 229 225 190
116516 +229 226 192 229 225 190 229 226 192 229 226 192 176 168 138 138 129 110
116517 +138 129 110 140 134 120 66 66 66 138 129 110 138 129 110 138 129 110
116518 +66 66 66 138 129 110 138 129 110 135 101 60 138 129 110 138 129 110
116519 +66 66 66 135 101 60 138 129 110 66 66 66 138 129 110 66 66 66
116520 +138 129 110 135 101 60 138 129 110 66 66 66 138 129 110 66 66 66
116521 +135 101 60 149 122 79 176 168 138 227 221 169 227 221 169 227 220 160
116522 +227 219 152 227 218 146 226 217 139 226 217 137 185 178 149 135 101 60
116523 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
116524 +47 39 13 47 39 13 47 39 13 44 35 11 37 31 10 37 31 10
116525 +31 27 8 27 23 7 24 21 6 20 17 5 16 14 4 13 11 4
116526 +9 7 3 7 5 2 4 3 1 1 1 1 0 0 0 0 0 0
116527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116591 +0 0 0 0 0 0 0 0 0 0 0 0 25 25 25 66 66 66
116592 +138 129 110 138 129 110 66 66 66 140 134 120 66 66 66 140 134 120
116593 +140 134 120 66 66 66 140 134 120 140 134 120 140 134 120 140 134 120
116594 +138 129 110 138 129 110 138 129 110 138 129 110 138 129 110 200 196 176
116595 +230 227 202 229 226 192 229 226 192 229 226 192 229 226 192 229 226 192
116596 +229 226 192 229 226 192 229 226 192 229 226 192 150 141 118 138 129 110
116597 +66 66 66 138 129 110 138 129 110 135 101 60 66 66 66 138 129 110
116598 +138 129 110 66 66 66 138 129 110 66 66 66 138 129 110 66 66 66
116599 +138 129 110 66 66 66 138 129 110 135 101 60 138 129 110 66 66 66
116600 +138 129 110 66 66 66 138 129 110 100 76 42 138 129 110 114 84 45
116601 +138 129 110 66 66 66 142 111 68 135 101 60 163 154 123 224 217 160
116602 +227 221 169 227 220 160 227 219 152 227 218 146 226 217 139 227 218 146
116603 +216 206 146 135 101 60 57 50 17 57 50 17 57 50 17 57 50 17
116604 +57 50 17 56 48 15 47 39 13 47 39 13 47 39 13 37 31 10
116605 +37 31 10 31 27 8 29 24 7 25 20 6 23 19 6 18 15 5
116606 +14 11 4 10 9 3 7 5 2 4 3 1 2 2 2 0 0 0
116607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116671 +0 0 0 1 1 1 17 17 17 66 66 66 138 129 110 138 129 110
116672 +140 134 120 66 66 66 138 129 110 140 134 120 140 134 120 66 66 66
116673 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
116674 +66 66 66 138 129 110 138 129 110 138 129 110 185 178 149 230 227 197
116675 +229 226 196 229 226 192 229 226 192 229 226 192 229 226 192 229 226 192
116676 +229 226 192 229 226 192 229 226 192 229 226 192 138 129 110 138 129 110
116677 +138 129 110 138 129 110 66 66 66 138 129 110 138 129 110 66 66 66
116678 +138 129 110 66 66 66 138 129 110 66 66 66 138 129 110 66 66 66
116679 +138 129 110 66 66 66 138 129 110 66 66 66 66 66 66 138 129 110
116680 +66 66 66 142 111 68 66 66 66 138 129 110 66 66 66 138 129 110
116681 +66 66 66 138 129 110 66 66 66 138 129 110 66 66 66 135 101 60
116682 +163 154 123 224 217 160 227 221 169 227 219 152 227 219 152 226 218 148
116683 +226 218 148 226 217 139 216 206 146 135 101 60 57 50 17 57 50 17
116684 +56 48 15 56 48 15 56 48 15 56 48 15 47 39 13 47 39 13
116685 +44 35 11 37 31 10 37 31 10 31 27 8 27 23 7 23 19 6
116686 +18 15 5 15 13 4 11 9 3 9 7 3 5 4 1 2 2 2
116687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116751 +6 6 6 65 65 65 138 129 110 138 129 110 66 66 66 140 134 120
116752 +66 66 66 140 134 120 140 134 120 66 66 66 140 134 120 140 134 120
116753 +66 66 66 140 134 120 66 66 66 140 134 120 138 129 110 138 129 110
116754 +140 134 120 140 134 120 138 129 110 138 129 110 200 196 176 230 228 209
116755 +229 226 192 229 226 192 229 226 196 229 226 196 229 226 196 229 226 196
116756 +229 226 192 229 226 192 229 226 192 229 224 185 138 129 110 114 84 45
116757 +138 129 110 135 101 60 138 129 110 66 66 66 138 129 110 66 66 66
116758 +138 129 110 66 66 66 138 129 110 66 66 66 66 66 66 138 129 110
116759 +66 66 66 142 111 68 66 66 66 138 129 110 114 84 45 66 66 66
116760 +138 129 110 66 66 66 142 111 68 66 66 66 135 101 60 66 66 66
116761 +142 111 68 66 66 66 135 101 60 66 66 66 142 111 68 66 66 66
116762 +135 101 60 66 66 66 176 168 138 227 220 160 227 221 169 226 218 148
116763 +226 218 148 226 218 148 226 217 139 226 218 148 185 178 149 110 81 38
116764 +57 50 17 57 50 17 57 50 17 47 39 13 57 50 17 47 39 13
116765 +47 39 13 47 39 13 37 31 10 37 31 10 31 27 8 29 24 7
116766 +24 21 6 20 17 5 16 14 4 13 11 4 9 7 3 5 4 1
116767 +3 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
116768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116830 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 47 47 47
116831 +66 66 66 140 134 120 66 66 66 140 134 120 140 134 120 66 66 66
116832 +140 134 120 140 134 120 66 66 66 140 134 120 140 134 120 66 66 66
116833 +140 134 120 140 134 120 140 134 120 138 129 110 140 134 120 66 66 66
116834 +138 129 110 138 129 110 138 129 110 176 168 138 230 227 199 229 226 196
116835 +229 226 192 229 226 196 229 226 196 229 226 192 229 226 196 229 226 192
116836 +229 226 196 229 226 192 229 226 196 227 222 178 66 66 66 138 129 110
116837 +138 129 110 66 66 66 138 129 110 138 129 110 66 66 66 138 129 110
116838 +66 66 66 114 84 45 66 66 66 138 129 110 66 66 66 135 101 60
116839 +66 66 66 66 66 66 138 129 110 66 66 66 66 66 66 138 129 110
116840 +66 66 66 114 84 45 66 66 66 138 129 110 66 66 66 142 111 68
116841 +66 66 66 138 129 110 66 66 66 142 111 68 66 66 66 138 129 110
116842 +66 66 66 142 111 68 66 66 66 142 111 68 185 178 149 227 221 169
116843 +227 220 160 227 219 152 226 218 148 227 218 146 226 217 137 226 217 137
116844 +163 154 123 75 62 40 57 50 17 57 50 17 57 50 17 56 48 15
116845 +56 48 15 47 39 13 47 39 13 44 35 11 37 31 10 37 31 10
116846 +29 24 7 25 20 6 22 17 5 18 15 5 13 11 4 9 7 3
116847 +5 4 1 3 3 1 1 1 1 0 0 0 0 0 0 0 0 0
116848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116910 +0 0 0 0 0 0 0 0 0 9 9 9 66 66 66 138 129 110
116911 +138 129 110 138 129 110 138 129 110 66 66 66 140 134 120 140 134 120
116912 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
116913 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 140 134 120
116914 +138 129 110 66 66 66 140 134 120 200 196 176 230 228 209 229 226 192
116915 +229 226 196 229 226 196 229 226 196 229 226 196 230 227 197 230 227 197
116916 +230 227 197 229 226 196 229 226 196 192 187 164 138 129 110 138 129 110
116917 +66 66 66 138 129 110 66 66 66 138 129 110 66 66 66 138 129 110
116918 +66 66 66 138 129 110 66 66 66 66 66 66 66 66 66 138 129 110
116919 +66 66 66 66 66 66 66 66 66 114 84 45 66 66 66 66 66 66
116920 +138 129 110 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
116921 +100 76 42 66 66 66 100 76 42 66 66 66 100 76 42 66 66 66
116922 +114 84 45 66 66 66 135 101 60 66 66 66 114 84 45 138 129 110
116923 +216 206 146 227 221 169 227 219 152 227 219 152 226 218 148 227 218 146
116924 +226 217 137 226 217 137 142 111 68 57 50 17 57 50 17 57 50 17
116925 +56 48 15 47 39 13 47 39 13 47 39 13 44 35 11 37 31 10
116926 +37 31 10 31 27 8 27 23 7 23 19 6 16 14 4 14 11 4
116927 +10 9 3 7 5 2 4 3 1 1 1 1 0 0 0 0 0 0
116928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
116990 +0 0 0 1 1 1 24 24 24 138 129 110 140 134 120 66 66 66
116991 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
116992 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 140 134 120
116993 +66 66 66 140 134 120 140 134 120 140 134 120 138 129 110 138 129 110
116994 +138 129 110 140 134 120 163 154 123 230 227 197 229 226 196 230 227 197
116995 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 229 226 192
116996 +230 227 197 230 227 197 230 227 197 176 168 138 138 129 110 66 66 66
116997 +138 129 110 114 84 45 138 129 110 66 66 66 138 129 110 66 66 66
116998 +66 66 66 66 66 66 138 129 110 66 66 66 66 66 66 66 66 66
116999 +66 66 66 138 129 110 66 66 66 66 66 66 66 66 66 57 50 17
117000 +35 34 31 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
117001 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
117002 +57 50 16 57 50 17 57 50 17 57 50 17 57 50 17 70 58 37
117003 +75 62 40 163 154 123 227 221 169 227 219 152 227 219 152 226 218 148
117004 +226 218 148 226 218 148 226 217 137 176 168 138 75 62 40 57 50 17
117005 +57 50 17 57 50 17 57 50 17 47 39 13 47 39 13 47 39 13
117006 +37 31 10 37 31 10 31 27 8 27 23 7 23 19 6 18 15 5
117007 +14 11 4 10 9 3 7 5 2 4 3 1 1 1 1 0 0 0
117008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117070 +3 3 3 65 65 65 138 129 110 66 66 66 140 134 120 138 129 110
117071 +66 66 66 140 134 120 140 134 120 66 66 66 140 134 120 140 134 120
117072 +66 66 66 140 134 120 140 134 120 66 66 66 140 134 120 66 66 66
117073 +140 134 120 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117074 +138 129 110 138 129 110 176 168 138 230 228 209 229 226 196 230 227 197
117075 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
117076 +230 227 197 230 227 197 230 227 197 176 168 138 138 129 110 135 101 60
117077 +138 129 110 66 66 66 138 129 110 66 66 66 114 84 45 66 66 66
117078 +138 129 110 66 66 66 66 66 66 66 66 66 66 66 66 63 58 50
117079 +35 34 31 24 21 6 24 21 6 31 27 8 31 27 8 31 27 8
117080 +31 27 8 31 27 8 31 27 8 31 27 8 31 27 8 31 27 8
117081 +31 27 8 31 27 8 47 39 13 47 39 13 57 50 16 57 50 16
117082 +57 50 16 57 50 16 57 50 17 57 50 17 57 50 17 57 50 16
117083 +57 50 16 57 50 16 135 101 60 216 206 146 227 219 152 227 219 152
117084 +227 219 152 226 218 148 227 218 146 226 217 137 226 217 137 135 101 60
117085 +57 50 17 57 50 17 57 50 17 57 50 17 47 39 13 47 39 13
117086 +47 39 13 37 31 10 37 31 10 31 27 8 27 23 7 23 19 6
117087 +18 15 5 15 13 4 10 9 3 7 5 2 4 3 1 1 1 1
117088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117149 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 17 17 17
117150 +66 66 66 138 129 110 140 134 120 66 66 66 140 134 120 66 66 66
117151 +140 134 120 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117152 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117153 +140 134 120 66 66 66 138 129 110 138 129 110 140 134 120 140 134 120
117154 +66 66 66 138 129 110 200 196 176 229 226 196 230 227 197 230 227 197
117155 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
117156 +230 227 197 230 227 197 230 227 197 150 141 118 138 129 110 66 66 66
117157 +138 129 110 66 66 66 135 101 60 66 66 66 138 129 110 66 66 66
117158 +66 66 66 52 52 52 35 34 31 24 21 6 24 21 6 16 14 4
117159 +16 14 4 16 14 4 16 14 4 16 14 4 16 14 4 16 14 4
117160 +20 17 5 24 21 6 24 21 6 24 21 6 31 27 8 31 27 8
117161 +31 27 8 37 31 10 31 27 8 37 31 10 31 27 8 47 39 13
117162 +35 34 31 57 50 16 57 50 16 57 50 17 57 50 16 57 50 17
117163 +57 50 16 57 50 16 57 50 16 90 68 33 176 168 138 227 219 152
117164 +227 219 152 227 219 152 226 218 148 227 218 146 226 218 148 226 217 137
117165 +163 154 123 57 50 17 57 50 17 57 50 17 57 50 17 56 48 15
117166 +47 39 13 47 39 13 41 32 10 37 31 10 31 27 8 29 24 7
117167 +24 21 6 18 15 5 15 13 4 11 9 3 7 5 2 4 3 1
117168 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117229 +0 0 0 0 0 0 0 0 0 0 0 0 27 27 27 138 129 110
117230 +138 129 110 66 66 66 140 134 120 140 134 120 66 66 66 140 134 120
117231 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117232 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117233 +66 66 66 140 134 120 138 129 110 66 66 66 140 134 120 138 129 110
117234 +138 129 110 140 134 120 230 227 201 230 227 199 230 227 197 230 227 197
117235 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
117236 +230 227 197 230 227 197 230 227 197 163 154 123 138 129 110 66 66 66
117237 +138 129 110 66 66 66 138 129 110 66 66 66 66 66 66 57 50 16
117238 +31 27 8 24 21 6 16 14 4 15 13 4 10 9 3 10 9 3
117239 +10 9 3 10 9 3 10 9 3 10 9 3 10 9 3 15 13 4
117240 +16 14 4 16 14 4 16 14 4 16 14 4 24 21 6 24 21 6
117241 +31 27 8 31 27 8 31 27 8 31 27 8 35 34 31 37 31 10
117242 +47 39 13 47 39 13 47 39 13 57 50 16 57 50 16 57 50 16
117243 +57 50 17 57 50 16 57 50 16 57 50 16 57 50 16 163 154 123
117244 +226 217 139 227 219 152 227 219 152 226 218 148 226 218 148 227 218 146
117245 +226 217 137 224 212 126 75 62 40 57 50 16 57 50 17 56 48 15
117246 +47 39 13 56 48 15 47 39 13 37 31 10 37 31 10 31 27 8
117247 +29 24 7 24 21 6 18 15 5 15 13 4 10 9 3 7 5 2
117248 +4 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
117249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117309 +0 0 0 0 0 0 1 1 1 52 52 52 66 66 66 138 129 110
117310 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117311 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117312 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117313 +140 134 120 66 66 66 138 129 110 138 129 110 138 129 110 66 66 66
117314 +138 129 110 163 154 123 230 227 197 230 227 197 230 227 197 230 227 197
117315 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
117316 +230 227 197 230 227 197 229 226 196 138 129 110 138 129 110 114 84 45
117317 +138 129 110 100 76 42 58 54 45 47 39 13 31 27 8 24 21 6
117318 +16 14 4 10 9 3 10 9 3 6 5 1 3 3 1 3 3 1
117319 +3 3 1 3 3 1 6 5 1 6 5 1 6 5 1 6 5 1
117320 +10 9 3 10 9 3 10 9 3 16 14 4 16 14 4 16 14 4
117321 +24 21 6 24 21 6 31 27 8 31 27 8 31 27 8 37 31 10
117322 +31 27 8 37 31 10 47 39 13 37 31 10 57 50 16 57 50 16
117323 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
117324 +142 111 68 227 219 152 227 219 152 227 219 152 226 218 148 226 218 148
117325 +226 218 148 216 206 146 224 214 136 114 84 45 57 50 17 57 50 17
117326 +57 50 17 57 50 17 47 39 13 47 39 13 44 35 11 37 31 10
117327 +31 27 8 29 24 7 24 21 6 18 15 5 15 13 4 10 9 3
117328 +7 5 2 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0
117329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117389 +0 0 0 0 0 0 52 52 52 138 129 110 138 129 110 66 66 66
117390 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117391 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117392 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117393 +140 134 120 140 134 120 66 66 66 138 129 110 138 129 110 138 129 110
117394 +138 129 110 185 178 149 230 228 209 229 226 196 230 227 197 230 227 197
117395 +230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199
117396 +230 227 199 230 227 199 229 226 196 138 129 110 66 66 66 66 66 66
117397 +57 50 17 57 50 16 47 39 13 31 27 8 31 27 8 24 21 6
117398 +24 21 6 15 13 4 6 5 1 3 3 1 3 3 1 1 1 1
117399 +1 1 1 1 1 1 1 1 1 3 3 1 3 3 1 3 3 1
117400 +3 3 1 6 5 1 6 5 1 10 9 3 10 9 3 15 13 4
117401 +16 14 4 16 14 4 24 21 6 24 21 6 31 27 8 31 27 8
117402 +31 27 8 31 27 8 37 31 10 47 39 13 35 34 31 47 39 13
117403 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
117404 +57 50 16 100 76 42 226 218 148 227 219 152 227 219 152 226 218 148
117405 +226 218 148 227 218 146 226 218 148 226 217 139 142 111 68 57 50 17
117406 +57 50 17 56 48 15 56 48 15 47 39 13 47 39 13 47 39 13
117407 +37 31 10 31 27 8 29 24 7 24 21 6 18 15 5 14 11 4
117408 +9 7 3 5 4 1 3 3 1 0 0 0 0 0 0 0 0 0
117409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
117469 +4 4 4 66 66 66 66 66 66 140 134 120 66 66 66 140 134 120
117470 +66 66 66 140 134 120 140 134 120 66 66 66 140 134 120 66 66 66
117471 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117472 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117473 +66 66 66 138 129 110 140 134 120 66 66 66 138 129 110 66 66 66
117474 +138 129 110 200 196 176 230 227 199 230 227 199 230 227 199 230 227 199
117475 +230 227 199 230 227 199 230 227 199 230 227 199 230 227 201 230 227 199
117476 +230 227 199 230 227 197 229 226 192 138 129 110 75 62 40 57 50 16
117477 +57 50 16 57 50 16 37 31 10 37 31 10 24 21 6 24 21 6
117478 +15 13 4 10 9 3 3 3 1 1 1 1 0 0 0 0 0 0
117479 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
117480 +1 1 1 3 3 1 3 3 1 6 5 1 6 5 1 10 9 3
117481 +10 9 3 16 14 4 16 14 4 20 17 5 24 21 6 24 21 6
117482 +31 27 8 31 27 8 31 27 8 37 31 10 37 31 10 47 39 13
117483 +47 39 13 47 39 13 57 50 16 57 50 16 57 50 16 57 50 16
117484 +57 50 17 57 50 17 75 62 40 216 206 146 227 219 152 227 219 152
117485 +226 218 148 226 218 148 226 218 148 226 218 148 226 217 137 138 129 110
117486 +57 50 17 57 50 17 57 50 17 57 50 17 47 39 13 47 39 13
117487 +47 39 13 37 31 10 31 27 8 27 23 7 23 19 6 18 15 5
117488 +14 11 4 9 7 3 5 4 1 2 2 2 0 0 0 0 0 0
117489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117549 +65 65 65 138 129 110 138 129 110 66 66 66 140 134 120 140 134 120
117550 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117551 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
117552 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 140 134 120
117553 +66 66 66 140 134 120 66 66 66 140 134 120 138 129 110 138 129 110
117554 +138 129 110 229 226 192 230 227 199 230 227 199 230 227 201 230 227 199
117555 +230 227 201 230 227 201 230 227 201 230 227 201 230 227 201 230 227 201
117556 +230 227 201 229 226 196 229 226 192 71 64 51 57 50 16 57 50 16
117557 +57 50 16 37 31 10 37 31 10 31 27 8 31 27 8 24 21 6
117558 +16 14 4 10 9 3 6 5 1 3 3 1 0 0 0 0 0 0
117559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117560 +0 0 0 1 1 1 1 1 1 1 1 1 3 3 1 3 3 1
117561 +6 5 1 10 9 3 10 9 3 15 13 4 16 14 4 16 14 4
117562 +24 21 6 24 21 6 31 27 8 31 27 8 31 27 8 37 31 10
117563 +47 39 13 47 39 13 47 39 13 57 50 16 57 50 16 57 50 16
117564 +57 50 17 57 50 17 57 50 17 75 62 40 216 206 146 226 218 148
117565 +227 219 152 226 218 148 226 218 148 227 218 146 226 217 139 226 217 137
117566 +163 154 123 57 50 16 57 50 16 57 50 16 56 48 15 47 39 13
117567 +47 39 13 44 35 11 37 31 10 31 27 8 27 23 7 23 19 6
117568 +18 15 5 13 11 4 9 7 3 5 4 1 2 2 2 0 0 0
117569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117628 +0 0 0 0 0 0 0 0 0 1 1 1 5 5 5 66 66 66
117629 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117630 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117631 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117632 +66 66 66 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117633 +140 134 120 66 66 66 138 129 110 138 129 110 138 129 110 66 66 66
117634 +140 134 120 229 226 196 230 227 201 230 227 201 230 227 201 230 227 201
117635 +230 227 201 230 227 201 230 227 199 230 227 201 230 227 201 230 227 197
117636 +229 226 192 229 226 192 228 223 179 100 76 42 57 50 16 57 50 16
117637 +57 50 16 57 50 16 47 39 13 31 27 8 31 27 8 16 14 4
117638 +15 13 4 8 7 4 3 3 1 0 0 0 0 0 0 0 0 0
117639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117640 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 3 3 1
117641 +3 3 1 6 5 1 6 5 1 10 9 3 10 9 3 16 14 4
117642 +16 14 4 24 21 6 24 21 6 31 27 8 31 27 8 31 27 8
117643 +37 31 10 37 31 10 47 39 13 47 39 13 47 39 13 57 50 16
117644 +57 50 16 57 50 17 57 50 16 57 50 16 57 50 17 216 206 146
117645 +227 219 152 227 219 152 227 219 152 226 218 148 227 218 146 227 217 139
117646 +224 212 126 163 154 123 57 50 17 57 50 17 57 50 17 57 50 17
117647 +47 39 13 47 39 13 44 35 11 37 31 10 31 27 8 27 23 7
117648 +23 19 6 18 15 5 13 11 4 7 5 2 4 3 1 1 1 1
117649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117708 +0 0 0 0 0 0 0 0 0 0 0 0 65 65 65 138 129 110
117709 +138 129 110 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117710 +140 134 120 66 66 66 140 134 120 66 66 66 66 66 66 140 134 120
117711 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 66 66 66
117712 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117713 +140 134 120 138 129 110 66 66 66 138 129 110 66 66 66 138 129 110
117714 +176 168 138 229 226 192 230 227 201 230 227 201 230 227 201 230 227 201
117715 +230 227 201 230 227 201 230 227 201 230 227 199 229 226 192 229 226 192
117716 +229 226 192 229 226 192 229 226 192 71 64 51 57 50 16 57 50 16
117717 +47 39 13 35 34 31 31 27 8 37 31 10 31 27 8 20 17 5
117718 +16 14 4 10 9 3 3 3 1 1 1 1 0 0 0 0 0 0
117719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117720 +0 0 0 1 1 1 1 1 1 3 3 1 1 1 1 3 3 1
117721 +3 3 1 3 3 1 3 3 1 6 5 1 10 9 3 10 9 3
117722 +10 9 3 16 14 4 16 14 4 24 21 6 24 21 6 31 27 8
117723 +31 27 8 37 31 10 37 31 10 47 39 13 47 39 13 57 50 16
117724 +57 50 16 57 50 16 57 50 17 57 50 16 57 50 17 75 61 38
117725 +216 206 146 226 218 148 227 219 152 227 219 152 227 218 146 227 218 146
117726 +227 218 146 226 217 137 163 154 123 71 53 16 57 50 16 57 50 17
117727 +56 48 15 47 39 13 47 39 13 37 31 10 37 31 10 31 27 8
117728 +24 21 6 22 17 5 16 14 4 11 9 3 7 5 2 3 3 1
117729 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117788 +0 0 0 0 0 0 1 1 1 65 65 65 66 66 66 138 129 110
117789 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
117790 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
117791 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
117792 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 140 134 120
117793 +66 66 66 138 129 110 66 66 66 138 129 110 142 111 68 138 129 110
117794 +185 178 149 230 227 201 230 227 201 230 227 201 230 227 202 230 227 202
117795 +230 227 202 230 227 202 230 227 197 229 226 192 229 226 192 229 226 192
117796 +229 226 192 229 226 192 229 226 192 100 76 42 57 50 16 57 50 16
117797 +57 50 16 57 50 16 47 39 13 31 27 8 24 21 6 20 17 5
117798 +15 13 4 8 7 4 5 4 1 0 0 0 0 0 0 0 0 0
117799 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2
117800 +3 3 1 4 3 1 5 4 1 5 4 1 5 4 1 5 4 1
117801 +5 4 1 6 5 1 6 5 1 5 5 5 6 5 1 10 9 3
117802 +10 9 3 10 9 3 16 14 4 16 14 4 24 21 6 24 21 6
117803 +31 27 8 37 31 10 37 31 10 37 31 10 47 39 13 47 39 13
117804 +56 48 15 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
117805 +70 58 37 216 206 146 227 219 152 227 219 152 227 219 152 227 218 146
117806 +227 218 146 226 217 137 226 217 137 163 154 123 57 50 17 57 50 17
117807 +57 50 17 57 50 17 47 39 13 47 39 13 37 31 10 37 31 10
117808 +31 27 8 25 20 6 20 17 5 15 13 4 10 9 3 5 4 1
117809 +3 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117868 +0 0 0 0 0 0 43 43 43 138 129 110 66 66 66 140 134 120
117869 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 66 66 66
117870 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117871 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
117872 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
117873 +138 129 110 66 66 66 138 129 110 138 129 110 66 66 66 138 129 110
117874 +185 178 149 230 227 201 230 227 202 230 227 202 230 227 202 230 227 202
117875 +230 227 201 230 227 197 229 226 192 229 226 192 229 226 192 229 226 192
117876 +229 226 192 229 226 192 229 226 192 100 76 42 57 50 17 57 50 16
117877 +47 39 13 37 31 10 37 31 10 31 27 8 31 27 8 20 17 5
117878 +15 13 4 6 6 6 3 3 1 1 1 1 0 0 0 0 0 0
117879 +0 0 0 1 1 1 2 2 2 3 3 1 5 4 1 5 4 1
117880 +7 5 2 9 7 3 11 9 3 11 9 3 11 9 3 14 11 4
117881 +14 11 4 13 11 4 13 11 4 10 9 3 15 13 4 10 9 3
117882 +10 9 3 15 13 4 16 14 4 16 14 4 14 14 14 24 21 6
117883 +24 21 6 31 27 8 31 27 8 37 31 10 47 39 13 47 39 13
117884 +47 39 13 57 50 16 57 50 16 57 50 17 57 50 16 57 50 16
117885 +57 50 16 90 68 33 226 218 148 227 219 152 227 219 152 227 218 146
117886 +227 218 146 227 218 146 227 217 139 226 217 137 163 154 123 56 48 15
117887 +57 50 16 56 48 15 56 48 15 47 39 13 47 39 13 37 31 10
117888 +37 31 10 27 23 7 24 21 6 18 15 5 14 11 4 9 7 3
117889 +5 4 1 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0
117890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117948 +2 2 2 22 22 22 138 129 110 66 66 66 140 134 120 66 66 66
117949 +140 134 120 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
117950 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
117951 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 140 134 120
117952 +66 66 66 66 66 66 66 66 66 140 134 120 66 66 66 138 129 110
117953 +66 66 66 138 129 110 66 66 66 138 129 110 66 66 66 138 129 110
117954 +200 196 176 230 227 202 230 227 201 230 228 209 230 227 202 230 227 197
117955 +229 226 192 229 226 192 229 226 192 229 226 192 229 226 192 230 227 197
117956 +229 226 192 229 226 192 229 226 192 66 66 66 57 50 16 57 50 16
117957 +57 50 16 47 39 13 47 39 13 31 27 8 31 27 8 16 14 4
117958 +15 13 4 10 9 3 5 4 1 0 0 0 0 0 0 0 0 0
117959 +2 2 2 3 3 1 5 4 1 7 5 2 11 9 3 14 11 4
117960 +14 11 4 15 13 4 18 15 5 18 15 5 18 15 5 20 17 5
117961 +20 17 5 20 17 5 20 17 5 20 17 5 18 15 5 18 15 5
117962 +16 14 4 16 14 4 16 14 4 20 17 5 16 14 4 24 21 6
117963 +24 21 6 31 27 8 31 27 8 37 31 10 37 31 10 47 39 13
117964 +47 39 13 56 48 15 57 50 16 57 50 16 57 50 16 71 53 16
117965 +57 50 17 57 50 17 114 84 45 227 219 152 227 219 152 227 219 152
117966 +227 219 152 227 218 146 227 217 139 226 217 137 226 217 137 149 122 79
117967 +57 50 17 57 50 17 56 48 15 56 48 15 47 39 13 47 39 13
117968 +37 31 10 31 27 8 27 23 7 23 19 6 18 15 5 13 11 4
117969 +9 7 3 4 3 1 1 1 1 0 0 0 0 0 0 0 0 0
117970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
117999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118028 +16 16 16 66 66 66 138 129 110 66 66 66 140 134 120 66 66 66
118029 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118030 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
118031 +140 134 120 66 66 66 66 66 66 66 66 66 140 134 120 66 66 66
118032 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
118033 +138 129 110 66 66 66 138 129 110 135 101 60 138 129 110 66 66 66
118034 +230 227 197 230 228 209 230 227 201 230 227 201 230 227 197 229 226 192
118035 +229 226 192 230 227 197 229 226 192 230 227 197 229 226 192 230 227 197
118036 +230 227 197 230 227 197 230 227 197 100 76 42 57 50 16 57 50 16
118037 +47 39 13 35 34 31 37 31 10 31 27 8 31 27 8 16 14 4
118038 +16 14 4 6 6 6 3 3 1 1 1 1 1 1 1 4 3 1
118039 +5 4 1 9 7 3 11 9 3 14 11 4 17 13 4 18 15 5
118040 +22 17 5 23 19 6 25 20 6 27 23 7 27 23 7 29 24 7
118041 +29 24 7 29 24 7 29 24 7 27 23 7 27 23 7 24 21 6
118042 +24 21 6 24 21 6 20 17 5 20 17 5 24 21 6 20 17 5
118043 +24 21 6 24 21 6 31 27 8 31 27 8 37 31 10 37 31 10
118044 +47 39 13 47 39 13 56 48 15 57 50 16 57 50 17 57 50 17
118045 +71 53 16 57 50 17 57 50 17 149 122 79 227 219 152 227 219 152
118046 +227 219 152 227 219 152 227 218 146 227 218 146 226 217 137 226 217 137
118047 +135 101 60 57 50 17 57 50 17 56 48 15 47 39 13 47 39 13
118048 +44 35 11 37 31 10 31 27 8 27 23 7 22 17 5 16 14 4
118049 +11 9 3 7 5 2 3 3 1 0 0 0 0 0 0 0 0 0
118050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118107 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 9 9 9
118108 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 140 134 120
118109 +66 66 66 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
118110 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118111 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 66 66 66
118112 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 138 129 110
118113 +66 66 66 138 129 110 66 66 66 138 129 110 114 84 45 138 129 110
118114 +230 227 201 230 227 202 230 227 201 230 227 197 229 226 192 230 227 197
118115 +230 227 197 229 226 192 230 227 197 230 227 197 230 227 197 230 227 197
118116 +230 227 197 230 227 197 230 228 209 100 76 42 57 50 16 57 50 16
118117 +57 50 16 57 50 16 47 39 13 31 27 8 31 27 8 20 17 5
118118 +15 13 4 10 9 3 5 4 1 5 4 1 5 4 1 9 7 3
118119 +13 11 4 15 13 4 18 15 5 22 17 5 25 20 6 27 23 7
118120 +29 24 7 31 27 8 35 26 8 35 26 8 38 29 9 38 29 9
118121 +38 29 9 38 29 9 37 31 10 38 29 9 35 26 8 31 27 8
118122 +31 27 8 29 24 7 27 23 7 24 21 6 24 21 6 24 21 6
118123 +24 21 6 24 21 6 27 23 7 31 27 8 31 27 8 37 31 10
118124 +37 31 10 47 39 13 47 39 13 57 50 16 57 50 17 71 53 16
118125 +57 50 17 71 53 16 57 50 16 57 50 16 163 154 123 227 219 152
118126 +227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 227 218 146
118127 +226 217 137 100 76 42 57 50 17 57 50 17 57 50 17 47 39 13
118128 +47 39 13 37 31 10 37 31 10 31 27 8 25 20 6 18 15 5
118129 +15 13 4 10 9 3 5 4 1 2 2 2 0 0 0 0 0 0
118130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 65 65
118188 +138 129 110 66 66 66 138 129 110 66 66 66 66 66 66 140 134 120
118189 +66 66 66 140 134 120 66 66 66 66 66 66 66 66 66 140 134 120
118190 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 140 134 120
118191 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
118192 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118193 +138 129 110 66 66 66 138 129 110 66 66 66 138 129 110 138 129 110
118194 +229 226 192 230 227 201 230 227 197 229 226 192 230 227 197 230 227 197
118195 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
118196 +230 227 197 230 227 197 230 227 197 114 84 45 58 54 45 57 50 16
118197 +47 39 13 37 31 10 37 31 10 31 27 8 31 27 8 20 17 5
118198 +16 14 4 10 9 3 8 7 4 9 7 3 11 9 3 15 13 4
118199 +18 15 5 23 19 6 25 20 6 29 24 7 31 27 8 35 26 8
118200 +38 29 9 41 32 10 41 32 10 44 35 11 44 35 11 44 35 11
118201 +44 35 11 44 35 11 44 35 11 44 35 11 43 33 10 43 33 10
118202 +41 32 10 38 29 9 37 31 10 31 27 8 29 24 7 27 23 7
118203 +27 23 7 31 27 8 27 23 7 31 27 8 31 27 8 37 31 10
118204 +44 35 11 47 39 13 47 39 13 56 48 15 57 50 16 57 50 17
118205 +71 53 16 71 53 16 71 53 16 57 50 16 80 59 18 185 178 149
118206 +227 218 146 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146
118207 +226 217 139 224 212 126 75 62 40 57 50 16 57 50 17 57 50 17
118208 +56 48 15 47 39 13 37 31 10 37 31 10 27 23 7 23 19 6
118209 +18 15 5 13 11 4 9 7 3 4 3 1 1 1 1 0 0 0
118210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118267 +0 0 0 0 0 0 0 0 0 2 2 2 42 42 42 66 66 66
118268 +138 129 110 66 66 66 66 66 66 140 134 120 66 66 66 140 134 120
118269 +66 66 66 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
118270 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
118271 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118272 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
118273 +66 66 66 138 129 110 114 84 45 149 122 79 66 66 66 138 129 110
118274 +230 227 197 229 226 192 230 227 197 230 227 197 230 227 197 230 227 197
118275 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
118276 +230 227 197 230 227 197 230 228 209 135 101 60 57 50 16 57 50 16
118277 +47 39 13 57 50 16 47 39 13 31 27 8 31 27 8 24 21 6
118278 +16 14 4 15 13 4 13 11 4 15 13 4 18 15 5 22 17 5
118279 +25 20 6 29 24 7 31 27 8 35 26 8 41 32 10 44 35 11
118280 +46 36 11 47 39 13 47 39 13 55 43 14 51 40 13 55 43 14
118281 +55 43 14 55 43 14 51 40 13 55 43 14 51 40 13 51 40 13
118282 +46 36 11 46 36 11 43 33 10 41 32 10 38 29 9 35 26 8
118283 +29 24 7 31 27 8 29 24 7 31 27 8 31 27 8 31 27 8
118284 +37 31 10 37 31 10 47 39 13 47 39 13 57 50 16 57 50 17
118285 +57 50 17 71 53 16 57 50 17 71 53 16 71 53 16 90 68 33
118286 +226 217 139 227 219 152 227 219 152 226 218 148 227 218 146 226 218 148
118287 +226 217 139 226 217 137 176 168 138 71 53 16 57 50 17 57 50 17
118288 +56 48 15 47 39 13 47 39 13 37 31 10 37 31 10 27 23 7
118289 +22 17 5 16 14 4 11 9 3 7 5 2 3 3 1 0 0 0
118290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118347 +0 0 0 0 0 0 0 0 0 11 11 11 66 66 66 138 129 110
118348 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
118349 +66 66 66 140 134 120 66 66 66 66 66 66 66 66 66 66 66 66
118350 +140 134 120 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118351 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118352 +66 66 66 140 134 120 66 66 66 140 134 120 66 66 66 138 129 110
118353 +66 66 66 142 111 68 66 66 66 138 129 110 66 66 66 150 141 118
118354 +229 226 192 229 226 192 230 227 197 230 227 197 230 227 197 230 227 197
118355 +230 227 197 230 227 197 230 227 199 230 227 199 230 227 199 230 227 199
118356 +230 227 201 230 227 201 230 227 201 138 129 110 37 31 10 57 50 16
118357 +57 50 16 47 39 13 37 31 10 37 31 10 31 27 8 24 21 6
118358 +24 21 6 16 14 4 18 15 5 18 15 5 23 17 5 28 21 6
118359 +35 26 8 38 29 9 41 32 10 44 35 11 47 39 13 51 40 13
118360 +55 43 14 55 44 14 58 46 15 56 48 15 59 49 15 59 49 15
118361 +59 49 15 59 49 15 59 49 15 59 49 15 58 46 15 58 46 15
118362 +55 43 14 51 40 13 51 40 13 50 37 12 44 35 11 41 32 10
118363 +38 29 9 35 25 8 35 25 8 35 25 8 35 25 8 35 25 8
118364 +38 29 9 41 32 10 44 35 11 51 40 13 51 40 13 57 50 16
118365 +57 50 17 71 53 16 80 59 18 57 50 17 80 59 18 57 50 16
118366 +142 111 68 227 219 152 227 219 152 227 219 152 226 218 148 227 218 146
118367 +227 218 146 226 217 137 226 217 137 149 122 79 80 59 18 57 50 17
118368 +57 50 17 57 50 17 47 39 13 47 39 13 37 31 10 31 27 8
118369 +25 20 6 18 15 5 14 11 4 9 7 3 5 4 1 2 2 2
118370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118427 +0 0 0 1 1 1 3 3 3 66 66 66 138 129 110 66 66 66
118428 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118429 +140 134 120 66 66 66 66 66 66 66 66 66 140 134 120 66 66 66
118430 +66 66 66 66 66 66 140 134 120 66 66 66 140 134 120 66 66 66
118431 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118432 +66 66 66 66 66 66 66 66 66 66 66 66 138 129 110 66 66 66
118433 +66 66 66 138 129 110 66 66 66 135 101 60 75 62 40 138 129 110
118434 +229 226 192 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
118435 +230 227 199 230 227 199 230 227 201 230 227 201 230 227 201 230 227 201
118436 +230 227 201 230 227 201 227 222 178 138 129 110 57 50 16 57 50 16
118437 +57 50 16 57 50 16 47 39 13 37 31 10 31 27 8 27 23 7
118438 +27 23 7 25 20 6 23 17 5 28 21 6 29 24 7 35 26 8
118439 +37 31 10 43 33 10 46 36 11 51 40 13 55 44 14 55 44 14
118440 +59 49 15 57 50 17 67 48 15 59 49 15 71 53 16 71 53 16
118441 +71 53 16 71 53 16 71 53 16 71 53 16 67 48 15 59 49 15
118442 +67 48 15 58 46 15 58 46 15 55 43 14 51 40 13 50 37 12
118443 +44 35 11 41 32 10 38 27 8 38 27 8 35 25 8 35 25 8
118444 +38 27 8 38 29 9 43 33 10 50 37 12 51 40 13 59 49 15
118445 +57 50 16 57 50 17 80 59 18 57 50 17 80 59 18 71 53 16
118446 +71 53 16 163 154 123 227 219 152 227 219 152 227 219 152 227 218 146
118447 +227 218 146 227 218 146 226 217 137 226 217 137 114 84 45 57 50 17
118448 +71 53 16 57 50 17 56 48 15 47 39 13 47 39 13 37 31 10
118449 +29 24 7 23 19 6 18 15 5 13 11 4 7 5 2 4 3 1
118450 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118507 +0 0 0 0 0 0 41 41 41 66 66 66 66 66 66 138 129 110
118508 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
118509 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 66 66 66
118510 +140 134 120 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118511 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 66 66 66
118512 +140 134 120 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
118513 +66 66 66 142 111 68 66 66 66 71 64 51 57 50 16 150 141 118
118514 +228 223 179 230 227 197 230 227 197 230 227 199 230 227 199 230 227 199
118515 +230 227 201 230 227 201 230 227 201 230 227 201 230 227 202 230 227 202
118516 +230 227 202 230 227 202 230 227 202 138 129 110 47 39 13 57 50 16
118517 +57 50 16 47 39 13 47 39 13 47 39 13 31 27 8 31 27 8
118518 +31 27 8 29 24 7 31 27 8 35 25 8 38 29 9 43 33 10
118519 +46 36 11 51 40 13 55 43 14 58 46 15 59 49 15 67 48 15
118520 +71 53 16 71 53 16 71 53 16 71 53 16 80 59 18 71 53 16
118521 +71 53 16 80 59 18 71 53 16 71 53 16 71 53 16 71 53 16
118522 +71 53 16 71 53 16 59 49 15 59 49 15 58 46 15 55 43 14
118523 +50 37 12 46 36 11 43 33 10 38 27 8 38 27 8 38 27 8
118524 +38 27 8 41 32 10 38 29 9 46 36 11 51 40 13 55 43 14
118525 +59 49 15 57 50 16 71 53 16 80 59 18 57 50 17 80 59 18
118526 +80 59 18 90 68 33 224 214 136 227 220 160 227 219 152 227 219 152
118527 +227 218 146 227 218 146 227 218 146 226 217 139 224 212 126 75 61 38
118528 +71 53 16 57 50 17 57 50 17 55 44 14 47 39 13 44 35 11
118529 +37 31 10 24 21 6 20 17 5 15 13 4 10 9 3 5 4 1
118530 +2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118587 +1 1 1 5 5 5 138 129 110 66 66 66 140 134 120 66 66 66
118588 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 66 66 66
118589 +140 134 120 66 66 66 66 66 66 66 66 66 140 134 120 66 66 66
118590 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 140 134 120
118591 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118592 +66 66 66 66 66 66 66 66 66 138 129 110 66 66 66 114 84 45
118593 +66 66 66 142 111 68 71 64 51 57 50 16 57 50 16 150 141 118
118594 +230 227 197 230 227 199 230 227 199 230 227 201 230 227 201 230 227 201
118595 +230 227 201 230 227 202 230 227 202 230 227 202 230 227 202 230 227 202
118596 +230 227 202 230 228 209 229 226 192 138 129 110 57 50 16 57 50 16
118597 +57 50 16 57 50 16 47 39 13 37 31 10 44 35 11 37 31 10
118598 +37 31 10 35 26 8 38 29 9 38 29 9 41 32 10 46 36 11
118599 +51 40 13 55 44 14 59 49 15 59 49 15 71 53 16 71 53 16
118600 +80 59 18 71 53 16 80 59 18 71 53 16 80 59 18 70 58 37
118601 +71 53 16 80 59 18 70 58 37 80 59 18 80 59 18 80 59 18
118602 +71 53 16 79 57 18 71 53 16 71 53 16 67 48 15 59 45 14
118603 +59 45 14 51 40 13 50 37 12 49 31 9 38 29 9 48 30 8
118604 +38 27 8 48 30 8 38 29 9 43 33 10 46 36 11 51 40 13
118605 +59 49 15 57 50 16 57 50 17 71 53 16 80 59 18 57 50 17
118606 +80 59 18 57 50 17 142 111 68 227 219 152 227 219 152 227 219 152
118607 +227 218 146 227 218 146 227 218 146 226 217 139 224 212 126 163 154 123
118608 +71 53 16 71 53 16 59 49 15 57 50 16 55 44 14 47 39 13
118609 +44 35 11 29 24 7 24 21 6 18 15 5 13 11 4 9 7 3
118610 +4 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
118611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118667 +0 0 0 52 52 52 66 66 66 138 129 110 66 66 66 66 66 66
118668 +140 134 120 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118669 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 66 66 66
118670 +66 66 66 140 134 120 66 66 66 66 66 66 66 66 66 66 66 66
118671 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118672 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
118673 +66 66 66 71 64 51 57 50 16 57 50 16 57 50 16 163 154 123
118674 +229 226 192 230 227 201 230 227 201 230 227 201 230 227 201 230 227 202
118675 +230 227 202 230 227 202 230 227 202 231 228 207 230 227 204 230 227 204
118676 +230 228 209 230 227 202 230 228 209 150 141 118 57 50 16 57 50 16
118677 +57 50 16 57 50 16 47 39 13 47 39 13 47 39 13 37 31 10
118678 +44 35 11 43 33 10 43 33 10 44 35 11 50 37 12 55 43 14
118679 +58 46 15 59 49 15 71 53 16 71 53 16 80 59 18 71 53 16
118680 +70 58 37 80 59 18 90 68 33 138 129 110 163 154 123 200 196 176
118681 +192 187 164 200 196 176 185 178 149 163 154 123 135 101 60 70 58 37
118682 +80 59 18 80 59 18 80 59 18 71 53 16 71 53 16 71 53 16
118683 +59 49 15 60 42 13 51 40 13 50 37 12 43 33 10 41 32 10
118684 +38 27 8 38 27 8 38 27 8 48 30 8 46 36 11 50 37 12
118685 +55 43 14 59 49 15 71 53 16 57 50 17 80 59 18 80 59 18
118686 +80 59 18 80 59 18 57 50 17 185 178 149 227 218 146 227 219 152
118687 +227 219 152 227 218 146 227 218 146 227 218 146 226 217 137 226 217 137
118688 +118 85 44 71 53 16 71 53 16 57 50 17 57 50 16 51 40 13
118689 +47 39 13 37 31 10 27 23 7 22 17 5 16 14 4 11 9 3
118690 +5 4 1 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0
118691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118746 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2
118747 +14 14 14 138 129 110 66 66 66 66 66 66 140 134 120 66 66 66
118748 +66 66 66 140 134 120 66 66 66 66 66 66 66 66 66 66 66 66
118749 +140 134 120 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118750 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118751 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118752 +66 66 66 66 66 66 66 66 66 138 129 110 114 84 45 66 66 66
118753 +71 64 51 57 50 16 57 50 16 57 50 16 57 50 16 176 168 138
118754 +230 227 199 230 227 201 230 227 201 230 227 202 230 227 202 230 227 202
118755 +230 227 202 231 228 207 230 227 204 230 227 205 230 227 204 230 228 209
118756 +230 227 202 230 228 209 230 227 199 176 168 138 57 50 16 57 50 16
118757 +57 50 16 57 50 16 47 39 13 56 48 15 47 39 13 47 39 13
118758 +47 39 13 46 36 11 50 37 12 50 37 12 55 43 14 59 49 15
118759 +59 49 15 71 53 16 71 53 16 71 53 16 80 59 18 71 53 16
118760 +100 76 42 163 154 123 229 226 196 230 227 197 230 227 197 230 227 197
118761 +229 226 192 229 226 192 229 226 192 229 226 192 229 226 196 224 217 160
118762 +138 129 110 80 59 18 80 59 18 80 59 18 80 59 18 71 53 16
118763 +71 53 16 67 48 15 59 45 14 57 41 13 50 37 12 49 31 9
118764 +48 30 8 38 27 8 48 30 8 41 32 10 48 30 8 50 37 12
118765 +51 40 13 59 49 15 57 50 16 80 59 18 57 50 17 80 59 18
118766 +70 58 37 80 59 18 80 59 18 107 78 37 226 218 148 227 219 152
118767 +227 219 152 227 219 152 227 218 146 227 218 146 226 217 137 226 217 137
118768 +224 212 126 80 59 18 71 53 16 71 53 16 59 49 15 56 48 15
118769 +51 40 13 44 35 11 31 27 8 25 20 6 18 15 5 14 11 4
118770 +9 7 3 4 3 1 1 1 1 0 0 0 0 0 0 0 0 0
118771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
118827 +66 66 66 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118828 +66 66 66 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118829 +66 66 66 66 66 66 140 134 120 66 66 66 66 66 66 140 134 120
118830 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118831 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118832 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118833 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 176 168 138
118834 +229 226 196 230 227 202 230 227 202 230 227 202 230 228 209 230 227 202
118835 +231 228 207 230 227 204 231 228 207 230 228 209 230 227 205 230 227 205
118836 +230 228 209 230 228 209 230 228 209 176 168 138 57 50 16 80 59 18
118837 +57 50 17 57 50 16 57 50 16 56 48 15 47 39 13 55 44 14
118838 +51 40 13 51 40 13 51 40 13 55 43 14 58 46 15 59 49 15
118839 +71 53 16 79 57 18 80 59 18 70 58 37 80 59 18 138 129 110
118840 +229 226 192 230 227 202 230 227 202 230 227 202 230 227 201 230 227 199
118841 +230 227 199 230 227 197 230 227 197 230 227 197 229 226 196 229 226 196
118842 +229 226 192 192 187 164 100 76 42 80 59 18 80 59 18 80 59 18
118843 +79 57 18 71 53 16 67 48 15 60 42 13 57 41 13 50 37 12
118844 +49 31 9 48 30 8 41 32 10 38 27 8 48 30 8 49 31 9
118845 +51 40 13 60 42 13 59 49 15 59 49 15 80 59 18 71 53 16
118846 +80 59 18 80 59 18 80 59 18 80 59 18 163 154 123 227 218 146
118847 +227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 226 217 137
118848 +226 217 137 149 122 79 80 59 18 57 50 17 71 53 16 57 50 17
118849 +55 44 14 47 39 13 37 31 10 27 23 7 23 19 6 16 14 4
118850 +11 9 3 7 5 2 2 2 2 0 0 0 0 0 0 0 0 0
118851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118906 +0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 35 35 35
118907 +66 66 66 140 134 120 66 66 66 66 66 66 66 66 66 140 134 120
118908 +66 66 66 140 134 120 66 66 66 66 66 66 66 66 66 140 134 120
118909 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118910 +66 66 66 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
118911 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118912 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 57 50 16
118913 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 176 168 138
118914 +230 227 202 230 227 201 230 228 209 230 227 204 230 227 204 230 227 205
118915 +230 227 205 231 228 207 230 227 204 231 228 207 230 228 209 230 228 209
118916 +230 227 204 230 228 209 230 228 209 192 187 164 57 50 17 71 53 16
118917 +57 50 17 57 50 17 57 50 16 56 48 15 56 48 15 55 44 14
118918 +58 46 15 59 45 14 58 46 15 59 49 15 67 48 15 71 53 16
118919 +71 53 16 80 59 18 80 59 18 80 59 18 150 141 118 229 226 196
118920 +230 227 202 230 227 204 230 227 204 230 227 202 230 227 202 230 227 201
118921 +230 227 201 230 227 201 230 227 199 230 227 199 229 226 196 229 226 196
118922 +230 227 197 230 227 197 227 222 178 114 84 45 90 65 21 80 59 18
118923 +80 59 18 79 57 18 71 53 16 67 48 15 60 42 13 57 41 13
118924 +49 31 9 48 30 8 48 30 8 48 30 8 48 30 8 49 31 9
118925 +50 37 12 60 42 13 59 49 15 57 50 16 71 53 16 57 50 16
118926 +80 59 18 80 59 18 80 59 18 80 59 18 96 71 33 226 218 148
118927 +227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 226 217 139
118928 +226 217 137 226 217 137 90 68 33 80 59 18 71 53 16 59 49 15
118929 +58 46 15 55 43 14 44 35 11 31 27 8 25 20 6 18 15 5
118930 +14 11 4 9 7 3 4 3 1 1 1 1 0 0 0 0 0 0
118931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
118986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 66 66
118987 +66 66 66 66 66 66 138 129 110 66 66 66 66 66 66 66 66 66
118988 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118989 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118990 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118991 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
118992 +66 66 66 66 66 66 138 129 110 65 65 65 57 50 16 37 31 10
118993 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 185 178 149
118994 +230 228 209 230 227 201 230 228 209 230 227 202 230 228 209 230 228 209
118995 +230 228 209 231 228 207 230 228 209 231 228 207 230 228 209 231 228 207
118996 +230 228 209 230 228 209 230 228 209 200 196 176 80 59 18 57 50 17
118997 +80 59 18 57 50 17 71 53 16 57 50 16 59 49 15 67 48 15
118998 +59 49 15 67 48 15 59 49 15 69 49 15 71 53 16 71 53 16
118999 +80 59 18 80 59 18 80 59 18 138 129 110 230 227 199 230 228 209
119000 +230 228 209 230 227 204 230 227 204 230 227 204 230 227 202 230 227 202
119001 +230 227 202 230 227 201 230 227 201 230 227 199 230 227 199 230 227 197
119002 +230 227 197 230 227 197 229 226 196 227 222 178 100 76 42 80 59 18
119003 +90 65 21 80 59 18 71 53 16 71 53 16 67 48 15 60 42 13
119004 +58 38 12 49 31 9 49 31 9 48 30 8 43 33 10 48 30 8
119005 +50 37 12 58 38 12 60 42 13 67 48 15 71 53 16 80 59 18
119006 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 149 122 79
119007 +227 220 160 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146
119008 +226 217 137 226 217 137 163 154 123 80 59 18 71 53 16 71 53 16
119009 +57 50 17 59 49 15 51 40 13 37 31 10 27 23 7 23 19 6
119010 +16 14 4 11 9 3 5 4 1 2 2 2 0 0 0 0 0 0
119011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119066 +0 0 0 0 0 0 0 0 0 1 1 1 7 7 7 66 66 66
119067 +66 66 66 66 66 66 66 66 66 66 66 66 140 134 120 66 66 66
119068 +66 66 66 140 134 120 66 66 66 66 66 66 140 134 120 66 66 66
119069 +66 66 66 66 66 66 66 66 66 140 134 120 66 66 66 66 66 66
119070 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119071 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119072 +66 66 66 66 66 66 65 65 65 37 31 10 31 27 8 47 39 13
119073 +37 31 10 57 50 16 57 50 16 57 50 16 57 50 16 185 178 149
119074 +230 227 202 230 227 202 230 228 209 230 227 204 230 228 209 231 228 207
119075 +231 228 207 231 228 207 230 228 209 231 228 207 230 228 209 230 228 209
119076 +230 228 209 230 228 209 230 228 209 229 226 192 57 50 17 80 59 18
119077 +71 53 16 71 53 16 57 50 17 71 53 16 67 48 15 67 48 15
119078 +67 48 15 67 48 15 71 53 16 71 53 16 71 53 16 80 59 18
119079 +80 59 18 75 61 38 114 84 45 230 227 202 231 228 207 230 228 209
119080 +230 227 204 230 228 209 230 227 205 230 227 205 230 227 202 231 228 207
119081 +230 227 202 230 227 202 230 227 201 230 227 201 230 227 199 230 227 199
119082 +230 227 197 230 227 197 230 227 197 230 227 197 192 187 164 90 68 33
119083 +90 65 21 80 59 18 80 59 18 78 55 17 71 51 16 67 48 15
119084 +60 42 13 57 34 10 49 31 9 48 30 8 48 30 8 48 30 8
119085 +49 31 9 57 34 10 60 42 13 59 49 15 71 53 16 57 50 16
119086 +80 59 18 80 59 18 80 59 18 80 59 18 90 65 21 96 71 33
119087 +227 219 152 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
119088 +226 217 139 226 217 137 224 212 126 110 81 38 71 53 16 80 59 18
119089 +71 53 16 59 49 15 55 43 14 37 31 10 31 27 8 25 20 6
119090 +18 15 5 13 11 4 9 7 3 4 3 1 1 1 1 0 0 0
119091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119146 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 4 4 4
119147 +12 12 12 26 26 26 42 42 42 65 65 65 66 66 66 66 66 66
119148 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119149 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119150 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119151 +66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 65 65 65
119152 +66 66 66 66 66 66 35 35 35 31 27 8 31 27 8 47 39 13
119153 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 185 178 149
119154 +230 228 209 230 228 209 230 227 202 230 228 209 230 228 209 230 227 204
119155 +230 228 209 231 228 207 231 229 212 231 228 207 231 229 212 231 229 212
119156 +230 228 209 231 229 212 230 228 209 230 228 209 71 53 16 80 59 18
119157 +57 50 17 80 59 18 71 53 16 71 53 16 71 53 16 71 53 16
119158 +71 53 16 71 53 16 71 53 16 79 57 18 80 59 18 80 59 18
119159 +90 65 21 80 59 18 200 196 176 230 228 209 230 228 209 231 228 207
119160 +231 228 207 230 228 209 230 227 205 231 228 207 230 227 205 230 227 204
119161 +230 227 204 230 227 202 230 227 202 230 227 201 230 227 201 230 227 201
119162 +230 227 199 230 227 197 230 227 197 230 227 197 230 227 197 149 122 79
119163 +90 65 21 90 65 21 80 59 18 80 59 18 71 53 16 69 49 15
119164 +60 42 13 58 38 12 57 34 10 49 31 9 48 30 8 48 30 8
119165 +49 31 9 57 34 10 58 38 12 60 42 13 67 48 15 71 53 16
119166 +80 59 18 80 59 18 80 59 18 90 68 33 80 59 18 80 59 18
119167 +163 154 123 226 217 139 227 219 152 227 219 152 227 218 146 227 218 146
119168 +227 218 146 226 217 137 226 217 137 163 154 123 80 59 18 80 59 18
119169 +71 53 16 71 53 16 58 46 15 47 39 13 37 31 10 27 23 7
119170 +22 17 5 15 13 4 10 9 3 5 4 1 2 2 2 0 0 0
119171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119226 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 4 4 4
119227 +6 6 6 10 10 10 13 13 13 18 18 18 26 26 26 50 50 50
119228 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119229 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119230 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119231 +66 66 66 65 65 65 65 65 65 52 52 52 52 52 52 65 65 65
119232 +52 52 52 45 45 45 19 19 19 31 27 8 31 27 8 47 39 13
119233 +37 31 10 57 50 16 57 50 16 57 50 16 57 50 16 185 178 149
119234 +230 227 202 230 228 209 230 228 209 230 228 209 230 228 209 230 228 209
119235 +230 228 209 231 228 207 231 229 212 230 228 209 231 229 212 230 228 209
119236 +231 229 212 231 229 212 231 229 212 231 229 212 75 62 40 80 59 18
119237 +80 59 18 80 59 18 71 53 16 80 59 18 71 53 16 71 53 16
119238 +71 53 16 80 59 18 71 53 16 80 59 18 80 59 18 80 59 18
119239 +80 59 18 142 111 68 230 228 209 230 228 209 230 228 209 230 228 209
119240 +230 228 209 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
119241 +231 228 207 230 227 204 230 227 202 230 227 202 230 227 201 230 227 201
119242 +230 227 201 230 227 199 230 227 197 229 226 196 229 226 196 227 222 178
119243 +91 66 24 90 65 21 90 65 21 80 59 18 79 57 18 71 51 16
119244 +68 47 15 60 42 13 58 38 12 49 31 9 48 30 8 48 30 8
119245 +48 30 8 50 37 12 58 38 12 59 45 14 59 49 15 71 53 16
119246 +71 53 16 80 59 18 80 59 18 80 59 18 90 65 21 80 59 18
119247 +97 69 27 227 219 152 227 219 152 227 219 152 227 219 152 227 218 146
119248 +227 218 146 226 217 137 226 217 137 226 217 137 110 81 38 80 59 18
119249 +71 53 16 71 53 16 59 49 15 51 40 13 37 31 10 31 27 8
119250 +24 21 6 18 15 5 13 11 4 7 5 2 3 3 1 0 0 0
119251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
119307 +2 2 2 4 4 4 6 6 6 8 8 8 11 11 11 16 16 16
119308 +22 22 22 30 30 30 52 52 52 66 66 66 66 66 66 66 66 66
119309 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119310 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
119311 +65 65 65 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
119312 +52 52 52 19 19 19 24 21 6 31 27 8 37 31 10 47 39 13
119313 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 17 185 178 149
119314 +230 228 209 230 228 209 230 228 209 230 227 204 230 228 209 230 228 209
119315 +231 229 212 231 229 212 231 229 212 230 228 210 231 229 212 231 229 212
119316 +231 229 212 231 229 212 231 229 212 231 229 212 100 76 42 75 61 38
119317 +80 59 18 71 53 16 80 59 18 71 53 16 80 59 18 80 59 18
119318 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 90 68 33
119319 +80 59 18 176 168 138 230 228 210 231 229 212 230 228 209 230 228 209
119320 +230 228 209 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
119321 +230 227 204 230 227 205 230 227 204 230 227 202 230 227 202 230 227 201
119322 +230 227 201 230 227 199 230 227 199 230 227 197 229 226 196 229 226 196
119323 +135 101 60 90 65 21 90 65 21 90 65 21 79 57 18 78 55 17
119324 +69 49 15 68 47 15 62 38 11 56 33 8 49 31 9 48 30 8
119325 +49 31 9 56 33 8 57 34 10 60 42 13 68 47 15 71 53 16
119326 +71 53 16 80 59 18 80 59 18 90 65 21 90 65 21 90 65 21
119327 +80 59 18 163 154 123 227 219 152 227 219 152 227 219 152 227 218 146
119328 +227 218 146 227 218 146 226 217 137 226 217 137 163 154 123 90 65 21
119329 +80 59 18 71 53 16 71 53 16 59 49 15 41 32 10 31 27 8
119330 +27 23 7 20 17 5 15 13 4 9 7 3 5 4 1 1 1 1
119331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
119387 +2 2 2 2 2 2 4 4 4 6 6 6 8 8 8 11 11 11
119388 +14 14 14 20 20 20 26 26 26 33 33 33 50 50 50 66 66 66
119389 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
119390 +66 66 66 66 66 66 65 65 65 65 65 65 65 65 65 52 52 52
119391 +52 52 52 65 65 65 52 52 52 52 52 52 52 52 52 52 52 52
119392 +24 24 24 14 14 14 24 21 6 31 27 8 31 27 8 47 39 13
119393 +35 34 31 47 39 13 57 50 16 57 50 17 57 50 17 176 168 138
119394 +230 228 209 230 228 209 230 228 209 230 228 209 231 229 212 230 228 209
119395 +231 229 212 230 228 210 231 229 212 231 229 212 231 229 212 231 229 214
119396 +231 229 214 231 229 214 231 229 212 231 230 220 142 111 68 80 59 18
119397 +80 59 18 80 59 18 80 59 18 80 59 18 75 61 38 80 59 18
119398 +80 59 18 80 59 18 80 59 18 91 66 24 80 59 18 90 65 21
119399 +80 59 18 229 226 196 231 229 212 231 229 212 231 229 212 231 229 212
119400 +231 229 212 230 228 209 231 228 207 230 228 209 231 228 207 231 228 207
119401 +231 228 207 231 228 207 230 227 205 230 227 204 230 227 202 230 227 202
119402 +230 227 201 230 227 201 230 227 199 230 227 199 229 226 196 229 226 196
119403 +163 154 123 91 66 24 90 65 21 90 65 21 80 59 18 79 57 18
119404 +75 50 15 68 47 15 62 38 11 57 34 10 56 33 8 48 30 8
119405 +49 31 9 49 31 9 58 38 12 62 38 11 68 47 15 71 53 16
119406 +71 53 16 80 59 18 80 59 18 80 59 18 90 65 21 90 65 21
119407 +90 65 21 134 96 54 227 219 152 227 219 152 227 219 152 227 218 146
119408 +227 218 146 227 218 146 226 217 137 226 217 137 224 212 126 110 81 38
119409 +80 59 18 80 59 18 71 53 16 67 48 15 47 39 13 37 31 10
119410 +29 24 7 23 19 6 18 15 5 13 11 4 7 5 2 3 3 1
119411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119467 +1 1 1 1 1 1 1 1 1 2 2 2 3 3 3 5 5 5
119468 +6 6 6 9 9 9 12 12 12 16 16 16 20 20 20 27 27 27
119469 +35 35 35 52 52 52 66 66 66 66 66 66 66 66 66 66 66 66
119470 +66 66 66 65 65 65 65 65 65 52 52 52 52 52 52 52 52 52
119471 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 37 37 37
119472 +14 14 14 11 11 11 24 21 6 31 27 8 37 31 10 47 39 13
119473 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 17 176 168 138
119474 +230 228 209 230 228 209 230 228 209 230 228 209 231 229 212 231 229 212
119475 +231 229 212 231 229 212 231 229 214 231 229 214 231 229 214 231 229 214
119476 +231 229 214 231 229 214 231 229 214 231 229 214 138 129 110 57 50 16
119477 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
119478 +80 59 18 90 68 33 80 59 18 90 65 21 90 65 21 90 65 21
119479 +100 76 42 230 228 210 230 228 210 231 229 212 231 229 212 230 228 209
119480 +231 229 212 230 228 209 230 228 209 230 228 209 231 228 207 231 228 207
119481 +231 228 207 231 228 207 231 228 207 230 227 205 230 227 204 230 227 202
119482 +230 227 202 230 227 201 230 227 201 230 227 199 229 226 196 229 226 196
119483 +185 178 149 90 65 21 91 66 24 91 66 24 90 65 21 80 59 18
119484 +75 50 15 68 47 15 68 47 15 57 34 10 56 33 8 48 30 8
119485 +56 33 8 56 33 8 57 34 10 62 38 11 60 42 13 69 49 15
119486 +71 53 16 80 59 18 80 59 18 90 65 21 90 65 21 90 65 21
119487 +90 65 21 90 65 21 216 206 146 226 218 148 227 219 152 226 218 148
119488 +227 218 146 227 218 146 227 217 139 226 217 137 226 217 137 163 154 123
119489 +80 59 18 80 59 18 80 59 18 71 53 16 56 48 15 37 31 10
119490 +31 27 8 25 20 6 18 15 5 14 11 4 9 7 3 4 3 1
119491 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119547 +0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3
119548 +4 4 4 6 6 6 7 7 7 10 10 10 13 13 13 18 18 18
119549 +22 22 22 30 30 30 37 37 37 47 47 47 65 65 65 65 65 65
119550 +65 65 65 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
119551 +52 52 52 52 52 52 50 50 50 50 50 50 47 47 47 12 12 12
119552 +9 9 9 16 14 4 24 21 6 31 27 8 31 27 8 47 39 13
119553 +37 31 10 57 50 16 57 50 16 57 50 17 57 50 17 176 168 138
119554 +230 228 209 230 228 209 230 228 209 231 229 212 231 229 212 231 229 212
119555 +231 229 212 231 229 212 231 229 214 231 229 214 231 229 214 231 229 214
119556 +231 229 214 231 229 214 231 229 214 230 228 209 138 129 110 80 59 18
119557 +90 65 21 80 59 18 80 59 18 80 59 18 90 65 21 80 59 18
119558 +90 65 21 80 59 18 90 65 21 91 66 24 80 59 18 90 68 33
119559 +114 84 45 231 229 214 231 229 214 231 229 214 231 229 212 231 229 212
119560 +230 228 210 231 229 212 230 228 210 230 228 209 230 228 209 231 228 207
119561 +231 228 207 231 228 207 230 227 205 231 228 207 230 227 205 230 227 204
119562 +230 227 202 230 227 202 230 227 201 230 227 201 230 227 199 230 227 201
119563 +216 206 146 97 69 27 97 69 27 90 65 21 90 63 20 80 59 18
119564 +78 55 17 75 50 15 68 47 15 62 38 11 57 34 10 56 33 8
119565 +48 30 8 56 33 8 57 34 10 62 38 11 62 38 11 69 49 15
119566 +71 53 16 80 59 18 80 59 18 80 59 18 90 65 21 90 65 21
119567 +90 65 21 80 59 18 149 122 79 227 219 152 227 219 152 227 219 152
119568 +227 218 146 227 218 146 227 218 146 226 217 137 224 212 126 224 212 126
119569 +90 65 21 80 59 18 80 59 18 71 53 16 57 50 17 37 31 10
119570 +37 31 10 27 23 7 22 17 5 15 13 4 10 9 3 5 4 1
119571 +2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119627 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
119628 +2 2 2 2 2 2 3 3 3 4 4 4 6 6 6 8 8 8
119629 +10 10 10 13 13 13 17 17 17 21 21 21 26 26 26 35 35 35
119630 +50 50 50 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
119631 +52 52 52 49 49 49 47 47 47 46 46 46 28 28 28 11 11 11
119632 +8 8 8 11 11 11 24 21 6 31 27 8 31 27 8 47 39 13
119633 +57 50 16 57 50 16 57 50 16 57 50 17 57 50 17 163 154 123
119634 +231 230 220 230 228 209 231 229 212 231 229 212 231 229 212 231 229 214
119635 +231 229 214 231 229 214 231 229 214 231 229 214 231 229 214 231 229 217
119636 +231 229 217 231 229 217 231 230 220 231 229 214 163 154 123 80 59 18
119637 +80 59 18 90 68 33 80 59 18 91 66 24 80 59 18 90 68 33
119638 +90 65 21 90 65 21 90 65 21 90 65 21 91 66 24 90 65 21
119639 +135 101 60 231 230 220 231 229 214 231 229 214 231 229 214 231 229 214
119640 +231 229 212 231 229 212 230 228 210 230 228 210 230 228 210 230 228 209
119641 +231 228 207 231 228 207 231 228 207 231 228 207 230 227 205 230 227 205
119642 +230 227 204 230 227 202 230 227 202 230 227 201 230 227 201 230 227 199
119643 +200 196 176 97 69 27 97 69 27 90 65 21 90 65 21 90 63 20
119644 +78 55 17 75 50 15 68 47 15 62 38 11 62 38 11 56 33 8
119645 +48 30 8 56 33 8 56 33 8 62 38 11 62 38 11 68 47 15
119646 +75 50 15 78 55 17 80 59 18 90 65 21 90 65 21 90 65 21
119647 +90 65 21 90 65 21 107 78 37 226 218 148 227 219 152 227 219 152
119648 +227 218 146 227 218 146 227 218 146 226 217 137 226 217 137 226 217 137
119649 +142 111 68 80 59 18 80 59 18 80 59 18 71 53 16 47 39 13
119650 +37 31 10 29 24 7 24 21 6 18 15 5 13 11 4 7 5 2
119651 +3 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
119708 +1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
119709 +7 7 7 8 8 8 10 10 10 13 13 13 17 17 17 24 24 24
119710 +30 30 30 42 42 42 52 52 52 52 52 52 52 52 52 49 49 49
119711 +47 47 47 46 46 46 45 45 45 38 38 38 9 9 9 5 5 5
119712 +7 7 7 16 14 4 24 21 6 31 27 8 37 31 10 35 34 31
119713 +47 39 13 57 50 16 57 50 17 57 50 17 57 50 17 150 141 118
119714 +230 228 210 230 228 210 231 229 212 231 229 212 231 229 214 231 229 214
119715 +231 229 214 231 229 214 231 229 214 231 229 217 231 229 217 231 229 217
119716 +231 230 220 231 229 214 231 230 220 231 230 220 185 178 149 80 59 18
119717 +90 65 21 80 59 18 90 65 21 90 65 21 90 65 21 90 65 21
119718 +90 65 21 90 65 21 91 66 24 90 65 21 91 66 24 91 66 24
119719 +100 76 42 231 229 214 231 229 214 231 229 214 231 229 214 231 229 214
119720 +231 229 214 231 229 212 231 229 212 231 229 212 230 228 210 230 228 210
119721 +230 228 209 231 228 207 231 228 207 231 228 207 230 227 205 230 227 205
119722 +230 227 204 230 227 204 230 227 202 230 227 201 230 227 202 229 226 196
119723 +216 206 146 90 65 21 104 73 28 104 73 28 90 63 20 90 63 20
119724 +78 55 17 75 50 15 75 50 15 62 38 11 62 38 11 56 33 8
119725 +56 33 8 56 33 8 56 33 8 62 38 11 62 38 11 68 47 15
119726 +75 50 15 71 53 16 80 59 18 80 59 18 90 65 21 90 65 21
119727 +91 66 24 90 65 21 90 65 21 176 168 138 227 220 160 227 219 152
119728 +227 219 152 227 218 146 227 218 146 226 217 139 226 217 137 224 212 126
119729 +224 212 126 90 65 21 80 59 18 80 59 18 79 57 18 47 39 13
119730 +37 31 10 31 27 8 25 20 6 18 15 5 14 11 4 9 7 3
119731 +4 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
119732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119788 +0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
119789 +3 3 3 4 4 4 5 5 5 6 6 6 8 8 8 10 10 10
119790 +14 14 14 18 18 18 25 25 25 37 37 37 47 47 47 47 47 47
119791 +46 46 46 45 45 45 43 43 43 22 22 22 11 11 11 6 6 6
119792 +7 7 7 16 14 4 24 21 6 31 27 8 31 27 8 47 39 13
119793 +57 50 16 57 50 16 57 50 16 57 50 17 70 58 37 150 141 118
119794 +231 229 212 231 229 212 231 229 214 231 229 214 231 229 214 231 229 214
119795 +231 229 214 231 229 214 231 229 217 231 229 217 231 229 217 231 229 217
119796 +231 229 217 231 229 217 231 229 217 231 230 220 200 196 176 80 59 18
119797 +90 65 21 90 68 33 80 59 18 91 66 24 90 65 21 90 65 21
119798 +90 65 21 90 65 21 91 66 24 91 66 24 91 66 24 91 66 24
119799 +96 71 33 230 228 209 231 230 220 231 229 214 231 229 214 231 229 214
119800 +231 229 214 231 229 214 231 229 212 231 229 212 231 229 212 230 228 210
119801 +230 228 210 230 228 209 231 228 207 231 228 207 231 228 207 230 227 205
119802 +230 227 205 230 227 204 230 227 202 230 227 202 230 227 201 230 227 201
119803 +176 168 138 97 69 27 104 73 28 90 65 21 90 65 21 90 63 20
119804 +80 59 18 75 50 15 75 50 15 62 38 11 62 38 11 57 34 10
119805 +56 33 8 56 33 8 56 33 8 57 34 10 62 38 11 68 47 15
119806 +75 50 15 75 50 15 80 59 18 90 65 21 90 65 21 90 65 21
119807 +91 66 24 97 69 27 90 65 21 156 118 66 227 219 152 227 219 152
119808 +227 219 152 227 218 146 227 218 146 227 218 146 226 217 137 226 217 137
119809 +224 212 126 100 74 37 90 65 21 80 59 18 80 59 18 56 48 15
119810 +44 35 11 37 31 10 29 24 7 23 19 6 15 13 4 10 9 3
119811 +5 4 1 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0
119812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119868 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
119869 +1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7
119870 +9 9 9 12 12 12 17 17 17 22 22 22 32 32 32 41 41 41
119871 +45 45 45 43 43 43 35 35 35 9 9 9 5 5 5 3 3 3
119872 +10 9 3 15 13 4 24 21 6 31 27 8 37 31 10 47 39 13
119873 +57 50 16 57 50 16 57 50 16 71 53 16 57 50 16 150 141 118
119874 +231 229 212 231 229 212 231 229 214 231 229 214 231 229 214 231 229 214
119875 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
119876 +231 229 217 231 230 220 231 230 220 231 229 217 229 226 192 91 66 24
119877 +80 59 18 90 65 21 90 65 21 90 65 21 90 65 21 91 66 24
119878 +91 66 24 91 66 24 91 66 24 91 66 24 91 66 24 97 69 27
119879 +91 66 24 192 187 164 231 229 217 231 229 217 231 229 217 231 229 214
119880 +231 229 214 231 229 214 231 229 214 231 229 212 231 229 212 231 229 212
119881 +230 228 210 230 228 209 230 228 209 231 228 207 231 228 207 231 228 207
119882 +230 227 205 230 227 205 230 227 204 230 227 202 230 227 202 230 227 197
119883 +149 122 79 104 73 28 104 73 28 104 73 28 90 63 20 90 63 20
119884 +90 63 20 75 50 15 75 50 15 75 50 15 62 38 11 62 38 11
119885 +56 33 8 56 33 8 56 33 8 62 38 11 62 38 11 62 38 11
119886 +75 50 15 78 55 17 80 59 18 80 59 18 90 65 21 90 65 21
119887 +90 65 21 104 73 28 90 65 21 110 81 38 227 219 152 227 219 152
119888 +227 219 152 227 218 146 227 218 146 227 218 146 226 217 137 226 217 137
119889 +226 217 137 149 122 79 90 65 21 80 59 18 80 59 18 57 50 17
119890 +44 35 11 37 31 10 31 27 8 24 21 6 18 15 5 13 11 4
119891 +7 5 2 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0
119892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119949 +1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 3 3 3
119950 +4 4 4 5 5 5 8 8 8 10 10 10 14 14 14 18 18 18
119951 +25 25 25 41 41 41 21 21 21 10 10 10 5 5 5 4 4 4
119952 +6 6 6 15 13 4 24 21 6 31 27 8 37 31 10 47 39 13
119953 +57 50 16 57 50 16 57 50 17 80 59 18 57 50 16 138 129 110
119954 +230 227 202 231 229 214 231 229 214 231 229 214 231 229 214 231 229 217
119955 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 230 220
119956 +231 229 217 231 230 220 231 230 220 231 230 220 230 228 210 75 61 38
119957 +90 65 21 90 65 21 90 65 21 91 66 24 90 65 21 91 66 24
119958 +90 65 21 91 66 24 91 66 24 104 73 28 90 65 21 104 73 28
119959 +90 65 21 150 141 118 231 229 212 231 229 214 231 229 217 231 229 217
119960 +231 229 214 231 229 214 231 229 214 231 229 214 231 229 212 231 229 212
119961 +231 229 212 230 228 210 230 228 209 231 228 207 231 228 207 231 228 207
119962 +230 227 205 230 227 205 230 227 205 230 227 204 230 227 202 229 226 196
119963 +110 81 38 104 73 28 104 73 28 90 65 21 90 65 21 90 63 20
119964 +90 63 20 75 50 15 75 50 15 75 50 15 62 38 11 62 38 11
119965 +56 33 8 56 33 8 57 34 10 62 38 11 62 38 11 75 50 15
119966 +68 47 15 75 50 15 78 55 17 90 63 20 90 65 21 90 65 21
119967 +97 69 27 97 69 27 90 65 21 104 73 28 224 212 126 226 218 148
119968 +227 219 152 227 219 152 227 218 146 227 218 146 226 217 139 226 217 137
119969 +226 217 137 224 212 126 80 59 18 90 65 21 80 59 18 71 53 16
119970 +47 39 13 37 31 10 31 27 8 25 20 6 18 15 5 14 11 4
119971 +9 7 3 4 3 1 1 1 1 0 0 0 0 0 0 0 0 0
119972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
119999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120029 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2
120030 +2 2 2 4 4 4 5 5 5 7 7 7 8 8 8 11 11 11
120031 +13 13 13 13 13 13 8 8 8 4 4 4 1 1 1 3 3 3
120032 +10 9 3 16 14 4 24 21 6 31 27 8 37 31 10 47 39 13
120033 +57 50 16 57 50 17 57 50 17 57 50 16 57 50 16 149 122 79
120034 +231 229 212 231 229 214 231 229 214 231 229 214 231 229 217 231 229 217
120035 +231 229 217 231 229 217 231 229 217 231 230 220 231 229 217 231 230 220
120036 +231 230 220 231 230 220 231 230 220 231 230 220 231 230 220 110 81 38
120037 +90 65 21 90 65 21 91 66 24 90 65 21 90 65 21 90 65 21
120038 +91 66 24 90 65 21 90 65 21 104 73 28 90 65 21 104 73 28
120039 +104 73 28 104 73 28 229 226 196 231 229 217 231 229 217 231 229 217
120040 +231 229 217 231 229 214 231 229 214 231 229 214 231 229 214 231 229 212
120041 +231 229 212 231 229 212 230 228 210 230 228 209 231 228 207 231 228 207
120042 +231 228 207 230 227 205 230 227 205 230 227 204 229 226 196 176 168 138
120043 +104 73 28 104 73 28 104 73 28 104 73 28 90 63 20 90 63 20
120044 +90 63 20 75 50 15 75 50 15 75 50 15 62 38 11 62 38 11
120045 +62 38 11 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
120046 +75 50 15 75 50 15 78 55 17 90 63 20 90 65 21 90 65 21
120047 +90 65 21 104 73 28 104 73 28 91 66 24 149 122 79 227 219 152
120048 +227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 226 217 137
120049 +226 217 137 224 212 126 110 81 38 91 66 24 80 59 18 80 59 18
120050 +47 39 13 37 31 10 37 31 10 27 23 7 22 17 5 15 13 4
120051 +10 9 3 5 4 1 1 1 1 0 0 0 0 0 0 0 0 0
120052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
120110 +1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
120111 +6 6 6 6 6 6 5 5 5 3 3 3 2 2 2 3 3 3
120112 +10 9 3 16 14 4 24 21 6 31 27 8 37 31 10 47 39 13
120113 +57 50 16 57 50 16 80 59 18 80 59 18 80 59 18 135 101 60
120114 +231 230 220 231 229 214 231 229 214 231 229 217 231 229 217 231 229 217
120115 +231 229 217 231 229 217 231 229 217 231 230 220 231 230 220 231 230 220
120116 +231 230 220 231 230 220 231 230 220 200 196 176 176 168 138 100 76 42
120117 +91 66 24 91 66 24 90 65 21 91 66 24 90 65 21 91 66 24
120118 +90 65 21 97 69 27 90 65 21 104 73 28 90 65 21 104 73 28
120119 +90 65 21 104 73 28 150 141 118 230 228 210 231 229 217 231 229 217
120120 +231 229 217 231 229 217 231 229 214 231 229 214 231 229 214 231 229 214
120121 +231 229 212 230 228 210 231 229 212 230 228 210 230 228 209 231 228 207
120122 +231 228 207 231 228 207 230 227 205 230 227 205 229 226 196 117 83 35
120123 +104 73 28 104 73 28 104 73 28 104 73 28 90 63 20 90 63 20
120124 +90 63 20 75 50 15 75 50 15 75 50 15 62 38 11 62 38 11
120125 +62 38 11 62 38 11 62 38 11 62 38 11 62 38 11 75 50 15
120126 +75 50 15 75 50 15 90 63 20 90 63 20 90 63 20 90 65 21
120127 +104 73 28 90 65 21 104 73 28 97 69 27 135 101 60 227 220 160
120128 +227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 226 217 137
120129 +226 217 137 226 217 137 149 122 79 90 65 21 91 66 24 80 59 18
120130 +47 39 13 47 39 13 37 31 10 29 24 7 24 21 6 16 14 4
120131 +11 9 3 5 4 1 2 2 2 0 0 0 0 0 0 0 0 0
120132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120190 +0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
120191 +3 3 3 2 2 2 2 2 2 1 1 1 1 1 1 5 4 1
120192 +10 9 3 18 15 5 24 21 6 31 27 8 47 39 13 47 39 13
120193 +57 50 16 57 50 17 57 50 17 57 50 17 80 59 18 66 66 66
120194 +231 229 214 231 229 214 231 229 217 231 229 217 231 229 217 231 229 217
120195 +231 230 220 231 230 220 231 230 220 231 230 220 200 196 176 176 168 138
120196 +138 129 110 135 101 60 91 66 24 91 66 24 91 66 24 91 66 24
120197 +91 66 24 91 66 24 90 65 21 90 65 21 90 65 21 90 65 21
120198 +90 65 21 90 65 21 90 65 21 104 73 28 90 65 21 104 73 28
120199 +104 73 28 104 73 28 104 73 28 192 187 164 231 229 217 231 229 217
120200 +231 229 217 231 229 217 231 229 217 231 229 214 231 229 214 231 229 214
120201 +231 229 214 231 229 212 231 229 212 230 228 210 230 228 209 231 228 207
120202 +231 228 207 231 228 207 231 228 207 231 228 207 149 122 79 104 73 28
120203 +104 73 28 104 73 28 104 73 28 104 73 28 90 63 20 90 63 20
120204 +75 50 15 90 63 20 75 50 15 62 38 11 75 50 15 62 38 11
120205 +62 38 11 62 38 11 62 38 11 62 38 11 62 38 11 75 50 15
120206 +75 50 15 78 55 17 78 55 17 90 63 20 90 65 21 104 73 28
120207 +90 65 21 104 73 28 90 65 21 104 73 28 104 73 28 226 218 148
120208 +227 219 152 227 219 152 227 219 152 227 218 146 227 218 146 226 217 137
120209 +226 217 137 224 212 126 224 212 126 91 66 24 90 65 21 90 65 21
120210 +57 50 17 47 39 13 37 31 10 31 27 8 25 20 6 18 15 5
120211 +13 11 4 7 5 2 3 3 1 0 0 0 0 0 0 0 0 0
120212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120270 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
120271 +1 1 1 1 1 1 1 1 1 0 0 0 3 3 1 5 4 1
120272 +13 11 4 18 15 5 27 23 7 31 27 8 37 31 10 47 39 13
120273 +57 50 16 57 50 17 80 59 18 80 59 18 80 59 18 100 76 42
120274 +231 230 220 231 230 220 231 229 214 231 230 220 231 229 217 229 226 196
120275 +185 178 149 150 141 118 135 101 60 90 68 33 90 65 21 91 66 24
120276 +90 65 21 90 65 21 90 65 21 91 66 24 91 66 24 91 66 24
120277 +90 65 21 90 65 21 90 65 21 90 65 21 90 65 21 90 65 21
120278 +90 65 21 90 65 21 90 65 21 90 65 21 104 73 28 104 73 28
120279 +104 73 28 104 73 28 104 73 28 117 83 35 200 196 176 231 229 217
120280 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 214 231 229 214
120281 +231 229 214 231 229 212 230 228 210 231 229 212 230 228 210 230 228 209
120282 +231 228 207 231 228 207 231 228 207 163 154 123 117 83 35 104 73 28
120283 +117 83 35 104 73 28 104 73 28 90 63 20 104 73 28 90 63 20
120284 +90 63 20 75 50 15 75 50 15 75 50 15 62 38 11 62 38 11
120285 +62 38 11 62 38 11 75 50 15 62 38 11 75 50 15 75 50 15
120286 +75 50 15 90 63 20 90 63 20 90 63 20 90 63 20 90 65 21
120287 +104 73 28 104 73 28 104 73 28 104 73 28 90 65 21 224 212 126
120288 +226 218 148 227 219 152 226 218 148 227 218 146 227 218 146 226 217 139
120289 +226 217 137 224 212 126 224 212 126 90 65 21 90 65 21 90 65 21
120290 +57 50 16 47 39 13 37 31 10 31 27 8 27 23 7 20 17 5
120291 +14 11 4 9 7 3 4 3 1 1 1 1 0 0 0 0 0 0
120292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120351 +0 0 0 0 0 0 0 0 0 1 0 0 2 1 0 7 5 2
120352 +14 11 4 20 17 5 27 23 7 31 27 8 47 39 13 47 39 13
120353 +57 50 16 57 50 17 80 59 18 57 50 17 80 59 18 90 68 33
120354 +231 230 220 200 196 176 163 154 123 138 129 110 100 76 42 80 59 18
120355 +80 59 18 80 59 18 80 59 18 90 65 21 90 65 21 90 65 21
120356 +90 65 21 90 65 21 91 66 24 91 66 24 91 66 24 90 65 21
120357 +90 65 21 90 65 21 90 65 21 90 65 21 90 65 21 90 65 21
120358 +90 65 21 90 65 21 90 65 21 104 73 28 90 65 21 90 65 21
120359 +104 73 28 104 73 28 104 73 28 104 73 28 117 83 35 192 187 164
120360 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 214 231 229 214
120361 +231 229 214 231 229 214 231 229 212 231 229 212 230 228 210 230 228 209
120362 +231 228 207 231 228 207 149 122 79 104 73 28 104 73 28 117 83 35
120363 +104 73 28 104 73 28 104 73 28 104 73 28 90 63 20 90 63 20
120364 +90 63 20 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
120365 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 90 63 20
120366 +75 50 15 90 63 20 90 63 20 90 63 20 104 73 28 90 65 21
120367 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 150 141 118
120368 +224 217 160 227 219 152 227 219 152 227 218 146 227 218 146 226 217 139
120369 +226 217 137 226 217 137 224 212 126 143 106 60 91 66 24 90 65 21
120370 +57 50 17 47 39 13 44 35 11 37 31 10 29 24 7 22 17 5
120371 +15 13 4 10 9 3 5 4 1 1 1 1 0 0 0 0 0 0
120372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120431 +0 0 0 0 0 0 1 0 0 2 1 0 4 3 1 7 5 2
120432 +14 11 4 18 15 5 28 21 6 31 27 8 44 35 11 47 39 13
120433 +57 50 16 57 50 16 71 53 16 80 59 18 80 59 18 80 59 18
120434 +90 68 33 80 59 18 80 59 18 80 59 18 80 59 18 90 65 21
120435 +90 65 21 90 65 21 91 66 24 90 65 21 90 65 21 90 65 21
120436 +90 65 21 91 66 24 90 65 21 90 65 21 90 65 21 90 65 21
120437 +90 65 21 90 65 21 80 59 18 80 59 18 80 59 18 90 65 21
120438 +80 59 18 90 65 21 90 65 21 90 65 21 90 65 21 104 73 28
120439 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
120440 +163 154 123 229 226 196 231 229 217 231 229 217 231 229 217 231 229 214
120441 +231 229 214 231 229 214 231 229 212 231 229 212 230 228 210 230 228 210
120442 +200 196 176 146 109 61 117 83 35 117 83 35 117 83 35 104 73 28
120443 +104 73 28 104 73 28 104 73 28 90 63 20 90 63 20 90 63 20
120444 +90 63 20 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
120445 +75 50 15 75 50 15 75 50 15 75 50 15 90 63 20 75 50 15
120446 +90 63 20 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
120447 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 154 108 49
120448 +227 218 146 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146
120449 +226 217 139 226 217 137 224 212 126 149 122 79 104 73 28 90 65 21
120450 +71 53 16 47 39 13 47 39 13 31 27 8 31 27 8 23 19 6
120451 +16 14 4 11 9 3 5 4 1 2 2 2 0 0 0 0 0 0
120452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120511 +0 0 0 0 0 0 2 1 0 4 3 1 5 4 1 9 7 3
120512 +14 11 4 18 15 5 28 21 6 35 26 8 43 33 10 47 39 13
120513 +57 50 16 57 50 16 80 59 18 57 50 17 80 59 18 70 58 37
120514 +80 59 18 80 59 18 90 65 21 80 59 18 90 65 21 80 59 18
120515 +90 65 21 80 59 18 90 65 21 80 59 18 90 65 21 90 65 21
120516 +90 65 21 90 65 21 90 65 21 90 65 21 90 65 21 90 65 21
120517 +90 65 21 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
120518 +80 59 18 90 63 20 90 65 21 90 65 21 90 65 21 90 65 21
120519 +104 73 28 104 73 28 104 73 28 104 73 28 117 83 35 104 73 28
120520 +104 73 28 117 83 35 150 141 118 192 187 164 231 229 214 231 229 217
120521 +231 229 214 231 229 214 230 228 210 229 225 190 185 178 149 154 114 62
120522 +117 83 35 117 83 35 104 73 28 117 83 35 117 83 35 117 83 35
120523 +104 73 28 104 73 28 104 73 28 104 73 28 90 63 20 90 63 20
120524 +90 63 20 90 63 20 90 63 20 90 63 20 75 50 15 75 50 15
120525 +75 50 15 90 63 20 75 50 15 90 63 20 90 63 20 90 63 20
120526 +90 63 20 90 63 20 90 63 20 104 73 28 104 73 28 104 73 28
120527 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 134 96 54
120528 +227 220 160 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146
120529 +226 217 137 226 217 137 224 212 126 224 212 126 104 73 28 91 66 24
120530 +80 59 18 47 39 13 47 39 13 37 31 10 31 27 8 24 21 6
120531 +18 15 5 13 11 4 7 5 2 3 3 1 0 0 0 0 0 0
120532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120591 +0 0 0 2 1 0 3 3 1 4 3 1 7 5 2 9 7 3
120592 +14 11 4 22 17 5 26 19 6 35 25 8 41 32 10 50 37 12
120593 +55 43 14 57 50 16 57 50 17 80 59 18 80 59 18 80 59 18
120594 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
120595 +80 59 18 90 65 21 80 59 18 90 65 21 80 59 18 80 59 18
120596 +80 59 18 90 65 21 80 59 18 90 65 21 80 59 18 80 59 18
120597 +80 59 18 80 59 18 80 59 18 78 55 17 78 55 17 80 59 18
120598 +80 59 18 80 59 18 80 59 18 90 63 20 90 63 20 90 65 21
120599 +104 73 28 104 73 28 104 73 28 117 83 35 104 73 28 117 83 35
120600 +104 73 28 117 83 35 117 83 35 117 83 35 104 73 28 144 102 51
120601 +142 111 68 143 106 60 134 96 54 104 73 28 117 83 35 104 73 28
120602 +117 83 35 117 83 35 117 83 35 117 83 35 104 73 28 104 73 28
120603 +104 73 28 104 73 28 104 73 28 104 73 28 90 63 20 90 63 20
120604 +90 63 20 90 63 20 75 50 15 90 63 20 90 63 20 90 63 20
120605 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
120606 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
120607 +104 73 28 117 83 35 104 73 28 104 73 28 104 73 28 104 73 28
120608 +227 218 146 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
120609 +227 217 139 226 217 137 224 212 126 224 212 126 90 65 21 90 65 21
120610 +80 59 18 57 50 16 47 39 13 37 31 10 31 27 8 24 21 6
120611 +18 15 5 13 11 4 7 5 2 4 3 1 0 0 0 0 0 0
120612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120671 +1 0 0 3 3 1 4 3 1 5 4 1 7 5 2 11 9 3
120672 +14 11 4 18 15 5 26 19 6 29 24 7 38 29 9 44 35 11
120673 +55 43 14 57 50 16 57 50 16 80 59 18 57 50 17 80 59 18
120674 +80 59 18 80 59 18 80 59 18 80 59 18 90 65 21 80 59 18
120675 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
120676 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
120677 +78 55 17 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
120678 +75 50 15 75 50 15 78 55 17 90 63 20 90 63 20 90 65 21
120679 +90 65 21 104 73 28 104 73 28 104 73 28 117 83 35 104 73 28
120680 +117 83 35 104 73 28 117 83 35 104 73 28 117 83 35 117 83 35
120681 +117 83 35 104 73 28 117 83 35 117 83 35 117 83 35 131 88 37
120682 +104 73 28 117 83 35 117 83 35 104 73 28 131 88 37 104 73 28
120683 +131 88 37 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
120684 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
120685 +90 63 20 90 63 20 104 73 28 90 63 20 104 73 28 104 73 28
120686 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
120687 +117 83 35 104 73 28 117 83 35 104 73 28 117 83 35 104 73 28
120688 +226 217 139 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146
120689 +226 217 137 226 217 137 226 217 137 224 212 126 132 90 43 97 69 27
120690 +80 59 18 47 39 13 47 39 13 37 31 10 37 31 10 27 23 7
120691 +20 17 5 14 11 4 9 7 3 4 3 1 1 1 1 0 0 0
120692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
120751 +2 1 0 4 3 1 5 4 1 7 5 2 7 5 2 9 7 3
120752 +17 13 4 17 13 4 30 16 4 29 24 7 38 27 8 43 33 10
120753 +51 40 13 55 44 14 59 49 15 57 50 16 80 59 18 71 53 16
120754 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
120755 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
120756 +80 59 18 78 55 17 78 55 17 75 50 15 75 50 15 75 50 15
120757 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
120758 +75 50 15 75 50 15 75 50 15 90 63 20 90 63 20 90 63 20
120759 +90 63 20 104 73 28 104 73 28 104 73 28 104 73 28 117 83 35
120760 +117 83 35 117 83 35 117 83 35 117 83 35 117 83 35 104 73 28
120761 +117 83 35 117 83 35 117 83 35 117 83 35 104 73 28 131 88 37
120762 +117 83 35 117 83 35 117 83 35 117 83 35 104 73 28 117 83 35
120763 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 90 63 20
120764 +104 73 28 104 73 28 90 63 20 104 73 28 104 73 28 104 73 28
120765 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
120766 +104 73 28 131 88 37 104 73 28 131 88 37 104 73 28 117 83 35
120767 +117 83 35 104 73 28 117 83 35 104 73 28 143 100 47 224 212 126
120768 +216 206 146 227 220 160 227 219 152 227 219 152 227 218 146 227 218 146
120769 +227 217 139 226 217 137 226 217 137 224 212 126 156 118 66 90 65 21
120770 +90 65 21 57 50 16 47 39 13 37 31 10 37 31 10 27 23 7
120771 +20 17 5 15 13 4 9 7 3 5 4 1 1 1 1 0 0 0
120772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 1 0
120831 +4 3 1 5 4 1 7 5 2 7 5 2 11 9 3 11 9 3
120832 +11 9 3 23 17 5 23 17 5 36 23 7 38 27 8 38 29 9
120833 +50 37 12 51 40 13 59 49 15 57 50 16 57 50 16 71 53 16
120834 +57 50 16 71 53 16 57 50 17 71 53 16 71 53 16 71 53 16
120835 +71 53 16 71 53 16 71 53 16 71 53 16 75 50 15 75 50 15
120836 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
120837 +75 50 15 75 50 15 62 38 11 75 50 15 62 38 11 62 38 11
120838 +75 50 15 75 50 15 75 50 15 75 50 15 90 63 20 90 63 20
120839 +90 63 20 90 63 20 104 73 28 104 73 28 104 73 28 104 73 28
120840 +104 73 28 117 83 35 104 73 28 117 83 35 117 83 35 117 83 35
120841 +117 83 35 131 88 37 117 83 35 117 83 35 131 88 37 117 83 35
120842 +117 83 35 117 83 35 131 88 37 104 73 28 131 88 37 104 73 28
120843 +131 88 37 104 73 28 131 88 37 104 73 28 104 73 28 104 73 28
120844 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
120845 +90 63 20 143 92 37 90 63 20 143 92 37 104 73 28 143 92 37
120846 +104 73 28 131 88 37 104 73 28 104 73 28 117 83 35 117 83 35
120847 +104 73 28 117 83 35 131 88 37 224 212 126 227 219 152 226 218 148
120848 +227 219 152 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
120849 +227 217 139 226 217 137 226 217 137 226 217 137 149 122 79 104 73 28
120850 +80 59 18 57 50 17 47 39 13 44 35 11 37 31 10 29 24 7
120851 +23 19 6 16 14 4 10 9 3 5 4 1 2 2 2 0 0 0
120852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120910 +0 0 0 0 0 0 0 0 0 0 0 0 2 1 0 3 3 1
120911 +4 3 1 7 5 2 7 5 2 11 9 3 11 9 3 11 9 3
120912 +14 11 4 17 13 4 30 16 4 30 16 4 36 23 7 38 27 8
120913 +48 30 8 50 37 12 58 38 12 59 45 14 59 49 15 59 49 15
120914 +71 53 16 71 53 16 71 53 16 71 53 16 71 53 16 71 53 16
120915 +69 49 15 69 49 15 68 47 15 68 47 15 68 47 15 68 47 15
120916 +68 47 15 75 50 15 62 38 11 75 50 15 62 38 11 75 50 15
120917 +62 38 11 75 50 15 75 50 15 62 38 11 75 50 15 62 38 11
120918 +75 50 15 75 50 15 75 50 15 75 50 15 90 63 20 90 63 20
120919 +90 63 20 90 63 20 104 73 28 104 73 28 104 73 28 104 73 28
120920 +104 73 28 117 83 35 104 73 28 131 88 37 104 73 28 131 88 37
120921 +104 73 28 131 88 37 117 83 35 117 83 35 117 83 35 131 88 37
120922 +117 83 35 131 88 37 104 73 28 131 88 37 104 73 28 131 88 37
120923 +104 73 28 104 73 28 104 73 28 131 88 37 104 73 28 104 73 28
120924 +143 92 37 90 63 20 143 92 37 104 73 28 143 92 37 104 73 28
120925 +154 97 33 90 63 20 143 92 37 90 63 20 143 92 37 90 63 20
120926 +143 92 37 104 73 28 131 88 37 131 88 37 104 73 28 131 88 37
120927 +154 108 49 224 212 126 226 218 148 224 217 160 224 217 160 224 217 160
120928 +227 220 160 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
120929 +227 218 146 226 217 137 226 217 137 224 212 126 224 212 126 90 65 21
120930 +90 65 21 57 50 16 47 39 13 47 39 13 31 27 8 31 27 8
120931 +24 21 6 16 14 4 11 9 3 5 4 1 2 2 2 0 0 0
120932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
120990 +0 0 0 0 0 0 0 0 0 1 0 0 2 1 0 4 3 1
120991 +6 5 1 7 5 2 7 5 2 11 9 3 11 9 3 11 9 3
120992 +17 13 4 17 13 4 23 17 5 23 17 5 36 23 7 38 27 8
120993 +38 27 8 48 30 8 46 36 11 57 34 10 57 41 13 60 42 13
120994 +59 45 14 59 49 15 59 49 15 59 49 15 59 45 14 68 47 15
120995 +62 38 11 68 47 15 62 38 11 68 47 15 62 38 11 75 50 15
120996 +62 38 11 62 38 11 75 50 15 62 38 11 75 50 15 62 38 11
120997 +75 50 15 62 38 11 62 38 11 75 50 15 62 38 11 62 38 11
120998 +62 38 11 75 50 15 75 50 15 75 50 15 75 50 15 90 63 20
120999 +90 63 20 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
121000 +104 73 28 104 73 28 104 73 28 117 83 35 104 73 28 117 83 35
121001 +117 83 35 117 83 35 117 83 35 131 88 37 117 83 35 131 88 37
121002 +117 83 35 131 88 37 104 73 28 154 97 33 104 73 28 143 92 37
121003 +104 73 28 154 97 33 104 73 28 143 92 37 90 63 20 143 92 37
121004 +90 63 20 143 92 37 90 63 20 143 92 37 90 63 20 143 92 37
121005 +90 63 20 143 92 37 104 73 28 143 92 37 104 73 28 143 92 37
121006 +104 73 28 131 88 37 104 73 28 143 92 37 156 118 66 216 206 146
121007 +227 220 160 224 217 160 227 221 169 227 221 169 227 220 160 227 220 160
121008 +227 220 160 227 220 160 227 219 152 227 219 152 227 218 146 227 218 146
121009 +227 217 139 226 217 137 224 212 126 224 212 126 224 212 126 104 73 28
121010 +90 65 21 57 50 16 47 39 13 47 39 13 37 31 10 31 27 8
121011 +24 21 6 18 15 5 13 11 4 7 5 2 3 3 1 0 0 0
121012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121070 +0 0 0 0 0 0 0 0 0 2 1 0 4 3 1 5 4 1
121071 +7 5 2 9 7 3 11 9 3 11 9 3 14 11 4 14 11 4
121072 +17 13 4 30 16 4 17 13 4 30 16 4 30 16 4 36 23 7
121073 +38 27 8 43 33 10 48 30 8 50 37 12 56 33 8 58 38 12
121074 +58 38 12 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
121075 +62 38 11 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
121076 +62 38 11 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
121077 +62 38 11 62 38 11 75 50 15 62 38 11 62 38 11 75 50 15
121078 +75 50 15 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
121079 +90 63 20 90 63 20 90 63 20 104 73 28 90 63 20 104 73 28
121080 +104 73 28 104 73 28 104 73 28 131 88 37 104 73 28 131 88 37
121081 +117 83 35 131 88 37 117 83 35 131 88 37 117 83 35 131 88 37
121082 +117 83 35 131 88 37 131 88 37 104 73 28 131 88 37 131 88 37
121083 +104 73 28 131 88 37 104 73 28 104 73 28 143 92 37 90 63 20
121084 +143 92 37 90 63 20 154 97 33 90 63 20 154 97 33 104 73 28
121085 +143 92 37 104 73 28 143 92 37 104 73 28 143 92 37 104 73 28
121086 +143 92 37 154 97 33 163 154 123 227 219 152 227 221 169 228 223 179
121087 +227 221 169 227 221 169 227 221 169 227 220 160 227 220 160 227 220 160
121088 +227 220 160 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
121089 +227 218 146 226 217 137 226 217 137 224 212 126 224 212 126 90 65 21
121090 +90 65 21 57 50 16 56 48 15 47 39 13 37 31 10 31 27 8
121091 +27 23 7 18 15 5 11 9 3 7 5 2 3 3 1 0 0 0
121092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121150 +0 0 0 0 0 0 2 1 0 3 3 1 4 3 1 7 5 2
121151 +7 5 2 7 5 2 11 9 3 14 11 4 14 11 4 17 13 4
121152 +17 13 4 17 13 4 17 13 4 30 16 4 30 16 4 38 21 5
121153 +38 21 5 38 27 8 48 30 8 48 30 8 49 31 9 50 37 12
121154 +56 33 8 57 34 10 58 38 12 57 34 10 62 38 11 62 38 11
121155 +57 34 10 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
121156 +62 38 11 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
121157 +75 50 15 62 38 11 62 38 11 62 38 11 75 50 15 62 38 11
121158 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
121159 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
121160 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 131 88 37
121161 +104 73 28 117 83 35 131 88 37 117 83 35 131 88 37 131 88 37
121162 +117 83 35 143 92 37 104 73 28 154 97 33 104 73 28 143 92 37
121163 +104 73 28 154 97 33 104 73 28 154 97 33 104 73 28 154 97 33
121164 +104 73 28 154 97 33 104 73 28 154 97 33 104 73 28 154 97 33
121165 +104 73 28 154 97 33 104 73 28 131 88 37 154 97 33 156 118 66
121166 +216 206 146 228 223 179 227 221 169 228 223 179 228 223 179 227 221 169
121167 +227 221 169 227 221 169 227 221 169 227 221 169 227 220 160 227 220 160
121168 +227 220 160 227 220 160 227 219 152 227 219 152 227 218 146 227 218 146
121169 +227 217 139 226 217 137 226 217 137 224 212 126 224 212 126 117 83 35
121170 +90 65 21 57 50 16 47 39 13 47 39 13 37 31 10 31 27 8
121171 +25 20 6 18 15 5 13 11 4 7 5 2 4 3 1 0 0 0
121172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121230 +0 0 0 1 0 0 2 1 0 4 3 1 5 4 1 7 5 2
121231 +11 9 3 11 9 3 11 9 3 14 11 4 17 13 4 30 16 4
121232 +17 13 4 30 16 4 17 13 4 30 16 4 30 16 4 30 16 4
121233 +38 21 5 38 21 5 38 21 5 48 30 8 48 30 8 48 30 8
121234 +49 31 9 56 33 8 56 33 8 56 33 8 56 33 8 56 33 8
121235 +56 33 8 57 34 10 56 33 8 56 33 8 62 38 11 62 38 11
121236 +62 38 11 62 38 11 62 38 11 62 38 11 75 50 15 62 38 11
121237 +62 38 11 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
121238 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 90 63 20
121239 +75 50 15 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121240 +104 73 28 104 73 28 104 73 28 131 88 37 104 73 28 131 88 37
121241 +131 88 37 131 88 37 104 73 28 154 97 33 104 73 28 154 97 33
121242 +117 83 35 131 88 37 131 88 37 131 88 37 131 88 37 131 88 37
121243 +131 88 37 104 73 28 154 97 33 104 73 28 143 92 37 104 73 28
121244 +154 97 33 104 73 28 154 97 33 104 73 28 154 97 33 104 73 28
121245 +154 97 33 143 92 37 154 114 62 216 206 146 227 221 169 229 225 190
121246 +229 224 185 228 223 179 228 223 179 228 223 179 228 223 179 227 221 169
121247 +227 221 169 227 221 169 227 221 169 227 220 160 227 221 169 227 220 160
121248 +227 220 160 227 219 152 227 219 152 227 219 152 226 218 148 227 218 146
121249 +227 218 146 226 217 137 226 217 137 224 212 126 224 212 126 140 95 42
121250 +90 65 21 57 50 16 47 39 13 47 39 13 37 31 10 37 31 10
121251 +27 23 7 20 17 5 14 11 4 9 7 3 4 3 1 0 0 0
121252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121310 +0 0 0 2 1 0 4 3 1 5 4 1 7 5 2 7 5 2
121311 +9 7 3 11 9 3 14 11 4 14 11 4 17 13 4 17 13 4
121312 +17 13 4 17 13 4 30 16 4 30 16 4 30 16 4 30 16 4
121313 +38 21 5 38 21 5 38 21 5 38 21 5 38 21 5 48 30 8
121314 +48 30 8 48 30 8 48 30 8 56 33 8 48 30 8 56 33 8
121315 +56 33 8 56 33 8 56 33 8 56 33 8 62 38 11 56 33 8
121316 +62 38 11 62 38 11 75 50 15 62 38 11 62 38 11 75 50 15
121317 +75 50 15 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
121318 +75 50 15 75 50 15 75 50 15 90 63 20 90 63 20 75 50 15
121319 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
121320 +90 63 20 104 73 28 104 73 28 104 73 28 104 73 28 131 88 37
121321 +104 73 28 131 88 37 131 88 37 117 83 35 131 88 37 131 88 37
121322 +131 88 37 131 88 37 131 88 37 131 88 37 131 88 37 131 88 37
121323 +131 88 37 143 92 37 131 88 37 131 88 37 143 92 37 154 97 33
121324 +104 73 28 143 92 37 143 92 37 143 92 37 154 97 33 156 118 66
121325 +176 168 138 227 222 178 229 224 185 229 224 185 229 224 185 229 224 185
121326 +229 224 185 228 223 179 228 223 179 228 223 179 228 223 179 228 223 179
121327 +227 221 169 227 221 169 227 221 169 227 221 169 227 220 160 227 220 160
121328 +227 220 160 227 220 160 227 219 152 227 219 152 226 218 148 227 218 146
121329 +227 218 146 226 217 137 226 217 137 224 212 126 224 212 126 146 109 61
121330 +80 59 18 57 50 16 57 50 17 47 39 13 37 31 10 37 31 10
121331 +27 23 7 20 17 5 14 11 4 9 7 3 4 3 1 1 1 1
121332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121386 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
121387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121390 +1 0 0 3 3 1 4 3 1 5 4 1 7 5 2 9 7 3
121391 +11 9 3 14 11 4 14 11 4 17 13 4 30 16 4 17 13 4
121392 +30 16 4 30 16 4 30 16 4 30 16 4 30 16 4 30 16 4
121393 +38 21 5 38 21 5 38 21 5 38 21 5 48 30 8 38 21 5
121394 +48 30 8 48 30 8 48 30 8 48 30 8 56 33 8 56 33 8
121395 +56 33 8 56 33 8 56 33 8 62 38 11 62 38 11 62 38 11
121396 +62 38 11 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
121397 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 90 63 20
121398 +75 50 15 90 63 20 90 63 20 75 50 15 90 63 20 90 63 20
121399 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121400 +104 73 28 104 73 28 143 92 37 104 73 28 143 92 37 104 73 28
121401 +143 92 37 104 73 28 154 97 33 117 83 35 154 97 33 117 83 35
121402 +143 92 37 131 88 37 131 88 37 131 88 37 131 88 37 131 88 37
121403 +131 88 37 131 88 37 131 88 37 143 92 37 104 73 28 154 97 33
121404 +143 92 37 154 97 33 156 118 66 185 178 149 229 224 185 229 224 185
121405 +229 224 185 229 224 185 229 224 185 229 224 185 229 224 185 229 224 185
121406 +229 224 185 228 223 179 228 223 179 228 223 179 227 221 169 227 221 169
121407 +228 223 179 227 221 169 227 221 169 227 220 160 227 220 160 227 220 160
121408 +227 220 160 227 219 152 227 219 152 227 219 152 227 219 152 227 218 146
121409 +227 217 139 227 217 139 226 217 137 226 217 137 224 212 126 156 118 66
121410 +90 65 21 57 50 16 47 39 13 47 39 13 47 39 13 31 27 8
121411 +27 23 7 23 19 6 15 13 4 9 7 3 5 4 1 1 1 1
121412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121465 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 1
121466 +4 3 1 4 3 1 5 4 1 5 4 1 5 4 1 4 3 1
121467 +3 3 1 3 3 1 1 1 1 1 1 1 0 0 0 0 0 0
121468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121470 +1 0 0 4 3 1 5 4 1 7 5 2 7 5 2 11 9 3
121471 +11 9 3 14 11 4 17 13 4 17 13 4 17 13 4 14 11 4
121472 +30 16 4 17 13 4 30 16 4 30 16 4 30 16 4 30 16 4
121473 +38 21 5 38 21 5 38 21 5 38 21 5 48 30 8 48 30 8
121474 +48 30 8 48 30 8 48 30 8 56 33 8 56 33 8 56 33 8
121475 +56 33 8 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
121476 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
121477 +75 50 15 75 50 15 90 63 20 90 63 20 90 63 20 90 63 20
121478 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121479 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
121480 +104 73 28 90 63 20 104 73 28 104 73 28 104 73 28 104 73 28
121481 +131 88 37 131 88 37 131 88 37 131 88 37 131 88 37 131 88 37
121482 +131 88 37 131 88 37 131 88 37 154 97 33 131 88 37 143 92 37
121483 +143 92 37 143 92 37 131 88 37 154 97 33 156 118 66 156 118 66
121484 +216 206 146 229 224 185 230 227 199 229 225 190 229 225 190 229 225 190
121485 +229 225 190 229 225 190 229 224 185 229 224 185 229 224 185 228 223 179
121486 +229 224 185 228 223 179 228 223 179 228 223 179 228 223 179 228 223 179
121487 +227 221 169 227 221 169 227 221 169 227 221 169 227 220 160 227 220 160
121488 +227 220 160 227 220 160 227 219 152 227 219 152 227 218 146 227 218 146
121489 +227 218 146 226 217 137 226 217 137 224 212 126 224 212 126 156 118 66
121490 +80 59 18 57 50 16 57 50 16 47 39 13 37 31 10 37 31 10
121491 +27 23 7 20 17 5 15 13 4 9 7 3 5 4 1 1 1 1
121492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121545 +0 0 0 0 0 0 1 1 1 3 3 1 5 4 1 5 4 1
121546 +7 5 2 9 7 3 9 7 3 9 7 3 9 7 3 9 7 3
121547 +7 5 2 7 5 2 5 4 1 5 4 1 4 3 1 3 3 1
121548 +3 3 1 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1
121549 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 0
121550 +4 3 1 5 4 1 7 5 2 9 7 3 11 9 3 11 9 3
121551 +17 13 4 17 13 4 17 13 4 30 16 4 30 16 4 30 16 4
121552 +30 16 4 30 16 4 30 16 4 30 16 4 38 21 5 38 21 5
121553 +38 21 5 38 21 5 48 30 8 48 30 8 48 30 8 48 30 8
121554 +56 33 8 56 33 8 56 33 8 56 33 8 57 34 10 62 38 11
121555 +62 38 11 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
121556 +75 50 15 75 50 15 75 50 15 75 50 15 90 63 20 90 63 20
121557 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121558 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121559 +90 63 20 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
121560 +104 73 28 104 73 28 143 92 37 104 73 28 154 97 33 131 88 37
121561 +131 88 37 131 88 37 131 88 37 143 92 37 131 88 37 154 97 33
121562 +131 88 37 154 97 33 131 88 37 131 88 37 131 88 37 154 97 33
121563 +154 97 33 156 118 66 176 168 138 227 221 169 230 227 201 231 228 207
121564 +231 228 207 230 227 201 229 226 196 230 227 197 230 227 197 229 225 190
121565 +229 225 190 229 225 190 229 224 185 229 225 190 229 224 185 229 224 185
121566 +229 224 185 228 223 179 228 223 179 227 221 169 228 223 179 227 221 169
121567 +227 221 169 227 221 169 227 221 169 227 220 160 227 221 169 227 220 160
121568 +227 220 160 227 219 152 227 219 152 227 219 152 227 218 149 227 218 146
121569 +227 218 146 226 217 137 226 217 137 226 217 137 224 212 126 156 118 66
121570 +90 65 21 57 50 16 57 50 16 47 39 13 47 39 13 31 27 8
121571 +31 27 8 23 19 6 15 13 4 9 7 3 5 4 1 1 1 1
121572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121625 +0 0 0 2 2 2 4 3 1 7 5 2 9 7 3 10 9 3
121626 +13 11 4 13 11 4 13 11 4 14 11 4 14 11 4 13 11 4
121627 +13 11 4 11 9 3 10 9 3 9 7 3 9 7 3 7 5 2
121628 +7 5 2 5 4 1 5 4 1 5 4 1 5 4 1 5 4 1
121629 +4 3 1 4 3 1 4 3 1 4 3 1 4 3 1 5 4 1
121630 +5 4 1 9 7 3 11 9 3 11 9 3 14 11 4 14 11 4
121631 +30 16 4 17 13 4 30 16 4 17 13 4 30 16 4 30 16 4
121632 +30 16 4 30 16 4 38 21 5 38 21 5 38 21 5 38 21 5
121633 +48 30 8 48 30 8 48 30 8 56 33 8 56 33 8 56 33 8
121634 +56 33 8 57 34 10 62 38 11 62 38 11 75 50 15 62 38 11
121635 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
121636 +75 50 15 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121637 +90 63 20 90 63 20 90 63 20 90 63 20 104 73 28 90 63 20
121638 +104 73 28 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121639 +90 63 20 90 63 20 104 73 28 90 63 20 104 73 28 104 73 28
121640 +104 73 28 104 73 28 90 63 20 143 92 37 104 73 28 104 73 28
121641 +131 88 37 131 88 37 131 88 37 154 97 33 131 88 37 131 88 37
121642 +154 97 33 131 88 37 154 97 33 156 118 66 163 154 123 216 206 146
121643 +229 226 196 230 227 201 230 227 199 230 227 202 230 227 202 230 227 202
121644 +229 226 196 230 227 201 229 225 190 230 227 197 229 225 190 230 227 197
121645 +229 225 190 229 225 190 229 224 185 229 224 185 229 224 185 228 223 179
121646 +229 224 185 228 223 179 228 223 179 228 223 179 227 221 169 228 223 179
121647 +227 221 169 227 221 169 227 221 169 227 221 169 227 220 160 227 220 160
121648 +227 220 160 227 220 160 227 219 152 227 219 152 227 218 146 227 218 146
121649 +227 218 146 226 217 137 226 217 137 224 212 126 224 212 126 149 122 79
121650 +80 59 18 57 50 16 57 50 16 47 39 13 37 31 10 37 31 10
121651 +27 23 7 23 19 6 15 13 4 9 7 3 5 4 1 1 1 1
121652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121705 +3 3 1 5 4 1 7 5 2 10 9 3 13 11 4 15 13 4
121706 +18 15 5 18 15 5 18 15 5 18 15 5 18 15 5 18 15 5
121707 +18 15 5 18 15 5 16 14 4 15 13 4 14 11 4 13 11 4
121708 +13 11 4 11 9 3 10 9 3 10 9 3 9 7 3 9 7 3
121709 +9 7 3 9 7 3 9 7 3 9 7 3 9 7 3 11 9 3
121710 +13 11 4 14 11 4 17 13 4 17 13 4 30 16 4 17 13 4
121711 +30 16 4 30 16 4 30 16 4 30 16 4 30 16 4 38 21 5
121712 +38 21 5 38 21 5 48 30 8 48 30 8 48 30 8 56 33 8
121713 +49 31 9 57 34 10 57 34 10 57 34 10 57 34 10 62 38 11
121714 +62 38 11 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
121715 +75 50 15 75 50 15 75 50 15 90 63 20 90 63 20 90 63 20
121716 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
121717 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
121718 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 90 63 20
121719 +104 73 28 90 63 20 104 73 28 104 73 28 104 73 28 104 73 28
121720 +143 92 37 104 73 28 143 92 37 90 63 20 154 97 33 143 92 37
121721 +143 92 37 143 92 37 131 88 37 143 92 37 154 97 33 154 108 49
121722 +163 154 123 216 206 146 229 225 190 230 227 199 231 228 207 231 228 207
121723 +231 228 207 230 227 204 230 227 202 230 227 202 230 227 201 230 227 199
121724 +230 227 197 229 226 196 230 227 199 229 225 190 230 227 197 229 225 190
121725 +229 225 190 229 225 190 229 224 185 229 225 190 229 224 185 229 224 185
121726 +229 224 185 228 223 179 228 223 179 228 223 179 228 223 179 227 221 169
121727 +227 221 169 227 221 169 227 221 169 227 220 160 227 220 160 227 220 160
121728 +227 220 160 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
121729 +227 217 139 226 217 137 226 217 137 226 217 137 224 212 126 156 118 66
121730 +90 65 21 57 50 16 57 50 16 47 39 13 47 39 13 31 27 8
121731 +31 27 8 20 17 5 15 13 4 10 9 3 5 4 1 1 1 1
121732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2
121785 +5 4 1 9 7 3 11 9 3 15 13 4 18 15 5 20 17 5
121786 +23 19 6 24 21 6 25 20 6 27 23 7 24 21 6 25 20 6
121787 +25 20 6 24 21 6 23 19 6 22 17 5 20 17 5 18 15 5
121788 +18 15 5 18 15 5 16 14 4 15 13 4 15 13 4 15 13 4
121789 +15 13 4 15 13 4 14 11 4 14 11 4 15 13 4 17 13 4
121790 +18 15 5 22 17 5 23 17 5 23 17 5 30 16 4 30 16 4
121791 +30 16 4 30 16 4 38 21 5 38 27 8 38 27 8 38 27 8
121792 +41 32 10 49 31 9 49 31 9 49 31 9 57 34 10 57 34 10
121793 +58 38 12 62 38 11 62 38 11 68 47 15 62 38 11 68 47 15
121794 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
121795 +75 50 15 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121796 +90 63 20 90 63 20 104 73 28 104 73 28 104 73 28 104 73 28
121797 +90 63 20 143 92 37 90 63 20 143 92 37 90 63 20 143 92 37
121798 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
121799 +104 73 28 104 73 28 90 63 20 104 73 28 104 73 28 104 73 28
121800 +104 73 28 104 73 28 90 63 20 154 97 33 104 73 28 131 88 37
121801 +131 88 37 131 88 37 154 97 33 154 97 33 229 226 192 231 228 207
121802 +230 227 201 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
121803 +230 227 205 230 227 204 230 227 202 230 227 202 230 227 201 230 227 199
121804 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 229 225 190
121805 +229 225 190 229 225 190 229 224 185 229 224 185 229 224 185 229 224 185
121806 +228 223 179 228 223 179 228 223 179 228 223 179 228 223 179 227 221 169
121807 +228 223 179 227 221 169 227 221 169 227 221 169 227 220 160 227 217 139
121808 +176 168 138 227 220 160 227 219 152 227 219 152 227 218 146 227 218 146
121809 +227 218 146 226 217 137 226 217 137 226 217 137 224 212 126 156 118 66
121810 +57 50 16 57 50 16 57 50 16 47 39 13 37 31 10 37 31 10
121811 +27 23 7 23 19 6 15 13 4 9 7 3 5 4 1 1 1 1
121812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121864 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 5 4 1
121865 +7 5 2 11 9 3 15 13 4 18 15 5 23 19 6 25 20 6
121866 +29 24 7 31 27 8 31 27 8 31 27 8 35 26 8 31 27 8
121867 +31 27 8 31 27 8 29 24 7 27 23 7 27 23 7 25 20 6
121868 +25 20 6 24 21 6 23 19 6 23 19 6 23 19 6 23 19 6
121869 +22 17 5 22 17 5 22 17 5 23 19 6 23 19 6 25 20 6
121870 +25 20 6 28 21 6 29 24 7 35 25 8 35 25 8 35 26 8
121871 +38 29 9 41 32 10 41 32 10 48 30 8 49 31 9 50 37 12
121872 +49 31 9 50 37 12 58 38 12 58 38 12 60 42 13 60 42 13
121873 +60 42 13 68 47 15 68 47 15 68 47 15 75 50 15 75 50 15
121874 +75 50 15 75 50 15 78 55 17 90 63 20 90 63 20 90 63 20
121875 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
121876 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 143 92 37
121877 +104 73 28 104 73 28 143 92 37 90 63 20 143 92 37 90 63 20
121878 +104 73 28 143 92 37 90 63 20 104 73 28 104 73 28 104 73 28
121879 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 143 92 37
121880 +104 73 28 154 97 33 104 73 28 154 97 33 104 73 28 154 97 33
121881 +154 97 33 143 92 37 131 88 37 154 97 33 229 225 190 231 229 212
121882 +231 229 212 231 229 212 231 228 207 231 228 207 231 228 207 231 228 207
121883 +231 228 207 230 227 204 230 227 202 230 227 202 230 227 201 230 227 199
121884 +230 227 197 230 227 197 229 225 190 230 227 197 229 225 190 229 225 190
121885 +229 225 190 229 224 185 229 225 190 229 224 185 229 224 185 229 224 185
121886 +229 224 185 228 223 179 228 223 179 228 223 179 227 221 169 228 223 179
121887 +227 221 169 227 221 169 227 220 160 227 221 169 224 212 126 143 100 47
121888 +156 118 66 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
121889 +227 217 139 226 217 137 226 217 137 224 212 126 224 212 126 163 154 123
121890 +80 59 18 57 50 16 57 50 16 47 39 13 47 39 13 31 27 8
121891 +31 27 8 23 19 6 15 13 4 10 9 3 5 4 1 1 1 1
121892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121944 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 1 7 5 2
121945 +11 9 3 15 13 4 18 15 5 24 21 6 27 23 7 31 27 8
121946 +37 31 10 37 31 10 41 32 10 37 31 10 37 31 10 37 31 10
121947 +37 31 10 37 31 10 37 31 10 37 31 10 37 31 10 31 27 8
121948 +31 27 8 31 27 8 29 24 7 29 24 7 29 24 7 27 23 7
121949 +27 23 7 27 23 7 27 23 7 29 24 7 31 27 8 31 27 8
121950 +35 26 8 35 26 8 38 29 9 38 29 9 41 32 10 43 33 10
121951 +43 33 10 46 36 11 50 37 12 50 37 12 51 40 13 58 38 12
121952 +60 42 13 60 42 13 60 42 13 67 48 15 68 47 15 69 49 15
121953 +71 51 16 75 50 15 75 50 15 75 50 15 78 55 17 78 55 17
121954 +78 55 17 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
121955 +104 73 28 90 63 20 90 63 20 104 73 28 104 73 28 104 73 28
121956 +104 73 28 104 73 28 104 73 28 104 73 28 143 92 37 90 63 20
121957 +143 92 37 104 73 28 143 92 37 90 63 20 143 92 37 104 73 28
121958 +143 92 37 90 63 20 143 92 37 104 73 28 143 92 37 104 73 28
121959 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 90 63 20
121960 +143 92 37 90 63 20 143 92 37 104 73 28 154 97 33 104 73 28
121961 +154 97 33 131 88 37 154 97 33 154 97 33 200 196 176 231 229 212
121962 +231 228 207 231 229 212 231 228 207 231 228 207 231 228 207 231 228 207
121963 +231 228 207 230 227 204 230 227 202 230 227 202 230 227 201 230 227 199
121964 +230 227 197 230 227 197 230 227 197 230 227 197 229 225 190 230 227 197
121965 +229 225 190 229 225 190 229 224 185 229 224 185 229 224 185 229 224 185
121966 +228 223 179 228 223 179 228 223 179 228 223 179 227 221 169 228 223 179
121967 +227 221 169 227 221 169 227 218 146 163 154 123 117 83 35 154 97 33
121968 +163 154 123 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
121969 +227 217 139 226 217 137 226 217 137 224 212 126 224 212 126 156 118 66
121970 +57 50 16 57 50 16 57 50 16 47 39 13 37 31 10 37 31 10
121971 +27 23 7 23 19 6 15 13 4 9 7 3 5 4 1 1 1 1
121972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
121999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122024 +0 0 0 0 0 0 0 0 0 2 2 2 5 4 1 9 7 3
122025 +14 11 4 18 15 5 24 21 6 29 24 7 31 27 8 37 31 10
122026 +37 31 10 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
122027 +47 39 13 44 35 11 44 35 11 37 31 10 41 32 10 37 31 10
122028 +37 31 10 37 31 10 37 31 10 37 31 10 37 31 10 37 31 10
122029 +37 31 10 37 31 10 37 31 10 37 31 10 37 31 10 41 32 10
122030 +41 32 10 44 35 11 46 36 11 46 36 11 50 37 12 50 37 12
122031 +51 40 13 57 41 13 55 43 14 60 42 13 59 45 14 59 45 14
122032 +67 48 15 67 48 15 69 49 15 71 51 16 71 53 16 78 55 17
122033 +78 55 17 79 57 18 80 59 18 90 63 20 90 63 20 90 63 20
122034 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
122035 +90 63 20 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
122036 +143 92 37 104 73 28 154 97 33 104 73 28 104 73 28 143 92 37
122037 +104 73 28 143 92 37 104 73 28 154 97 33 104 73 28 143 92 37
122038 +90 63 20 154 97 33 90 63 20 104 73 28 104 73 28 104 73 28
122039 +143 92 37 90 63 20 143 92 37 90 63 20 143 92 37 104 73 28
122040 +104 73 28 154 97 33 104 73 28 154 97 33 143 92 37 154 97 33
122041 +143 92 37 154 97 33 131 88 37 154 97 33 185 178 149 230 227 202
122042 +231 229 212 231 229 212 231 228 207 231 228 207 231 228 207 231 228 207
122043 +230 227 204 230 227 204 230 227 202 230 227 201 230 227 201 230 227 199
122044 +230 227 197 230 227 197 230 227 197 229 225 190 230 227 197 229 224 185
122045 +229 225 190 229 224 185 229 224 185 229 224 185 229 224 185 229 224 185
122046 +228 223 179 228 223 179 228 223 179 228 223 179 227 221 169 227 221 169
122047 +227 221 169 224 212 126 154 97 33 143 92 37 131 88 37 131 88 37
122048 +156 118 66 227 219 152 227 219 152 227 219 152 227 218 146 227 218 146
122049 +227 218 146 226 217 137 226 217 137 224 212 126 224 212 126 156 118 66
122050 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 31 27 8
122051 +31 27 8 20 17 5 15 13 4 10 9 3 5 4 1 1 1 1
122052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122104 +0 0 0 0 0 0 1 1 1 3 3 1 7 5 2 13 11 4
122105 +18 15 5 23 19 6 27 23 7 31 27 8 37 31 10 44 35 11
122106 +47 39 13 47 39 13 47 39 13 56 48 15 47 39 13 56 48 15
122107 +47 39 13 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
122108 +47 39 13 47 39 13 44 35 11 41 32 10 44 35 11 41 32 10
122109 +44 35 11 37 31 10 41 32 10 44 35 11 44 35 11 47 39 13
122110 +47 39 13 47 39 13 55 43 14 51 40 13 55 43 14 58 46 15
122111 +58 46 15 59 45 14 59 49 15 67 48 15 67 48 15 71 51 16
122112 +71 53 16 71 53 16 71 53 16 79 57 18 79 57 18 80 59 18
122113 +80 59 18 80 59 18 90 63 20 90 63 20 90 63 20 90 63 20
122114 +90 63 20 104 73 28 90 63 20 104 73 28 104 73 28 104 73 28
122115 +104 73 28 104 73 28 104 73 28 131 88 37 104 73 28 143 92 37
122116 +104 73 28 104 73 28 104 73 28 104 73 28 154 97 33 104 73 28
122117 +143 92 37 104 73 28 154 97 33 104 73 28 154 97 33 104 73 28
122118 +154 97 33 90 63 20 154 97 33 104 73 28 154 97 33 104 73 28
122119 +104 73 28 104 73 28 104 73 28 104 73 28 90 63 20 143 92 37
122120 +104 73 28 143 92 37 104 73 28 154 97 33 104 73 28 143 92 37
122121 +131 88 37 154 97 33 154 97 33 154 97 33 163 154 123 231 228 207
122122 +231 229 212 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
122123 +230 227 205 230 227 204 230 227 202 230 227 201 230 227 201 230 227 199
122124 +230 227 197 230 227 197 230 227 197 230 227 197 229 225 190 230 227 197
122125 +229 225 190 229 224 185 229 225 190 229 224 185 229 224 185 229 224 185
122126 +228 223 179 229 224 185 227 221 169 228 223 179 228 223 179 224 214 136
122127 +156 118 66 131 88 37 131 88 37 131 88 37 131 88 37 131 88 37
122128 +224 212 126 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146
122129 +226 217 137 226 217 137 226 217 137 224 212 126 224 212 126 156 118 66
122130 +57 50 16 57 50 16 57 50 16 47 39 13 37 31 10 37 31 10
122131 +27 23 7 23 19 6 15 13 4 9 7 3 5 4 1 1 1 1
122132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122184 +0 0 0 0 0 0 1 1 1 5 4 1 9 7 3 15 13 4
122185 +20 17 5 25 20 6 31 27 8 37 31 10 44 35 11 47 39 13
122186 +56 48 15 57 50 17 57 50 17 57 50 17 56 48 15 57 50 17
122187 +57 50 17 56 48 15 56 48 15 47 39 13 56 48 15 47 39 13
122188 +47 39 13 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
122189 +47 39 13 47 39 13 47 39 13 56 48 15 47 39 13 56 48 15
122190 +55 44 14 58 46 15 56 48 15 59 49 15 59 49 15 67 48 15
122191 +59 49 15 71 53 16 71 53 16 71 53 16 71 53 16 78 55 17
122192 +78 55 17 80 59 18 80 59 18 80 59 18 80 59 18 90 65 21
122193 +90 63 20 90 65 21 90 65 21 90 65 21 90 65 21 97 69 27
122194 +104 73 28 90 63 20 104 73 28 104 73 28 104 73 28 104 73 28
122195 +104 73 28 104 73 28 131 88 37 104 73 28 104 73 28 104 73 28
122196 +143 92 37 131 88 37 143 92 37 104 73 28 143 92 37 143 92 37
122197 +154 97 33 156 118 66 176 168 138 156 118 66 154 97 33 104 73 28
122198 +154 97 33 104 73 28 143 92 37 104 73 28 104 73 28 104 73 28
122199 +154 97 33 104 73 28 104 73 28 143 92 37 104 73 28 104 73 28
122200 +143 92 37 104 73 28 154 97 33 104 73 28 154 97 33 154 97 33
122201 +154 97 33 154 97 33 154 97 33 154 97 33 156 118 66 231 228 207
122202 +231 229 212 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
122203 +230 227 202 230 227 202 230 227 202 230 227 201 230 227 199 230 227 197
122204 +230 227 197 230 227 197 229 225 190 230 227 197 229 225 190 229 225 190
122205 +229 225 190 229 224 185 229 224 185 229 224 185 229 224 185 229 224 185
122206 +228 223 179 228 223 179 228 223 179 227 218 149 156 118 66 154 97 33
122207 +143 92 37 154 97 33 131 88 37 154 97 33 131 88 37 131 88 37
122208 +224 212 126 224 214 136 227 219 152 227 219 152 227 218 146 227 218 146
122209 +227 217 139 226 217 137 226 217 137 224 212 126 224 212 126 154 108 49
122210 +57 50 16 57 50 16 47 39 13 47 39 13 37 31 10 37 31 10
122211 +27 23 7 20 17 5 15 13 4 8 7 4 5 4 1 1 1 1
122212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122264 +0 0 0 0 0 0 3 3 1 7 5 2 13 11 4 18 15 5
122265 +23 19 6 29 24 7 37 31 10 37 31 10 47 39 13 47 39 13
122266 +56 48 15 56 48 15 57 50 17 57 50 17 57 50 17 57 50 17
122267 +56 48 15 57 50 17 57 50 17 57 50 17 56 48 15 57 50 17
122268 +57 50 17 57 50 17 56 48 15 57 50 17 56 48 15 56 48 15
122269 +56 48 15 56 48 15 57 50 17 56 48 15 57 50 17 57 50 17
122270 +57 50 17 59 49 15 59 49 15 67 48 15 71 53 16 71 53 16
122271 +71 53 16 71 53 16 71 53 16 79 57 18 80 59 18 80 59 18
122272 +80 59 18 80 59 18 90 65 21 90 65 21 90 65 21 90 65 21
122273 +90 65 21 97 69 27 90 65 21 97 69 27 97 69 27 104 73 28
122274 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
122275 +104 73 28 131 88 37 104 73 28 104 73 28 143 92 37 154 108 49
122276 +156 118 66 156 118 66 176 168 138 192 187 164 229 225 190 231 229 217
122277 +238 238 238 238 238 238 231 229 217 176 168 138 143 92 37 154 97 33
122278 +104 73 28 154 97 33 104 73 28 154 97 33 104 73 28 154 97 33
122279 +104 73 28 90 63 20 143 92 37 104 73 28 104 73 28 143 92 37
122280 +104 73 28 154 97 33 104 73 28 143 92 37 143 92 37 143 92 37
122281 +131 88 37 154 97 33 154 97 33 154 97 33 156 118 66 231 229 212
122282 +231 229 212 231 228 207 231 228 207 231 228 207 231 228 207 230 227 205
122283 +230 227 204 230 227 202 230 227 202 230 227 201 230 227 199 230 227 197
122284 +230 227 197 230 227 197 230 227 197 230 227 197 229 225 190 229 225 190
122285 +229 225 190 229 225 190 229 224 185 229 224 185 229 224 185 228 223 179
122286 +229 224 185 227 218 153 156 118 66 154 97 33 154 97 33 143 92 37
122287 +154 97 33 131 88 37 154 97 33 131 88 37 131 88 37 131 88 37
122288 +216 206 146 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146
122289 +226 217 137 226 217 137 224 212 126 224 212 126 224 212 126 110 81 38
122290 +57 50 16 57 50 16 57 50 16 57 50 17 37 31 10 37 31 10
122291 +27 23 7 20 17 5 15 13 4 9 7 3 4 3 1 1 1 1
122292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122344 +0 0 0 1 1 1 4 3 1 9 7 3 13 11 4 18 15 5
122345 +25 20 6 31 27 8 37 31 10 47 39 13 47 39 13 57 50 17
122346 +57 50 17 57 50 17 57 50 17 150 141 118 142 111 68 60 51 33
122347 +57 50 16 57 50 17 57 50 17 57 50 17 57 50 17 56 48 15
122348 +56 48 15 56 48 15 56 48 15 56 48 15 57 50 17 56 48 15
122349 +56 48 15 57 50 17 56 48 15 57 50 17 59 49 15 67 48 15
122350 +71 53 16 71 53 16 71 53 16 71 53 16 71 53 16 80 59 18
122351 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
122352 +90 65 21 90 65 21 90 65 21 90 65 21 91 66 24 91 66 24
122353 +97 69 27 90 65 21 104 73 28 97 69 27 104 73 28 90 65 21
122354 +104 73 28 104 73 28 104 73 28 143 92 37 154 108 49 149 122 79
122355 +163 154 123 176 168 138 216 206 146 229 225 190 230 228 210 231 229 217
122356 +238 238 238 238 238 238 231 230 220 231 230 220 231 230 220 231 230 220
122357 +231 230 220 231 230 220 231 230 220 200 196 176 143 92 37 104 73 28
122358 +154 97 33 104 73 28 154 97 33 104 73 28 143 92 37 90 63 20
122359 +154 97 33 104 73 28 104 73 28 143 92 37 104 73 28 104 73 28
122360 +154 97 33 104 73 28 154 97 33 104 73 28 154 97 33 154 97 33
122361 +143 92 37 154 97 33 154 97 33 154 97 33 154 97 33 230 227 197
122362 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 230 227 205
122363 +230 227 204 230 227 202 230 227 201 230 227 201 230 227 199 230 227 197
122364 +230 227 197 230 227 197 229 225 190 229 225 190 230 227 197 229 225 190
122365 +229 224 185 229 224 185 229 224 185 229 224 185 229 224 185 216 206 146
122366 +156 118 66 154 97 33 154 97 33 154 97 33 154 97 33 131 88 37
122367 +154 97 33 131 88 37 131 88 37 154 97 33 131 88 37 154 97 33
122368 +226 217 137 227 219 152 227 219 152 227 218 149 227 218 146 227 217 139
122369 +227 217 139 226 217 137 226 217 137 224 212 126 224 212 126 90 65 21
122370 +57 50 16 57 50 16 47 39 13 37 31 10 47 39 13 31 27 8
122371 +27 23 7 20 17 5 15 13 4 8 7 4 3 3 1 1 1 1
122372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122424 +0 0 0 2 2 2 5 4 1 10 9 3 16 14 4 23 19 6
122425 +27 23 7 37 31 10 37 31 10 47 39 13 47 39 13 56 48 15
122426 +57 50 17 57 50 17 90 68 33 226 218 148 227 219 152 227 219 152
122427 +176 168 138 138 129 110 135 101 60 75 62 40 57 50 17 57 50 17
122428 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
122429 +57 50 17 57 50 17 57 50 17 57 50 17 71 53 16 57 50 17
122430 +71 53 16 57 50 17 71 53 16 80 59 18 71 53 16 70 58 37
122431 +80 59 18 80 59 18 80 59 18 80 59 18 91 66 24 80 59 18
122432 +90 65 21 90 65 21 90 65 21 90 65 21 91 66 24 90 65 21
122433 +135 101 60 135 98 56 150 141 118 149 122 79 176 168 138 176 168 138
122434 +200 196 176 227 222 178 231 228 207 231 229 212 231 229 217 231 229 217
122435 +231 229 214 231 229 217 231 230 220 231 229 217 231 230 220 231 230 220
122436 +231 230 220 231 230 220 231 230 220 231 230 220 231 230 220 238 238 238
122437 +231 230 220 231 230 220 231 230 220 230 227 205 143 92 37 154 97 33
122438 +143 92 37 143 92 37 154 97 33 104 73 28 154 97 33 104 73 28
122439 +143 92 37 104 73 28 143 92 37 104 73 28 104 73 28 143 92 37
122440 +104 73 28 154 97 33 104 73 28 154 97 33 143 92 37 131 88 37
122441 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 227 222 178
122442 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 230 227 204
122443 +230 227 202 230 227 202 230 227 201 230 227 201 230 227 197 230 227 197
122444 +230 227 197 229 225 190 230 227 197 230 227 197 229 225 190 229 225 190
122445 +229 225 190 229 224 185 229 224 185 216 206 146 156 118 66 154 97 33
122446 +154 97 33 154 97 33 154 97 33 143 92 37 154 97 33 154 97 33
122447 +131 88 37 154 97 33 154 97 33 131 88 37 154 97 33 156 118 66
122448 +227 219 152 227 219 152 227 219 152 227 218 146 227 218 146 227 218 146
122449 +226 217 137 226 217 137 224 212 126 224 212 126 224 212 126 57 50 16
122450 +57 50 16 57 50 16 57 50 16 47 39 13 37 31 10 31 27 8
122451 +27 23 7 18 15 5 13 11 4 7 5 2 4 3 1 0 0 0
122452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122504 +1 1 1 3 3 1 7 5 2 13 11 4 18 15 5 24 21 6
122505 +31 27 8 37 31 10 47 39 13 47 39 13 57 50 17 57 50 17
122506 +57 50 17 57 50 17 149 122 79 227 219 152 227 220 160 227 219 152
122507 +227 220 160 227 219 152 227 220 160 227 221 169 227 221 169 185 178 149
122508 +176 168 138 163 154 123 150 141 118 142 111 68 138 129 110 142 111 68
122509 +100 76 42 100 76 42 100 76 42 114 84 45 100 76 42 114 84 45
122510 +114 84 45 114 84 45 114 84 45 114 84 45 114 84 45 138 129 110
122511 +149 122 79 138 129 110 138 129 110 150 141 118 176 168 138 163 154 123
122512 +176 168 138 200 196 176 200 196 176 229 225 190 230 228 209 230 228 209
122513 +230 228 209 230 228 209 231 228 207 231 229 212 231 229 212 231 229 212
122514 +231 228 207 231 229 214 231 229 217 231 229 217 231 229 217 231 229 217
122515 +231 230 220 231 229 217 231 230 220 231 230 220 231 230 220 231 230 220
122516 +231 230 220 231 230 220 231 230 220 231 230 220 231 230 220 231 230 220
122517 +231 230 220 238 238 238 231 230 220 231 230 220 154 108 49 131 88 37
122518 +104 73 28 154 97 33 104 73 28 154 97 33 104 73 28 143 92 37
122519 +104 73 28 143 92 37 104 73 28 143 92 37 104 73 28 154 97 33
122520 +104 73 28 154 97 33 143 92 37 143 92 37 143 92 37 154 97 33
122521 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 216 206 146
122522 +230 227 205 231 228 207 231 228 207 231 228 207 230 227 204 230 227 204
122523 +230 227 202 230 227 202 230 227 201 230 227 199 230 227 197 230 227 197
122524 +230 227 197 230 227 197 229 225 190 229 225 190 229 225 190 229 225 190
122525 +228 223 179 176 168 138 154 108 49 154 97 33 154 97 33 154 97 33
122526 +154 97 33 154 97 33 154 97 33 154 97 33 131 88 37 154 97 33
122527 +154 97 33 131 88 37 154 97 33 131 88 37 154 97 33 156 118 66
122528 +227 219 152 227 219 152 227 219 152 227 218 146 227 218 146 227 217 139
122529 +226 217 137 226 217 137 224 212 126 224 212 126 224 212 126 57 50 16
122530 +57 50 16 57 50 16 47 39 13 47 39 13 37 31 10 31 27 8
122531 +24 21 6 18 15 5 13 11 4 7 5 2 3 3 1 0 0 0
122532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122584 +1 1 1 4 3 1 9 7 3 14 11 4 18 15 5 25 20 6
122585 +31 27 8 37 31 10 47 39 13 47 39 13 56 48 15 57 50 17
122586 +57 50 16 57 50 16 163 154 123 227 219 152 227 220 160 227 219 152
122587 +227 220 160 227 221 169 227 220 160 227 221 169 227 221 169 227 220 160
122588 +227 221 169 227 221 169 227 221 169 227 222 178 227 222 178 227 222 178
122589 +229 226 192 229 226 192 229 226 192 229 226 196 229 226 196 230 227 199
122590 +230 227 201 230 227 202 230 227 202 230 228 209 229 226 196 229 226 192
122591 +229 226 196 229 226 192 229 226 192 229 226 192 230 227 197 231 228 207
122592 +230 227 202 230 227 202 230 227 204 230 227 205 231 228 207 230 228 209
122593 +230 228 209 231 229 212 231 229 212 231 229 212 231 229 212 231 229 214
122594 +231 229 214 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
122595 +231 229 217 231 230 220 231 229 217 231 230 220 231 230 220 231 230 220
122596 +231 230 220 231 230 220 231 230 220 238 238 238 231 230 220 231 230 220
122597 +231 230 220 231 230 220 231 230 220 238 238 238 149 122 79 143 92 37
122598 +154 97 33 143 92 37 154 97 33 104 73 28 154 97 33 104 73 28
122599 +154 97 33 104 73 28 143 92 37 104 73 28 143 92 37 104 73 28
122600 +143 92 37 104 73 28 154 97 33 104 73 28 143 92 37 143 92 37
122601 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 176 168 138
122602 +230 228 209 231 228 207 231 228 207 230 227 205 230 227 204 230 227 202
122603 +230 227 202 230 227 201 230 227 201 230 227 199 230 227 197 230 227 197
122604 +230 227 197 230 227 197 229 225 190 230 227 197 227 218 153 156 118 66
122605 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122606 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 131 88 37
122607 +154 97 33 154 97 33 131 88 37 154 97 33 131 88 37 224 212 126
122608 +227 219 152 227 219 152 227 218 149 227 218 146 227 218 146 227 217 139
122609 +226 217 137 226 217 137 224 212 126 224 212 126 163 154 123 57 50 16
122610 +57 50 16 57 50 16 47 39 13 47 39 13 37 31 10 31 27 8
122611 +24 21 6 18 15 5 13 11 4 7 5 2 3 3 1 0 0 0
122612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122664 +2 2 2 5 4 1 9 7 3 15 13 4 22 17 5 27 23 7
122665 +37 31 10 37 31 10 47 39 13 56 48 15 57 50 17 57 50 17
122666 +57 50 17 57 50 16 163 154 123 227 218 146 227 219 152 227 220 160
122667 +227 220 160 227 220 160 227 220 160 227 221 169 227 221 169 227 221 169
122668 +227 221 169 228 223 179 227 221 169 227 222 178 227 222 178 227 222 178
122669 +229 224 185 229 224 185 229 226 192 229 224 185 229 226 192 229 226 192
122670 +229 226 192 229 226 192 229 226 192 229 226 196 229 226 196 229 226 196
122671 +229 226 196 230 227 199 230 227 201 230 227 201 230 227 202 230 227 202
122672 +230 227 204 230 227 205 231 228 207 231 228 207 231 228 207 230 228 209
122673 +231 228 207 231 229 212 231 229 212 231 229 212 231 229 214 231 229 214
122674 +231 229 214 231 229 214 231 229 217 231 229 217 231 229 217 231 229 217
122675 +231 229 217 231 229 217 231 230 220 231 230 220 231 230 220 231 230 220
122676 +231 230 220 231 230 220 231 230 220 231 229 217 231 230 220 231 230 220
122677 +231 230 220 231 230 220 231 230 220 231 230 220 185 178 149 154 97 33
122678 +131 88 37 143 92 37 104 73 28 154 97 33 143 92 37 143 92 37
122679 +104 73 28 154 97 33 104 73 28 143 92 37 104 73 28 154 97 33
122680 +104 73 28 154 97 33 143 92 37 154 97 33 154 97 33 154 97 33
122681 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 163 154 123
122682 +230 227 197 231 228 207 231 228 207 230 227 204 230 227 204 230 227 202
122683 +230 227 202 230 227 201 230 227 199 230 227 197 230 227 197 230 227 197
122684 +230 227 197 227 222 178 176 168 138 154 108 49 154 97 33 154 108 49
122685 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122686 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122687 +154 97 33 131 88 37 154 97 33 154 97 33 131 88 37 224 212 126
122688 +226 218 148 227 219 152 226 218 148 227 218 146 227 218 146 227 217 139
122689 +226 217 137 226 217 137 224 212 126 224 212 126 156 118 66 80 59 18
122690 +57 50 16 57 50 16 47 39 13 47 39 13 37 31 10 31 27 8
122691 +24 21 6 18 15 5 10 9 3 6 5 1 3 3 1 0 0 0
122692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122744 +3 3 1 5 4 1 10 9 3 15 13 4 23 19 6 29 24 7
122745 +31 27 8 47 39 13 47 39 13 47 39 13 56 48 15 57 50 16
122746 +57 50 16 57 50 16 163 154 123 227 219 152 227 219 152 227 219 152
122747 +227 220 160 227 220 160 227 221 169 227 220 160 227 221 169 227 221 169
122748 +227 221 169 227 221 169 228 223 179 227 222 178 228 223 179 228 223 179
122749 +228 223 179 229 224 185 228 223 179 229 224 185 229 224 185 229 224 185
122750 +229 226 192 229 226 192 229 226 192 229 226 192 229 226 196 230 227 197
122751 +230 227 197 230 227 197 230 227 199 230 227 201 230 227 202 230 227 202
122752 +230 227 204 230 227 205 231 228 207 231 228 207 231 228 207 231 228 207
122753 +230 228 209 231 228 207 231 229 212 231 229 212 231 229 212 231 229 214
122754 +231 229 214 231 229 214 231 229 214 231 229 217 231 229 217 231 229 217
122755 +231 229 217 231 229 217 231 229 217 231 229 217 231 230 220 231 230 220
122756 +231 230 220 231 230 220 231 230 220 231 230 220 231 230 220 231 230 220
122757 +231 230 220 231 230 220 231 230 220 231 229 217 200 196 176 143 92 37
122758 +143 92 37 154 97 33 154 97 33 104 73 28 154 97 33 104 73 28
122759 +154 97 33 104 73 28 154 97 33 104 73 28 154 97 33 104 73 28
122760 +154 97 33 104 73 28 154 97 33 104 73 28 143 92 37 154 97 33
122761 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 156 118 66
122762 +230 227 201 231 228 207 231 228 207 230 227 204 230 227 204 230 227 202
122763 +230 227 201 230 227 201 230 227 201 229 226 196 229 224 185 224 212 126
122764 +156 118 66 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122765 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122766 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122767 +154 97 33 154 97 33 131 88 37 154 97 33 154 97 33 227 219 152
122768 +227 219 152 227 219 152 227 218 146 227 218 146 227 218 146 226 217 137
122769 +226 217 137 224 212 126 224 212 126 224 212 126 156 118 66 57 50 16
122770 +57 50 16 57 50 16 47 39 13 47 39 13 31 27 8 31 27 8
122771 +24 21 6 16 14 4 10 9 3 5 4 1 2 2 2 0 0 0
122772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122824 +3 3 1 7 5 2 11 9 3 16 14 4 23 19 6 29 24 7
122825 +37 31 10 44 35 11 47 39 13 57 50 17 57 50 17 57 50 17
122826 +75 61 38 57 50 16 135 101 60 226 217 137 227 219 152 227 220 160
122827 +227 219 152 227 220 160 227 220 160 227 221 169 227 221 169 227 221 169
122828 +227 221 169 228 223 179 227 221 169 228 223 179 228 223 179 228 223 179
122829 +228 223 179 229 224 185 229 224 185 229 224 185 229 226 192 229 224 185
122830 +229 226 192 229 226 192 229 226 192 229 226 192 229 226 196 230 227 197
122831 +230 227 197 230 227 197 230 227 199 230 227 201 230 227 201 230 227 202
122832 +230 227 202 230 227 204 230 227 205 231 228 207 231 228 207 231 228 207
122833 +231 228 207 230 228 209 230 228 210 231 229 212 231 229 212 231 229 212
122834 +231 229 214 231 229 214 231 229 214 231 229 214 231 229 217 231 229 217
122835 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 230 220
122836 +231 229 217 231 230 220 231 230 220 231 230 220 231 230 220 231 230 220
122837 +231 230 220 231 230 220 231 230 220 231 230 220 231 229 217 154 97 33
122838 +143 92 37 143 92 37 143 92 37 154 97 33 143 92 37 143 92 37
122839 +143 92 37 104 73 28 154 97 33 104 73 28 154 97 33 104 73 28
122840 +154 97 33 154 97 33 143 92 37 154 97 33 154 97 33 143 92 37
122841 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 156 118 66
122842 +230 227 197 231 228 207 231 228 207 230 227 202 230 227 202 230 227 202
122843 +230 227 201 229 224 185 185 178 149 156 118 66 154 108 49 154 97 33
122844 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122845 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122846 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 131 88 37
122847 +154 97 33 154 97 33 154 97 33 154 97 33 156 118 66 227 219 152
122848 +227 219 152 227 219 152 227 218 146 227 218 146 227 217 139 226 217 137
122849 +226 217 137 224 212 126 224 212 126 224 212 126 117 83 35 57 50 16
122850 +57 50 16 57 50 16 47 39 13 37 31 10 37 31 10 31 27 8
122851 +20 17 5 15 13 4 10 9 3 5 4 1 1 1 1 0 0 0
122852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122904 +3 3 1 7 5 2 11 9 3 18 15 5 24 21 6 31 27 8
122905 +33 28 19 47 39 13 47 39 13 57 50 17 57 50 17 57 50 16
122906 +80 59 18 75 61 38 57 50 17 224 214 136 227 219 152 227 219 152
122907 +227 220 160 227 220 160 227 220 160 227 220 160 227 221 169 227 221 169
122908 +227 221 169 227 221 169 227 221 169 228 223 179 228 223 179 228 223 179
122909 +228 223 179 228 223 179 228 223 179 229 226 192 228 223 179 229 226 192
122910 +229 224 185 229 226 192 229 226 192 229 226 192 229 226 192 230 227 197
122911 +230 227 197 230 227 197 230 227 197 230 227 199 230 227 201 230 227 201
122912 +230 227 202 230 227 204 230 227 205 230 227 205 231 228 207 231 228 207
122913 +231 228 207 231 228 207 230 228 209 230 228 210 231 229 212 231 229 212
122914 +231 229 212 231 229 214 231 229 214 231 229 214 231 229 214 231 229 217
122915 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
122916 +231 230 220 231 229 217 231 230 220 231 230 220 231 230 220 231 230 220
122917 +231 230 220 231 230 220 231 230 220 231 229 217 231 229 217 154 108 49
122918 +143 92 37 143 92 37 154 97 33 104 73 28 154 97 33 104 73 28
122919 +143 92 37 143 92 37 143 92 37 154 97 33 104 73 28 143 92 37
122920 +154 97 33 104 73 28 154 97 33 104 73 28 154 97 33 154 97 33
122921 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122922 +230 227 199 231 228 207 230 227 202 230 227 204 229 224 185 216 206 146
122923 +156 118 66 154 97 33 154 97 33 154 108 49 154 97 33 154 97 33
122924 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122925 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122926 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
122927 +154 97 33 154 97 33 154 97 33 131 88 37 224 212 126 227 219 152
122928 +227 219 152 227 219 152 227 218 146 227 218 146 227 217 139 226 217 137
122929 +226 217 137 224 212 126 224 212 126 224 212 126 57 50 16 57 50 16
122930 +57 50 16 57 50 16 47 39 13 47 39 13 31 27 8 24 21 6
122931 +20 17 5 15 13 4 10 9 3 5 4 1 1 1 1 0 0 0
122932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
122984 +3 3 1 7 5 2 11 9 3 18 15 5 23 19 6 31 27 8
122985 +37 31 10 44 35 11 47 39 13 57 50 17 57 50 17 57 50 17
122986 +57 50 16 114 84 45 57 50 16 114 84 45 227 220 160 227 219 152
122987 +227 220 160 227 220 160 227 220 160 227 221 169 227 220 160 227 221 169
122988 +227 221 169 227 221 169 228 223 179 227 221 169 228 223 179 228 223 179
122989 +228 223 179 228 223 179 229 224 185 229 224 185 229 224 185 229 226 192
122990 +229 224 185 229 226 192 229 226 192 229 226 192 229 226 192 230 227 197
122991 +230 227 197 230 227 197 230 227 197 230 227 199 230 227 201 230 227 201
122992 +230 227 202 230 227 202 230 227 204 230 227 205 230 227 205 231 228 207
122993 +231 228 207 231 228 207 230 228 209 231 228 207 230 228 210 231 229 212
122994 +231 229 212 231 229 212 231 229 214 231 229 214 231 229 214 231 229 214
122995 +231 229 214 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
122996 +231 229 217 231 229 217 231 229 217 231 229 217 231 230 220 231 229 217
122997 +231 230 220 231 230 220 231 230 220 231 230 220 231 230 220 176 168 138
122998 +154 97 33 154 97 33 143 92 37 154 97 33 154 97 33 143 92 37
122999 +143 92 37 104 73 28 154 97 33 104 73 28 154 97 33 104 73 28
123000 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123001 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 108 49
123002 +227 221 169 227 221 169 176 168 138 156 118 66 154 97 33 154 97 33
123003 +154 108 49 154 108 49 154 97 33 154 97 33 154 97 33 154 108 49
123004 +154 97 33 154 108 49 154 97 33 154 97 33 154 97 33 154 97 33
123005 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123006 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123007 +154 97 33 154 97 33 154 97 33 154 97 33 224 212 126 226 218 148
123008 +227 219 152 226 218 148 227 218 146 227 218 146 227 217 139 226 217 137
123009 +226 217 137 224 212 126 224 212 126 224 212 126 57 50 16 57 50 16
123010 +57 50 16 47 39 13 37 31 10 37 31 10 31 27 8 27 23 7
123011 +20 17 5 13 11 4 8 7 4 3 3 1 1 1 1 0 0 0
123012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123064 +3 3 1 7 5 2 11 9 3 15 13 4 24 21 6 27 23 7
123065 +37 31 10 47 39 13 47 39 13 56 48 15 57 50 16 57 50 17
123066 +57 50 17 135 101 60 57 50 17 57 50 17 149 122 79 227 219 152
123067 +227 219 152 227 220 160 227 220 160 227 220 160 227 221 169 227 221 169
123068 +227 221 169 227 221 169 228 223 179 227 221 169 228 223 179 228 223 179
123069 +228 223 179 228 223 179 228 223 179 229 224 185 229 224 185 229 224 185
123070 +229 224 185 229 225 190 229 226 192 229 226 192 229 226 192 229 226 192
123071 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 199 230 227 201
123072 +230 227 201 230 227 202 230 227 202 230 227 204 230 227 205 230 227 205
123073 +231 228 207 231 228 207 230 228 209 231 228 207 231 229 212 231 229 212
123074 +231 229 212 231 229 212 231 229 212 231 229 214 231 229 214 231 229 214
123075 +231 229 214 231 229 214 231 229 217 231 229 217 231 229 217 231 229 217
123076 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
123077 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 185 178 149
123078 +143 92 37 143 92 37 154 97 33 154 97 33 104 73 28 143 92 37
123079 +143 92 37 143 92 37 143 92 37 143 92 37 143 92 37 143 92 37
123080 +154 97 33 104 73 28 143 92 37 143 92 37 154 97 33 154 97 33
123081 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123082 +154 108 49 154 97 33 154 97 33 154 97 33 154 108 49 154 97 33
123083 +154 97 33 154 97 33 154 97 33 154 108 49 154 97 33 154 97 33
123084 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123085 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123086 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123087 +154 97 33 154 97 33 154 97 33 156 118 66 227 219 152 227 219 152
123088 +227 219 152 227 218 146 227 218 146 227 218 146 226 217 137 226 217 137
123089 +224 212 126 224 212 126 224 212 126 156 118 66 57 50 16 57 50 16
123090 +57 50 16 57 50 16 47 39 13 37 31 10 31 27 8 24 21 6
123091 +16 14 4 13 11 4 7 5 2 3 3 1 0 0 0 0 0 0
123092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123144 +2 2 2 5 4 1 10 9 3 16 14 4 23 19 6 29 24 7
123145 +31 27 8 44 35 11 47 39 13 57 50 17 57 50 16 57 50 17
123146 +57 50 17 135 101 60 58 54 45 57 50 16 57 50 16 142 111 68
123147 +226 218 148 227 220 160 227 220 160 227 220 160 227 220 160 227 221 169
123148 +227 221 169 227 221 169 227 221 169 228 223 179 227 221 169 228 223 179
123149 +228 223 179 228 223 179 229 224 185 228 223 179 229 224 185 229 226 192
123150 +229 224 185 229 226 192 229 225 190 229 226 192 229 226 192 229 226 192
123151 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 199
123152 +230 227 201 230 227 202 230 227 202 230 227 204 230 227 205 230 227 205
123153 +230 227 205 231 228 207 231 228 207 231 228 207 231 228 207 231 229 212
123154 +231 228 207 231 229 212 231 229 212 231 229 212 231 229 214 231 229 214
123155 +231 229 214 231 229 214 231 229 217 231 229 217 231 229 217 231 229 217
123156 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
123157 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 230 227 204
123158 +154 97 33 154 97 33 143 92 37 154 97 33 154 97 33 154 97 33
123159 +104 73 28 154 97 33 143 92 37 104 73 28 154 97 33 104 73 28
123160 +154 97 33 154 97 33 154 97 33 143 92 37 154 97 33 154 97 33
123161 +154 97 33 154 97 33 154 97 33 154 97 33 154 108 49 154 97 33
123162 +154 97 33 154 108 49 154 97 33 154 108 49 154 97 33 154 108 49
123163 +154 97 33 154 108 49 154 97 33 154 97 33 154 97 33 154 97 33
123164 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123165 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123166 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123167 +154 97 33 154 97 33 154 97 33 163 154 123 226 217 137 227 219 152
123168 +227 219 152 227 218 146 227 218 146 227 217 139 226 217 137 226 217 137
123169 +224 212 126 224 212 126 224 212 126 154 108 49 57 50 16 57 50 16
123170 +57 50 16 37 31 10 47 39 13 37 31 10 31 27 8 24 21 6
123171 +16 14 4 10 9 3 6 5 1 3 3 1 0 0 0 0 0 0
123172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123224 +1 1 1 5 4 1 9 7 3 15 13 4 20 17 5 27 23 7
123225 +37 31 10 37 31 10 47 39 13 47 39 13 57 50 16 57 50 16
123226 +57 50 16 68 60 43 142 111 68 57 50 16 57 50 16 57 50 16
123227 +90 68 33 185 178 149 227 220 160 227 220 160 227 221 169 227 220 160
123228 +227 221 169 227 221 169 227 221 169 227 221 169 228 223 179 228 223 179
123229 +228 223 179 228 223 179 229 224 185 228 223 179 229 224 185 229 224 185
123230 +229 224 185 229 224 185 229 224 185 229 226 192 229 226 192 229 226 192
123231 +229 226 192 229 226 196 230 227 197 230 227 197 230 227 197 230 227 199
123232 +230 227 201 230 227 201 230 227 202 230 227 202 230 227 204 230 227 205
123233 +230 227 205 230 227 205 231 228 207 231 228 207 231 228 207 231 228 207
123234 +231 229 212 231 229 212 231 229 212 231 229 212 231 229 212 231 229 212
123235 +231 229 214 231 229 214 231 229 214 231 229 214 231 229 217 231 229 217
123236 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
123237 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
123238 +154 97 33 143 92 37 154 97 33 143 92 37 143 92 37 154 97 33
123239 +154 97 33 143 92 37 143 92 37 154 97 33 143 92 37 154 97 33
123240 +143 92 37 143 92 37 143 92 37 154 97 33 154 97 33 154 97 33
123241 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 108 49
123242 +154 97 33 154 108 49 154 97 33 154 97 33 154 97 33 154 97 33
123243 +154 97 33 154 97 33 154 97 33 154 97 33 154 108 49 154 97 33
123244 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123245 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123246 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123247 +154 97 33 154 97 33 154 97 33 226 217 137 227 219 152 227 219 152
123248 +227 218 146 227 218 146 227 218 146 227 217 139 226 217 137 226 217 137
123249 +224 212 126 224 212 126 224 212 126 80 59 18 57 50 16 57 50 16
123250 +57 50 16 57 50 16 37 31 10 37 31 10 27 23 7 24 21 6
123251 +15 13 4 10 9 3 5 4 1 1 1 1 0 0 0 0 0 0
123252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123304 +1 1 1 4 3 1 9 7 3 14 11 4 20 17 5 27 23 7
123305 +37 31 10 37 31 10 47 39 13 57 50 17 57 50 16 57 50 17
123306 +57 50 16 57 50 16 150 141 118 57 50 16 57 50 16 57 50 16
123307 +57 50 16 57 50 16 135 101 60 216 206 146 227 219 152 227 221 169
123308 +227 220 160 227 221 169 227 221 169 227 221 169 228 223 179 227 221 169
123309 +228 223 179 228 223 179 228 223 179 228 223 179 229 224 185 229 224 185
123310 +229 224 185 229 226 192 229 224 185 229 226 192 229 226 192 229 226 192
123311 +229 226 192 230 227 197 229 226 192 230 227 197 230 227 197 230 227 197
123312 +230 227 199 230 227 201 230 227 201 230 227 202 230 227 202 230 227 204
123313 +230 227 205 230 227 205 230 227 205 231 228 207 231 228 207 231 228 207
123314 +231 228 207 231 228 207 231 229 212 231 229 212 231 229 212 231 229 212
123315 +231 229 212 231 229 214 231 229 214 231 229 214 231 229 214 231 229 214
123316 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
123317 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 217 231 229 217
123318 +163 154 123 154 97 33 154 97 33 154 97 33 154 97 33 143 92 37
123319 +143 92 37 143 92 37 143 92 37 143 92 37 104 73 28 154 97 33
123320 +104 73 28 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123321 +154 97 33 154 97 33 154 97 33 154 97 33 154 108 49 154 108 49
123322 +154 108 49 154 108 49 154 108 49 154 108 49 154 108 49 154 108 49
123323 +154 108 49 154 108 49 154 108 49 154 97 33 154 108 49 154 97 33
123324 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123325 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123326 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123327 +154 97 33 154 97 33 156 118 66 226 217 137 227 219 152 227 219 152
123328 +227 218 146 227 218 146 227 218 146 226 217 137 226 217 137 224 212 126
123329 +224 212 126 224 212 126 224 212 126 57 50 16 57 50 16 57 50 16
123330 +47 39 13 37 31 10 47 39 13 31 27 8 27 23 7 20 17 5
123331 +15 13 4 10 9 3 5 4 1 1 1 1 0 0 0 0 0 0
123332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123384 +0 0 0 3 3 1 7 5 2 13 11 4 18 15 5 24 21 6
123385 +31 27 8 37 31 10 37 31 10 47 39 13 57 50 16 57 50 16
123386 +57 50 16 57 50 16 149 122 79 75 62 40 57 50 16 57 50 16
123387 +57 50 16 57 50 16 56 48 15 57 50 16 114 84 45 163 154 123
123388 +227 220 160 227 221 169 227 221 169 227 221 169 228 223 179 227 221 169
123389 +228 223 179 228 223 179 228 223 179 229 224 185 228 223 179 229 224 185
123390 +229 224 185 229 224 185 229 225 190 229 224 185 229 226 192 229 226 192
123391 +229 226 192 229 226 192 230 227 197 230 227 197 230 227 197 230 227 197
123392 +230 227 197 230 227 199 230 227 201 230 227 201 230 227 202 230 227 202
123393 +230 227 204 230 227 205 230 227 205 230 227 205 231 228 207 231 228 207
123394 +231 228 207 231 229 212 231 228 207 231 228 207 231 228 207 231 229 212
123395 +231 229 212 231 229 212 231 229 212 231 229 214 230 228 210 231 229 214
123396 +230 228 210 231 229 214 230 228 210 231 229 217 231 229 217 231 229 217
123397 +231 229 217 231 229 217 231 229 217 231 229 217 231 229 214 231 228 207
123398 +176 168 138 154 97 33 154 97 33 154 97 33 143 92 37 154 97 33
123399 +143 92 37 154 97 33 143 92 37 154 97 33 154 97 33 154 97 33
123400 +154 97 33 154 97 33 143 92 37 154 97 33 154 97 33 154 97 33
123401 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 108 49
123402 +154 108 49 154 97 33 154 108 49 154 108 49 154 97 33 154 108 49
123403 +154 97 33 154 97 33 154 108 49 154 97 33 154 97 33 154 97 33
123404 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123405 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123406 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123407 +154 97 33 154 97 33 224 212 126 227 219 152 227 219 152 227 219 152
123408 +227 218 146 227 218 146 227 217 139 226 217 137 226 217 137 224 212 126
123409 +224 212 126 224 212 126 156 118 66 57 50 16 57 50 16 57 50 16
123410 +57 50 16 47 39 13 37 31 10 31 27 8 24 21 6 20 17 5
123411 +13 11 4 6 5 1 5 4 1 0 0 0 0 0 0 0 0 0
123412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123464 +0 0 0 3 3 1 7 5 2 11 9 3 18 15 5 24 21 6
123465 +31 27 8 37 31 10 47 39 13 47 39 13 57 50 17 57 50 16
123466 +57 50 16 57 50 16 135 101 60 149 122 79 57 50 16 57 50 16
123467 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
123468 +80 59 18 135 101 60 163 154 123 227 219 152 227 221 169 228 223 179
123469 +227 221 169 228 223 179 228 223 179 228 223 179 228 223 179 229 224 185
123470 +229 224 185 229 224 185 229 224 185 229 225 190 229 225 190 229 226 192
123471 +229 226 192 229 226 192 230 227 197 229 226 192 230 227 197 230 227 197
123472 +230 227 197 230 227 199 230 227 199 230 227 201 230 227 201 230 227 202
123473 +230 227 202 230 227 204 230 227 205 230 227 205 230 227 205 231 228 207
123474 +231 228 207 231 228 207 231 228 207 231 229 212 231 228 207 231 228 207
123475 +231 229 212 231 229 212 231 228 207 231 229 214 230 228 210 231 229 214
123476 +231 229 214 231 229 214 230 228 210 231 229 217 230 228 210 231 229 214
123477 +230 228 210 231 229 214 231 229 214 231 229 214 231 229 214 231 229 214
123478 +229 224 185 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123479 +143 92 37 143 92 37 143 92 37 143 92 37 143 92 37 143 92 37
123480 +143 92 37 143 92 37 154 97 33 154 97 33 154 97 33 154 97 33
123481 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 108 49
123482 +154 97 33 154 108 49 154 97 33 154 108 49 154 108 49 154 97 33
123483 +154 108 49 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123484 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123485 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123486 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123487 +154 97 33 154 108 49 226 217 137 227 218 146 227 219 152 227 218 146
123488 +227 218 146 227 218 146 227 217 139 226 217 137 226 217 137 224 212 126
123489 +224 212 126 224 212 126 117 83 35 57 50 16 57 50 16 57 50 16
123490 +37 31 10 47 39 13 31 27 8 31 27 8 24 21 6 16 14 4
123491 +13 11 4 6 5 1 3 3 1 0 0 0 0 0 0 0 0 0
123492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123544 +0 0 0 2 2 2 5 4 1 10 9 3 15 13 4 20 17 5
123545 +31 27 8 37 31 10 37 31 10 47 39 13 47 39 13 57 50 16
123546 +57 50 16 57 50 16 57 50 16 224 212 126 57 50 17 57 50 16
123547 +57 50 16 57 50 16 57 50 16 57 50 17 57 50 17 57 50 17
123548 +57 50 17 57 50 17 57 50 16 57 50 17 90 68 33 149 122 79
123549 +163 154 123 216 206 146 228 223 179 228 223 179 229 224 185 228 223 179
123550 +229 224 185 229 224 185 229 225 190 229 224 185 229 224 185 229 225 190
123551 +229 226 192 229 226 192 229 226 192 229 226 196 229 226 196 230 227 197
123552 +230 227 197 230 227 197 230 227 199 230 227 199 230 227 201 230 227 201
123553 +230 227 202 230 227 202 230 227 204 230 227 205 230 227 205 231 228 207
123554 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
123555 +231 229 212 231 228 207 231 229 212 231 229 212 230 228 210 230 228 210
123556 +230 228 210 231 229 214 231 228 207 231 229 217 231 228 207 231 229 217
123557 +230 228 210 231 229 217 231 228 207 231 229 214 231 228 207 231 229 214
123558 +230 227 205 154 97 33 154 97 33 154 97 33 154 97 33 143 92 37
123559 +154 97 33 154 97 33 154 97 33 143 92 37 154 97 33 143 92 37
123560 +154 97 33 143 92 37 154 97 33 154 97 33 154 97 33 154 97 33
123561 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123562 +154 97 33 154 108 49 154 97 33 154 97 33 154 108 49 154 97 33
123563 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123564 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123565 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123566 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123567 +154 97 33 224 212 126 227 219 152 227 219 152 227 219 152 227 218 146
123568 +227 218 146 227 217 139 226 217 137 226 217 137 224 212 126 224 212 126
123569 +224 212 126 224 212 126 57 50 16 57 50 16 57 50 16 57 50 16
123570 +47 39 13 47 39 13 31 27 8 31 27 8 24 21 6 16 14 4
123571 +10 9 3 5 4 1 2 2 2 0 0 0 0 0 0 0 0 0
123572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123624 +0 0 0 1 1 1 4 3 1 9 7 3 14 11 4 20 17 5
123625 +27 23 7 31 27 8 37 31 10 47 39 13 57 50 17 57 50 16
123626 +57 50 17 57 50 16 57 50 16 163 154 123 135 101 60 57 50 16
123627 +57 50 16 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
123628 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 16
123629 +57 50 16 71 53 16 71 53 16 100 76 42 142 111 68 138 129 110
123630 +163 154 123 185 178 149 216 206 146 224 217 160 229 226 192 229 225 190
123631 +229 225 190 229 226 192 229 226 192 229 226 192 229 226 196 229 226 196
123632 +230 227 197 230 227 197 230 227 197 230 227 199 230 227 201 230 227 201
123633 +230 227 201 230 227 202 230 227 202 230 227 204 230 227 205 230 227 205
123634 +231 228 207 231 228 207 231 228 207 231 228 207 229 225 190 200 196 176
123635 +200 196 176 229 224 185 230 228 210 231 228 207 230 228 210 231 229 214
123636 +231 228 207 230 228 210 230 228 210 230 228 210 230 228 210 230 228 210
123637 +231 229 214 231 228 207 231 229 214 231 229 214 231 229 214 231 228 207
123638 +231 229 214 163 154 123 154 97 33 154 97 33 154 97 33 154 97 33
123639 +154 97 33 143 92 37 154 97 33 143 92 37 154 97 33 143 92 37
123640 +143 92 37 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123641 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123642 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123643 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123644 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123645 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123646 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123647 +154 97 33 224 212 126 226 217 137 227 219 152 227 218 146 227 218 146
123648 +227 218 146 227 217 139 226 217 137 226 217 137 224 212 126 224 212 126
123649 +224 212 126 156 118 66 57 50 16 57 50 16 57 50 16 57 50 16
123650 +37 31 10 37 31 10 31 27 8 27 23 7 20 17 5 15 13 4
123651 +7 7 7 3 3 1 1 1 1 0 0 0 0 0 0 0 0 0
123652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123704 +0 0 0 0 0 0 3 3 1 8 7 4 13 11 4 18 15 5
123705 +24 21 6 31 27 8 37 31 10 37 31 10 47 39 13 57 50 16
123706 +57 50 16 57 50 16 57 50 16 110 81 38 176 168 138 57 50 16
123707 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
123708 +57 50 17 57 50 17 57 50 17 71 53 16 57 50 17 71 53 16
123709 +71 53 16 57 50 17 80 59 18 57 50 17 80 59 18 71 53 16
123710 +80 59 18 80 59 18 71 53 16 80 59 18 80 59 18 90 68 33
123711 +135 101 60 114 84 45 135 101 60 142 111 68 149 122 79 138 129 110
123712 +149 122 79 149 122 79 138 129 110 149 122 79 150 141 118 149 122 79
123713 +150 141 118 149 122 79 150 141 118 149 122 79 135 101 60 143 106 60
123714 +143 106 60 144 102 51 117 83 35 117 83 35 117 83 35 117 83 35
123715 +143 92 37 150 141 118 231 228 207 230 228 210 231 228 207 231 228 207
123716 +230 228 210 230 228 210 230 228 210 231 228 207 231 229 214 230 228 210
123717 +231 228 207 231 229 214 231 228 207 231 228 207 231 229 214 231 228 207
123718 +230 227 197 176 168 138 154 97 33 154 97 33 154 97 33 154 97 33
123719 +154 97 33 154 97 33 154 97 33 154 97 33 143 92 37 154 97 33
123720 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123721 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123722 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123723 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123724 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123725 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123726 +154 97 33 154 97 33 154 97 33 154 97 33 154 108 49 154 97 33
123727 +163 154 123 227 218 146 227 219 152 227 219 152 227 218 146 227 218 146
123728 +227 218 146 226 217 137 226 217 137 224 212 126 224 212 126 224 212 126
123729 +224 212 126 117 83 35 57 50 16 57 50 16 57 50 16 47 39 13
123730 +47 39 13 37 31 10 31 27 8 24 21 6 16 14 4 10 9 3
123731 +8 7 4 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0
123732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123784 +0 0 0 0 0 0 2 2 2 5 4 1 11 9 3 16 14 4
123785 +24 21 6 31 27 8 37 31 10 47 39 13 47 39 13 47 39 13
123786 +57 50 17 57 50 16 57 50 16 57 50 16 224 212 126 114 84 45
123787 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
123788 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 71 53 16
123789 +57 50 17 80 59 18 57 50 17 80 59 18 80 59 18 71 53 16
123790 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 80 59 18
123791 +80 59 18 91 66 24 90 65 21 90 65 21 91 66 24 104 73 28
123792 +97 69 27 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
123793 +104 73 28 117 83 35 104 73 28 104 73 28 117 83 35 104 73 28
123794 +117 83 35 117 83 35 104 73 28 117 83 35 117 83 35 131 88 37
123795 +104 73 28 154 97 33 231 228 207 231 228 207 231 228 207 230 228 210
123796 +231 228 207 231 228 207 230 228 210 230 228 210 231 228 207 230 228 210
123797 +231 228 207 231 229 214 231 228 207 231 229 214 231 228 207 231 228 207
123798 +231 228 207 229 224 185 154 97 33 154 97 33 154 97 33 154 97 33
123799 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123800 +143 92 37 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123801 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123802 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123803 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123804 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123805 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123806 +154 97 33 154 97 33 154 97 33 154 108 49 154 108 49 154 97 33
123807 +224 212 126 226 217 137 227 219 152 227 218 146 227 218 146 227 218 146
123808 +227 217 139 226 217 137 226 217 137 226 217 137 224 212 126 224 212 126
123809 +224 212 126 57 50 16 57 50 16 57 50 16 57 50 16 47 39 13
123810 +37 31 10 37 31 10 31 27 8 24 21 6 16 14 4 10 9 3
123811 +6 5 1 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0
123812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123864 +0 0 0 0 0 0 1 1 1 5 4 1 9 8 6 15 13 4
123865 +20 17 5 24 21 6 33 28 19 37 31 10 37 31 10 57 50 16
123866 +57 50 16 57 50 17 57 50 16 57 50 16 149 122 79 176 168 138
123867 +57 50 17 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
123868 +57 50 17 57 50 17 57 50 16 57 50 17 71 53 16 57 50 17
123869 +57 50 17 71 53 16 57 50 17 80 59 18 57 50 17 71 53 16
123870 +80 59 18 80 59 18 80 59 18 90 65 21 80 59 18 90 65 21
123871 +90 65 21 90 65 21 90 65 21 91 66 24 91 66 24 90 65 21
123872 +97 69 27 90 65 21 104 73 28 104 73 28 104 73 28 104 73 28
123873 +104 73 28 104 73 28 104 73 28 104 73 28 117 83 35 104 73 28
123874 +117 83 35 104 73 28 117 83 35 117 83 35 131 88 37 117 83 35
123875 +131 88 37 131 88 37 200 196 176 231 228 207 231 228 207 231 228 207
123876 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 231 229 214
123877 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
123878 +231 228 207 231 228 207 154 97 33 154 97 33 154 97 33 154 97 33
123879 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123880 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123881 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123882 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123883 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123884 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123885 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123886 +154 97 33 154 97 33 154 108 49 154 97 33 154 97 33 224 212 126
123887 +227 218 146 227 218 146 227 219 152 227 218 146 227 218 146 227 218 146
123888 +226 217 137 226 217 137 224 212 126 224 212 126 224 212 126 224 212 126
123889 +154 108 49 57 50 16 57 50 16 57 50 16 57 50 16 47 39 13
123890 +37 31 10 31 27 8 24 21 6 20 17 5 16 14 4 10 9 3
123891 +5 4 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
123892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123944 +0 0 0 0 0 0 1 1 1 4 3 1 7 5 2 13 11 4
123945 +18 15 5 24 21 6 31 27 8 37 31 10 47 39 13 47 39 13
123946 +57 50 16 57 50 16 57 50 17 57 50 16 71 64 51 226 217 137
123947 +114 84 45 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
123948 +57 50 17 57 50 16 57 50 16 57 50 16 57 50 17 57 50 17
123949 +71 53 16 57 50 17 57 50 17 71 53 16 80 59 18 57 50 17
123950 +80 59 18 57 50 17 80 59 18 80 59 18 80 59 18 80 59 18
123951 +80 59 18 90 65 21 90 65 21 90 65 21 90 65 21 97 69 27
123952 +90 65 21 104 73 28 90 65 21 90 65 21 104 73 28 104 73 28
123953 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 117 83 35
123954 +104 73 28 131 88 37 117 83 35 117 83 35 117 83 35 131 88 37
123955 +117 83 35 131 88 37 163 154 123 230 227 201 231 228 207 231 228 207
123956 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
123957 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
123958 +231 228 207 231 228 207 163 154 123 154 97 33 154 97 33 154 97 33
123959 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123960 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123961 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123962 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123963 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123964 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123965 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
123966 +154 97 33 154 97 33 154 108 49 154 108 49 154 97 33 224 212 126
123967 +226 217 137 227 218 146 227 218 146 227 218 146 227 218 146 227 217 139
123968 +226 217 137 226 217 137 226 217 137 224 212 126 224 212 126 224 212 126
123969 +80 59 18 57 50 16 57 50 16 57 50 16 37 31 10 47 39 13
123970 +37 31 10 31 27 8 31 27 8 16 14 4 10 10 10 6 5 1
123971 +3 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
123972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
123999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124024 +0 0 0 0 0 0 0 0 0 3 3 1 6 5 1 10 9 3
124025 +16 14 4 24 21 6 31 27 8 31 27 8 47 39 13 35 34 31
124026 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 163 154 123
124027 +224 212 126 57 50 17 57 50 17 57 50 17 57 50 17 57 50 17
124028 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
124029 +57 50 17 57 50 16 57 50 16 57 50 16 57 50 16 71 53 16
124030 +57 50 17 80 59 18 71 53 16 80 59 18 80 59 18 80 59 18
124031 +80 59 18 80 59 18 80 59 18 90 65 21 90 65 21 90 65 21
124032 +90 65 21 90 65 21 90 65 21 104 73 28 90 65 21 104 73 28
124033 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 117 83 35
124034 +104 73 28 117 83 35 104 73 28 117 83 35 117 83 35 131 88 37
124035 +117 83 35 143 92 37 156 118 66 231 228 207 231 228 207 231 228 207
124036 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
124037 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
124038 +231 228 207 230 227 199 224 212 126 154 97 33 154 97 33 154 97 33
124039 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124040 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124041 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124042 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124043 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124044 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124045 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124046 +154 108 49 154 108 49 154 97 33 154 97 33 224 212 126 227 217 139
124047 +227 218 146 227 219 152 227 218 146 227 218 146 227 218 146 227 217 139
124048 +226 217 137 224 212 126 224 212 126 224 212 126 224 212 126 156 118 66
124049 +57 50 16 57 50 16 57 50 16 57 50 16 47 39 13 47 39 13
124050 +31 27 8 31 27 8 24 21 6 16 14 4 10 9 3 6 5 1
124051 +2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124104 +0 0 0 0 0 0 0 0 0 1 1 1 5 4 1 10 9 3
124105 +15 13 4 20 17 5 27 23 7 31 27 8 37 31 10 47 39 13
124106 +47 39 13 57 50 16 57 50 16 57 50 16 57 50 16 114 84 45
124107 +226 217 137 142 111 68 57 50 16 57 50 17 57 50 17 57 50 16
124108 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
124109 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
124110 +57 50 16 71 53 16 57 50 16 71 53 16 71 53 16 80 59 18
124111 +80 59 18 80 59 18 80 59 18 80 59 18 90 65 21 90 65 21
124112 +90 65 21 90 65 21 90 65 21 90 65 21 90 65 21 90 65 21
124113 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
124114 +104 73 28 117 83 35 117 83 35 131 88 37 117 83 35 131 88 37
124115 +117 83 35 131 88 37 131 88 37 227 222 178 230 227 204 230 227 205
124116 +230 227 205 230 227 205 231 228 207 230 227 205 231 228 207 230 227 205
124117 +231 228 207 231 228 207 231 228 207 231 228 207 231 228 207 231 228 207
124118 +231 228 207 230 227 205 227 222 178 154 97 33 154 97 33 154 97 33
124119 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124120 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124121 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124122 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124123 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124124 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124125 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124126 +154 108 49 154 108 49 154 108 49 154 97 33 224 212 126 227 217 139
124127 +227 219 152 227 218 146 227 218 146 227 218 146 227 217 139 226 217 137
124128 +226 217 137 226 217 137 224 212 126 224 212 126 224 212 126 117 83 35
124129 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 31 27 8
124130 +31 27 8 24 21 6 16 14 4 16 14 4 10 9 3 3 3 1
124131 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124184 +0 0 0 0 0 0 0 0 0 0 0 0 3 3 1 6 5 1
124185 +13 11 4 20 17 5 24 21 6 31 27 8 37 31 10 37 31 10
124186 +47 39 13 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
124187 +176 168 138 224 212 126 63 54 38 57 50 17 57 50 17 57 50 16
124188 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 56 48 15
124189 +56 48 15 55 44 14 56 48 15 51 40 13 56 48 15 57 50 16
124190 +57 50 16 57 50 16 59 49 15 57 50 16 71 53 16 57 50 16
124191 +71 53 16 71 53 16 80 59 18 80 59 18 80 59 18 80 59 18
124192 +80 59 18 90 63 20 90 63 20 90 63 20 90 65 21 90 63 20
124193 +90 63 20 90 63 20 90 63 20 104 73 28 104 73 28 104 73 28
124194 +104 73 28 104 73 28 117 83 35 104 73 28 117 83 35 117 83 35
124195 +131 88 37 131 88 37 131 88 37 185 178 149 230 227 204 230 227 204
124196 +230 227 204 230 227 205 230 227 205 230 227 205 230 227 205 230 227 205
124197 +230 227 205 230 227 205 230 227 205 230 227 205 230 227 205 230 227 205
124198 +230 227 205 230 227 205 230 227 202 154 108 49 154 97 33 154 97 33
124199 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124200 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124201 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124202 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124203 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124204 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124205 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 108 49
124206 +154 108 49 154 108 49 154 97 33 224 212 126 227 218 146 227 219 152
124207 +227 218 146 227 218 146 227 218 146 227 218 146 227 217 139 226 217 137
124208 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 57 50 16
124209 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 37 31 10
124210 +31 27 8 24 21 6 16 14 4 10 9 3 8 7 4 3 3 1
124211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124264 +0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 5 4 1
124265 +10 9 3 15 13 4 24 21 6 27 23 7 37 31 10 37 31 10
124266 +47 39 13 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
124267 +142 111 68 226 217 137 150 141 118 57 50 16 57 50 16 57 50 16
124268 +57 50 16 57 50 16 56 48 15 56 48 15 56 48 15 51 40 13
124269 +51 40 13 51 40 13 51 40 13 47 39 13 46 36 11 50 37 12
124270 +51 40 13 55 43 14 59 45 14 59 49 15 59 45 14 67 48 15
124271 +59 49 15 71 53 16 67 48 15 71 53 16 71 53 16 78 55 17
124272 +78 55 17 78 55 17 80 59 18 90 63 20 90 63 20 90 63 20
124273 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
124274 +104 73 28 104 73 28 131 88 37 104 73 28 131 88 37 131 88 37
124275 +117 83 35 131 88 37 131 88 37 156 118 66 230 227 197 230 227 202
124276 +230 227 202 230 227 202 230 227 204 230 227 204 230 227 204 230 227 204
124277 +230 227 204 230 227 204 230 227 204 230 227 204 230 227 204 230 227 204
124278 +230 227 204 230 227 204 231 228 207 224 212 126 154 97 33 154 97 33
124279 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124280 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124281 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124282 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124283 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124284 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124285 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 108 49
124286 +154 108 49 154 108 49 224 212 126 224 212 126 226 217 137 227 218 146
124287 +227 218 146 227 218 146 227 218 146 227 217 139 226 217 137 226 217 137
124288 +224 212 126 224 212 126 224 212 126 224 212 126 117 83 35 57 50 16
124289 +57 50 16 57 50 16 57 50 16 37 31 10 37 31 10 31 27 8
124290 +31 27 8 24 21 6 16 14 4 10 9 3 5 5 5 3 3 1
124291 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124344 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 1
124345 +8 7 4 13 11 4 20 17 5 24 21 6 31 27 8 37 31 10
124346 +47 39 13 37 31 10 57 50 16 57 50 16 57 50 16 57 50 16
124347 +47 39 13 224 212 126 226 217 137 100 76 42 57 50 16 57 50 16
124348 +57 50 16 56 48 15 56 48 15 56 48 15 55 44 14 55 44 14
124349 +51 40 13 51 40 13 50 37 12 46 36 11 46 36 11 43 33 10
124350 +46 36 11 49 31 9 50 37 12 57 34 10 58 38 12 60 42 13
124351 +60 42 13 60 42 13 68 47 15 68 47 15 68 47 15 75 50 15
124352 +75 50 15 75 50 15 75 50 15 75 50 15 78 55 17 75 50 15
124353 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
124354 +104 73 28 104 73 28 104 73 28 104 73 28 117 83 35 104 73 28
124355 +131 88 37 117 83 35 131 88 37 143 92 37 229 225 190 230 227 202
124356 +230 227 202 230 227 202 230 227 202 230 227 202 230 227 202 230 227 202
124357 +230 227 202 230 227 202 230 227 202 230 227 202 230 227 202 230 227 202
124358 +230 227 202 230 227 205 229 224 185 216 206 146 154 97 33 154 97 33
124359 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124360 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124361 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124362 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124363 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124364 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124365 +154 97 33 154 97 33 154 97 33 154 108 49 154 108 49 154 108 49
124366 +154 97 33 154 97 33 224 212 126 227 217 139 227 218 146 227 218 146
124367 +227 218 146 227 218 146 227 217 139 226 217 137 226 217 137 224 212 126
124368 +224 212 126 224 212 126 224 212 126 224 212 126 57 50 16 57 50 16
124369 +57 50 16 57 50 16 47 39 13 47 39 13 37 31 10 31 27 8
124370 +24 21 6 16 14 4 10 9 3 10 9 3 3 3 1 1 1 1
124371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 1
124425 +6 5 1 10 9 3 16 14 4 24 21 6 31 27 8 31 27 8
124426 +47 39 13 35 34 31 57 50 16 57 50 16 57 50 16 57 50 16
124427 +57 50 16 100 76 42 226 217 137 224 212 126 57 50 17 57 50 17
124428 +57 50 16 56 48 15 56 48 15 47 39 13 56 48 15 47 39 13
124429 +51 40 13 47 39 13 46 36 11 44 35 11 43 33 10 41 32 10
124430 +38 27 8 38 27 8 48 30 8 49 31 9 49 31 9 50 37 12
124431 +57 34 10 58 38 12 62 38 11 62 38 11 62 38 11 62 38 11
124432 +68 47 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
124433 +75 50 15 75 50 15 90 63 20 90 63 20 90 63 20 90 63 20
124434 +90 63 20 104 73 28 104 73 28 131 88 37 104 73 28 143 92 37
124435 +117 83 35 131 88 37 131 88 37 131 88 37 176 168 138 230 227 197
124436 +230 227 201 230 227 201 230 227 201 230 227 201 230 227 201 230 227 201
124437 +230 227 202 230 227 202 230 227 202 230 227 202 230 227 202 230 227 201
124438 +230 227 201 230 227 201 230 227 202 229 225 190 154 97 33 154 97 33
124439 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124440 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124441 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124442 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124443 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124444 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124445 +154 97 33 154 97 33 154 97 33 154 108 49 224 212 126 154 97 33
124446 +154 108 49 224 212 126 224 212 126 227 217 139 227 218 146 227 218 146
124447 +227 218 146 227 218 146 227 217 139 227 217 139 226 217 137 226 217 137
124448 +224 212 126 224 212 126 224 212 126 104 73 28 57 50 16 57 50 16
124449 +57 50 16 57 50 16 37 31 10 37 31 10 37 31 10 31 27 8
124450 +24 21 6 16 14 4 10 9 3 8 7 4 3 3 1 1 1 1
124451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
124505 +5 4 1 10 9 3 16 14 4 20 17 5 24 21 6 31 27 8
124506 +37 31 10 37 31 10 47 39 13 57 50 16 57 50 16 57 50 16
124507 +57 50 16 57 50 16 176 168 138 226 217 137 138 129 110 57 50 17
124508 +57 50 16 56 48 15 56 48 15 56 48 15 56 48 15 51 40 13
124509 +51 40 13 46 36 11 44 35 11 41 32 10 41 32 10 38 27 8
124510 +48 30 8 38 27 8 38 27 8 38 27 8 48 30 8 49 31 9
124511 +49 31 9 56 33 8 57 34 10 56 33 8 62 38 11 62 38 11
124512 +62 38 11 62 38 11 62 38 11 75 50 15 75 50 15 75 50 15
124513 +75 50 15 75 50 15 75 50 15 75 50 15 90 63 20 90 63 20
124514 +90 63 20 104 73 28 104 73 28 104 73 28 117 83 35 104 73 28
124515 +117 83 35 131 88 37 131 88 37 154 97 33 156 118 66 230 227 197
124516 +230 227 199 230 227 201 230 227 201 230 227 201 230 227 201 230 227 201
124517 +230 227 201 230 227 201 230 227 201 230 227 201 230 227 201 230 227 201
124518 +230 227 201 230 227 201 230 227 201 230 227 199 156 118 66 154 97 33
124519 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124520 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124521 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124522 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124523 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124524 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124525 +154 97 33 154 108 49 154 108 49 154 97 33 154 97 33 154 97 33
124526 +154 108 49 224 212 126 227 217 139 227 218 146 227 218 146 227 218 146
124527 +227 218 146 227 217 139 227 217 139 226 217 137 224 212 126 224 212 126
124528 +224 212 126 224 212 126 224 212 126 57 50 16 57 50 16 57 50 16
124529 +57 50 16 47 39 13 47 39 13 37 31 10 31 27 8 24 21 6
124530 +16 14 4 15 13 4 10 9 3 3 3 1 1 1 1 0 0 0
124531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124585 +3 3 1 8 7 4 10 9 3 16 14 4 24 21 6 31 27 8
124586 +37 31 10 47 39 13 47 39 13 57 50 16 57 50 16 57 50 16
124587 +57 50 16 57 50 16 110 81 38 226 217 137 226 217 137 114 84 45
124588 +57 50 17 57 50 16 57 50 16 56 48 15 47 39 13 55 44 14
124589 +47 39 13 47 39 13 44 35 11 43 33 10 38 29 9 38 27 8
124590 +36 23 7 38 27 8 38 21 5 38 21 5 38 21 5 48 30 8
124591 +48 30 8 48 30 8 48 30 8 56 33 8 56 33 8 56 33 8
124592 +62 38 11 62 38 11 62 38 11 62 38 11 62 38 11 75 50 15
124593 +62 38 11 75 50 15 75 50 15 75 50 15 75 50 15 90 63 20
124594 +90 63 20 90 63 20 104 73 28 104 73 28 104 73 28 143 92 37
124595 +117 83 35 131 88 37 131 88 37 131 88 37 154 97 33 227 222 178
124596 +230 227 199 230 227 197 230 227 199 230 227 199 230 227 199 230 227 199
124597 +230 227 199 230 227 199 230 227 199 230 227 199 230 227 199 230 227 199
124598 +230 227 199 230 227 199 230 227 199 230 227 197 224 212 126 154 97 33
124599 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124600 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124601 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124602 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124603 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124604 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124605 +154 108 49 154 108 49 224 212 126 154 97 33 154 108 49 154 108 49
124606 +224 212 126 227 217 139 227 218 146 227 218 146 227 218 146 227 218 146
124607 +227 217 139 227 217 139 227 217 139 226 217 137 224 212 126 224 212 126
124608 +224 212 126 224 212 126 90 65 21 57 50 16 57 50 16 57 50 16
124609 +57 50 16 37 31 10 37 31 10 37 31 10 31 27 8 24 21 6
124610 +13 13 13 10 9 3 8 7 4 3 3 1 1 1 1 0 0 0
124611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
124665 +1 1 1 6 5 1 7 7 7 16 14 4 20 17 5 24 21 6
124666 +31 27 8 31 27 8 47 39 13 37 31 10 57 50 16 57 50 16
124667 +57 50 16 57 50 16 57 50 16 163 154 123 226 217 139 224 214 136
124668 +75 62 40 57 50 17 57 50 17 56 48 15 56 48 15 55 44 14
124669 +51 40 13 50 37 12 46 36 11 43 33 10 48 30 8 38 27 8
124670 +38 27 8 36 23 7 38 21 5 38 21 5 38 21 5 38 21 5
124671 +38 21 5 48 30 8 48 30 8 48 30 8 56 33 8 56 33 8
124672 +56 33 8 56 33 8 62 38 11 62 38 11 62 38 11 62 38 11
124673 +75 50 15 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
124674 +90 63 20 90 63 20 104 73 28 104 73 28 104 73 28 104 73 28
124675 +131 88 37 117 83 35 131 88 37 131 88 37 143 92 37 176 168 138
124676 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
124677 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
124678 +230 227 197 230 227 197 230 227 197 230 227 197 227 221 169 154 97 33
124679 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124680 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124681 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124682 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124683 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124684 +154 97 33 154 97 33 154 97 33 154 97 33 154 108 49 154 108 49
124685 +154 108 49 154 97 33 154 97 33 154 97 33 154 97 33 224 212 126
124686 +227 217 139 227 218 146 227 219 152 227 218 146 227 218 146 227 218 146
124687 +227 217 139 226 217 137 226 217 137 224 212 126 224 212 126 224 212 126
124688 +224 212 126 156 118 66 57 50 16 57 50 16 57 50 16 57 50 16
124689 +47 39 13 47 39 13 37 31 10 31 27 8 24 21 6 20 17 5
124690 +16 14 4 10 9 3 6 5 1 1 1 1 0 0 0 0 0 0
124691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124745 +0 0 0 3 3 1 6 5 1 13 11 4 16 14 4 24 21 6
124746 +31 27 8 37 31 10 37 31 10 47 39 13 57 50 16 57 50 16
124747 +57 50 16 57 50 16 57 50 16 90 68 33 224 212 126 226 217 139
124748 +176 168 138 71 53 16 57 50 16 57 50 17 57 50 17 56 48 15
124749 +55 44 14 51 40 13 50 37 12 46 36 11 43 33 10 41 32 10
124750 +38 27 8 38 27 8 38 21 5 38 21 5 38 21 5 38 21 5
124751 +38 21 5 38 21 5 48 30 8 48 30 8 48 30 8 56 33 8
124752 +56 33 8 56 33 8 56 33 8 62 38 11 62 38 11 62 38 11
124753 +62 38 11 62 38 11 62 38 11 75 50 15 75 50 15 75 50 15
124754 +90 63 20 90 63 20 90 63 20 104 73 28 104 73 28 131 88 37
124755 +104 73 28 154 97 33 117 83 35 131 88 37 131 88 37 154 108 49
124756 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
124757 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
124758 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 156 118 66
124759 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124760 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124761 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124762 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124763 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124764 +154 97 33 154 97 33 154 108 49 154 108 49 154 108 49 224 212 126
124765 +154 97 33 154 108 49 154 108 49 154 108 49 224 212 126 224 212 126
124766 +227 217 139 227 218 146 227 218 146 227 218 146 227 218 146 227 217 139
124767 +227 217 139 227 217 139 224 212 126 224 212 126 224 212 126 224 212 126
124768 +224 212 126 90 65 21 57 50 16 57 50 16 57 50 16 47 39 13
124769 +47 39 13 37 31 10 31 27 8 31 27 8 24 21 6 16 14 4
124770 +15 13 4 8 7 4 3 3 1 3 3 1 0 0 0 0 0 0
124771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124825 +1 1 1 3 3 1 6 5 1 10 9 3 11 11 11 24 21 6
124826 +24 21 6 31 27 8 37 31 10 37 31 10 35 34 31 57 50 16
124827 +57 50 16 57 50 16 57 50 16 57 50 16 149 122 79 226 217 137
124828 +226 217 137 150 141 118 57 50 17 71 53 16 59 49 15 59 49 15
124829 +58 46 15 55 44 14 55 43 14 51 40 13 50 37 12 49 31 9
124830 +43 33 10 48 30 8 48 30 8 38 27 8 38 21 5 38 21 5
124831 +38 21 5 38 21 5 48 30 8 38 21 5 48 30 8 38 21 5
124832 +56 33 8 56 33 8 56 33 8 56 33 8 62 38 11 62 38 11
124833 +62 38 11 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
124834 +75 50 15 90 63 20 90 63 20 104 73 28 104 73 28 104 73 28
124835 +117 83 35 117 83 35 131 88 37 131 88 37 143 92 37 143 92 37
124836 +227 221 169 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
124837 +230 227 197 230 227 197 230 227 197 230 227 197 230 227 197 230 227 197
124838 +230 227 197 229 225 190 230 227 197 230 227 197 228 223 179 224 212 126
124839 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124840 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124841 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124842 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124843 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124844 +154 108 49 154 108 49 154 108 49 154 108 49 154 97 33 154 97 33
124845 +154 108 49 154 97 33 224 212 126 154 108 49 224 212 126 227 217 139
124846 +227 218 146 227 218 146 227 218 146 227 218 146 227 217 139 227 217 139
124847 +226 217 137 226 217 137 224 212 126 224 212 126 224 212 126 224 212 126
124848 +154 97 33 57 50 16 57 50 16 57 50 16 57 50 16 47 39 13
124849 +47 39 13 37 31 10 31 27 8 24 21 6 16 14 4 15 13 4
124850 +10 9 3 6 5 1 1 1 1 0 0 0 0 0 0 0 0 0
124851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124905 +0 0 0 0 0 0 3 3 1 6 5 1 15 13 4 16 14 4
124906 +24 21 6 31 27 8 31 27 8 47 39 13 47 39 13 47 39 13
124907 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 176 168 138
124908 +224 212 126 226 217 137 142 111 68 57 50 16 71 53 16 57 50 17
124909 +71 53 16 57 50 17 59 45 14 55 43 14 51 40 13 50 37 12
124910 +46 36 11 48 30 8 48 30 8 48 30 8 48 30 8 38 21 5
124911 +48 30 8 38 21 5 48 30 8 48 30 8 48 30 8 56 33 8
124912 +56 33 8 56 33 8 56 33 8 56 33 8 56 33 8 62 38 11
124913 +62 38 11 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
124914 +90 63 20 90 63 20 90 63 20 104 73 28 104 73 28 143 92 37
124915 +104 73 28 143 92 37 117 83 35 154 97 33 117 83 35 154 97 33
124916 +163 154 123 229 224 185 229 226 192 230 227 197 229 225 190 229 225 190
124917 +230 227 197 229 225 190 229 225 190 230 227 197 229 225 190 229 225 190
124918 +230 227 197 229 225 190 230 227 197 229 225 190 229 225 190 216 206 146
124919 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124920 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124921 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124922 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
124923 +154 97 33 154 97 33 154 108 49 154 108 49 154 108 49 154 108 49
124924 +224 212 126 154 97 33 154 108 49 224 212 126 154 97 33 154 108 49
124925 +154 108 49 154 108 49 154 97 33 224 212 126 226 217 137 227 217 139
124926 +227 219 152 227 218 146 227 218 146 227 217 139 227 217 139 227 217 139
124927 +226 217 137 224 212 126 224 212 126 224 212 126 224 212 126 156 118 66
124928 +90 65 21 57 50 16 57 50 16 57 50 16 47 39 13 47 39 13
124929 +37 31 10 31 27 8 31 27 8 24 21 6 16 14 4 15 13 4
124930 +8 7 4 3 3 1 3 3 1 0 0 0 0 0 0 0 0 0
124931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
124985 +0 0 0 1 1 1 3 3 1 6 5 1 10 9 3 16 14 4
124986 +16 14 4 24 21 6 31 27 8 31 27 8 47 39 13 37 31 10
124987 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 91 66 24
124988 +226 217 137 226 217 137 226 217 137 135 101 60 57 50 17 71 53 16
124989 +67 48 15 59 49 15 59 49 15 59 45 14 55 44 14 57 41 13
124990 +51 40 13 50 37 12 49 31 9 48 30 8 48 30 8 48 30 8
124991 +48 30 8 38 21 5 48 30 8 38 21 5 56 33 8 38 21 5
124992 +56 33 8 56 33 8 56 33 8 56 33 8 62 38 11 62 38 11
124993 +62 38 11 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
124994 +90 63 20 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
124995 +131 88 37 104 73 28 131 88 37 131 88 37 131 88 37 131 88 37
124996 +154 108 49 229 225 190 229 226 192 229 226 192 229 225 190 230 227 197
124997 +229 225 190 229 225 190 230 227 197 229 225 190 230 227 197 229 225 190
124998 +230 227 197 229 225 190 229 225 190 230 227 197 229 225 190 228 223 179
124999 +156 118 66 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125000 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125001 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125002 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125003 +154 108 49 154 97 33 154 97 33 224 212 126 154 108 49 154 97 33
125004 +154 97 33 154 108 49 154 97 33 154 97 33 154 97 33 224 212 126
125005 +154 108 49 154 108 49 224 212 126 227 217 139 227 218 146 227 218 146
125006 +227 218 146 227 218 146 227 218 146 227 217 139 227 217 139 226 217 137
125007 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 117 83 35
125008 +57 50 16 57 50 16 57 50 16 57 50 16 47 39 13 47 39 13
125009 +37 31 10 31 27 8 24 21 6 16 14 4 15 13 4 10 9 3
125010 +6 5 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
125011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125065 +0 0 0 0 0 0 1 1 1 3 3 1 5 5 5 10 9 3
125066 +16 14 4 24 21 6 31 27 8 31 27 8 37 31 10 47 39 13
125067 +47 39 13 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
125068 +149 122 79 226 217 137 226 217 139 226 217 139 100 76 42 57 50 17
125069 +71 53 16 71 53 16 71 53 16 59 49 15 59 49 15 59 45 14
125070 +59 45 14 58 38 12 50 37 12 57 34 10 49 31 9 48 30 8
125071 +48 30 8 56 33 8 48 30 8 38 21 5 56 33 8 38 21 5
125072 +56 33 8 56 33 8 56 33 8 56 33 8 62 38 11 62 38 11
125073 +62 38 11 75 50 15 62 38 11 75 50 15 75 50 15 75 50 15
125074 +75 50 15 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
125075 +104 73 28 143 92 37 104 73 28 154 97 33 131 88 37 154 97 33
125076 +131 88 37 216 206 146 229 224 185 229 225 190 229 225 190 229 225 190
125077 +229 225 190 230 227 197 229 225 190 229 225 190 229 225 190 229 225 190
125078 +229 225 190 229 225 190 229 225 190 229 225 190 229 225 190 229 224 185
125079 +224 212 126 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125080 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125081 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125082 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125083 +154 108 49 154 108 49 154 108 49 154 97 33 154 97 33 154 108 49
125084 +224 212 126 154 97 33 154 108 49 154 108 49 154 108 49 154 97 33
125085 +154 108 49 224 212 126 226 217 137 227 217 139 227 219 152 227 218 146
125086 +227 218 146 227 217 139 227 217 139 227 217 139 227 217 139 224 212 126
125087 +224 212 126 224 212 126 224 212 126 224 212 126 154 97 33 57 50 16
125088 +57 50 16 57 50 16 57 50 16 47 39 13 37 31 10 37 31 10
125089 +31 27 8 31 27 8 24 21 6 16 14 4 15 13 4 8 7 4
125090 +3 3 1 3 3 1 0 0 0 0 0 0 0 0 0 0 0 0
125091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125145 +0 0 0 0 0 0 1 1 1 3 3 1 6 5 1 10 9 3
125146 +16 14 4 16 14 4 24 21 6 31 27 8 37 31 10 37 31 10
125147 +35 34 31 47 39 13 57 50 16 57 50 16 57 50 16 57 50 16
125148 +57 50 16 163 154 123 226 217 137 226 218 148 226 217 139 100 76 42
125149 +71 53 16 57 50 17 71 53 16 71 53 16 67 48 15 67 48 15
125150 +59 49 15 59 45 14 60 42 13 57 41 13 57 34 10 56 33 8
125151 +56 33 8 48 30 8 56 33 8 56 33 8 56 33 8 56 33 8
125152 +56 33 8 56 33 8 56 33 8 62 38 11 62 38 11 62 38 11
125153 +75 50 15 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
125154 +90 63 20 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
125155 +131 88 37 104 73 28 131 88 37 117 83 35 131 88 37 131 88 37
125156 +154 97 33 156 118 66 229 225 190 229 225 190 229 225 190 229 225 190
125157 +229 225 190 229 225 190 229 225 190 229 225 190 229 225 190 229 225 190
125158 +229 225 190 229 225 190 229 225 190 229 225 190 229 224 185 228 223 179
125159 +224 212 126 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125160 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125161 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125162 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125163 +224 212 126 154 108 49 154 108 49 154 97 33 224 212 126 154 97 33
125164 +154 97 33 154 108 49 154 97 33 224 212 126 154 108 49 154 97 33
125165 +224 212 126 227 217 139 227 217 139 227 218 146 227 218 146 227 218 146
125166 +227 218 146 227 217 139 227 217 139 226 217 137 226 217 137 224 212 126
125167 +224 212 126 224 212 126 224 212 126 156 118 66 57 50 16 57 50 16
125168 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 31 27 8
125169 +31 27 8 24 21 6 16 14 4 10 9 3 10 9 3 3 3 1
125170 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125225 +0 0 0 0 0 0 0 0 0 0 0 0 3 3 1 4 4 4
125226 +10 9 3 16 14 4 20 17 5 24 21 6 31 27 8 37 31 10
125227 +47 39 13 47 39 13 57 50 16 57 50 16 57 50 16 57 50 16
125228 +57 50 16 90 65 21 224 212 126 226 217 137 226 217 139 216 206 146
125229 +90 68 33 80 59 18 71 53 16 71 53 16 71 53 16 57 50 17
125230 +67 48 15 67 48 15 59 45 14 59 45 14 58 38 12 58 38 12
125231 +57 34 10 57 34 10 56 33 8 56 33 8 38 21 5 56 33 8
125232 +56 33 8 56 33 8 56 33 8 56 33 8 62 38 11 62 38 11
125233 +62 38 11 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
125234 +75 50 15 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
125235 +104 73 28 143 92 37 104 73 28 154 97 33 131 88 37 131 88 37
125236 +143 92 37 154 97 33 227 221 169 229 225 190 229 225 190 229 225 190
125237 +229 225 190 229 225 190 229 224 185 229 225 190 229 224 185 229 225 190
125238 +229 224 185 229 224 185 229 225 190 229 224 185 229 224 185 229 224 185
125239 +229 224 185 154 108 49 154 97 33 154 97 33 154 97 33 154 97 33
125240 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125241 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125242 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125243 +154 97 33 154 97 33 154 108 49 154 108 49 154 97 33 154 97 33
125244 +224 212 126 154 97 33 154 108 49 154 97 33 154 108 49 224 212 126
125245 +224 212 126 227 217 139 227 218 146 227 218 146 227 218 146 227 218 146
125246 +227 217 139 227 217 139 227 217 139 226 217 137 224 212 126 224 212 126
125247 +224 212 126 224 212 126 224 212 126 104 73 28 57 50 16 57 50 16
125248 +57 50 16 57 50 16 37 31 10 37 31 10 31 27 8 31 27 8
125249 +24 21 6 24 21 6 16 14 4 15 13 4 8 7 4 3 3 1
125250 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
125251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125305 +0 0 0 0 0 0 0 0 0 0 0 0 3 3 1 6 5 1
125306 +10 9 3 15 13 4 16 14 4 24 21 6 31 27 8 31 27 8
125307 +37 31 10 47 39 13 37 31 10 57 50 16 57 50 16 57 50 16
125308 +57 50 16 57 50 16 90 68 33 224 214 136 226 217 139 226 217 137
125309 +224 214 136 100 76 42 70 58 37 80 59 18 71 53 16 71 53 16
125310 +71 53 16 71 53 16 67 48 15 67 48 15 67 48 15 60 42 13
125311 +62 38 11 62 38 11 57 34 10 62 38 11 56 33 8 56 33 8
125312 +56 33 8 56 33 8 56 33 8 62 38 11 62 38 11 62 38 11
125313 +62 38 11 62 38 11 62 38 11 75 50 15 75 50 15 75 50 15
125314 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
125315 +104 73 28 104 73 28 131 88 37 117 83 35 131 88 37 131 88 37
125316 +131 88 37 154 97 33 163 154 123 229 224 185 229 224 185 229 224 185
125317 +229 224 185 229 224 185 229 224 185 229 225 190 229 224 185 229 225 190
125318 +229 224 185 229 225 190 229 224 185 229 225 190 229 224 185 229 224 185
125319 +227 220 160 224 212 126 154 97 33 154 97 33 154 97 33 154 97 33
125320 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125321 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125322 +154 97 33 154 97 33 154 97 33 154 108 49 154 108 49 154 108 49
125323 +154 108 49 154 108 49 154 97 33 224 212 126 154 108 49 154 108 49
125324 +154 97 33 154 108 49 154 108 49 154 97 33 224 212 126 226 217 137
125325 +227 217 139 227 218 146 227 218 146 227 218 146 227 218 146 227 217 139
125326 +227 217 139 227 217 139 226 217 137 224 212 126 224 212 126 224 212 126
125327 +224 212 126 224 212 126 117 83 35 57 50 16 57 50 16 57 50 16
125328 +57 50 16 47 39 13 47 39 13 47 39 13 31 27 8 31 27 8
125329 +24 21 6 16 14 4 10 9 3 8 7 4 3 3 1 1 1 1
125330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
125386 +3 3 1 10 9 3 15 13 4 16 14 4 24 21 6 31 27 8
125387 +31 27 8 37 31 10 47 39 13 57 50 16 57 50 16 57 50 16
125388 +57 50 16 57 50 16 57 50 17 142 111 68 226 217 137 226 217 139
125389 +226 217 139 224 214 136 100 76 42 80 59 18 71 53 16 80 59 18
125390 +71 53 16 71 53 16 71 53 16 71 51 16 67 48 15 68 47 15
125391 +68 47 15 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
125392 +62 38 11 56 33 8 62 38 11 62 38 11 62 38 11 62 38 11
125393 +62 38 11 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
125394 +75 50 15 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
125395 +104 73 28 143 92 37 104 73 28 131 88 37 131 88 37 154 97 33
125396 +131 88 37 131 88 37 154 97 33 227 221 169 229 225 190 229 224 185
125397 +229 224 185 229 225 190 229 224 185 229 224 185 229 224 185 229 224 185
125398 +229 224 185 229 224 185 229 224 185 229 224 185 229 224 185 229 224 185
125399 +229 224 185 224 212 126 154 97 33 154 97 33 154 97 33 154 97 33
125400 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125401 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125402 +154 97 33 154 97 33 154 97 33 154 108 49 154 108 49 224 212 126
125403 +154 97 33 154 108 49 154 108 49 154 97 33 154 108 49 224 212 126
125404 +154 97 33 154 108 49 224 212 126 224 212 126 224 212 126 226 217 137
125405 +227 217 139 227 218 146 227 218 146 227 218 146 227 217 139 227 217 139
125406 +227 217 139 226 217 137 224 212 126 224 212 126 224 212 126 224 212 126
125407 +224 212 126 154 97 33 57 50 16 57 50 16 57 50 16 57 50 16
125408 +57 50 16 37 31 10 37 31 10 31 27 8 31 27 8 24 21 6
125409 +20 17 5 16 14 4 10 9 3 10 9 3 3 3 1 1 1 1
125410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125465 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
125466 +6 5 1 10 9 3 10 9 3 16 14 4 24 21 6 24 21 6
125467 +31 27 8 37 31 10 37 31 10 47 39 13 47 39 13 57 50 16
125468 +57 50 16 57 50 16 57 50 16 57 50 16 150 141 118 226 217 137
125469 +226 217 139 226 218 148 226 217 139 135 101 60 70 58 37 80 59 18
125470 +80 59 18 71 53 16 79 57 18 71 53 16 71 53 16 71 51 16
125471 +68 47 15 75 50 15 68 47 15 75 50 15 62 38 11 62 38 11
125472 +62 38 11 62 38 11 62 38 11 62 38 11 62 38 11 62 38 11
125473 +75 50 15 62 38 11 75 50 15 75 50 15 75 50 15 75 50 15
125474 +75 50 15 75 50 15 90 63 20 90 63 20 104 73 28 90 63 20
125475 +104 73 28 104 73 28 104 73 28 131 88 37 117 83 35 131 88 37
125476 +131 88 37 154 97 33 154 97 33 185 178 149 229 224 185 229 224 185
125477 +229 224 185 229 224 185 229 224 185 229 224 185 229 224 185 229 224 185
125478 +229 224 185 229 224 185 229 224 185 229 224 185 229 224 185 229 224 185
125479 +229 224 185 227 220 160 156 118 66 154 108 49 154 97 33 154 97 33
125480 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125481 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125482 +154 97 33 154 97 33 154 108 49 154 108 49 154 97 33 154 97 33
125483 +154 108 49 154 108 49 154 97 33 224 212 126 154 97 33 154 97 33
125484 +154 108 49 154 97 33 224 212 126 224 212 126 227 217 139 227 218 146
125485 +227 218 146 227 218 146 227 218 146 227 217 139 227 217 139 227 217 139
125486 +226 217 137 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
125487 +154 108 49 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
125488 +47 39 13 47 39 13 37 31 10 31 27 8 24 21 6 20 17 5
125489 +16 14 4 10 9 3 5 5 5 3 3 1 1 1 1 0 0 0
125490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125546 +1 1 1 3 3 1 8 7 4 10 9 3 16 14 4 24 21 6
125547 +31 27 8 31 27 8 37 31 10 47 39 13 47 39 13 57 50 16
125548 +57 50 16 57 50 16 57 50 16 57 50 16 80 59 18 163 154 123
125549 +226 217 137 226 217 137 226 217 139 226 217 137 142 111 68 71 53 16
125550 +80 59 18 80 59 18 80 59 18 79 57 18 71 53 16 78 55 17
125551 +71 53 16 75 50 15 75 50 15 68 47 15 75 50 15 75 50 15
125552 +62 38 11 75 50 15 62 38 11 75 50 15 62 38 11 75 50 15
125553 +62 38 11 75 50 15 62 38 11 75 50 15 75 50 15 75 50 15
125554 +75 50 15 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
125555 +104 73 28 143 92 37 104 73 28 143 92 37 104 73 28 154 97 33
125556 +131 88 37 131 88 37 154 97 33 154 97 33 228 223 179 229 224 185
125557 +229 224 185 229 224 185 229 224 185 229 224 185 229 224 185 229 224 185
125558 +229 224 185 229 224 185 229 224 185 228 223 179 229 224 185 228 223 179
125559 +229 224 185 228 223 179 224 212 126 154 97 33 154 97 33 154 97 33
125560 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125561 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125562 +154 97 33 154 97 33 154 108 49 154 108 49 154 108 49 154 108 49
125563 +224 212 126 154 97 33 154 108 49 154 97 33 154 108 49 154 108 49
125564 +224 212 126 224 212 126 224 212 126 224 212 126 227 217 139 227 218 146
125565 +227 218 146 227 218 146 227 217 139 227 217 139 227 217 139 227 217 139
125566 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 156 118 66
125567 +117 83 35 57 50 16 57 50 16 57 50 16 57 50 16 47 39 13
125568 +37 31 10 37 31 10 31 27 8 31 27 8 24 21 6 16 14 4
125569 +16 14 4 10 9 3 6 5 1 3 3 1 1 1 1 0 0 0
125570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
125626 +1 1 1 3 3 1 10 9 3 10 9 3 16 14 4 14 14 14
125627 +24 21 6 31 27 8 31 27 8 37 31 10 35 34 31 47 39 13
125628 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
125629 +224 212 126 226 217 137 226 217 139 226 217 139 226 217 137 163 154 123
125630 +75 61 38 80 59 18 80 59 18 80 59 18 80 59 18 79 57 18
125631 +79 57 18 78 55 17 75 50 15 75 50 15 75 50 15 75 50 15
125632 +75 50 15 75 50 15 62 38 11 75 50 15 75 50 15 62 38 11
125633 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
125634 +90 63 20 75 50 15 90 63 20 90 63 20 90 63 20 104 73 28
125635 +90 63 20 104 73 28 104 73 28 104 73 28 131 88 37 131 88 37
125636 +131 88 37 154 97 33 131 88 37 154 97 33 216 206 146 228 223 179
125637 +228 223 179 229 224 185 228 223 179 228 223 179 228 223 179 228 223 179
125638 +228 223 179 228 223 179 228 223 179 229 224 185 228 223 179 228 223 179
125639 +228 223 179 227 221 169 224 212 126 154 97 33 154 108 49 154 97 33
125640 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125641 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125642 +154 97 33 154 97 33 154 108 49 154 97 33 224 212 126 154 97 33
125643 +154 97 33 154 108 49 154 108 49 154 97 33 224 212 126 154 97 33
125644 +224 212 126 224 212 126 227 217 139 227 217 139 227 218 146 227 218 146
125645 +227 218 146 227 217 139 227 217 139 227 217 139 226 217 137 224 212 126
125646 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 90 65 21
125647 +57 50 16 57 50 16 57 50 16 57 50 16 47 39 13 47 39 13
125648 +37 31 10 31 27 8 31 27 8 24 21 6 16 14 4 15 13 4
125649 +10 9 3 3 3 1 3 3 1 0 0 0 0 0 0 0 0 0
125650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125706 +0 0 0 1 1 1 3 3 1 5 5 5 10 9 3 16 14 4
125707 +20 17 5 24 21 6 31 27 8 37 31 10 37 31 10 47 39 13
125708 +57 50 16 57 50 16 57 50 16 57 50 16 80 59 18 57 50 16
125709 +80 59 18 176 168 138 226 217 137 226 217 137 226 217 137 226 217 137
125710 +224 212 126 90 68 33 80 59 18 80 59 18 90 65 21 80 59 18
125711 +80 59 18 80 59 18 79 57 18 78 55 17 75 50 15 75 50 15
125712 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
125713 +75 50 15 75 50 15 75 50 15 75 50 15 75 50 15 75 50 15
125714 +75 50 15 90 63 20 75 50 15 90 63 20 90 63 20 90 63 20
125715 +104 73 28 104 73 28 143 92 37 104 73 28 143 92 37 104 73 28
125716 +154 97 33 117 83 35 154 97 33 131 88 37 154 108 49 228 223 179
125717 +228 223 179 228 223 179 228 223 179 228 223 179 228 223 179 228 223 179
125718 +228 223 179 228 223 179 228 223 179 228 223 179 228 223 179 228 223 179
125719 +228 223 179 228 223 179 227 221 169 224 212 126 154 97 33 154 97 33
125720 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125721 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125722 +154 97 33 154 108 49 154 108 49 154 108 49 154 97 33 154 97 33
125723 +224 212 126 154 97 33 154 108 49 154 108 49 224 212 126 224 212 126
125724 +224 212 126 227 217 139 227 217 139 227 218 146 227 218 146 227 217 139
125725 +227 217 139 227 217 139 227 217 139 226 217 137 226 217 137 224 212 126
125726 +224 212 126 224 212 126 224 212 126 224 212 126 80 59 18 57 50 16
125727 +57 50 16 57 50 16 57 50 16 57 50 16 37 31 10 47 39 13
125728 +31 27 8 31 27 8 24 21 6 24 21 6 16 14 4 15 13 4
125729 +8 7 4 3 3 1 3 3 1 0 0 0 0 0 0 0 0 0
125730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125786 +0 0 0 1 1 1 3 3 1 6 5 1 10 9 3 15 13 4
125787 +16 14 4 24 21 6 31 27 8 31 27 8 37 31 10 37 31 10
125788 +37 31 10 57 50 16 57 50 16 57 50 16 71 53 16 57 50 16
125789 +71 53 16 80 59 18 224 212 126 226 217 137 226 217 137 226 217 139
125790 +224 214 136 224 214 136 135 101 60 90 65 21 80 59 18 80 59 18
125791 +90 65 21 80 59 18 90 63 20 78 55 17 90 63 20 90 63 20
125792 +90 63 20 75 50 15 90 63 20 75 50 15 75 50 15 75 50 15
125793 +75 50 15 75 50 15 75 50 15 75 50 15 90 63 20 75 50 15
125794 +90 63 20 75 50 15 90 63 20 90 63 20 90 63 20 104 73 28
125795 +104 73 28 90 63 20 90 63 20 131 88 37 104 73 28 131 88 37
125796 +131 88 37 131 88 37 131 88 37 154 97 33 154 97 33 216 206 146
125797 +228 223 179 228 223 179 228 223 179 228 223 179 228 223 179 228 223 179
125798 +228 223 179 228 223 179 228 223 179 228 223 179 228 223 179 228 223 179
125799 +227 221 169 228 223 179 227 217 139 224 212 126 154 97 33 154 108 49
125800 +154 108 49 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125801 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125802 +154 108 49 154 108 49 154 97 33 224 212 126 154 108 49 154 97 33
125803 +154 97 33 154 108 49 154 97 33 224 212 126 224 212 126 224 212 126
125804 +227 217 139 227 217 139 227 218 146 227 218 146 227 218 146 227 217 139
125805 +227 217 139 226 217 137 226 217 137 224 212 126 224 212 126 224 212 126
125806 +224 212 126 224 212 126 224 212 126 80 59 18 57 50 16 57 50 16
125807 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 31 27 8
125808 +31 27 8 24 21 6 24 21 6 16 14 4 10 9 3 6 5 1
125809 +3 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
125810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125866 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 1 10 9 3
125867 +10 9 3 16 14 4 24 21 6 24 21 6 31 27 8 37 31 10
125868 +47 39 13 47 39 13 57 50 16 57 50 16 57 50 16 71 53 16
125869 +57 50 16 80 59 18 90 68 33 224 212 126 224 212 126 226 217 139
125870 +226 217 139 226 218 148 226 217 139 150 141 118 91 66 24 90 65 21
125871 +90 65 21 90 65 21 90 63 20 90 63 20 90 63 20 75 50 15
125872 +90 63 20 90 63 20 75 50 15 90 63 20 90 63 20 75 50 15
125873 +90 63 20 75 50 15 90 63 20 75 50 15 90 63 20 90 63 20
125874 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
125875 +104 73 28 104 73 28 143 92 37 90 63 20 154 97 33 104 73 28
125876 +154 97 33 131 88 37 154 97 33 131 88 37 154 97 33 154 108 49
125877 +227 221 169 228 223 179 228 223 179 227 221 169 228 223 179 228 223 179
125878 +228 223 179 227 221 169 228 223 179 227 221 169 228 223 179 227 221 169
125879 +228 223 179 227 221 169 227 221 169 227 217 139 154 97 33 154 97 33
125880 +154 108 49 154 97 33 154 97 33 154 97 33 154 97 33 154 97 33
125881 +154 97 33 154 97 33 154 97 33 154 97 33 154 97 33 154 108 49
125882 +154 108 49 154 108 49 154 108 49 154 97 33 154 97 33 224 212 126
125883 +154 97 33 224 212 126 224 212 126 224 212 126 226 217 137 227 217 139
125884 +227 218 146 227 218 146 227 218 146 227 217 139 227 217 139 227 217 139
125885 +227 217 139 226 217 137 224 212 126 224 212 126 224 212 126 224 212 126
125886 +224 212 126 224 212 126 80 59 18 57 50 16 57 50 16 57 50 16
125887 +57 50 16 57 50 16 37 31 10 37 31 10 31 27 8 31 27 8
125888 +31 27 8 24 21 6 16 14 4 16 14 4 10 9 3 6 5 1
125889 +3 3 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
125890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125946 +0 0 0 0 0 0 1 1 1 1 1 1 3 3 1 6 5 1
125947 +10 9 3 16 14 4 16 14 4 24 21 6 31 27 8 31 27 8
125948 +37 31 10 37 31 10 57 50 16 57 50 16 57 50 16 57 50 16
125949 +80 59 18 57 50 16 57 50 16 90 65 21 176 168 138 226 217 137
125950 +226 217 137 226 217 139 226 217 139 226 217 137 224 212 126 135 101 60
125951 +80 59 18 90 65 21 90 65 21 90 63 20 90 63 20 90 63 20
125952 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
125953 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
125954 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 104 73 28
125955 +104 73 28 104 73 28 90 63 20 131 88 37 104 73 28 117 83 35
125956 +131 88 37 131 88 37 117 83 35 154 97 33 131 88 37 154 97 33
125957 +216 206 146 228 223 179 227 221 169 228 223 179 227 221 169 228 223 179
125958 +227 221 169 228 223 179 227 221 169 228 223 179 227 221 169 228 223 179
125959 +227 221 169 228 223 179 227 221 169 227 217 139 224 212 126 154 108 49
125960 +154 108 49 154 108 49 154 108 49 154 97 33 154 97 33 154 97 33
125961 +154 97 33 154 97 33 154 97 33 154 97 33 154 108 49 154 108 49
125962 +154 97 33 224 212 126 154 108 49 154 108 49 154 97 33 154 97 33
125963 +224 212 126 224 212 126 226 217 137 227 217 139 227 217 139 227 217 139
125964 +227 218 146 227 218 146 227 217 139 227 217 139 227 217 139 227 217 139
125965 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
125966 +156 118 66 80 59 18 57 50 16 57 50 16 57 50 16 57 50 16
125967 +57 50 16 47 39 13 47 39 13 37 31 10 31 27 8 31 27 8
125968 +24 21 6 16 14 4 15 13 4 10 9 3 6 5 1 3 3 1
125969 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
125999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126026 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 1
126027 +5 5 5 10 9 3 15 13 4 16 14 4 24 21 6 31 27 8
126028 +31 27 8 37 31 10 47 39 13 57 50 16 57 50 16 57 50 16
126029 +57 50 16 80 59 18 71 53 16 80 59 18 80 59 18 176 168 138
126030 +224 212 126 226 217 137 226 217 137 226 217 139 226 218 148 226 217 139
126031 +163 154 123 104 73 28 90 65 21 90 65 21 91 66 24 90 63 20
126032 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
126033 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
126034 +90 63 20 90 63 20 90 63 20 90 63 20 104 73 28 104 73 28
126035 +104 73 28 104 73 28 143 92 37 104 73 28 143 92 37 104 73 28
126036 +154 97 33 117 83 35 154 97 33 131 88 37 154 97 33 143 92 37
126037 +154 108 49 227 220 160 228 223 179 227 221 169 228 223 179 227 221 169
126038 +227 221 169 227 221 169 227 221 169 227 221 169 227 221 169 227 221 169
126039 +227 221 169 227 221 169 227 221 169 227 220 160 224 212 126 154 97 33
126040 +154 97 33 154 108 49 154 108 49 154 108 49 154 97 33 154 97 33
126041 +154 97 33 154 97 33 154 108 49 154 108 49 154 108 49 154 108 49
126042 +154 108 49 154 97 33 154 97 33 154 108 49 224 212 126 224 212 126
126043 +224 212 126 224 212 126 227 217 139 227 217 139 227 218 146 227 218 146
126044 +227 218 146 227 217 139 227 217 139 227 217 139 227 217 139 226 217 137
126045 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
126046 +104 73 28 71 53 16 57 50 16 57 50 16 57 50 16 47 39 13
126047 +47 39 13 37 31 10 37 31 10 31 27 8 31 27 8 24 21 6
126048 +20 17 5 16 14 4 10 9 3 10 9 3 3 3 1 3 3 1
126049 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126106 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 1
126107 +3 3 1 10 9 3 10 9 3 13 13 13 16 14 4 24 21 6
126108 +31 27 8 31 27 8 37 31 10 47 39 13 57 50 16 57 50 16
126109 +57 50 16 57 50 16 80 59 18 57 50 16 80 59 18 90 65 21
126110 +163 154 123 226 217 137 226 217 137 226 217 139 226 217 139 226 217 139
126111 +226 217 137 224 214 136 149 122 79 97 69 27 97 69 27 90 63 20
126112 +104 73 28 90 63 20 104 73 28 90 63 20 90 63 20 90 63 20
126113 +90 63 20 90 63 20 90 63 20 90 63 20 90 63 20 90 63 20
126114 +90 63 20 90 63 20 104 73 28 104 73 28 104 73 28 104 73 28
126115 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 131 88 37
126116 +131 88 37 131 88 37 131 88 37 131 88 37 131 88 37 154 97 33
126117 +143 92 37 224 212 126 227 221 169 227 221 169 227 221 169 227 221 169
126118 +227 221 169 227 221 169 227 221 169 227 221 169 227 221 169 227 221 169
126119 +227 221 169 227 221 169 227 221 169 227 220 160 224 212 126 224 212 126
126120 +154 108 49 154 108 49 154 108 49 154 108 49 154 108 49 154 108 49
126121 +154 108 49 154 108 49 154 108 49 154 108 49 154 97 33 224 212 126
126122 +154 108 49 154 108 49 154 108 49 224 212 126 224 212 126 224 212 126
126123 +227 217 139 227 217 139 227 218 146 227 218 146 227 218 146 227 217 139
126124 +227 217 139 227 217 139 227 217 139 226 217 137 224 212 126 224 212 126
126125 +224 212 126 224 212 126 224 212 126 224 212 126 154 108 49 71 53 16
126126 +57 50 16 57 50 16 57 50 16 56 48 15 57 50 16 47 39 13
126127 +47 39 13 37 31 10 31 27 8 31 27 8 24 21 6 16 14 4
126128 +16 14 4 10 9 3 5 5 5 3 3 1 1 1 1 0 0 0
126129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126187 +1 1 1 3 3 1 6 5 1 10 9 3 16 14 4 24 21 6
126188 +24 21 6 31 27 8 31 27 8 37 31 10 47 39 13 57 50 16
126189 +57 50 16 57 50 16 80 59 18 80 59 18 80 59 18 80 59 18
126190 +80 59 18 149 122 79 226 217 137 226 217 137 226 217 137 226 217 139
126191 +226 217 139 226 217 139 227 218 146 224 212 126 142 111 68 90 65 21
126192 +97 69 27 104 73 28 90 63 20 104 73 28 104 73 28 104 73 28
126193 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
126194 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
126195 +104 73 28 143 92 37 104 73 28 154 97 33 104 73 28 154 97 33
126196 +104 73 28 154 97 33 131 88 37 154 97 33 131 88 37 154 97 33
126197 +131 88 37 154 97 33 227 218 153 227 221 169 227 221 169 227 221 169
126198 +227 221 169 227 221 169 227 221 169 227 221 169 227 221 169 227 221 169
126199 +227 220 160 227 221 169 227 220 160 227 221 169 227 218 153 224 212 126
126200 +154 97 33 154 97 33 154 108 49 154 108 49 154 108 49 154 108 49
126201 +154 108 49 154 108 49 154 108 49 154 108 49 154 108 49 154 97 33
126202 +154 108 49 224 212 126 224 212 126 226 217 137 226 217 137 227 217 139
126203 +227 218 146 227 218 146 227 218 146 227 218 146 227 217 139 227 217 139
126204 +227 217 139 227 217 139 226 217 137 224 212 126 224 212 126 224 212 126
126205 +224 212 126 224 212 126 224 212 126 154 108 49 104 73 28 57 50 16
126206 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 37 31 10
126207 +37 31 10 37 31 10 31 27 8 24 21 6 24 21 6 16 14 4
126208 +16 14 4 10 9 3 6 5 1 3 3 1 1 1 1 0 0 0
126209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
126267 +1 1 1 3 3 1 6 5 1 10 9 3 10 9 3 16 14 4
126268 +20 17 5 24 21 6 31 27 8 37 31 10 37 31 10 56 48 15
126269 +57 50 16 57 50 16 57 50 16 57 50 16 80 59 18 57 50 16
126270 +80 59 18 90 65 21 143 106 60 224 212 126 226 217 137 226 217 137
126271 +226 217 139 226 217 139 226 217 139 226 218 148 224 214 136 224 212 126
126272 +154 108 49 90 63 20 104 73 28 90 63 20 104 73 28 90 63 20
126273 +104 73 28 104 73 28 90 63 20 104 73 28 104 73 28 104 73 28
126274 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
126275 +104 73 28 104 73 28 104 73 28 104 73 28 143 92 37 104 73 28
126276 +131 88 37 131 88 37 131 88 37 117 83 35 154 97 33 131 88 37
126277 +154 97 33 154 97 33 163 154 123 227 220 160 227 221 169 227 221 169
126278 +227 220 160 227 221 169 227 220 160 227 221 169 227 220 160 227 221 169
126279 +227 220 160 227 221 169 227 220 160 227 220 160 227 218 146 227 217 139
126280 +154 97 33 154 108 49 154 108 49 154 108 49 154 108 49 154 108 49
126281 +154 97 33 224 212 126 154 108 49 154 108 49 154 97 33 224 212 126
126282 +226 217 137 226 217 137 227 217 139 227 217 139 227 217 139 227 218 146
126283 +227 218 146 227 218 146 227 217 139 227 217 139 227 217 139 227 217 139
126284 +227 217 139 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
126285 +224 212 126 224 212 126 154 97 33 80 59 18 57 50 16 57 50 16
126286 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 37 31 10
126287 +31 27 8 31 27 8 24 21 6 24 21 6 16 14 4 10 9 3
126288 +10 9 3 3 3 1 3 3 1 1 1 1 0 0 0 0 0 0
126289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126347 +0 0 0 1 1 1 3 3 1 3 3 1 10 9 3 10 9 3
126348 +16 14 4 20 17 5 24 21 6 31 27 8 37 31 10 47 39 13
126349 +47 39 13 57 50 16 57 50 16 71 53 16 57 50 16 80 59 18
126350 +80 59 18 80 59 18 80 59 18 110 81 38 224 212 126 224 212 126
126351 +226 217 137 226 217 137 226 217 139 226 217 139 226 217 139 216 206 146
126352 +227 217 139 224 212 126 154 108 49 104 73 28 104 73 28 104 73 28
126353 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
126354 +104 73 28 143 92 37 90 63 20 143 92 37 104 73 28 143 92 37
126355 +104 73 28 143 92 37 104 73 28 154 97 33 104 73 28 154 97 33
126356 +131 88 37 131 88 37 154 97 33 131 88 37 131 88 37 154 97 33
126357 +131 88 37 154 97 33 154 97 33 224 212 126 227 220 160 227 220 160
126358 +227 221 169 227 220 160 227 220 160 227 220 160 227 220 160 227 220 160
126359 +227 220 160 227 220 160 227 220 160 227 220 160 227 220 160 227 219 152
126360 +224 212 126 154 97 33 154 97 33 154 108 49 154 108 49 154 108 49
126361 +154 97 33 154 97 33 154 108 49 224 212 126 224 212 126 224 212 126
126362 +226 217 137 227 217 139 227 217 139 227 218 146 227 218 146 227 218 146
126363 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 226 217 137
126364 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
126365 +224 212 126 104 73 28 57 50 16 57 50 16 57 50 16 57 50 16
126366 +57 50 16 57 50 16 37 31 10 47 39 13 37 31 10 31 27 8
126367 +31 27 8 24 21 6 24 21 6 16 14 4 15 13 4 10 9 3
126368 +6 5 1 3 3 1 1 1 1 1 1 1 0 0 0 0 0 0
126369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126427 +0 0 0 1 1 1 1 1 1 3 3 1 6 5 1 10 9 3
126428 +10 9 3 16 14 4 20 17 5 24 21 6 31 27 8 31 27 8
126429 +47 39 13 57 50 16 57 50 16 57 50 16 57 50 16 80 59 18
126430 +57 50 16 80 59 18 80 59 18 71 53 16 80 59 18 163 154 123
126431 +224 212 126 226 217 137 226 217 137 226 217 139 227 217 139 227 218 146
126432 +227 217 139 216 206 146 227 218 146 224 212 126 156 118 66 143 92 37
126433 +104 73 28 104 73 28 90 63 20 143 92 37 90 63 20 143 92 37
126434 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 104 73 28
126435 +104 73 28 90 63 20 143 92 37 104 73 28 143 92 37 104 73 28
126436 +117 83 35 131 88 37 131 88 37 131 88 37 131 88 37 154 97 33
126437 +131 88 37 154 97 33 154 97 33 156 118 66 227 220 160 227 220 160
126438 +227 220 160 227 220 160 227 220 160 227 220 160 227 220 160 227 220 160
126439 +227 220 160 227 220 160 227 220 160 227 220 160 227 220 160 227 218 146
126440 +226 217 137 154 108 49 154 108 49 154 108 49 154 108 49 154 97 33
126441 +224 212 126 224 212 126 226 217 137 226 217 137 227 217 139 227 217 139
126442 +227 217 139 227 218 146 227 218 146 227 218 146 227 217 139 227 217 139
126443 +227 217 139 227 217 139 227 217 139 227 217 139 224 212 126 224 212 126
126444 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 154 108 49
126445 +80 59 18 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
126446 +47 39 13 47 39 13 47 39 13 37 31 10 31 27 8 31 27 8
126447 +24 21 6 20 17 5 16 14 4 10 9 3 10 9 3 3 3 1
126448 +3 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
126449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126507 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 1 3 3 1
126508 +8 7 4 10 9 3 16 14 4 20 17 5 24 21 6 31 27 8
126509 +31 27 8 47 39 13 56 48 15 57 50 16 57 50 16 80 59 18
126510 +80 59 18 80 59 18 80 59 18 80 59 18 80 59 18 90 65 21
126511 +145 104 53 224 212 126 224 212 126 226 217 137 226 217 137 226 217 137
126512 +227 217 139 227 217 139 227 217 139 227 218 146 227 217 139 226 216 138
126513 +163 154 123 154 97 33 154 97 33 90 63 20 104 73 28 104 73 28
126514 +104 73 28 143 92 37 104 73 28 154 97 33 104 73 28 154 97 33
126515 +104 73 28 154 97 33 104 73 28 143 92 37 104 73 28 154 97 33
126516 +131 88 37 131 88 37 131 88 37 154 97 33 131 88 37 131 88 37
126517 +154 97 33 131 88 37 154 97 33 154 97 33 163 154 123 227 218 146
126518 +227 220 160 227 220 160 227 220 160 227 220 160 227 220 160 227 220 160
126519 +227 220 160 227 219 152 227 220 160 227 219 152 227 219 152 227 219 152
126520 +227 218 146 224 212 126 154 97 33 224 212 126 224 212 126 224 212 126
126521 +224 212 126 224 212 126 226 217 137 227 217 139 227 217 139 227 218 146
126522 +227 218 146 227 218 146 227 217 139 227 217 139 227 217 139 227 217 139
126523 +227 217 139 227 217 139 224 212 126 224 212 126 224 212 126 224 212 126
126524 +224 212 126 224 212 126 224 212 126 224 212 126 154 97 33 80 59 18
126525 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
126526 +47 39 13 37 31 10 37 31 10 31 27 8 31 27 8 24 21 6
126527 +24 21 6 16 14 4 15 13 4 10 9 3 6 5 1 3 3 1
126528 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
126529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126587 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 1
126588 +6 5 1 10 9 3 10 9 3 16 14 4 20 17 5 24 21 6
126589 +27 23 7 31 27 8 37 31 10 57 50 16 57 50 16 57 50 16
126590 +57 50 16 57 50 16 80 59 18 80 59 18 80 59 18 80 59 18
126591 +80 59 18 104 73 28 163 154 123 224 212 126 225 215 136 225 215 136
126592 +226 216 138 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
126593 +227 217 139 227 217 139 224 212 126 176 168 138 154 97 33 154 97 33
126594 +104 73 28 104 73 28 104 73 28 104 73 28 104 73 28 90 63 20
126595 +143 92 37 104 73 28 104 73 28 154 97 33 104 73 28 131 88 37
126596 +131 88 37 131 88 37 131 88 37 131 88 37 131 88 37 131 88 37
126597 +131 88 37 154 97 33 131 88 37 154 97 33 154 97 33 224 212 126
126598 +227 220 160 227 219 152 227 220 160 227 219 152 227 220 160 227 219 152
126599 +227 220 160 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152
126600 +227 218 146 224 212 126 224 212 126 224 212 126 224 212 126 226 217 137
126601 +227 217 139 227 217 139 227 217 139 227 218 146 227 218 146 227 218 146
126602 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
126603 +226 217 137 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
126604 +224 212 126 224 212 126 154 108 49 90 65 21 57 50 16 57 50 16
126605 +57 50 16 57 50 16 57 50 16 57 50 16 47 39 13 47 39 13
126606 +37 31 10 37 31 10 31 27 8 31 27 8 24 21 6 20 17 5
126607 +16 14 4 10 9 3 8 7 4 3 3 1 3 3 1 1 1 1
126608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
126668 +1 1 1 3 3 1 5 5 5 10 9 3 16 14 4 20 17 5
126669 +24 21 6 27 23 7 31 27 8 37 31 10 47 39 13 57 50 16
126670 +57 50 16 80 59 18 57 50 16 80 59 18 80 59 18 90 65 21
126671 +80 59 18 80 59 18 90 65 21 143 100 47 224 212 126 224 212 126
126672 +224 212 126 226 217 137 227 217 139 227 217 139 227 217 139 227 217 139
126673 +227 217 139 227 218 146 227 217 139 227 217 139 227 217 139 226 216 138
126674 +224 212 126 156 118 66 154 97 33 154 97 33 143 92 37 104 73 28
126675 +143 92 37 104 73 28 154 97 33 104 73 28 154 97 33 104 73 28
126676 +154 97 33 117 83 35 143 92 37 131 88 37 154 97 33 131 88 37
126677 +154 97 33 131 88 37 154 97 33 154 97 33 154 97 33 154 97 33
126678 +227 217 139 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152
126679 +227 219 152 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152
126680 +227 218 146 227 218 146 227 217 139 227 217 139 227 217 139 227 217 139
126681 +227 217 139 227 217 139 227 218 146 227 218 146 227 217 139 227 217 139
126682 +227 217 139 227 217 139 227 217 139 227 217 139 226 217 137 224 212 126
126683 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
126684 +224 212 126 154 97 33 80 59 18 80 59 18 57 50 16 57 50 16
126685 +57 50 16 57 50 16 57 50 16 47 39 13 37 31 10 37 31 10
126686 +37 31 10 31 27 8 31 27 8 24 21 6 16 14 4 16 14 4
126687 +10 9 3 10 9 3 6 5 1 3 3 1 1 1 1 1 1 1
126688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126748 +1 1 1 3 3 1 3 3 1 8 7 4 10 9 3 15 13 4
126749 +16 14 4 24 21 6 24 21 6 31 27 8 31 27 8 47 39 13
126750 +57 50 16 57 50 16 57 50 16 80 59 18 80 59 18 80 59 18
126751 +80 59 18 90 65 21 90 65 21 80 59 18 97 69 27 149 122 79
126752 +224 212 126 224 212 126 224 212 126 225 215 136 227 217 139 227 217 139
126753 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 216 206 146
126754 +226 216 138 227 218 153 227 218 153 224 212 126 224 212 126 224 212 126
126755 +156 118 66 154 108 49 154 97 33 154 97 33 104 73 28 131 88 37
126756 +117 83 35 131 88 37 131 88 37 131 88 37 131 88 37 131 88 37
126757 +131 88 37 131 88 37 131 88 37 131 88 37 154 97 33 154 97 33
126758 +156 118 66 227 219 152 227 219 152 227 219 152 227 219 152 227 219 152
126759 +227 219 152 227 218 149 227 219 152 227 218 146 227 219 152 227 218 146
126760 +227 218 146 227 218 146 227 218 146 227 217 139 227 217 139 227 217 139
126761 +227 217 139 227 218 146 227 217 139 227 217 139 227 217 139 227 217 139
126762 +227 217 139 226 217 137 226 217 137 224 212 126 224 212 126 224 212 126
126763 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 154 97 33
126764 +80 59 18 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
126765 +57 50 16 47 39 13 47 39 13 47 39 13 37 31 10 37 31 10
126766 +31 27 8 24 21 6 24 21 6 16 14 4 16 14 4 10 9 3
126767 +10 9 3 3 3 1 3 3 1 1 1 1 0 0 0 0 0 0
126768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126828 +0 0 0 1 1 1 1 1 1 3 3 1 5 5 5 10 9 3
126829 +15 13 4 16 14 4 24 21 6 24 21 6 31 27 8 31 27 8
126830 +37 31 10 47 39 13 57 50 16 57 50 16 80 59 18 80 59 18
126831 +80 59 18 80 59 18 90 65 21 90 65 21 90 65 21 90 65 21
126832 +117 83 35 163 154 123 224 212 126 224 212 126 224 212 126 227 217 139
126833 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
126834 +227 217 139 227 217 139 227 217 139 216 206 146 216 206 146 224 212 126
126835 +227 217 139 227 218 149 227 217 139 224 214 136 224 212 126 224 212 126
126836 +224 212 126 163 154 123 156 118 66 224 212 126 156 118 66 224 212 126
126837 +156 118 66 224 212 126 156 118 66 224 212 126 224 212 126 224 212 126
126838 +227 217 139 227 219 152 227 218 149 227 218 149 227 218 146 227 218 146
126839 +227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146
126840 +227 218 146 227 218 146 227 217 139 227 218 146 227 218 146 227 217 139
126841 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 226 217 137
126842 +226 217 137 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
126843 +224 212 126 224 212 126 224 212 126 154 108 49 117 83 35 80 59 18
126844 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
126845 +47 39 13 47 39 13 37 31 10 37 31 10 31 27 8 31 27 8
126846 +24 21 6 24 21 6 16 14 4 16 14 4 10 9 3 10 9 3
126847 +6 5 1 3 3 1 1 1 1 1 1 1 0 0 0 0 0 0
126848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126908 +0 0 0 0 0 0 1 1 1 3 3 1 3 3 1 4 4 4
126909 +10 9 3 13 11 4 16 14 4 20 17 5 24 21 6 31 27 8
126910 +31 27 8 37 31 10 37 31 10 57 50 16 57 50 16 57 50 16
126911 +80 59 18 80 59 18 80 59 18 90 65 21 90 65 21 90 65 21
126912 +90 65 21 90 63 20 143 92 37 163 154 123 224 212 126 224 212 126
126913 +224 212 126 227 217 139 224 212 126 227 217 139 227 217 139 227 217 139
126914 +227 217 139 227 217 139 227 217 139 227 217 139 226 216 138 227 217 139
126915 +227 218 146 227 217 139 227 218 146 227 218 146 227 218 146 224 214 136
126916 +224 212 126 227 217 139 226 217 137 226 217 137 226 217 137 226 217 137
126917 +226 217 137 226 217 137 226 217 137 224 212 126 224 212 126 224 214 136
126918 +227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 218 146
126919 +227 218 146 227 218 146 227 218 146 227 218 146 227 218 146 227 217 139
126920 +227 218 146 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
126921 +227 217 139 226 217 137 226 217 137 226 217 137 226 217 137 224 212 126
126922 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
126923 +224 212 126 154 108 49 117 83 35 80 59 18 57 50 16 57 50 16
126924 +57 50 16 57 50 16 57 50 16 57 50 16 47 39 13 47 39 13
126925 +47 39 13 37 31 10 37 31 10 31 27 8 31 27 8 24 21 6
126926 +24 21 6 16 14 4 15 13 4 10 9 3 8 7 4 3 3 1
126927 +3 3 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
126928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
126988 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 3 3 1
126989 +4 4 4 8 7 4 10 9 3 16 14 4 20 17 5 24 21 6
126990 +24 21 6 31 27 8 37 31 10 37 31 10 47 39 13 47 39 13
126991 +57 50 16 80 59 18 80 59 18 80 59 18 90 65 21 90 65 21
126992 +90 65 21 90 65 21 90 65 21 104 73 28 143 92 37 163 154 123
126993 +224 212 126 224 212 126 224 212 126 224 212 126 227 217 139 224 212 126
126994 +227 217 139 227 217 139 226 216 138 227 217 139 227 217 139 227 217 139
126995 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
126996 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
126997 +227 217 139 227 218 146 227 218 146 227 218 146 226 218 148 227 218 146
126998 +227 218 146 227 218 146 227 218 146 227 217 139 227 218 146 227 218 146
126999 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
127000 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 226 217 137
127001 +226 217 137 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127002 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 154 108 49
127003 +154 97 33 80 59 18 57 50 16 57 50 16 57 50 16 57 50 16
127004 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 37 31 10
127005 +37 31 10 37 31 10 31 27 8 31 27 8 24 21 6 16 14 4
127006 +16 14 4 15 13 4 10 9 3 8 7 4 6 5 1 3 3 1
127007 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
127008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127068 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
127069 +3 3 1 3 3 1 8 7 4 10 9 3 15 13 4 16 14 4
127070 +24 21 6 24 21 6 31 27 8 31 27 8 37 31 10 37 31 10
127071 +47 39 13 47 39 13 57 50 16 80 59 18 80 59 18 90 65 21
127072 +90 65 21 90 65 21 90 65 21 90 65 21 90 65 21 104 73 28
127073 +154 97 33 156 118 66 224 212 126 224 212 126 224 212 126 224 212 126
127074 +224 212 126 224 212 126 226 216 138 224 212 126 225 215 136 226 216 138
127075 +226 216 138 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
127076 +227 217 139 227 217 139 227 217 139 227 218 146 227 217 139 227 218 146
127077 +227 217 139 227 217 139 226 217 139 226 217 139 226 217 139 227 217 139
127078 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
127079 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
127080 +227 217 139 227 217 139 226 217 137 226 217 137 224 212 126 224 212 126
127081 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127082 +224 212 126 224 212 126 224 212 126 154 108 49 90 65 21 80 59 18
127083 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127084 +57 50 16 47 39 13 47 39 13 47 39 13 37 31 10 37 31 10
127085 +31 27 8 31 27 8 24 21 6 24 21 6 16 14 4 16 14 4
127086 +10 9 3 10 9 3 6 5 1 3 3 1 1 1 1 1 1 1
127087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
127149 +1 1 1 3 3 1 3 3 1 6 5 1 10 9 3 10 9 3
127150 +16 14 4 20 17 5 24 21 6 31 27 8 31 27 8 37 31 10
127151 +37 31 10 37 31 10 47 39 13 47 39 13 57 50 16 57 50 16
127152 +80 59 18 90 65 21 90 65 21 104 73 28 90 65 21 90 65 21
127153 +104 73 28 104 73 28 117 83 35 154 108 49 224 212 126 224 212 126
127154 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127155 +227 217 139 224 212 126 227 217 139 225 215 136 227 217 139 227 217 139
127156 +227 217 139 227 217 139 227 217 139 227 217 139 226 217 137 226 217 137
127157 +226 217 137 226 217 137 226 217 137 226 217 137 227 217 139 226 217 137
127158 +227 217 139 227 217 139 227 217 139 227 217 139 227 217 139 227 217 139
127159 +227 217 139 227 217 139 227 217 139 227 217 139 224 212 126 226 217 137
127160 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127161 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127162 +154 108 49 154 97 33 80 59 18 80 59 18 57 50 16 57 50 16
127163 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127164 +47 39 13 37 31 10 37 31 10 37 31 10 37 31 10 31 27 8
127165 +31 27 8 24 21 6 20 17 5 16 14 4 16 14 4 10 9 3
127166 +10 9 3 6 5 1 3 3 1 1 1 1 1 1 1 0 0 0
127167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127229 +0 0 0 1 1 1 3 3 1 3 3 1 4 4 4 10 9 3
127230 +10 9 3 16 14 4 16 14 4 20 17 5 24 21 6 31 27 8
127231 +31 27 8 37 31 10 37 31 10 37 31 10 47 39 13 47 39 13
127232 +56 48 15 57 50 16 71 53 16 90 65 21 90 65 21 104 73 28
127233 +90 65 21 104 73 28 104 73 28 90 63 20 90 63 20 131 88 37
127234 +154 108 49 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127235 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127236 +226 217 137 224 212 126 226 217 137 226 217 137 226 217 137 226 217 137
127237 +226 217 137 226 217 137 226 217 137 226 217 137 226 217 137 226 217 137
127238 +224 212 126 227 217 139 224 212 126 227 217 139 224 212 126 224 212 126
127239 +226 217 137 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127240 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127241 +224 212 126 224 212 126 224 212 126 156 118 66 154 97 33 90 65 21
127242 +90 65 21 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127243 +57 50 16 57 50 16 57 50 16 57 50 16 47 39 13 37 31 10
127244 +47 39 13 37 31 10 37 31 10 31 27 8 31 27 8 24 21 6
127245 +24 21 6 16 14 4 16 14 4 10 9 3 10 9 3 8 7 4
127246 +3 3 1 3 3 1 1 1 1 0 0 0 0 0 0 0 0 0
127247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127309 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 1 3 3 1
127310 +5 5 5 10 9 3 15 13 4 16 14 4 16 14 4 24 21 6
127311 +24 21 6 31 27 8 31 27 8 37 31 10 37 31 10 47 39 13
127312 +47 39 13 47 39 13 56 48 15 47 39 13 57 50 16 71 53 16
127313 +80 59 18 90 63 20 90 65 21 104 73 28 104 73 28 104 73 28
127314 +104 73 28 104 73 28 131 88 37 154 108 49 163 154 123 224 212 126
127315 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127316 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127317 +224 212 126 224 212 126 226 217 137 224 212 126 224 212 126 224 212 126
127318 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127319 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127320 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127321 +154 108 49 154 97 33 104 73 28 90 65 21 57 50 16 57 50 16
127322 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127323 +57 50 16 57 50 16 47 39 13 37 31 10 47 39 13 37 31 10
127324 +37 31 10 31 27 8 31 27 8 31 27 8 24 21 6 20 17 5
127325 +16 14 4 16 14 4 15 13 4 10 9 3 10 9 3 3 3 1
127326 +3 3 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
127327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127389 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 1
127390 +3 3 1 6 5 1 6 6 6 10 9 3 16 14 4 16 14 4
127391 +20 17 5 24 21 6 31 27 8 31 27 8 37 31 10 31 27 8
127392 +37 31 10 37 31 10 47 39 13 47 39 13 47 39 13 56 48 15
127393 +56 48 15 59 49 15 59 49 15 71 53 16 90 63 20 90 63 20
127394 +90 63 20 104 73 28 104 73 28 104 73 28 131 88 37 131 88 37
127395 +154 97 33 156 118 66 156 118 66 224 212 126 224 212 126 224 212 126
127396 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127397 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127398 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127399 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127400 +224 212 126 224 212 126 154 108 49 154 97 33 90 65 21 80 59 18
127401 +80 59 18 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127402 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127403 +47 39 13 37 31 10 47 39 13 37 31 10 37 31 10 31 27 8
127404 +31 27 8 31 27 8 24 21 6 24 21 6 16 14 4 16 14 4
127405 +10 9 3 10 9 3 8 7 4 3 3 1 3 3 1 1 1 1
127406 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127470 +1 1 1 3 3 1 3 3 1 5 5 5 10 9 3 10 9 3
127471 +16 14 4 16 14 4 20 17 5 24 21 6 31 27 8 31 27 8
127472 +37 31 10 37 31 10 37 31 10 47 39 13 47 39 13 44 35 11
127473 +47 39 13 56 48 15 56 48 15 55 44 14 56 48 15 59 49 15
127474 +67 48 15 69 49 15 75 50 15 80 59 18 80 59 18 90 63 20
127475 +104 73 28 117 83 35 131 88 37 131 88 37 117 83 35 154 97 33
127476 +156 118 66 156 118 66 224 212 126 224 212 126 224 212 126 224 212 126
127477 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127478 +224 212 126 224 212 126 224 212 126 224 212 126 224 212 126 224 212 126
127479 +224 212 126 156 118 66 156 118 66 154 108 49 154 97 33 104 73 28
127480 +71 53 16 57 50 16 71 53 16 57 50 16 57 50 16 57 50 16
127481 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127482 +57 50 16 57 50 16 57 50 16 47 39 13 47 39 13 37 31 10
127483 +37 31 10 37 31 10 37 31 10 31 27 8 31 27 8 31 27 8
127484 +24 21 6 24 21 6 16 14 4 16 14 4 16 14 4 10 9 3
127485 +10 9 3 10 9 3 3 3 1 3 3 1 1 1 1 1 1 1
127486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127550 +1 1 1 1 1 1 3 3 1 6 5 1 6 5 1 10 9 3
127551 +10 9 3 15 13 4 16 14 4 16 14 4 20 17 5 24 21 6
127552 +27 23 7 31 27 8 37 31 10 31 27 8 37 31 10 44 35 11
127553 +44 35 11 44 35 11 47 39 13 47 39 13 51 40 13 55 44 14
127554 +55 44 14 56 48 15 56 48 15 59 49 15 59 49 15 59 49 15
127555 +59 49 15 59 49 15 59 49 15 59 49 15 59 49 15 57 50 16
127556 +80 59 18 80 59 18 69 49 15 62 38 11 59 49 15 59 49 15
127557 +59 49 15 80 59 18 104 73 28 104 73 28 104 73 28 104 73 28
127558 +104 73 28 104 73 28 104 73 28 80 59 18 71 53 16 67 48 15
127559 +71 53 16 90 65 21 80 59 18 80 59 18 57 50 16 57 50 16
127560 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127561 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127562 +57 50 16 47 39 13 47 39 13 37 31 10 47 39 13 37 31 10
127563 +37 31 10 31 27 8 31 27 8 31 27 8 24 21 6 24 21 6
127564 +20 17 5 16 14 4 16 14 4 10 9 3 10 9 3 8 7 4
127565 +3 3 1 3 3 1 1 1 1 1 1 1 0 0 0 0 0 0
127566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127630 +0 0 0 0 0 0 1 1 1 1 1 1 3 3 1 3 3 1
127631 +5 5 5 8 7 4 10 9 3 15 13 4 16 14 4 16 14 4
127632 +24 21 6 24 21 6 24 21 6 31 27 8 31 27 8 37 31 10
127633 +37 31 10 37 31 10 47 39 13 44 35 11 47 39 13 47 39 13
127634 +47 39 13 56 48 15 51 40 13 56 48 15 56 48 15 56 48 15
127635 +56 48 15 56 48 15 59 49 15 59 49 15 59 49 15 57 50 16
127636 +57 50 16 57 50 16 57 50 16 59 49 15 59 49 15 59 49 15
127637 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127638 +57 50 16 57 50 16 57 50 16 57 50 16 59 49 15 57 50 16
127639 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127640 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127641 +57 50 16 57 50 16 57 50 16 57 50 16 47 39 13 37 31 10
127642 +47 39 13 37 31 10 37 31 10 37 31 10 31 27 8 31 27 8
127643 +31 27 8 31 27 8 24 21 6 24 21 6 24 21 6 16 14 4
127644 +16 14 4 16 14 4 10 9 3 10 9 3 6 5 1 3 3 1
127645 +3 3 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
127646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127710 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 3 3 1
127711 +3 3 1 6 5 1 5 5 5 10 9 3 10 9 3 15 13 4
127712 +15 13 4 16 14 4 24 21 6 24 21 6 24 21 6 31 27 8
127713 +31 27 8 37 31 10 37 31 10 37 31 10 37 31 10 44 35 11
127714 +44 35 11 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
127715 +56 48 15 56 48 15 56 48 15 56 48 15 57 50 16 57 50 16
127716 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127717 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127718 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127719 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127720 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127721 +47 39 13 47 39 13 47 39 13 37 31 10 47 39 13 37 31 10
127722 +37 31 10 37 31 10 37 31 10 31 27 8 31 27 8 31 27 8
127723 +24 21 6 24 21 6 24 21 6 16 14 4 16 14 4 15 13 4
127724 +10 9 3 10 9 3 6 5 1 3 3 1 3 3 1 1 1 1
127725 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
127791 +1 1 1 1 1 1 3 3 1 3 3 1 4 4 4 8 7 4
127792 +10 9 3 15 13 4 15 13 4 16 14 4 20 17 5 24 21 6
127793 +24 21 6 27 23 7 31 27 8 31 27 8 37 31 10 37 31 10
127794 +37 31 10 37 31 10 47 39 13 44 35 11 47 39 13 47 39 13
127795 +47 39 13 47 39 13 47 39 13 56 48 15 47 39 13 56 48 15
127796 +56 48 15 56 48 15 56 48 15 56 48 15 57 50 16 57 50 16
127797 +57 50 16 57 50 16 57 50 16 57 50 16 57 50 16 57 50 16
127798 +57 50 16 57 50 16 57 50 16 57 50 16 56 48 15 56 48 15
127799 +57 50 16 56 48 15 57 50 16 57 50 16 56 48 15 56 48 15
127800 +47 39 13 56 48 15 47 39 13 47 39 13 37 31 10 47 39 13
127801 +37 31 10 47 39 13 31 27 8 37 31 10 37 31 10 31 27 8
127802 +31 27 8 31 27 8 31 27 8 24 21 6 24 21 6 24 21 6
127803 +20 17 5 16 14 4 16 14 4 15 13 4 10 9 3 10 9 3
127804 +6 5 1 6 5 1 3 3 1 3 3 1 1 1 1 1 1 1
127805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127871 +0 0 0 1 1 1 1 1 1 3 3 1 3 3 1 3 3 1
127872 +6 5 1 6 6 6 10 9 3 10 9 3 16 14 4 16 14 4
127873 +16 14 4 20 17 5 24 21 6 24 21 6 27 23 7 31 27 8
127874 +31 27 8 31 27 8 37 31 10 37 31 10 37 31 10 37 31 10
127875 +37 31 10 47 39 13 44 35 11 47 39 13 47 39 13 47 39 13
127876 +47 39 13 47 39 13 47 39 13 56 48 15 47 39 13 47 39 13
127877 +56 48 15 47 39 13 56 48 15 57 50 16 47 39 13 56 48 15
127878 +56 48 15 56 48 15 47 39 13 56 48 15 47 39 13 56 48 15
127879 +47 39 13 47 39 13 47 39 13 47 39 13 47 39 13 37 31 10
127880 +47 39 13 47 39 13 37 31 10 47 39 13 37 31 10 37 31 10
127881 +37 31 10 37 31 10 31 27 8 31 27 8 31 27 8 31 27 8
127882 +24 21 6 24 21 6 24 21 6 24 21 6 16 14 4 16 14 4
127883 +16 14 4 10 9 3 10 9 3 8 7 4 6 5 1 3 3 1
127884 +3 3 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
127885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127951 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 3 3 1
127952 +3 3 1 3 3 1 4 4 4 8 7 4 10 9 3 10 9 3
127953 +15 13 4 15 13 4 16 14 4 20 17 5 20 17 5 24 21 6
127954 +24 21 6 27 23 7 31 27 8 31 27 8 31 27 8 37 31 10
127955 +37 31 10 37 31 10 37 31 10 37 31 10 37 31 10 44 35 11
127956 +37 31 10 47 39 13 44 35 11 44 35 11 47 39 13 47 39 13
127957 +47 39 13 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
127958 +37 31 10 47 39 13 47 39 13 47 39 13 47 39 13 47 39 13
127959 +37 31 10 47 39 13 37 31 10 47 39 13 37 31 10 47 39 13
127960 +31 27 8 37 31 10 37 31 10 31 27 8 37 31 10 31 27 8
127961 +31 27 8 31 27 8 24 21 6 31 27 8 24 21 6 24 21 6
127962 +24 21 6 20 17 5 16 14 4 16 14 4 16 14 4 10 9 3
127963 +10 9 3 10 9 3 6 5 1 6 5 1 3 3 1 3 3 1
127964 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
127965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
127999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128032 +1 1 1 3 3 1 3 3 1 3 3 1 6 5 1 5 5 5
128033 +8 7 4 10 9 3 10 9 3 15 13 4 16 14 4 16 14 4
128034 +16 14 4 20 17 5 24 21 6 24 21 6 24 21 6 27 23 7
128035 +27 23 7 31 27 8 31 27 8 37 31 10 31 27 8 37 31 10
128036 +37 31 10 37 31 10 37 31 10 37 31 10 37 31 10 37 31 10
128037 +37 31 10 37 31 10 37 31 10 37 31 10 37 31 10 37 31 10
128038 +47 39 13 37 31 10 37 31 10 37 31 10 37 31 10 37 31 10
128039 +37 31 10 37 31 10 37 31 10 31 27 8 37 31 10 31 27 8
128040 +31 27 8 31 27 8 31 27 8 31 27 8 31 27 8 24 21 6
128041 +24 21 6 24 21 6 24 21 6 20 17 5 16 14 4 16 14 4
128042 +16 14 4 16 14 4 10 9 3 10 9 3 10 9 3 6 5 1
128043 +6 5 1 3 3 1 3 3 1 1 1 1 1 1 1 0 0 0
128044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128098 +0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128099 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128112 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 3 3 1
128113 +3 3 1 6 5 1 6 5 1 8 7 4 10 9 3 10 9 3
128114 +15 13 4 15 13 4 15 13 4 16 14 4 20 17 5 20 17 5
128115 +24 21 6 24 21 6 24 21 6 24 21 6 27 23 7 27 23 7
128116 +31 27 8 27 23 7 31 27 8 31 27 8 31 27 8 31 27 8
128117 +31 27 8 31 27 8 37 31 10 37 31 10 31 27 8 37 31 10
128118 +31 27 8 31 27 8 37 31 10 31 27 8 31 27 8 31 27 8
128119 +31 27 8 31 27 8 31 27 8 31 27 8 31 27 8 24 21 6
128120 +24 21 6 24 21 6 24 21 6 24 21 6 16 14 4 20 17 5
128121 +16 14 4 16 14 4 16 14 4 16 14 4 16 14 4 15 13 4
128122 +10 9 3 10 9 3 10 9 3 6 5 1 6 5 1 3 3 1
128123 +3 3 1 3 3 1 1 1 1 1 1 1 0 0 0 0 0 0
128124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128126 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
128127 +1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
128128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128136 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
128137 +1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
128138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
128177 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128178 +1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2
128179 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128180 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
128181 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
128182 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128183 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128184 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128185 +1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
128186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128187 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
128188 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128189 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128190 +1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
128191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
128192 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128193 +3 3 1 3 3 1 3 3 3 6 5 1 4 4 4 8 7 4
128194 +8 7 4 10 9 3 10 9 3 13 11 4 15 13 4 16 14 4
128195 +16 14 4 16 14 4 20 17 5 20 17 5 20 17 5 20 17 5
128196 +24 21 6 24 21 6 24 21 6 24 21 6 24 21 6 27 23 7
128197 +24 21 6 31 27 8 27 23 7 27 23 7 27 23 7 31 27 8
128198 +27 23 7 31 27 8 27 23 7 27 23 7 27 23 7 27 23 7
128199 +31 27 8 24 21 6 24 21 6 24 21 6 24 21 6 24 21 6
128200 +20 17 5 24 21 6 16 14 4 16 14 4 16 14 4 16 14 4
128201 +16 14 4 16 14 4 10 9 3 10 9 3 10 9 3 10 9 3
128202 +6 5 1 6 5 1 3 3 1 3 3 1 3 3 1 2 2 2
128203 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
128204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128205 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
128206 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
128207 +2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1
128208 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
128209 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
128210 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128211 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
128212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
128213 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128214 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128215 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128216 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
128217 +2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1
128218 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128256 +0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128257 +2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3
128258 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128259 +3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2
128260 +2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1
128261 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
128262 +2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3
128263 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128264 +3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2
128265 +2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1
128266 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
128267 +1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
128268 +2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3
128269 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2
128270 +2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1
128271 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128272 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3
128273 +3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5
128274 +5 5 5 8 7 4 7 7 7 9 8 6 9 8 6 10 9 3
128275 +10 10 10 15 13 4 11 11 11 16 14 4 16 14 4 16 14 4
128276 +16 14 4 16 14 4 20 17 5 14 14 14 20 17 5 20 17 5
128277 +20 17 5 20 17 5 24 21 6 24 21 6 20 17 5 24 21 6
128278 +24 21 6 24 21 6 16 16 16 24 21 6 24 21 6 16 16 16
128279 +24 21 6 16 16 16 20 17 5 14 14 14 16 14 4 13 13 13
128280 +16 14 4 12 12 12 11 11 11 16 14 4 11 11 11 10 9 3
128281 +10 10 10 10 9 3 10 9 3 8 8 8 8 7 4 5 5 5
128282 +5 5 5 4 4 4 3 3 1 3 3 3 2 2 2 2 2 2
128283 +2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1
128284 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
128285 +1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2
128286 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128287 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128288 +3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
128289 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
128290 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
128291 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1
128292 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2
128293 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3
128294 +3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
128295 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3
128296 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128297 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128298 +3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1
128299 +1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
128300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
128336 +1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3
128337 +3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4
128338 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128339 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3
128340 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128341 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128342 +3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4
128343 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128344 +4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3
128345 +3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2
128346 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
128347 +2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3
128348 +3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4
128349 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128350 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128351 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128352 +3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4
128353 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128354 +4 4 4 6 6 6 6 6 6 8 7 4 7 7 7 9 8 6
128355 +8 7 4 8 7 4 8 8 8 10 9 3 9 9 9 10 10 10
128356 +15 13 4 11 11 11 15 13 4 16 14 4 16 14 4 14 14 14
128357 +16 14 4 14 14 14 16 14 4 14 14 14 16 14 4 16 16 16
128358 +16 14 4 14 14 14 20 17 5 16 14 4 14 14 14 16 14 4
128359 +13 13 13 15 13 4 16 14 4 16 14 4 11 11 11 15 13 4
128360 +11 11 11 10 9 3 10 9 3 9 9 9 10 9 3 10 9 3
128361 +10 9 3 7 7 7 6 6 6 5 5 5 4 4 4 4 4 4
128362 +4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3
128363 +3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2
128364 +2 2 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
128365 +2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128366 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128367 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128368 +4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3
128369 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128370 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128371 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128372 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128373 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4
128374 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128375 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128376 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128377 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128378 +4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3
128379 +3 3 3 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1
128380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128415 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2
128416 +2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4
128417 +4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6
128418 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
128419 +6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5
128420 +5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4
128421 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
128422 +4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128423 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
128424 +6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128425 +5 5 5 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3
128426 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128427 +3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5
128428 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128429 +6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128430 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128431 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128432 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128433 +5 5 5 6 6 6 6 6 6 6 6 6 7 7 7 6 6 6
128434 +6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 6 6 6
128435 +6 6 6 7 7 7 9 8 6 7 7 7 10 9 3 8 8 8
128436 +10 9 3 8 8 8 9 9 9 9 9 9 10 10 10 15 13 4
128437 +9 9 9 15 13 4 12 12 12 15 13 4 12 12 12 15 13 4
128438 +12 12 12 15 13 4 12 12 12 12 12 12 16 14 4 12 12 12
128439 +15 13 4 11 11 11 10 10 10 10 10 10 10 9 3 10 10 10
128440 +9 9 9 9 9 9 9 9 9 10 9 3 8 8 8 8 8 8
128441 +7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7
128442 +6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5
128443 +4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3
128444 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
128445 +4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5
128446 +5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6
128447 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
128448 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128449 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128450 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128451 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128452 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128453 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128454 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6
128455 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
128456 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
128457 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
128458 +5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4
128459 +4 4 4 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2
128460 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
128461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128495 +0 0 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3
128496 +3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6
128497 +6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 8 8 8
128498 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128499 +8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7
128500 +7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6
128501 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
128502 +6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 8 8 8
128503 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128504 +8 8 8 8 8 8 7 7 7 7 7 7 7 7 7 6 6 6
128505 +6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5
128506 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128507 +5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6
128508 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 8 8
128509 +8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7
128510 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
128511 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
128512 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
128513 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128514 +8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7
128515 +7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 7 7 7
128516 +8 8 8 7 7 7 9 9 9 10 9 3 8 8 8 9 9 9
128517 +10 9 3 8 8 8 10 10 10 10 10 10 10 10 10 10 10 10
128518 +10 10 10 11 11 11 15 13 4 11 11 11 11 11 11 10 10 10
128519 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9
128520 +8 8 8 9 9 9 8 8 8 9 9 9 8 8 8 8 8 8
128521 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9
128522 +8 8 8 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6
128523 +6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5
128524 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
128525 +5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7
128526 +7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 8 8 8
128527 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128528 +8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 7 7
128529 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
128530 +7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6
128531 +6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7
128532 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
128533 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
128534 +7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8
128535 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128536 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128537 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128538 +7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6
128539 +5 5 5 5 5 5 4 4 4 4 4 4 3 3 3 3 3 3
128540 +2 2 2 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0
128541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
128575 +1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4
128576 +5 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7
128577 +8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 10 10 10
128578 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128579 +10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 9 9 9
128580 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
128581 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
128582 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10
128583 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128584 +10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 8 8 8
128585 +8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7
128586 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
128587 +7 7 7 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128588 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10
128589 +10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9
128590 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
128591 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
128592 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
128593 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128594 +10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9
128595 +9 9 9 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9
128596 +9 9 9 9 9 9 9 9 9 10 10 10 9 9 9 9 9 9
128597 +10 10 10 9 9 9 9 9 9 10 10 10 10 9 3 11 11 11
128598 +9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128599 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128600 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128601 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128602 +10 10 10 9 9 9 9 9 9 9 9 9 9 9 9 8 8 8
128603 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128604 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
128605 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9
128606 +9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10
128607 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128608 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128609 +10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9
128610 +9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8
128611 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
128612 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
128613 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
128614 +9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10
128615 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128616 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128617 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128618 +9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 7 7 7
128619 +7 7 7 6 6 6 6 6 6 5 5 5 5 5 5 4 4 4
128620 +3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1
128621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128654 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
128655 +2 2 2 3 3 3 3 3 3 4 4 4 5 5 5 5 5 5
128656 +6 6 6 7 7 7 7 7 7 8 8 8 9 9 9 9 9 9
128657 +10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 12 12 12
128658 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
128659 +12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11
128660 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128661 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128662 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128663 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
128664 +12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 10 10 10
128665 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128666 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128667 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128668 +10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 12 12 12
128669 +12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11
128670 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128671 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128672 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128673 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
128674 +12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11
128675 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128676 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128677 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128678 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 13 13 13
128679 +13 13 13 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13
128680 +14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
128681 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12 12 12
128682 +12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 10 10 10
128683 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128684 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
128685 +10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11
128686 +11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12
128687 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
128688 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
128689 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11
128690 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128691 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128692 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128693 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
128694 +11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12
128695 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
128696 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
128697 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
128698 +11 11 11 11 11 11 11 11 11 10 10 10 10 10 10 9 9 9
128699 +9 9 9 8 8 8 7 7 7 7 7 7 6 6 6 5 5 5
128700 +5 5 5 4 4 4 3 3 3 3 3 3 2 2 2 1 1 1
128701 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128734 +0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 3 3 3
128735 +3 3 3 4 4 4 4 4 4 5 5 5 6 6 6 7 7 7
128736 +8 8 8 9 9 9 9 9 9 10 10 10 11 11 11 11 11 11
128737 +12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 14 14 14
128738 +14 14 14 14 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128739 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128740 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128741 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
128742 +13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14
128743 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128744 +14 14 14 14 14 14 14 14 14 13 13 13 13 13 13 13 13 13
128745 +13 13 13 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
128746 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
128747 +12 12 12 12 12 12 12 12 12 12 12 12 13 13 13 13 13 13
128748 +13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14
128749 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128750 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128751 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128752 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128753 +14 14 14 14 14 14 14 14 14 15 14 14 15 14 14 15 14 14
128754 +15 14 14 15 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128755 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128756 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128757 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128758 +14 14 14 14 14 14 14 14 14 16 16 16 14 14 14 16 16 16
128759 +16 16 16 16 16 16 14 14 14 16 16 16 16 16 16 16 16 16
128760 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128761 +14 14 14 16 16 16 16 16 16 14 14 14 16 16 16 16 16 16
128762 +14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13
128763 +13 13 13 13 13 13 13 13 13 12 12 12 12 12 12 12 12 12
128764 +12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
128765 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
128766 +13 13 13 14 14 14 14 14 14 14 14 14 14 14 14 15 14 14
128767 +15 14 14 15 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128768 +15 14 14 15 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128769 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128770 +14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
128771 +13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 14 14
128772 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
128773 +14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13
128774 +14 14 14 14 14 14 14 14 14 14 14 14 15 14 14 15 14 14
128775 +15 14 14 15 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128776 +15 14 14 15 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128777 +15 14 14 15 14 14 15 14 14 14 14 14 14 14 14 14 14 14
128778 +13 13 13 13 13 13 13 13 13 12 12 12 12 12 12 11 11 11
128779 +11 11 11 10 10 10 9 9 9 8 8 8 8 8 8 7 7 7
128780 +6 6 6 5 5 5 4 4 4 4 4 4 3 3 3 3 3 3
128781 +2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
128782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128814 +0 0 0 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3
128815 +4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9
128816 +9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 13 13 13
128817 +14 14 14 15 14 14 15 14 14 16 16 16 16 16 16 16 16 16
128818 +16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
128819 +17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128820 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128821 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128822 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128823 +16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
128824 +17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 15 14 14
128825 +15 14 14 15 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128826 +15 14 14 15 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128827 +15 14 14 15 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128828 +15 14 14 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128829 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128830 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128831 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128832 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128833 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
128834 +17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 16 16 16
128835 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128836 +16 16 16 16 16 16 17 17 17 16 16 16 16 16 16 17 17 17
128837 +16 16 16 16 16 16 17 17 17 16 16 16 16 16 16 16 16 16
128838 +17 17 17 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17
128839 +17 17 17 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
128840 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
128841 +18 18 18 18 18 18 17 17 17 17 17 17 17 17 17 17 17 17
128842 +17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 15 14 14
128843 +15 14 14 15 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128844 +15 14 14 15 14 14 15 14 14 15 14 14 15 14 14 15 14 14
128845 +15 14 14 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128846 +16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17
128847 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
128848 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
128849 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 16 16 16
128850 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128851 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128852 +16 16 16 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16
128853 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
128854 +16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17
128855 +17 17 17 17 17 17 18 18 18 18 18 18 18 18 18 18 18 18
128856 +18 18 18 18 18 18 18 18 18 17 17 17 17 17 17 17 17 17
128857 +17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16
128858 +16 16 16 16 16 16 15 14 14 15 14 14 14 14 14 13 13 13
128859 +13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 9 9 9
128860 +8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3
128861 +3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0
128862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128894 +1 1 1 1 1 1 2 2 2 3 3 3 4 4 4 4 4 4
128895 +5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10
128896 +11 11 11 12 12 12 13 13 13 14 14 14 15 14 14 16 16 16
128897 +16 16 16 17 17 17 17 17 17 18 18 18 18 18 18 19 19 19
128898 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128899 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128900 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128901 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128902 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128903 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128904 +19 19 19 19 19 19 18 18 18 18 18 18 18 18 18 18 18 18
128905 +18 18 18 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
128906 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
128907 +17 17 17 17 17 17 17 17 17 17 17 17 18 18 18 18 18 18
128908 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
128909 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128910 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128911 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128912 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128913 +19 19 19 19 19 19 19 19 19 20 20 20 20 20 20 20 20 20
128914 +20 20 20 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128915 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128916 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128917 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128918 +19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20
128919 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128920 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128921 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19 19 19
128922 +19 19 19 19 19 19 18 18 18 18 18 18 18 18 18 18 18 18
128923 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
128924 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
128925 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
128926 +18 18 18 18 18 18 19 19 19 19 19 19 19 19 19 19 19 19
128927 +19 19 19 19 19 19 20 20 20 20 20 20 20 20 20 20 20 20
128928 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128929 +20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19
128930 +19 19 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
128931 +18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 19 19 19
128932 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128933 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
128934 +19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20
128935 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128936 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128937 +20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19
128938 +18 18 18 18 18 18 17 17 17 17 17 17 16 16 16 16 16 16
128939 +15 14 14 14 14 14 13 13 13 12 12 12 11 11 11 10 10 10
128940 +9 9 9 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4
128941 +4 4 4 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0
128942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
128973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
128974 +1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6
128975 +7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12
128976 +13 13 13 14 14 14 15 14 14 16 16 16 17 17 17 18 18 18
128977 +18 18 18 19 19 19 20 20 20 20 20 20 21 21 21 21 21 21
128978 +21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22
128979 +22 22 22 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128980 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128981 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128982 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128983 +21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22
128984 +21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 20 20 20
128985 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128986 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128987 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
128988 +20 20 20 20 20 20 20 20 20 21 21 21 21 21 21 21 21 21
128989 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128990 +21 21 21 21 21 21 21 21 21 22 22 22 22 22 22 22 22 22
128991 +22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21
128992 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128993 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
128994 +22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21
128995 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128996 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128997 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
128998 +21 21 21 22 22 22 22 22 22 22 22 22 22 22 22 24 24 24
128999 +24 24 24 24 24 24 22 22 22 24 24 24 24 24 24 24 24 24
129000 +22 22 22 24 24 24 22 22 22 24 24 24 24 24 24 24 24 24
129001 +22 22 22 24 24 24 24 24 24 22 22 22 22 22 22 22 22 22
129002 +21 21 21 21 21 21 21 21 21 21 21 21 20 20 20 20 20 20
129003 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
129004 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
129005 +20 20 20 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21
129006 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 22 22 22
129007 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
129008 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
129009 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 21 21 21
129010 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
129011 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
129012 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 21 21 21
129013 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
129014 +21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 24 24 24
129015 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129016 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129017 +22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21
129018 +21 21 21 20 20 20 20 20 20 19 19 19 18 18 18 18 18 18
129019 +17 17 17 16 16 16 15 14 14 14 14 14 13 13 13 12 12 12
129020 +11 11 11 10 10 10 9 9 9 8 8 8 7 7 7 6 6 6
129021 +5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 1 1 1
129022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129053 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
129054 +2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7
129055 +8 8 8 9 9 9 10 10 10 12 12 12 13 13 13 14 14 14
129056 +15 14 14 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20
129057 +21 21 21 21 21 21 22 22 22 24 24 24 24 24 24 24 24 24
129058 +24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 25 25 25
129059 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129060 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129061 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129062 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129063 +24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 25 25 25
129064 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129065 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129066 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129067 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129068 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129069 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129070 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129071 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129072 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129073 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129074 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129075 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129076 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129077 +24 24 24 24 24 24 24 24 24 24 24 24 25 25 25 25 25 25
129078 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129079 +24 24 24 25 25 25 26 26 26 26 26 26 25 25 25 26 26 26
129080 +26 26 26 26 26 26 26 26 26 26 26 26 25 25 25 26 26 26
129081 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129082 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129083 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129084 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129085 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129086 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 25 25 25
129087 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129088 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129089 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129090 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129091 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 25 25 25
129092 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129093 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
129094 +24 24 24 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
129095 +25 25 25 25 25 25 26 26 26 26 26 26 26 26 26 26 26 26
129096 +26 26 26 26 26 26 25 25 25 25 25 25 25 25 25 25 25 25
129097 +25 25 25 25 25 25 25 25 25 24 24 24 24 24 24 24 24 24
129098 +24 24 24 24 24 24 22 22 22 21 21 21 21 21 21 20 20 20
129099 +19 19 19 18 18 18 17 17 17 16 16 16 15 14 14 14 14 14
129100 +13 13 13 12 12 12 10 10 10 9 9 9 8 8 8 7 7 7
129101 +6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1
129102 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129133 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2
129134 +3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8
129135 +10 10 10 11 11 11 12 12 12 13 13 13 15 14 14 16 16 16
129136 +17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 22 22 22
129137 +24 24 24 24 24 24 25 25 25 25 25 25 26 26 26 26 26 26
129138 +26 26 26 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129139 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129140 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129141 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129142 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129143 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129144 +27 27 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
129145 +26 26 26 26 26 26 26 26 26 25 25 25 25 25 25 25 25 25
129146 +25 25 25 25 25 25 25 25 25 25 25 25 26 26 26 26 26 26
129147 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
129148 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
129149 +26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27
129150 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129151 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129152 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129153 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129154 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129155 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129156 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129157 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129158 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 28 28 28
129159 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129160 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129161 +28 28 28 28 28 28 28 28 28 28 28 28 27 27 27 27 27 27
129162 +27 27 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
129163 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
129164 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
129165 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
129166 +26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27
129167 +27 27 27 27 27 27 27 27 27 27 27 27 28 28 28 28 28 28
129168 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129169 +28 28 28 28 28 28 27 27 27 27 27 27 27 27 27 27 27 27
129170 +27 27 27 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
129171 +26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27
129172 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129173 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
129174 +27 27 27 27 27 27 27 27 27 27 27 27 28 28 28 28 28 28
129175 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129176 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129177 +28 28 28 27 27 27 27 27 27 27 27 27 26 26 26 26 26 26
129178 +26 26 26 25 25 25 25 25 25 24 24 24 24 24 24 22 22 22
129179 +21 21 21 20 20 20 19 19 19 18 18 18 17 17 17 16 16 16
129180 +15 14 14 13 13 13 12 12 12 11 11 11 10 10 10 8 8 8
129181 +7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2
129182 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129213 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3
129214 +4 4 4 5 5 5 6 6 6 7 7 7 9 9 9 10 10 10
129215 +11 11 11 13 13 13 14 14 14 15 14 14 16 16 16 18 18 18
129216 +19 19 19 20 20 20 21 21 21 22 22 22 24 24 24 25 25 25
129217 +25 25 25 26 26 26 27 27 27 28 28 28 28 28 28 30 30 30
129218 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129219 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129220 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129221 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129222 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129223 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129224 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 28 28 28
129225 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129226 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129227 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129228 +28 28 28 28 28 28 28 28 28 28 28 28 30 30 30 30 30 30
129229 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129230 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129231 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129232 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129233 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129234 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129235 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129236 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129237 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129238 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 32 32
129239 +30 30 30 32 32 32 30 30 30 32 32 32 30 30 30 32 32 32
129240 +30 30 30 30 30 30 30 30 30 32 32 32 30 30 30 32 32 32
129241 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129242 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 28 28 28
129243 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
129244 +28 28 28 28 28 28 28 28 28 30 30 30 30 30 30 30 30 30
129245 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129246 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129247 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129248 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129249 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129250 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129251 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129252 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129253 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129254 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129255 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129256 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129257 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129258 +28 28 28 28 28 28 27 27 27 26 26 26 25 25 25 25 25 25
129259 +24 24 24 22 22 22 21 21 21 20 20 20 19 19 19 18 18 18
129260 +16 16 16 15 14 14 14 14 14 13 13 13 11 11 11 10 10 10
129261 +9 9 9 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3
129262 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
129263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129293 +0 0 0 0 0 0 1 1 1 1 1 1 3 3 3 3 3 3
129294 +4 4 4 6 6 6 7 7 7 8 8 8 10 10 10 11 11 11
129295 +13 13 13 14 14 14 16 16 16 17 17 17 18 18 18 20 20 20
129296 +21 21 21 22 22 22 24 24 24 25 25 25 26 26 26 27 27 27
129297 +28 28 28 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129298 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33
129299 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129300 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129301 +33 33 33 33 33 33 32 32 32 32 32 32 32 32 32 32 32 32
129302 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
129303 +32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 32 32 32
129304 +32 32 32 32 32 32 32 32 32 32 32 32 30 30 30 30 30 30
129305 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129306 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129307 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129308 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 32 32
129309 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33
129310 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129311 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129312 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129313 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129314 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129315 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129316 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129317 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129318 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129319 +33 33 33 35 35 35 35 35 35 35 35 35 35 35 35 33 33 33
129320 +35 35 35 35 35 35 35 35 35 33 33 33 35 35 35 35 35 35
129321 +35 35 35 35 35 35 35 35 35 33 33 33 33 33 33 33 33 33
129322 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 30 30 30
129323 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
129324 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 32 32
129325 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
129326 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
129327 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129328 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129329 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32
129330 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
129331 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33
129332 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129333 +33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
129334 +32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
129335 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129336 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 33 33 33
129337 +33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 30 30 30
129338 +30 30 30 30 30 30 30 30 30 30 30 30 28 28 28 27 27 27
129339 +26 26 26 25 25 25 24 24 24 22 22 22 21 21 21 20 20 20
129340 +18 18 18 17 17 17 16 16 16 14 14 14 13 13 13 11 11 11
129341 +10 10 10 8 8 8 7 7 7 6 6 6 4 4 4 3 3 3
129342 +3 3 3 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
129343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129373 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
129374 +5 5 5 7 7 7 8 8 8 10 10 10 11 11 11 13 13 13
129375 +14 14 14 16 16 16 17 17 17 19 19 19 20 20 20 21 21 21
129376 +24 24 24 25 25 25 26 26 26 27 27 27 28 28 28 30 30 30
129377 +30 30 30 30 30 30 32 32 32 33 33 33 35 35 35 35 35 35
129378 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129379 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129380 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129381 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129382 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129383 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129384 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129385 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129386 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129387 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129388 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129389 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129390 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129391 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129392 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129393 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129394 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129395 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129396 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129397 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129398 +35 35 35 35 35 35 35 35 35 35 35 35 37 37 37 35 35 35
129399 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129400 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129401 +37 37 37 37 37 37 35 35 35 35 35 35 35 35 35 35 35 35
129402 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129403 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129404 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129405 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129406 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129407 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129408 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129409 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129410 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129411 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129412 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129413 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129414 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129415 +35 35 35 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129416 +37 37 37 37 37 37 37 37 37 37 37 37 35 35 35 35 35 35
129417 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
129418 +35 35 35 33 33 33 32 32 32 30 30 30 30 30 30 30 30 30
129419 +28 28 28 27 27 27 26 26 26 25 25 25 24 24 24 21 21 21
129420 +20 20 20 19 19 19 17 17 17 16 16 16 14 14 14 13 13 13
129421 +11 11 11 10 10 10 8 8 8 7 7 7 5 5 5 4 4 4
129422 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
129423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129453 +0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
129454 +6 6 6 8 8 8 9 9 9 11 11 11 13 13 13 14 14 14
129455 +16 16 16 17 17 17 19 19 19 20 20 20 22 22 22 24 24 24
129456 +25 25 25 26 26 26 28 28 28 30 30 30 30 30 30 32 32 32
129457 +33 33 33 35 35 35 35 35 35 35 35 35 35 35 35 37 37 37
129458 +37 37 37 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129459 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129460 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129461 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129462 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129463 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129464 +38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37
129465 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129466 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129467 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129468 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129469 +37 37 37 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129470 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129471 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129472 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129473 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129474 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129475 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129476 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129477 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129478 +38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 39 39 39
129479 +39 39 39 39 39 39 39 39 39 39 39 39 41 41 41 39 39 39
129480 +41 41 41 39 39 39 41 41 41 41 41 41 41 41 41 41 41 41
129481 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38
129482 +38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37
129483 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129484 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129485 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
129486 +37 37 37 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129487 +38 38 38 38 38 38 38 38 38 39 39 39 39 39 39 39 39 39
129488 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
129489 +39 39 39 39 39 39 39 39 39 39 39 39 38 38 38 38 38 38
129490 +38 38 38 38 38 38 38 38 38 37 37 37 37 37 37 37 37 37
129491 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129492 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129493 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
129494 +38 38 38 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39
129495 +39 39 39 39 39 39 39 39 39 41 41 41 41 41 41 41 41 41
129496 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
129497 +39 39 39 39 39 39 38 38 38 38 38 38 37 37 37 37 37 37
129498 +35 35 35 35 35 35 35 35 35 35 35 35 33 33 33 32 32 32
129499 +30 30 30 30 30 30 28 28 28 26 26 26 25 25 25 24 24 24
129500 +22 22 22 20 20 20 19 19 19 17 17 17 16 16 16 14 14 14
129501 +13 13 13 11 11 11 9 9 9 8 8 8 6 6 6 5 5 5
129502 +4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0
129503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129533 +1 1 1 1 1 1 3 3 3 3 3 3 5 5 5 6 6 6
129534 +7 7 7 9 9 9 11 11 11 12 12 12 14 14 14 16 16 16
129535 +17 17 17 19 19 19 21 21 21 22 22 22 24 24 24 26 26 26
129536 +27 27 27 30 30 30 30 30 30 32 32 32 33 33 33 35 35 35
129537 +35 35 35 37 37 37 37 37 37 38 38 38 39 39 39 41 41 41
129538 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129539 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129540 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129541 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129542 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129543 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129544 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129545 +41 41 41 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
129546 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
129547 +39 39 39 39 39 39 39 39 39 39 39 39 41 41 41 41 41 41
129548 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129549 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129550 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129551 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129552 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129553 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129554 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129555 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129556 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129557 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129558 +41 41 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42
129559 +42 42 42 42 42 42 42 42 42 43 43 43 43 43 43 43 43 43
129560 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 42 42 42
129561 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 41 41 41
129562 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129563 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129564 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129565 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129566 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129567 +41 41 41 41 41 41 41 41 41 42 42 42 42 42 42 42 42 42
129568 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
129569 +42 42 42 42 42 42 42 42 42 41 41 41 41 41 41 41 41 41
129570 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129571 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129572 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129573 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129574 +41 41 41 41 41 41 41 41 41 41 41 41 42 42 42 42 42 42
129575 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
129576 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
129577 +42 42 42 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
129578 +39 39 39 38 38 38 37 37 37 37 37 37 35 35 35 35 35 35
129579 +33 33 33 32 32 32 30 30 30 30 30 30 27 27 27 26 26 26
129580 +24 24 24 22 22 22 21 21 21 19 19 19 17 17 17 16 16 16
129581 +14 14 14 12 12 12 11 11 11 9 9 9 7 7 7 6 6 6
129582 +5 5 5 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0
129583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129613 +1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7
129614 +8 8 8 10 10 10 12 12 12 13 13 13 16 16 16 17 17 17
129615 +19 19 19 20 20 20 22 22 22 24 24 24 26 26 26 27 27 27
129616 +30 30 30 30 30 30 32 32 32 35 35 35 35 35 35 37 37 37
129617 +38 38 38 39 39 39 41 41 41 41 41 41 42 42 42 42 42 42
129618 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129619 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129620 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129621 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129622 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129623 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129624 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129625 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
129626 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
129627 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
129628 +42 42 42 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129629 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129630 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129631 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129632 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129633 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129634 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129635 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129636 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129637 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129638 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 45 45 45
129639 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129640 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129641 +45 45 45 45 45 45 45 45 45 43 43 43 43 43 43 43 43 43
129642 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129643 +43 43 43 43 43 43 42 42 42 42 42 42 42 42 42 42 42 42
129644 +42 42 42 42 42 42 43 43 43 43 43 43 43 43 43 43 43 43
129645 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129646 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129647 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129648 +43 43 43 45 45 45 45 45 45 45 45 45 45 45 45 43 43 43
129649 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129650 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129651 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129652 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129653 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
129654 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 45 45 45
129655 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129656 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129657 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 42 42 42
129658 +42 42 42 41 41 41 41 41 41 39 39 39 38 38 38 37 37 37
129659 +35 35 35 35 35 35 32 32 32 30 30 30 30 30 30 27 27 27
129660 +26 26 26 24 24 24 22 22 22 20 20 20 19 19 19 17 17 17
129661 +16 16 16 13 13 13 12 12 12 10 10 10 8 8 8 7 7 7
129662 +5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0
129663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129693 +1 1 1 3 3 3 3 3 3 5 5 5 6 6 6 8 8 8
129694 +9 9 9 11 11 11 13 13 13 15 14 14 17 17 17 18 18 18
129695 +20 20 20 22 22 22 24 24 24 26 26 26 28 28 28 30 30 30
129696 +30 30 30 33 33 33 35 35 35 35 35 35 38 38 38 39 39 39
129697 +41 41 41 42 42 42 43 43 43 43 43 43 43 43 43 45 45 45
129698 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129699 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129700 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129701 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129702 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129703 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129704 +46 46 46 46 46 46 46 46 46 45 45 45 45 45 45 45 45 45
129705 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129706 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129707 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129708 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129709 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129710 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129711 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129712 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129713 +46 46 46 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
129714 +47 47 47 47 47 47 46 46 46 46 46 46 46 46 46 46 46 46
129715 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129716 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129717 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129718 +46 46 46 46 46 46 47 47 47 47 47 47 47 47 47 47 47 47
129719 +47 47 47 48 48 47 48 48 47 48 48 47 48 48 47 48 48 47
129720 +48 48 47 48 48 47 48 48 47 48 48 47 48 48 47 48 48 47
129721 +48 48 47 47 47 47 47 47 47 47 47 47 47 47 47 46 46 46
129722 +46 46 46 46 46 46 46 46 46 45 45 45 45 45 45 45 45 45
129723 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129724 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
129725 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 46 46 46
129726 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129727 +46 46 46 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
129728 +47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
129729 +47 47 47 47 47 47 47 47 47 47 47 47 46 46 46 46 46 46
129730 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129731 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129732 +46 46 46 47 47 47 47 47 47 47 47 47 46 46 46 46 46 46
129733 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
129734 +46 46 46 46 46 46 46 46 46 47 47 47 47 47 47 47 47 47
129735 +47 47 47 47 47 47 48 48 47 48 48 47 48 48 47 48 48 47
129736 +48 48 47 48 48 47 48 48 47 47 47 47 47 47 47 47 47 47
129737 +47 47 47 47 47 47 46 46 46 46 46 46 46 46 46 45 45 45
129738 +43 43 43 43 43 43 43 43 43 42 42 42 41 41 41 39 39 39
129739 +38 38 38 35 35 35 35 35 35 33 33 33 30 30 30 30 30 30
129740 +28 28 28 26 26 26 24 24 24 22 22 22 20 20 20 18 18 18
129741 +17 17 17 15 14 14 13 13 13 11 11 11 9 9 9 8 8 8
129742 +6 6 6 5 5 5 3 3 3 3 3 3 1 1 1 0 0 0
129743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
129773 +2 2 2 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9
129774 +10 10 10 12 12 12 14 14 14 16 16 16 18 18 18 20 20 20
129775 +22 22 22 24 24 24 26 26 26 27 27 27 30 30 30 30 30 30
129776 +33 33 33 35 35 35 37 37 37 38 38 38 41 41 41 42 42 42
129777 +43 43 43 43 43 43 45 45 45 46 46 46 47 47 47 48 48 47
129778 +48 48 47 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129779 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129780 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129781 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129782 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129783 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129784 +49 49 49 48 48 47 48 48 47 48 48 47 48 48 47 48 48 47
129785 +48 48 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
129786 +47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
129787 +47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 48 48 47
129788 +48 48 47 48 48 47 48 48 47 48 48 47 48 48 47 48 48 47
129789 +48 48 47 48 48 47 49 49 49 49 49 49 49 49 49 49 49 49
129790 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129791 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129792 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129793 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129794 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129795 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129796 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129797 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129798 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 50 50 50
129799 +50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129800 +50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129801 +50 50 50 50 50 50 50 50 50 50 50 50 49 49 49 49 49 49
129802 +49 49 49 48 48 47 48 48 47 48 48 47 48 48 47 48 48 47
129803 +48 48 47 48 48 47 48 48 47 47 47 47 47 47 47 47 47 47
129804 +47 47 47 48 48 47 48 48 47 48 48 47 48 48 47 48 48 47
129805 +48 48 47 48 48 47 48 48 47 48 48 47 48 48 47 48 48 47
129806 +48 48 47 48 48 47 48 48 47 48 48 47 49 49 49 49 49 49
129807 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129808 +49 49 49 50 50 50 50 50 50 50 50 50 49 49 49 49 49 49
129809 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129810 +48 48 47 48 48 47 48 48 47 48 48 47 48 48 47 48 48 47
129811 +48 48 47 48 48 47 48 48 47 48 48 47 49 49 49 49 49 49
129812 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129813 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
129814 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 50 50 50
129815 +50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129816 +50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129817 +49 49 49 49 49 49 49 49 49 49 49 49 48 48 47 48 48 47
129818 +47 47 47 46 46 46 45 45 45 43 43 43 43 43 43 42 42 42
129819 +41 41 41 38 38 38 37 37 37 35 35 35 33 33 33 30 30 30
129820 +30 30 30 27 27 27 26 26 26 24 24 24 22 22 22 20 20 20
129821 +18 18 18 16 16 16 14 14 14 12 12 12 10 10 10 9 9 9
129822 +7 7 7 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1
129823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
129853 +2 2 2 3 3 3 5 5 5 6 6 6 8 8 8 10 10 10
129854 +11 11 11 13 13 13 15 14 14 17 17 17 19 19 19 21 21 21
129855 +24 24 24 25 25 25 27 27 27 30 30 30 30 30 30 33 33 33
129856 +35 35 35 37 37 37 39 39 39 41 41 41 42 42 42 43 43 43
129857 +45 45 45 47 47 47 48 48 47 66 66 66 140 134 120 140 134 120
129858 +192 187 164 200 196 176 231 230 220 230 228 210 230 228 210 230 228 210
129859 +230 228 210 192 187 164 192 187 164 140 134 120 138 129 110 65 65 65
129860 +50 50 50 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129861 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129862 +52 52 52 52 52 52 135 101 60 140 134 120 140 134 120 140 134 120
129863 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
129864 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 66 66 66
129865 +52 52 52 52 52 52 50 50 50 50 50 50 50 50 50 50 50 50
129866 +50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129867 +50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129868 +50 50 50 66 66 66 138 129 110 140 134 120 140 134 120 192 187 164
129869 +192 187 164 192 187 164 192 187 164 176 168 138 140 134 120 140 134 120
129870 +66 66 66 65 65 65 50 50 50 52 52 52 52 52 52 52 52 52
129871 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129872 +52 52 52 52 52 52 63 58 50 138 129 110 140 134 120 140 134 120
129873 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
129874 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
129875 +138 129 110 66 66 66 52 52 52 52 52 52 52 52 52 52 52 52
129876 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129877 +52 52 52 52 52 52 52 52 52 52 52 52 138 129 110 140 134 120
129878 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
129879 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
129880 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
129881 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
129882 +140 134 120 140 134 120 140 134 120 140 134 120 138 129 110 52 52 52
129883 +52 52 52 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129884 +50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129885 +50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
129886 +66 66 66 140 134 120 176 168 138 192 187 164 200 196 176 231 230 220
129887 +230 228 210 230 228 210 230 228 210 230 228 210 185 178 149 176 168 138
129888 +140 134 120 138 129 110 45 45 45 52 52 52 52 52 52 52 52 52
129889 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129890 +52 52 52 52 52 52 140 134 120 140 134 120 140 134 120 140 134 120
129891 +140 134 120 140 134 120 66 66 66 65 65 65 50 50 50 52 52 52
129892 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129893 +52 52 52 52 52 52 66 66 66 140 134 120 140 134 120 140 134 120
129894 +140 134 120 140 134 120 140 134 120 140 134 120 66 66 66 52 52 52
129895 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129896 +65 65 65 138 129 110 140 134 120 192 187 164 192 187 164 231 229 217
129897 +230 228 210 230 228 210 230 228 210 230 228 210 200 196 176 192 187 164
129898 +140 134 120 140 134 120 66 66 66 50 50 50 45 45 45 43 43 43
129899 +42 42 42 41 41 41 39 39 39 37 37 37 35 35 35 33 33 33
129900 +30 30 30 30 30 30 27 27 27 25 25 25 24 24 24 21 21 21
129901 +19 19 19 17 17 17 15 14 14 13 13 13 11 11 11 10 10 10
129902 +8 8 8 6 6 6 5 5 5 3 3 3 2 2 2 1 1 1
129903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129932 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
129933 +3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 10 10 10
129934 +12 12 12 14 14 14 16 16 16 18 18 18 20 20 20 24 24 24
129935 +25 25 25 27 27 27 30 30 30 30 30 30 33 33 33 35 35 35
129936 +37 37 37 39 39 39 41 41 41 43 43 43 45 45 45 46 46 46
129937 +66 66 66 140 134 120 231 230 220 255 255 255 255 255 255 255 255 255
129938 +249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 238 238 238
129939 +249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249
129940 +200 196 176 140 134 120 52 52 52 52 52 52 52 52 52 52 52 52
129941 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 65 65 65
129942 +66 66 66 231 230 220 249 249 249 249 249 249 249 249 249 249 249 249
129943 +255 255 255 249 249 249 255 255 255 249 249 249 255 255 255 249 249 249
129944 +255 255 255 249 249 249 255 255 255 249 249 249 255 255 255 255 255 255
129945 +238 238 238 192 187 164 66 66 66 52 52 52 52 52 52 52 52 52
129946 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129947 +52 52 52 52 52 52 52 52 52 65 65 65 66 66 66 185 178 149
129948 +238 238 238 255 255 255 249 249 249 249 249 249 255 255 255 249 249 249
129949 +249 249 249 238 238 238 249 249 249 249 249 249 249 249 249 255 255 255
129950 +255 255 255 238 238 238 200 196 176 138 129 110 52 52 52 52 52 52
129951 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129952 +52 52 52 140 134 120 249 249 249 249 249 249 249 249 249 249 249 249
129953 +255 255 255 249 249 249 255 255 255 249 249 249 255 255 255 249 249 249
129954 +255 255 255 249 249 249 255 255 255 249 249 249 255 255 255 249 249 249
129955 +249 249 249 255 255 255 238 238 238 192 187 164 66 66 66 52 52 52
129956 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129957 +52 52 52 52 52 52 138 129 110 238 238 238 249 249 249 249 249 249
129958 +249 249 249 249 249 249 255 255 255 249 249 249 255 255 255 249 249 249
129959 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
129960 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
129961 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
129962 +255 255 255 255 255 255 249 249 249 249 249 249 249 249 249 249 249 249
129963 +231 230 220 140 134 120 65 65 65 52 52 52 52 52 52 52 52 52
129964 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129965 +52 52 52 52 52 52 65 65 65 66 66 66 185 178 149 238 238 238
129966 +255 255 255 255 255 255 249 249 249 249 249 249 249 249 249 249 249 249
129967 +249 249 249 249 249 249 238 238 238 249 249 249 249 249 249 249 249 249
129968 +249 249 249 249 249 249 238 238 238 192 187 164 138 129 110 52 52 52
129969 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129970 +52 52 52 52 52 52 238 238 238 255 255 255 249 249 249 255 255 255
129971 +255 255 255 255 255 255 140 134 120 52 52 52 52 52 52 52 52 52
129972 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
129973 +52 52 52 52 52 52 230 228 210 255 255 255 255 255 255 255 255 255
129974 +249 249 249 255 255 255 249 249 249 176 168 138 52 52 52 65 65 65
129975 +52 52 52 52 52 52 52 52 52 52 52 52 140 134 120 200 196 176
129976 +249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249
129977 +249 249 249 238 238 238 249 249 249 249 249 249 249 249 249 249 249 249
129978 +255 255 255 249 249 249 255 255 255 238 238 238 140 134 120 63 58 50
129979 +45 45 45 43 43 43 41 41 41 39 39 39 37 37 37 35 35 35
129980 +33 33 33 30 30 30 30 30 30 27 27 27 25 25 25 24 24 24
129981 +20 20 20 18 18 18 16 16 16 14 14 14 12 12 12 10 10 10
129982 +9 9 9 7 7 7 5 5 5 4 4 4 3 3 3 1 1 1
129983 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
129999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130012 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2
130013 +3 3 3 4 4 4 6 6 6 8 8 8 9 9 9 11 11 11
130014 +13 13 13 16 16 16 17 17 17 20 20 20 21 21 21 24 24 24
130015 +26 26 26 28 28 28 30 30 30 32 32 32 35 35 35 37 37 37
130016 +39 39 39 41 41 41 43 43 43 45 45 45 47 47 47 138 129 110
130017 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130018 +255 255 255 255 255 255 255 255 255 249 249 249 255 255 255 255 255 255
130019 +249 249 249 255 255 255 255 255 255 249 249 249 255 255 255 255 255 255
130020 +255 255 255 249 249 249 231 229 217 66 66 66 65 65 65 52 52 52
130021 +63 58 50 52 52 52 65 65 65 52 52 52 52 52 52 66 66 66
130022 +249 249 249 255 255 255 249 249 249 255 255 255 255 255 255 255 255 255
130023 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130024 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130025 +255 255 255 255 255 255 255 255 255 185 178 149 65 65 65 52 52 52
130026 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
130027 +52 52 52 52 52 52 66 66 66 192 187 164 255 255 255 255 255 255
130028 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130029 +255 255 255 255 255 255 255 255 255 249 249 249 255 255 255 255 255 255
130030 +255 255 255 255 255 255 255 255 255 249 249 249 230 228 210 66 66 66
130031 +65 65 65 52 52 52 65 65 65 52 52 52 63 58 50 52 52 52
130032 +66 66 66 255 255 255 249 249 249 255 255 255 255 255 255 255 255 255
130033 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130034 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130035 +255 255 255 255 255 255 255 255 255 249 249 249 249 249 249 140 134 120
130036 +65 65 65 52 52 52 65 65 65 52 52 52 63 58 50 52 52 52
130037 +65 65 65 66 66 66 255 255 255 255 255 255 255 255 255 255 255 255
130038 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130039 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130040 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130041 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130042 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130043 +249 249 249 255 255 255 238 238 238 66 66 66 66 66 66 52 52 52
130044 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
130045 +52 52 52 63 58 50 176 168 138 249 249 249 255 255 255 255 255 255
130046 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130047 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 255 255 255
130048 +249 249 249 255 255 255 249 249 249 249 249 249 249 249 249 200 196 176
130049 +66 66 66 65 65 65 52 52 52 65 65 65 52 52 52 63 58 50
130050 +52 52 52 65 65 65 238 238 238 255 255 255 255 255 255 255 255 255
130051 +255 255 255 255 255 255 140 134 120 65 65 65 52 52 52 65 65 65
130052 +52 52 52 63 58 50 52 52 52 65 65 65 52 52 52 63 58 50
130053 +65 65 65 200 196 176 255 255 255 249 249 249 255 255 255 255 255 255
130054 +255 255 255 255 255 255 192 187 164 52 52 52 65 65 65 52 52 52
130055 +65 65 65 52 52 52 66 66 66 238 238 238 249 249 249 255 255 255
130056 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 255 255 255
130057 +249 249 249 255 255 255 255 255 255 249 249 249 255 255 255 255 255 255
130058 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 238 238 238
130059 +138 129 110 43 43 43 43 43 43 41 41 41 39 39 39 37 37 37
130060 +35 35 35 32 32 32 30 30 30 28 28 28 26 26 26 24 24 24
130061 +21 21 21 20 20 20 17 17 17 16 16 16 13 13 13 11 11 11
130062 +9 9 9 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2
130063 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130092 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2
130093 +3 3 3 5 5 5 6 6 6 8 8 8 10 10 10 12 12 12
130094 +14 14 14 16 16 16 18 18 18 20 20 20 24 24 24 25 25 25
130095 +27 27 27 30 30 30 32 32 32 35 35 35 35 35 35 39 39 39
130096 +41 41 41 43 43 43 46 46 46 43 43 43 176 168 138 249 249 249
130097 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130098 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130099 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130100 +255 255 255 255 255 255 255 255 255 238 238 238 138 129 110 65 65 65
130101 +52 52 52 65 65 65 52 52 52 65 65 65 65 65 65 163 154 123
130102 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130103 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130104 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130105 +255 255 255 255 255 255 249 249 249 249 249 249 230 228 210 66 66 66
130106 +52 52 52 65 65 65 52 52 52 65 65 65 52 52 52 65 65 65
130107 +65 65 65 66 66 66 231 230 220 255 255 255 255 255 255 255 255 255
130108 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130109 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130110 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 255 255 255
130111 +66 66 66 52 52 52 65 65 65 52 52 52 65 65 65 65 65 65
130112 +185 178 149 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130113 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130114 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130115 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130116 +163 154 123 52 52 52 65 65 65 52 52 52 65 65 65 52 52 52
130117 +65 65 65 200 196 176 255 255 255 255 255 255 255 255 255 255 255 255
130118 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130119 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130120 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130121 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130122 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130123 +255 255 255 255 255 255 255 255 255 255 255 255 66 66 66 65 65 65
130124 +52 52 52 65 65 65 63 58 50 65 65 65 52 52 52 65 65 65
130125 +66 66 66 200 196 176 249 249 249 255 255 255 255 255 255 255 255 255
130126 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130127 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130128 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 249 249 249
130129 +231 230 220 66 66 66 52 52 52 65 65 65 52 52 52 65 65 65
130130 +52 52 52 65 65 65 238 238 238 255 255 255 255 255 255 255 255 255
130131 +255 255 255 255 255 255 140 134 120 52 52 52 65 65 65 52 52 52
130132 +65 65 65 52 52 52 65 65 65 52 52 52 65 65 65 52 52 52
130133 +200 196 176 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130134 +249 249 249 200 196 176 65 65 65 52 52 52 65 65 65 52 52 52
130135 +49 49 49 138 129 110 255 255 255 255 255 255 255 255 255 255 255 255
130136 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130137 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130138 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130139 +249 249 249 163 154 123 45 45 45 43 43 43 41 41 41 39 39 39
130140 +35 35 35 35 35 35 32 32 32 30 30 30 27 27 27 25 25 25
130141 +24 24 24 20 20 20 18 18 18 16 16 16 14 14 14 12 12 12
130142 +10 10 10 8 8 8 6 6 6 5 5 5 3 3 3 2 2 2
130143 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130172 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 3
130173 +4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 13 13 13
130174 +15 14 14 17 17 17 19 19 19 21 21 21 24 24 24 26 26 26
130175 +28 28 28 30 30 30 33 33 33 35 35 35 38 38 38 41 41 41
130176 +43 43 43 45 45 45 47 47 47 140 134 120 249 249 249 249 249 249
130177 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130178 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130179 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130180 +255 255 255 255 255 255 255 255 255 255 255 255 238 238 238 66 66 66
130181 +65 65 65 65 65 65 52 52 52 65 65 65 52 52 52 200 196 176
130182 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130183 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130184 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130185 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
130186 +65 65 65 52 52 52 65 65 65 52 52 52 65 65 65 52 52 52
130187 +65 65 65 231 230 220 255 255 255 255 255 255 255 255 255 255 255 255
130188 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130189 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130190 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130191 +238 238 238 66 66 66 66 66 66 65 65 65 52 52 52 65 65 65
130192 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130193 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130194 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130195 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130196 +255 255 255 138 129 110 50 50 50 65 65 65 65 65 65 65 65 65
130197 +52 52 52 231 230 220 255 255 255 255 255 255 255 255 255 255 255 255
130198 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130199 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130200 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130201 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130202 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130203 +255 255 255 255 255 255 255 255 255 255 255 255 231 229 217 65 65 65
130204 +52 52 52 65 65 65 52 52 52 65 65 65 52 52 52 65 65 65
130205 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130206 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130207 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130208 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130209 +255 255 255 230 228 210 65 65 65 65 65 65 65 65 65 52 52 52
130210 +65 65 65 52 52 52 249 249 249 255 255 255 255 255 255 255 255 255
130211 +255 255 255 255 255 255 140 134 120 66 66 66 65 65 65 52 52 52
130212 +65 65 65 65 65 65 52 52 52 65 65 65 65 65 65 192 187 164
130213 +249 249 249 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130214 +200 196 176 66 66 66 65 65 65 65 65 65 65 65 65 65 65 65
130215 +66 66 66 238 238 238 249 249 249 255 255 255 255 255 255 255 255 255
130216 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130217 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130218 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130219 +255 255 255 249 249 249 138 129 110 43 43 43 43 43 43 41 41 41
130220 +38 38 38 35 35 35 33 33 33 30 30 30 28 28 28 26 26 26
130221 +24 24 24 21 21 21 19 19 19 17 17 17 15 14 14 13 13 13
130222 +11 11 11 9 9 9 7 7 7 5 5 5 4 4 4 3 3 3
130223 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130252 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3
130253 +4 4 4 6 6 6 8 8 8 9 9 9 11 11 11 13 13 13
130254 +16 16 16 18 18 18 20 20 20 22 22 22 25 25 25 27 27 27
130255 +30 30 30 32 32 32 35 35 35 37 37 37 39 39 39 42 42 42
130256 +43 43 43 45 45 45 65 65 65 238 238 238 255 255 255 255 255 255
130257 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 238 238 238
130258 +185 178 149 140 134 120 138 129 110 66 66 66 138 129 110 66 66 66
130259 +138 129 110 140 134 120 200 196 176 249 249 249 255 255 255 255 255 255
130260 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 196 176
130261 +52 52 52 65 65 65 65 65 65 65 65 65 66 66 66 200 196 176
130262 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
130263 +200 196 176 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
130264 +140 134 120 140 134 120 192 187 164 231 230 220 255 255 255 255 255 255
130265 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
130266 +140 134 120 52 52 52 65 65 65 65 65 65 52 52 52 65 65 65
130267 +176 168 138 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130268 +255 255 255 249 249 249 249 249 249 200 196 176 176 168 138 140 134 120
130269 +140 134 120 140 134 120 140 134 120 176 168 138 230 228 210 255 255 255
130270 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130271 +255 255 255 192 187 164 65 65 65 65 65 65 65 65 65 52 52 52
130272 +200 196 176 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130273 +249 249 249 192 187 164 140 134 120 140 134 120 140 134 120 140 134 120
130274 +140 134 120 140 134 120 140 134 120 176 168 138 200 196 176 238 238 238
130275 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130276 +249 249 249 200 196 176 65 65 65 65 65 65 52 52 52 65 65 65
130277 +65 65 65 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
130278 +255 255 255 238 238 238 185 178 149 140 134 120 140 134 120 140 134 120
130279 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
130280 +230 227 205 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130281 +238 238 238 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
130282 +140 134 120 140 134 120 200 196 176 238 238 238 255 255 255 255 255 255
130283 +255 255 255 255 255 255 255 255 255 249 249 249 249 249 249 138 129 110
130284 +65 65 65 52 52 52 65 65 65 65 65 65 52 52 52 138 129 110
130285 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130286 +255 255 255 249 249 249 231 230 220 176 168 138 140 134 120 138 129 110
130287 +66 66 66 138 129 110 66 66 66 138 129 110 176 168 138 200 196 176
130288 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130289 +249 249 249 255 255 255 140 134 120 52 52 52 65 65 65 65 65 65
130290 +65 65 65 65 65 65 238 238 238 255 255 255 255 255 255 255 255 255
130291 +255 255 255 255 255 255 140 134 120 65 65 65 65 65 65 65 65 65
130292 +65 65 65 65 65 65 65 65 65 66 66 66 140 134 120 249 249 249
130293 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 231 230 220
130294 +66 66 66 65 65 65 65 65 65 65 65 65 65 65 65 66 66 66
130295 +200 196 176 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130296 +255 255 255 255 255 255 249 249 249 200 196 176 140 134 120 140 134 120
130297 +66 66 66 138 129 110 66 66 66 138 129 110 140 134 120 185 178 149
130298 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130299 +255 255 255 249 249 249 238 238 238 65 65 65 43 43 43 42 42 42
130300 +39 39 39 37 37 37 35 35 35 32 32 32 30 30 30 27 27 27
130301 +25 25 25 22 22 22 20 20 20 18 18 18 16 16 16 13 13 13
130302 +11 11 11 9 9 9 8 8 8 6 6 6 4 4 4 3 3 3
130303 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
130304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130332 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3
130333 +5 5 5 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14
130334 +16 16 16 18 18 18 21 21 21 24 24 24 26 26 26 28 28 28
130335 +30 30 30 33 33 33 35 35 35 38 38 38 41 41 41 43 43 43
130336 +45 45 45 48 48 47 176 168 138 249 249 249 255 255 255 255 255 255
130337 +255 255 255 255 255 255 255 255 255 255 255 255 163 154 123 66 66 66
130338 +65 65 65 65 65 65 65 65 65 66 66 66 66 66 66 66 66 66
130339 +66 66 66 65 65 65 65 65 65 66 66 66 230 228 210 249 249 249
130340 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130341 +138 129 110 52 52 52 65 65 65 65 65 65 65 65 65 200 196 176
130342 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 196 176
130343 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130344 +66 66 66 66 66 66 66 66 66 65 65 65 140 134 120 238 238 238
130345 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130346 +238 238 238 65 65 65 65 65 65 65 65 65 65 65 65 66 66 66
130347 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130348 +255 255 255 200 196 176 66 66 66 66 66 66 65 65 65 66 66 66
130349 +66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 66 66 66
130350 +231 230 220 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130351 +255 255 255 238 238 238 66 66 66 65 65 65 65 65 65 65 65 65
130352 +200 196 176 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
130353 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130354 +66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 66 66 66
130355 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130356 +255 255 255 255 255 255 66 66 66 66 66 66 66 66 66 65 65 65
130357 +65 65 65 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130358 +255 255 255 176 168 138 65 65 65 66 66 66 66 66 66 66 66 66
130359 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130360 +192 187 164 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
130361 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130362 +66 66 66 66 66 66 66 66 66 66 66 66 230 228 210 249 249 249
130363 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 192 187 164
130364 +65 65 65 65 65 65 65 65 65 52 52 52 65 65 65 200 196 176
130365 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130366 +238 238 238 138 129 110 65 65 65 52 52 52 65 65 65 65 65 65
130367 +66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 66 66 66
130368 +138 129 110 231 230 220 249 249 249 255 255 255 255 255 255 255 255 255
130369 +255 255 255 255 255 255 238 238 238 66 66 66 66 66 66 65 65 65
130370 +65 65 65 65 65 65 249 249 249 255 255 255 255 255 255 255 255 255
130371 +255 255 255 255 255 255 140 134 120 66 66 66 65 65 65 65 65 65
130372 +52 52 52 65 65 65 65 65 65 140 134 120 255 255 255 255 255 255
130373 +255 255 255 255 255 255 255 255 255 255 255 255 231 230 220 66 66 66
130374 +66 66 66 65 65 65 65 65 65 65 65 65 65 65 65 138 129 110
130375 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130376 +255 255 255 200 196 176 66 66 66 66 66 66 66 66 66 65 65 65
130377 +66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 65 65 65
130378 +66 66 66 176 168 138 249 249 249 255 255 255 255 255 255 255 255 255
130379 +255 255 255 255 255 255 255 255 255 163 154 123 47 47 47 43 43 43
130380 +41 41 41 38 38 38 35 35 35 33 33 33 30 30 30 28 28 28
130381 +26 26 26 24 24 24 21 21 21 18 18 18 16 16 16 14 14 14
130382 +12 12 12 10 10 10 8 8 8 6 6 6 5 5 5 3 3 3
130383 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
130384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130412 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3
130413 +5 5 5 7 7 7 9 9 9 10 10 10 13 13 13 15 14 14
130414 +17 17 17 19 19 19 21 21 21 24 24 24 26 26 26 30 30 30
130415 +32 32 32 35 35 35 37 37 37 39 39 39 42 42 42 43 43 43
130416 +47 47 47 47 47 47 238 238 238 255 255 255 255 255 255 255 255 255
130417 +255 255 255 255 255 255 249 249 249 140 134 120 66 66 66 66 66 66
130418 +65 65 65 65 65 65 65 65 65 66 66 66 66 66 66 66 66 66
130419 +66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 200 196 176
130420 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 249 249 249
130421 +192 187 164 65 65 65 65 65 65 65 65 65 66 66 66 200 196 176
130422 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
130423 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130424 +66 66 66 66 66 66 65 65 65 65 65 65 66 66 66 66 66 66
130425 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
130426 +249 249 249 138 129 110 52 52 52 65 65 65 65 65 65 140 134 120
130427 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
130428 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130429 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130430 +66 66 66 231 230 220 255 255 255 255 255 255 255 255 255 255 255 255
130431 +255 255 255 249 249 249 140 134 120 65 65 65 65 65 65 52 52 52
130432 +200 196 176 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
130433 +231 229 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130434 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
130435 +65 65 65 200 196 176 255 255 255 255 255 255 255 255 255 255 255 255
130436 +255 255 255 255 255 255 176 168 138 66 66 66 65 65 65 65 65 65
130437 +65 65 65 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
130438 +249 249 249 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
130439 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
130440 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
130441 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130442 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 238 238 238
130443 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 238 238 238
130444 +52 52 52 65 65 65 66 66 66 66 66 66 66 66 66 255 255 255
130445 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130446 +66 66 66 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
130447 +66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 65 65 65
130448 +65 65 65 66 66 66 231 230 220 255 255 255 255 255 255 255 255 255
130449 +255 255 255 255 255 255 255 255 255 140 134 120 65 65 65 65 65 65
130450 +65 65 65 65 65 65 238 238 238 255 255 255 255 255 255 255 255 255
130451 +255 255 255 255 255 255 140 134 120 66 66 66 65 65 65 65 65 65
130452 +65 65 65 65 65 65 140 134 120 255 255 255 255 255 255 255 255 255
130453 +255 255 255 255 255 255 255 255 255 238 238 238 66 66 66 66 66 66
130454 +65 65 65 65 65 65 65 65 65 65 65 65 52 52 52 192 187 164
130455 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130456 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130457 +66 66 66 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
130458 +65 65 65 66 66 66 140 134 120 255 255 255 255 255 255 255 255 255
130459 +255 255 255 255 255 255 249 249 249 238 238 238 50 50 50 43 43 43
130460 +42 42 42 39 39 39 37 37 37 35 35 35 32 32 32 30 30 30
130461 +26 26 26 24 24 24 21 21 21 19 19 19 17 17 17 15 14 14
130462 +13 13 13 10 10 10 9 9 9 7 7 7 5 5 5 3 3 3
130463 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
130464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130492 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 4 4 4
130493 +5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 16 16 16
130494 +17 17 17 20 20 20 22 22 22 25 25 25 27 27 27 30 30 30
130495 +32 32 32 35 35 35 38 38 38 41 41 41 43 43 43 45 45 45
130496 +49 49 49 138 129 110 238 238 238 249 249 249 255 255 255 255 255 255
130497 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
130498 +66 66 66 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
130499 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130500 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130501 +238 238 238 65 65 65 65 65 65 65 65 65 65 65 65 200 196 176
130502 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 196 176
130503 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130504 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130505 +140 134 120 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130506 +255 255 255 185 178 149 65 65 65 65 65 65 65 65 65 192 187 164
130507 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
130508 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130509 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130510 +66 66 66 140 134 120 249 249 249 255 255 255 255 255 255 255 255 255
130511 +255 255 255 255 255 255 176 168 138 65 65 65 65 65 65 66 66 66
130512 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
130513 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130514 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130515 +65 65 65 138 129 110 238 238 238 255 255 255 255 255 255 255 255 255
130516 +255 255 255 255 255 255 192 187 164 65 65 65 65 65 65 65 65 65
130517 +65 65 65 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130518 +249 249 249 176 168 138 65 65 65 66 66 66 66 66 66 66 66 66
130519 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130520 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130521 +231 230 220 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
130522 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 185 178 149
130523 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130524 +66 66 66 66 66 66 65 65 65 66 66 66 185 178 149 255 255 255
130525 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 163 154 123
130526 +66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 65 65 65
130527 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
130528 +65 65 65 66 66 66 138 129 110 249 249 249 255 255 255 255 255 255
130529 +255 255 255 255 255 255 255 255 255 200 196 176 65 65 65 65 65 65
130530 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
130531 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 66 66 66
130532 +65 65 65 138 129 110 238 238 238 249 249 249 255 255 255 255 255 255
130533 +255 255 255 255 255 255 238 238 238 66 66 66 66 66 66 66 66 66
130534 +66 66 66 66 66 66 65 65 65 65 65 65 65 65 65 238 238 238
130535 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 238 238 238
130536 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130537 +66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 65 65 65
130538 +65 65 65 65 65 65 66 66 66 200 196 176 255 255 255 255 255 255
130539 +255 255 255 255 255 255 255 255 255 255 255 255 66 66 66 52 52 52
130540 +45 45 45 41 41 41 38 38 38 35 35 35 32 32 32 30 30 30
130541 +27 27 27 25 25 25 22 22 22 20 20 20 17 17 17 15 14 14
130542 +13 13 13 11 11 11 9 9 9 7 7 7 5 5 5 4 4 4
130543 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
130544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130572 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 3 4 4 4
130573 +5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 16 16 16
130574 +18 18 18 20 20 20 24 24 24 25 25 25 28 28 28 30 30 30
130575 +33 33 33 35 35 35 39 39 39 41 41 41 43 43 43 46 46 46
130576 +47 47 47 140 134 120 255 255 255 255 255 255 255 255 255 255 255 255
130577 +255 255 255 249 249 249 140 134 120 66 66 66 66 66 66 66 66 66
130578 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130579 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130580 +185 178 149 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130581 +255 255 255 66 66 66 66 66 66 66 66 66 66 66 66 200 196 176
130582 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
130583 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130584 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130585 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130586 +249 249 249 200 196 176 65 65 65 65 65 65 52 52 52 230 228 210
130587 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 230 228 210
130588 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130589 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130590 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
130591 +255 255 255 249 249 249 192 187 164 65 65 65 65 65 65 65 65 65
130592 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
130593 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130594 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130595 +65 65 65 52 52 52 238 238 238 255 255 255 255 255 255 255 255 255
130596 +255 255 255 249 249 249 200 196 176 66 66 66 65 65 65 66 66 66
130597 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
130598 +249 249 249 140 134 120 66 66 66 66 66 66 66 66 66 66 66 66
130599 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
130600 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
130601 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130602 +66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 140 134 120
130603 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130604 +66 66 66 66 66 66 66 66 66 66 66 66 200 196 176 255 255 255
130605 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 66 66 66
130606 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130607 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130608 +66 66 66 66 66 66 52 52 52 230 228 210 255 255 255 255 255 255
130609 +255 255 255 255 255 255 249 249 249 238 238 238 66 66 66 66 66 66
130610 +66 66 66 66 66 66 238 238 238 255 255 255 255 255 255 255 255 255
130611 +255 255 255 249 249 249 176 168 138 66 66 66 66 66 66 66 66 66
130612 +66 66 66 238 238 238 249 249 249 255 255 255 255 255 255 255 255 255
130613 +255 255 255 238 238 238 138 129 110 66 66 66 66 66 66 66 66 66
130614 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 249 249 249
130615 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 192 187 164
130616 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130617 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130618 +66 66 66 66 66 66 52 52 52 138 129 110 255 255 255 255 255 255
130619 +255 255 255 255 255 255 255 255 255 255 255 255 176 168 138 49 49 49
130620 +45 45 45 41 41 41 38 38 38 35 35 35 33 33 33 30 30 30
130621 +28 28 28 25 25 25 24 24 24 20 20 20 18 18 18 16 16 16
130622 +13 13 13 11 11 11 9 9 9 7 7 7 5 5 5 4 4 4
130623 +3 3 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
130624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130652 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 3 4 4 4
130653 +6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 16 16 16
130654 +18 18 18 21 21 21 24 24 24 26 26 26 28 28 28 30 30 30
130655 +35 35 35 37 37 37 39 39 39 42 42 42 45 45 45 47 47 47
130656 +52 52 52 200 196 176 249 249 249 255 255 255 255 255 255 255 255 255
130657 +255 255 255 249 249 249 66 66 66 65 65 65 66 66 66 66 66 66
130658 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130659 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130660 +138 129 110 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
130661 +255 255 255 140 134 120 66 66 66 66 66 66 66 66 66 231 229 217
130662 +249 249 249 249 249 249 255 255 255 255 255 255 255 255 255 200 196 176
130663 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130664 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130665 +66 66 66 231 229 217 249 249 249 255 255 255 255 255 255 255 255 255
130666 +255 255 255 238 238 238 66 66 66 66 66 66 66 66 66 238 238 238
130667 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 192 187 164
130668 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130669 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130670 +66 66 66 66 66 66 238 238 238 255 255 255 255 255 255 255 255 255
130671 +255 255 255 249 249 249 200 196 176 66 66 66 66 66 66 65 65 65
130672 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130673 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130674 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130675 +66 66 66 66 66 66 200 196 176 255 255 255 255 255 255 255 255 255
130676 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
130677 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130678 +255 255 255 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
130679 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130680 +192 187 164 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
130681 +231 230 220 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
130682 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
130683 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130684 +138 129 110 65 65 65 66 66 66 66 66 66 238 238 238 255 255 255
130685 +255 255 255 255 255 255 255 255 255 255 255 255 230 228 210 65 65 65
130686 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130687 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130688 +66 66 66 66 66 66 66 66 66 176 168 138 249 249 249 255 255 255
130689 +255 255 255 255 255 255 255 255 255 255 255 255 66 66 66 66 66 66
130690 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
130691 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 66 66 66
130692 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130693 +249 249 249 138 129 110 50 50 50 66 66 66 66 66 66 66 66 66
130694 +66 66 66 66 66 66 66 66 66 66 66 66 140 134 120 255 255 255
130695 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 140 134 120
130696 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130697 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130698 +66 66 66 66 66 66 66 66 66 65 65 65 238 238 238 249 249 249
130699 +255 255 255 255 255 255 255 255 255 255 255 255 192 187 164 47 47 47
130700 +45 45 45 42 42 42 39 39 39 37 37 37 35 35 35 30 30 30
130701 +28 28 28 26 26 26 24 24 24 21 21 21 18 18 18 16 16 16
130702 +14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4
130703 +3 3 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
130704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130732 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
130733 +6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 16 16 16
130734 +19 19 19 21 21 21 24 24 24 26 26 26 30 30 30 32 32 32
130735 +35 35 35 37 37 37 41 41 41 43 43 43 45 45 45 47 47 47
130736 +45 45 45 231 229 217 255 255 255 255 255 255 255 255 255 255 255 255
130737 +249 249 249 231 230 220 66 66 66 66 66 66 66 66 66 66 66 66
130738 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130739 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
130740 +66 66 66 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130741 +249 249 249 185 178 149 66 66 66 66 66 66 65 65 65 200 196 176
130742 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
130743 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130744 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130745 +66 66 66 192 187 164 255 255 255 255 255 255 255 255 255 255 255 255
130746 +255 255 255 249 249 249 66 66 66 66 66 66 65 65 65 249 249 249
130747 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 185 178 149
130748 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130749 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130750 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
130751 +255 255 255 249 249 249 200 196 176 66 66 66 66 66 66 65 65 65
130752 +200 196 176 249 249 249 255 255 255 255 255 255 249 249 249 249 249 249
130753 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130754 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130755 +66 66 66 66 66 66 200 196 176 255 255 255 255 255 255 255 255 255
130756 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
130757 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 249 249 249
130758 +249 249 249 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
130759 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
130760 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
130761 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130762 +66 66 66 66 66 66 66 66 66 66 66 66 52 52 52 138 129 110
130763 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130764 +66 66 66 66 66 66 66 66 66 66 66 66 255 255 255 255 255 255
130765 +255 255 255 255 255 255 255 255 255 249 249 249 185 178 149 66 66 66
130766 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130767 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130768 +66 66 66 66 66 66 65 65 65 140 134 120 249 249 249 255 255 255
130769 +255 255 255 255 255 255 255 255 255 249 249 249 138 129 110 66 66 66
130770 +66 66 66 65 65 65 249 249 249 255 255 255 255 255 255 255 255 255
130771 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 231 229 217
130772 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 238 238 238
130773 +138 129 110 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
130774 +66 66 66 66 66 66 66 66 66 66 66 66 176 168 138 255 255 255
130775 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 66 66 66
130776 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130777 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130778 +66 66 66 66 66 66 66 66 66 66 66 66 200 196 176 255 255 255
130779 +255 255 255 255 255 255 255 255 255 249 249 249 231 230 220 49 49 49
130780 +45 45 45 43 43 43 41 41 41 37 37 37 35 35 35 32 32 32
130781 +30 30 30 26 26 26 24 24 24 21 21 21 19 19 19 16 16 16
130782 +14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4
130783 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
130784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130812 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
130813 +6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 17 17 17
130814 +19 19 19 21 21 21 24 24 24 27 27 27 30 30 30 32 32 32
130815 +35 35 35 38 38 38 41 41 41 43 43 43 46 46 46 49 49 49
130816 +50 50 50 238 238 238 249 249 249 255 255 255 255 255 255 255 255 255
130817 +255 255 255 200 196 176 65 65 65 66 66 66 66 66 66 66 66 66
130818 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130819 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130820 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130821 +255 255 255 192 187 164 66 66 66 66 66 66 66 66 66 200 196 176
130822 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
130823 +65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130824 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130825 +66 66 66 192 187 164 249 249 249 255 255 255 255 255 255 255 255 255
130826 +255 255 255 255 255 255 66 66 66 66 66 66 66 66 66 255 255 255
130827 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 238 238 238
130828 +231 230 220 231 230 220 231 230 220 231 230 220 231 230 220 231 230 220
130829 +231 230 220 231 230 220 231 230 220 231 230 220 231 230 220 231 230 220
130830 +231 230 220 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130831 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
130832 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
130833 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130834 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130835 +66 66 66 66 66 66 200 196 176 249 249 249 255 255 255 255 255 255
130836 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
130837 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130838 +249 249 249 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
130839 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130840 +192 187 164 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
130841 +231 230 220 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
130842 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
130843 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130844 +138 129 110 65 65 65 66 66 66 138 129 110 249 249 249 249 249 249
130845 +255 255 255 255 255 255 255 255 255 249 249 249 140 134 120 66 66 66
130846 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130847 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130848 +66 66 66 66 66 66 65 65 65 138 129 110 238 238 238 255 255 255
130849 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 65 65 65
130850 +66 66 66 66 66 66 238 238 238 255 255 255 255 255 255 255 255 255
130851 +255 255 255 255 255 255 140 134 120 66 66 66 140 134 120 249 249 249
130852 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 140 134 120
130853 +65 65 65 65 65 65 65 65 65 66 66 66 66 66 66 66 66 66
130854 +66 66 66 66 66 66 66 66 66 66 66 66 192 187 164 249 249 249
130855 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 66 66 66
130856 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130857 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130858 +66 66 66 66 66 66 66 66 66 66 66 66 200 196 176 249 249 249
130859 +255 255 255 255 255 255 255 255 255 249 249 249 238 238 238 43 43 43
130860 +46 46 46 43 43 43 41 41 41 38 38 38 35 35 35 32 32 32
130861 +30 30 30 27 27 27 24 24 24 21 21 21 19 19 19 17 17 17
130862 +14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4
130863 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
130864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130892 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
130893 +6 6 6 8 8 8 10 10 10 12 12 12 15 14 14 17 17 17
130894 +19 19 19 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32
130895 +35 35 35 38 38 38 41 41 41 43 43 43 46 46 46 49 49 49
130896 +50 50 50 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130897 +249 249 249 192 187 164 66 66 66 66 66 66 66 66 66 66 66 66
130898 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130899 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130900 +65 65 65 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
130901 +249 249 249 200 196 176 66 66 66 66 66 66 66 66 66 200 196 176
130902 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
130903 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130904 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130905 +65 65 65 176 168 138 249 249 249 255 255 255 255 255 255 255 255 255
130906 +255 255 255 255 255 255 66 66 66 66 66 66 66 66 66 255 255 255
130907 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
130908 +249 249 249 238 238 238 249 249 249 238 238 238 249 249 249 238 238 238
130909 +249 249 249 238 238 238 249 249 249 238 238 238 249 249 249 249 249 249
130910 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130911 +255 255 255 249 249 249 200 196 176 66 66 66 66 66 66 66 66 66
130912 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
130913 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130914 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130915 +66 66 66 66 66 66 200 196 176 255 255 255 255 255 255 255 255 255
130916 +249 249 249 249 249 249 231 229 217 66 66 66 66 66 66 66 66 66
130917 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
130918 +249 249 249 140 134 120 66 66 66 66 66 66 66 66 66 66 66 66
130919 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
130920 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
130921 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130922 +66 66 66 66 66 66 66 66 66 66 66 66 52 52 52 138 129 110
130923 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130924 +66 66 66 66 66 66 66 66 66 66 66 66 249 249 249 255 255 255
130925 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 66 66 66
130926 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130927 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130928 +66 66 66 66 66 66 66 66 66 66 66 66 249 249 249 255 255 255
130929 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 66 66 66
130930 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
130931 +255 255 255 255 255 255 140 134 120 66 66 66 192 187 164 255 255 255
130932 +255 255 255 255 255 255 255 255 255 249 249 249 231 230 220 66 66 66
130933 +65 65 65 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
130934 +66 66 66 66 66 66 66 66 66 66 66 66 200 196 176 255 255 255
130935 +255 255 255 255 255 255 255 255 255 255 255 255 238 238 238 66 66 66
130936 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130937 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130938 +66 66 66 66 66 66 66 66 66 65 65 65 192 187 164 255 255 255
130939 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 49 49 49
130940 +46 46 46 43 43 43 41 41 41 38 38 38 35 35 35 32 32 32
130941 +30 30 30 27 27 27 25 25 25 22 22 22 19 19 19 17 17 17
130942 +15 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4
130943 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
130944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
130972 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
130973 +6 6 6 8 8 8 10 10 10 13 13 13 15 14 14 17 17 17
130974 +20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32
130975 +35 35 35 38 38 38 41 41 41 43 43 43 46 46 46 49 49 49
130976 +52 52 52 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130977 +255 255 255 192 187 164 65 65 65 66 66 66 66 66 66 66 66 66
130978 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130979 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130980 +66 66 66 238 238 238 249 249 249 255 255 255 255 255 255 255 255 255
130981 +249 249 249 200 196 176 66 66 66 66 66 66 66 66 66 231 230 220
130982 +238 238 238 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
130983 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130984 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130985 +66 66 66 176 168 138 249 249 249 255 255 255 255 255 255 255 255 255
130986 +255 255 255 255 255 255 66 66 66 66 66 66 66 66 66 255 255 255
130987 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130988 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 255 255 255
130989 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 255 255 255
130990 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
130991 +255 255 255 249 249 249 140 134 120 65 65 65 66 66 66 66 66 66
130992 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130993 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130994 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
130995 +66 66 66 66 66 66 200 196 176 249 249 249 255 255 255 255 255 255
130996 +255 255 255 249 249 249 200 196 176 66 66 66 66 66 66 66 66 66
130997 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
130998 +255 255 255 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
130999 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131000 +192 187 164 249 249 249 249 249 249 255 255 255 255 255 255 249 249 249
131001 +231 230 220 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
131002 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
131003 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131004 +138 129 110 65 65 65 66 66 66 140 134 120 255 255 255 255 255 255
131005 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 66 66 66
131006 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131007 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131008 +66 66 66 66 66 66 66 66 66 66 66 66 255 255 255 255 255 255
131009 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 66 66 66
131010 +66 66 66 66 66 66 238 238 238 255 255 255 255 255 255 255 255 255
131011 +255 255 255 255 255 255 140 134 120 66 66 66 200 196 176 249 249 249
131012 +255 255 255 255 255 255 255 255 255 255 255 255 200 196 176 66 66 66
131013 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131014 +66 66 66 66 66 66 66 66 66 66 66 66 200 196 176 249 249 249
131015 +255 255 255 255 255 255 255 255 255 255 255 255 238 238 238 66 66 66
131016 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131017 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131018 +66 66 66 66 66 66 66 66 66 65 65 65 192 187 164 249 249 249
131019 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 47 47 47
131020 +46 46 46 43 43 43 41 41 41 38 38 38 35 35 35 32 32 32
131021 +30 30 30 27 27 27 25 25 25 22 22 22 19 19 19 17 17 17
131022 +15 14 14 13 13 13 10 10 10 8 8 8 6 6 6 4 4 4
131023 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
131024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131052 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
131053 +6 6 6 8 8 8 10 10 10 13 13 13 15 14 14 17 17 17
131054 +20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 33 33 33
131055 +35 35 35 38 38 38 41 41 41 43 43 43 46 46 46 49 49 49
131056 +50 50 50 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131057 +249 249 249 192 187 164 65 65 65 66 66 66 66 66 66 66 66 66
131058 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131059 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131060 +65 65 65 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131061 +249 249 249 200 196 176 66 66 66 66 66 66 66 66 66 200 196 176
131062 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131063 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131064 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131065 +66 66 66 140 134 120 249 249 249 255 255 255 255 255 255 255 255 255
131066 +255 255 255 249 249 249 138 129 110 66 66 66 66 66 66 255 255 255
131067 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131068 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131069 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131070 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131071 +255 255 255 200 196 176 65 65 65 65 65 65 66 66 66 65 65 65
131072 +200 196 176 249 249 249 255 255 255 255 255 255 249 249 249 249 249 249
131073 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131074 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131075 +66 66 66 65 65 65 200 196 176 255 255 255 255 255 255 255 255 255
131076 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
131077 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131078 +238 238 238 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
131079 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131080 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131081 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131082 +66 66 66 66 66 66 66 66 66 66 66 66 52 52 52 138 129 110
131083 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131084 +66 66 66 66 66 66 52 52 52 138 129 110 255 255 255 255 255 255
131085 +255 255 255 255 255 255 255 255 255 249 249 249 140 134 120 66 66 66
131086 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131087 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131088 +66 66 66 66 66 66 65 65 65 138 129 110 255 255 255 255 255 255
131089 +255 255 255 255 255 255 255 255 255 249 249 249 163 154 123 66 66 66
131090 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
131091 +255 255 255 255 255 255 140 134 120 66 66 66 192 187 164 255 255 255
131092 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 66 66 66
131093 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131094 +66 66 66 66 66 66 66 66 66 66 66 66 200 196 176 255 255 255
131095 +255 255 255 255 255 255 255 255 255 255 255 255 238 238 238 66 66 66
131096 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131097 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131098 +66 66 66 66 66 66 65 65 65 65 65 65 192 187 164 249 249 249
131099 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 49 49 49
131100 +46 46 46 43 43 43 41 41 41 38 38 38 35 35 35 32 32 32
131101 +30 30 30 27 27 27 25 25 25 22 22 22 20 20 20 17 17 17
131102 +15 14 14 13 13 13 10 10 10 8 8 8 6 6 6 4 4 4
131103 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
131104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131132 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
131133 +6 6 6 8 8 8 10 10 10 13 13 13 15 14 14 17 17 17
131134 +20 20 20 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32
131135 +35 35 35 38 38 38 41 41 41 43 43 43 46 46 46 49 49 49
131136 +52 52 52 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131137 +249 249 249 192 187 164 65 65 65 66 66 66 66 66 66 66 66 66
131138 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131139 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131140 +65 65 65 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131141 +255 255 255 200 196 176 66 66 66 66 66 66 66 66 66 200 196 176
131142 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131143 +65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131144 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131145 +66 66 66 192 187 164 249 249 249 255 255 255 255 255 255 255 255 255
131146 +255 255 255 255 255 255 66 66 66 66 66 66 66 66 66 255 255 255
131147 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131148 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131149 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131150 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131151 +192 187 164 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131152 +200 196 176 249 249 249 249 249 249 255 255 255 255 255 255 249 249 249
131153 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131154 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131155 +66 66 66 66 66 66 200 196 176 249 249 249 249 249 249 255 255 255
131156 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
131157 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131158 +255 255 255 176 168 138 65 65 65 66 66 66 66 66 66 66 66 66
131159 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131160 +192 187 164 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
131161 +231 230 220 65 65 65 65 65 65 66 66 66 66 66 66 66 66 66
131162 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
131163 +238 238 238 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131164 +138 129 110 65 65 65 66 66 66 138 129 110 238 238 238 255 255 255
131165 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 66 66 66
131166 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131167 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131168 +66 66 66 66 66 66 66 66 66 66 66 66 255 255 255 255 255 255
131169 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 66 66 66
131170 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
131171 +255 255 255 255 255 255 140 134 120 66 66 66 140 134 120 238 238 238
131172 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 196 176
131173 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131174 +66 66 66 66 66 66 66 66 66 66 66 66 200 196 176 249 249 249
131175 +255 255 255 255 255 255 255 255 255 255 255 255 238 238 238 66 66 66
131176 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131177 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131178 +66 66 66 66 66 66 66 66 66 65 65 65 192 187 164 249 249 249
131179 +249 249 249 255 255 255 255 255 255 255 255 255 238 238 238 50 50 50
131180 +46 46 46 43 43 43 41 41 41 38 38 38 35 35 35 32 32 32
131181 +30 30 30 27 27 27 25 25 25 22 22 22 19 19 19 17 17 17
131182 +15 14 14 13 13 13 10 10 10 8 8 8 6 6 6 4 4 4
131183 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
131184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131212 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
131213 +6 6 6 8 8 8 10 10 10 12 12 12 15 14 14 17 17 17
131214 +19 19 19 22 22 22 25 25 25 27 27 27 30 30 30 32 32 32
131215 +35 35 35 38 38 38 41 41 41 43 43 43 46 46 46 49 49 49
131216 +52 52 52 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131217 +249 249 249 200 196 176 66 66 66 66 66 66 66 66 66 66 66 66
131218 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131219 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131220 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131221 +249 249 249 192 187 164 66 66 66 66 66 66 66 66 66 200 196 176
131222 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131223 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131224 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131225 +65 65 65 192 187 164 255 255 255 255 255 255 255 255 255 255 255 255
131226 +255 255 255 255 255 255 66 66 66 66 66 66 66 66 66 255 255 255
131227 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 185 178 149
131228 +65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
131229 +65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
131230 +65 65 65 66 66 66 65 65 65 66 66 66 66 66 66 66 66 66
131231 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131232 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131233 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131234 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131235 +66 66 66 65 65 65 200 196 176 255 255 255 255 255 255 255 255 255
131236 +249 249 249 249 249 249 231 229 217 66 66 66 66 66 66 66 66 66
131237 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131238 +249 249 249 140 134 120 66 66 66 66 66 66 66 66 66 66 66 66
131239 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131240 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131241 +231 230 220 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
131242 +66 66 66 66 66 66 66 66 66 66 66 66 52 52 52 138 129 110
131243 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131244 +66 66 66 66 66 66 66 66 66 66 66 66 249 249 249 255 255 255
131245 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 66 66 66
131246 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131247 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131248 +66 66 66 66 66 66 66 66 66 138 129 110 255 255 255 255 255 255
131249 +255 255 255 255 255 255 255 255 255 249 249 249 140 134 120 66 66 66
131250 +66 66 66 66 66 66 238 238 238 255 255 255 255 255 255 255 255 255
131251 +255 255 255 255 255 255 140 134 120 66 66 66 52 52 52 230 228 210
131252 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131253 +192 187 164 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131254 +66 66 66 66 66 66 66 66 66 66 66 66 192 187 164 255 255 255
131255 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 66 66 66
131256 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131257 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131258 +66 66 66 66 66 66 65 65 65 65 65 65 200 196 176 249 249 249
131259 +255 255 255 255 255 255 255 255 255 255 255 255 238 238 238 49 49 49
131260 +46 46 46 43 43 43 41 41 41 38 38 38 35 35 35 32 32 32
131261 +30 30 30 27 27 27 25 25 25 22 22 22 19 19 19 17 17 17
131262 +15 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4
131263 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
131264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131292 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
131293 +6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 17 17 17
131294 +19 19 19 21 21 21 24 24 24 27 27 27 30 30 30 32 32 32
131295 +35 35 35 38 38 38 41 41 41 43 43 43 46 46 46 48 48 47
131296 +50 50 50 230 228 210 249 249 249 255 255 255 255 255 255 255 255 255
131297 +255 255 255 231 230 220 65 65 65 66 66 66 66 66 66 66 66 66
131298 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131299 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131300 +66 66 66 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131301 +249 249 249 140 134 120 66 66 66 66 66 66 66 66 66 231 230 220
131302 +238 238 238 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131303 +65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131304 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131305 +66 66 66 200 196 176 249 249 249 249 249 249 255 255 255 255 255 255
131306 +255 255 255 238 238 238 66 66 66 66 66 66 66 66 66 255 255 255
131307 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 192 187 164
131308 +65 65 65 65 65 65 66 66 66 65 65 65 66 66 66 66 66 66
131309 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131310 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131311 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131312 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131313 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131314 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131315 +66 66 66 66 66 66 200 196 176 249 249 249 255 255 255 255 255 255
131316 +255 255 255 249 249 249 200 196 176 66 66 66 66 66 66 66 66 66
131317 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131318 +255 255 255 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
131319 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131320 +192 187 164 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
131321 +231 230 220 65 65 65 65 65 65 66 66 66 66 66 66 66 66 66
131322 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
131323 +238 238 238 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131324 +138 129 110 65 65 65 66 66 66 66 66 66 255 255 255 255 255 255
131325 +255 255 255 255 255 255 255 255 255 255 255 255 192 187 164 66 66 66
131326 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131327 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131328 +66 66 66 66 66 66 66 66 66 140 134 120 249 249 249 255 255 255
131329 +255 255 255 255 255 255 255 255 255 255 255 255 138 129 110 65 65 65
131330 +65 65 65 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
131331 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 66 66 66
131332 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131333 +249 249 249 185 178 149 66 66 66 66 66 66 66 66 66 66 66 66
131334 +66 66 66 66 66 66 66 66 66 66 66 66 185 178 149 249 249 249
131335 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 66 66 66
131336 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131337 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131338 +66 66 66 66 66 66 66 66 66 65 65 65 231 230 220 249 249 249
131339 +255 255 255 255 255 255 255 255 255 255 255 255 200 196 176 52 52 52
131340 +47 47 47 43 43 43 41 41 41 37 37 37 35 35 35 32 32 32
131341 +30 30 30 27 27 27 24 24 24 21 21 21 19 19 19 17 17 17
131342 +14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4
131343 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
131344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131372 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
131373 +6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 16 16 16
131374 +19 19 19 21 21 21 24 24 24 26 26 26 30 30 30 32 32 32
131375 +35 35 35 37 37 37 41 41 41 43 43 43 45 45 45 49 49 49
131376 +47 47 47 200 196 176 255 255 255 255 255 255 255 255 255 255 255 255
131377 +249 249 249 238 238 238 66 66 66 66 66 66 66 66 66 66 66 66
131378 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131379 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131380 +140 134 120 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131381 +249 249 249 140 134 120 66 66 66 66 66 66 66 66 66 200 196 176
131382 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131383 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131384 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131385 +65 65 65 231 230 220 255 255 255 255 255 255 255 255 255 255 255 255
131386 +249 249 249 231 229 217 66 66 66 66 66 66 66 66 66 238 238 238
131387 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131388 +65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131389 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131390 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131391 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131392 +200 196 176 249 249 249 255 255 255 255 255 255 249 249 249 249 249 249
131393 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131394 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131395 +66 66 66 65 65 65 200 196 176 249 249 249 255 255 255 255 255 255
131396 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
131397 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131398 +238 238 238 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
131399 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131400 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131401 +231 230 220 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
131402 +66 66 66 66 66 66 66 66 66 66 66 66 52 52 52 138 129 110
131403 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131404 +66 66 66 66 66 66 66 66 66 66 66 66 238 238 238 255 255 255
131405 +255 255 255 255 255 255 255 255 255 249 249 249 231 230 220 66 66 66
131406 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131407 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131408 +66 66 66 66 66 66 65 65 65 192 187 164 255 255 255 255 255 255
131409 +255 255 255 255 255 255 255 255 255 249 249 249 66 66 66 65 65 65
131410 +66 66 66 66 66 66 238 238 238 255 255 255 255 255 255 255 255 255
131411 +255 255 255 249 249 249 176 168 138 66 66 66 66 66 66 65 65 65
131412 +138 129 110 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131413 +249 249 249 238 238 238 176 168 138 66 66 66 66 66 66 66 66 66
131414 +66 66 66 66 66 66 66 66 66 66 66 66 140 134 120 255 255 255
131415 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 140 134 120
131416 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131417 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131418 +66 66 66 66 66 66 66 66 66 66 66 66 238 238 238 249 249 249
131419 +255 255 255 255 255 255 255 255 255 255 255 255 192 187 164 49 49 49
131420 +45 45 45 43 43 43 41 41 41 37 37 37 35 35 35 32 32 32
131421 +30 30 30 26 26 26 24 24 24 21 21 21 19 19 19 16 16 16
131422 +14 14 14 12 12 12 10 10 10 8 8 8 6 6 6 4 4 4
131423 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
131424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131452 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 3 4 4 4
131453 +6 6 6 8 8 8 10 10 10 12 12 12 14 14 14 16 16 16
131454 +18 18 18 21 21 21 24 24 24 26 26 26 28 28 28 30 30 30
131455 +35 35 35 37 37 37 39 39 39 42 42 42 45 45 45 47 47 47
131456 +50 50 50 163 154 123 249 249 249 255 255 255 255 255 255 255 255 255
131457 +255 255 255 255 255 255 140 134 120 65 65 65 66 66 66 66 66 66
131458 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131459 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131460 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131461 +255 255 255 66 66 66 66 66 66 66 66 66 66 66 66 200 196 176
131462 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131463 +65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131464 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131465 +66 66 66 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
131466 +255 255 255 200 196 176 66 66 66 66 66 66 66 66 66 230 228 210
131467 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 231 230 220
131468 +65 65 65 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
131469 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131470 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131471 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131472 +200 196 176 249 249 249 249 249 249 255 255 255 255 255 255 249 249 249
131473 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131474 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131475 +66 66 66 66 66 66 200 196 176 249 249 249 255 255 255 255 255 255
131476 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
131477 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131478 +255 255 255 176 168 138 65 65 65 66 66 66 66 66 66 66 66 66
131479 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131480 +192 187 164 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
131481 +231 230 220 65 65 65 65 65 65 66 66 66 66 66 66 66 66 66
131482 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
131483 +238 238 238 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131484 +138 129 110 65 65 65 66 66 66 66 66 66 230 228 210 249 249 249
131485 +255 255 255 255 255 255 255 255 255 249 249 249 249 249 249 66 66 66
131486 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131487 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131488 +66 66 66 66 66 66 66 66 66 238 238 238 249 249 249 255 255 255
131489 +255 255 255 255 255 255 255 255 255 231 230 220 66 66 66 66 66 66
131490 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
131491 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 66 66 66
131492 +65 65 65 138 129 110 238 238 238 255 255 255 255 255 255 255 255 255
131493 +255 255 255 255 255 255 249 249 249 140 134 120 66 66 66 66 66 66
131494 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 255 255 255
131495 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 196 176
131496 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131497 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131498 +66 66 66 66 66 66 66 66 66 140 134 120 249 249 249 255 255 255
131499 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 50 50 50
131500 +46 46 46 42 42 42 39 39 39 35 35 35 35 35 35 30 30 30
131501 +28 28 28 26 26 26 24 24 24 21 21 21 18 18 18 16 16 16
131502 +14 14 14 11 11 11 9 9 9 8 8 8 6 6 6 4 4 4
131503 +3 3 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
131504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131532 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 3 4 4 4
131533 +5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 16 16 16
131534 +18 18 18 20 20 20 24 24 24 25 25 25 28 28 28 30 30 30
131535 +33 33 33 35 35 35 38 38 38 41 41 41 45 45 45 46 46 46
131536 +39 39 39 138 129 110 255 255 255 255 255 255 255 255 255 255 255 255
131537 +255 255 255 249 249 249 231 230 220 66 66 66 66 66 66 66 66 66
131538 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131539 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131540 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131541 +238 238 238 66 66 66 66 66 66 66 66 66 66 66 66 200 196 176
131542 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131543 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131544 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131545 +185 178 149 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131546 +249 249 249 176 168 138 65 65 65 65 65 65 65 65 65 192 187 164
131547 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 249 249 249
131548 +66 66 66 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
131549 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131550 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131551 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131552 +200 196 176 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131553 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131554 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131555 +66 66 66 65 65 65 200 196 176 249 249 249 255 255 255 255 255 255
131556 +249 249 249 249 249 249 231 229 217 66 66 66 66 66 66 66 66 66
131557 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131558 +249 249 249 140 134 120 66 66 66 66 66 66 66 66 66 66 66 66
131559 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131560 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131561 +231 230 220 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
131562 +66 66 66 66 66 66 66 66 66 66 66 66 52 52 52 138 129 110
131563 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131564 +66 66 66 66 66 66 66 66 66 66 66 66 163 154 123 255 255 255
131565 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 192 187 164
131566 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131567 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131568 +66 66 66 66 66 66 140 134 120 249 249 249 255 255 255 255 255 255
131569 +255 255 255 255 255 255 249 249 249 192 187 164 66 66 66 66 66 66
131570 +66 66 66 66 66 66 238 238 238 255 255 255 255 255 255 255 255 255
131571 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 65 65 65
131572 +65 65 65 50 50 50 138 129 110 249 249 249 255 255 255 255 255 255
131573 +255 255 255 255 255 255 255 255 255 255 255 255 140 134 120 66 66 66
131574 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 238 238 238
131575 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131576 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131577 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131578 +66 66 66 66 66 66 65 65 65 231 230 220 255 255 255 255 255 255
131579 +255 255 255 255 255 255 255 255 255 255 255 255 66 66 66 47 47 47
131580 +43 43 43 41 41 41 38 38 38 35 35 35 33 33 33 30 30 30
131581 +28 28 28 25 25 25 24 24 24 20 20 20 18 18 18 16 16 16
131582 +13 13 13 11 11 11 9 9 9 7 7 7 5 5 5 4 4 4
131583 +3 3 3 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
131584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131612 +0 0 0 0 0 0 0 0 0 1 1 1 3 3 3 4 4 4
131613 +5 5 5 7 7 7 9 9 9 11 11 11 13 13 13 15 14 14
131614 +17 17 17 20 20 20 22 22 22 25 25 25 27 27 27 30 30 30
131615 +32 32 32 35 35 35 38 38 38 41 41 41 43 43 43 45 45 45
131616 +47 47 47 45 45 45 238 238 238 249 249 249 255 255 255 255 255 255
131617 +255 255 255 249 249 249 249 249 249 185 178 149 65 65 65 66 66 66
131618 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131619 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 238 238 238
131620 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131621 +185 178 149 66 66 66 66 66 66 66 66 66 66 66 66 231 230 220
131622 +238 238 238 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131623 +65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131624 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
131625 +238 238 238 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131626 +255 255 255 66 66 66 66 66 66 66 66 66 65 65 65 140 134 120
131627 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131628 +192 187 164 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131629 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131630 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131631 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131632 +200 196 176 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
131633 +200 196 176 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131634 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131635 +66 66 66 65 65 65 200 196 176 249 249 249 255 255 255 255 255 255
131636 +255 255 255 249 249 249 200 196 176 65 65 65 66 66 66 66 66 66
131637 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131638 +255 255 255 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
131639 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131640 +192 187 164 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
131641 +231 230 220 65 65 65 65 65 65 66 66 66 66 66 66 66 66 66
131642 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 138 129 110
131643 +238 238 238 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131644 +138 129 110 65 65 65 66 66 66 66 66 66 66 66 66 255 255 255
131645 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131646 +140 134 120 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
131647 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131648 +66 66 66 138 129 110 238 238 238 249 249 249 255 255 255 255 255 255
131649 +255 255 255 255 255 255 255 255 255 138 129 110 65 65 65 66 66 66
131650 +66 66 66 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
131651 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 66 66 66
131652 +65 65 65 65 65 65 65 65 65 140 134 120 249 249 249 249 249 249
131653 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 140 134 120
131654 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 200 196 176
131655 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131656 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131657 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131658 +66 66 66 65 65 65 192 187 164 249 249 249 249 249 249 255 255 255
131659 +255 255 255 255 255 255 255 255 255 231 230 220 52 52 52 49 49 49
131660 +43 43 43 41 41 41 38 38 38 35 35 35 32 32 32 30 30 30
131661 +27 27 27 25 25 25 22 22 22 20 20 20 17 17 17 15 14 14
131662 +13 13 13 11 11 11 9 9 9 7 7 7 5 5 5 4 4 4
131663 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
131664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131692 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3
131693 +5 5 5 7 7 7 9 9 9 10 10 10 13 13 13 15 14 14
131694 +17 17 17 19 19 19 21 21 21 24 24 24 26 26 26 30 30 30
131695 +30 30 30 35 35 35 37 37 37 39 39 39 42 42 42 43 43 43
131696 +49 49 49 52 52 52 140 134 120 255 255 255 255 255 255 255 255 255
131697 +255 255 255 255 255 255 249 249 249 249 249 249 200 196 176 66 66 66
131698 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131699 +66 66 66 65 65 65 65 65 65 138 129 110 238 238 238 255 255 255
131700 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131701 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 200 196 176
131702 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
131703 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131704 +66 66 66 66 66 66 66 66 66 66 66 66 140 134 120 238 238 238
131705 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131706 +231 230 220 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131707 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131708 +249 249 249 185 178 149 66 66 66 66 66 66 66 66 66 66 66 66
131709 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131710 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131711 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131712 +200 196 176 249 249 249 255 255 255 255 255 255 249 249 249 249 249 249
131713 +231 229 217 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131714 +66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 65 65 65
131715 +65 65 65 65 65 65 200 196 176 249 249 249 255 255 255 255 255 255
131716 +255 255 255 249 249 249 200 196 176 66 66 66 66 66 66 66 66 66
131717 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131718 +238 238 238 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
131719 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
131720 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131721 +231 230 220 65 65 65 66 66 66 66 66 66 66 66 66 66 66 66
131722 +66 66 66 66 66 66 66 66 66 66 66 66 52 52 52 138 129 110
131723 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131724 +66 66 66 65 65 65 66 66 66 66 66 66 66 66 66 230 227 205
131725 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131726 +238 238 238 176 168 138 66 66 66 66 66 66 66 66 66 66 66 66
131727 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131728 +140 134 120 238 238 238 249 249 249 255 255 255 255 255 255 255 255 255
131729 +255 255 255 249 249 249 238 238 238 65 65 65 65 65 65 65 65 65
131730 +66 66 66 66 66 66 238 238 238 255 255 255 255 255 255 255 255 255
131731 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 65 65 65
131732 +65 65 65 65 65 65 65 65 65 52 52 52 140 134 120 255 255 255
131733 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 238 238 238
131734 +140 134 120 66 66 66 66 66 66 66 66 66 52 52 52 138 129 110
131735 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131736 +249 249 249 231 230 220 138 129 110 66 66 66 66 66 66 66 66 66
131737 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66
131738 +66 66 66 200 196 176 249 249 249 249 249 249 255 255 255 255 255 255
131739 +255 255 255 255 255 255 255 255 255 140 134 120 47 47 47 45 45 45
131740 +42 42 42 39 39 39 37 37 37 35 35 35 30 30 30 30 30 30
131741 +26 26 26 24 24 24 21 21 21 19 19 19 17 17 17 15 14 14
131742 +13 13 13 10 10 10 8 8 8 6 6 6 5 5 5 3 3 3
131743 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
131744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131772 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3
131773 +5 5 5 6 6 6 8 8 8 10 10 10 12 12 12 14 14 14
131774 +16 16 16 18 18 18 21 21 21 24 24 24 26 26 26 28 28 28
131775 +30 30 30 33 33 33 35 35 35 38 38 38 41 41 41 43 43 43
131776 +45 45 45 50 50 50 65 65 65 238 238 238 255 255 255 255 255 255
131777 +255 255 255 255 255 255 255 255 255 249 249 249 249 249 249 249 249 249
131778 +200 196 176 140 134 120 140 134 120 66 66 66 138 129 110 66 66 66
131779 +140 134 120 176 168 138 231 230 220 238 238 238 249 249 249 255 255 255
131780 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 200 196 176
131781 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 200 196 176
131782 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 238 238 238
131783 +192 187 164 192 187 164 200 196 176 192 187 164 200 196 176 192 187 164
131784 +192 187 164 200 196 176 200 196 176 238 238 238 255 255 255 255 255 255
131785 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131786 +138 129 110 65 65 65 65 65 65 65 65 65 65 65 65 66 66 66
131787 +200 196 176 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131788 +255 255 255 249 249 249 249 249 249 200 196 176 192 187 164 192 187 164
131789 +192 187 164 192 187 164 192 187 164 192 187 164 192 187 164 192 187 164
131790 +192 187 164 192 187 164 192 187 164 192 187 164 192 187 164 192 187 164
131791 +192 187 164 176 168 138 65 65 65 65 65 65 65 65 65 65 65 65
131792 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131793 +200 196 176 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
131794 +65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
131795 +65 65 65 65 65 65 200 196 176 249 249 249 249 249 249 255 255 255
131796 +255 255 255 255 255 255 200 196 176 66 66 66 66 66 66 66 66 66
131797 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131798 +255 255 255 140 134 120 66 66 66 66 66 66 66 66 66 66 66 66
131799 +66 66 66 66 66 66 66 66 66 65 65 65 65 65 65 65 65 65
131800 +192 187 164 238 238 238 255 255 255 255 255 255 255 255 255 249 249 249
131801 +231 230 220 52 52 52 66 66 66 65 65 65 65 65 65 65 65 65
131802 +65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 138 129 110
131803 +238 238 238 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131804 +138 129 110 65 65 65 65 65 65 66 66 66 65 65 65 138 129 110
131805 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131806 +249 249 249 249 249 249 238 238 238 200 196 176 140 134 120 138 129 110
131807 +66 66 66 140 134 120 66 66 66 140 134 120 192 187 164 238 238 238
131808 +249 249 249 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131809 +255 255 255 255 255 255 140 134 120 65 65 65 65 65 65 65 65 65
131810 +65 65 65 65 65 65 249 249 249 255 255 255 255 255 255 255 255 255
131811 +255 255 255 255 255 255 140 134 120 66 66 66 66 66 66 65 65 65
131812 +65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 140 134 120
131813 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131814 +249 249 249 138 129 110 65 65 65 65 65 65 66 66 66 52 52 52
131815 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131816 +255 255 255 249 249 249 249 249 249 230 228 210 163 154 123 140 134 120
131817 +138 129 110 66 66 66 138 129 110 138 129 110 140 134 120 200 196 176
131818 +249 249 249 255 255 255 249 249 249 255 255 255 255 255 255 255 255 255
131819 +255 255 255 255 255 255 238 238 238 52 52 52 47 47 47 43 43 43
131820 +41 41 41 38 38 38 35 35 35 33 33 33 30 30 30 28 28 28
131821 +25 25 25 24 24 24 21 21 21 18 18 18 16 16 16 14 14 14
131822 +12 12 12 10 10 10 8 8 8 6 6 6 4 4 4 3 3 3
131823 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
131824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131852 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3
131853 +4 4 4 6 6 6 8 8 8 9 9 9 11 11 11 13 13 13
131854 +16 16 16 18 18 18 20 20 20 22 22 22 25 25 25 27 27 27
131855 +30 30 30 32 32 32 33 33 33 37 37 37 39 39 39 41 41 41
131856 +45 45 45 46 46 46 41 41 41 138 129 110 249 249 249 255 255 255
131857 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131858 +255 255 255 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131859 +249 249 249 249 249 249 249 249 249 249 249 249 255 255 255 255 255 255
131860 +255 255 255 255 255 255 255 255 255 255 255 255 238 238 238 66 66 66
131861 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 200 196 176
131862 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 249 249 249
131863 +249 249 249 238 238 238 249 249 249 238 238 238 249 249 249 238 238 238
131864 +249 249 249 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
131865 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 192 187 164
131866 +52 52 52 65 65 65 52 52 52 65 65 65 65 65 65 66 66 66
131867 +66 66 66 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131868 +255 255 255 255 255 255 255 255 255 249 249 249 249 249 249 249 249 249
131869 +249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249
131870 +249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 249
131871 +238 238 238 231 230 220 65 65 65 65 65 65 65 65 65 65 65 65
131872 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131873 +200 196 176 65 65 65 52 52 52 65 65 65 65 65 65 52 52 52
131874 +65 65 65 52 52 52 65 65 65 52 52 52 65 65 65 52 52 52
131875 +65 65 65 52 52 52 200 196 176 255 255 255 255 255 255 255 255 255
131876 +255 255 255 255 255 255 200 196 176 66 66 66 65 65 65 65 65 65
131877 +65 65 65 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131878 +249 249 249 176 168 138 66 66 66 65 65 65 65 65 65 65 65 65
131879 +65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 52 52 52
131880 +192 187 164 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
131881 +231 230 220 65 65 65 65 65 65 65 65 65 65 65 65 65 65 65
131882 +65 65 65 65 65 65 65 65 65 65 65 65 47 47 47 138 129 110
131883 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131884 +66 66 66 52 52 52 65 65 65 65 65 65 65 65 65 52 52 52
131885 +176 168 138 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131886 +255 255 255 255 255 255 249 249 249 249 249 249 249 249 249 249 249 249
131887 +255 255 255 255 255 255 255 255 255 249 249 249 249 249 249 249 249 249
131888 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131889 +255 255 255 200 196 176 52 52 52 65 65 65 52 52 52 65 65 65
131890 +65 65 65 65 65 65 238 238 238 255 255 255 255 255 255 255 255 255
131891 +255 255 255 255 255 255 140 134 120 65 65 65 65 65 65 65 65 65
131892 +65 65 65 65 65 65 52 52 52 65 65 65 65 65 65 66 66 66
131893 +140 134 120 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131894 +238 238 238 238 238 238 138 129 110 65 65 65 66 66 66 66 66 66
131895 +66 66 66 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131896 +255 255 255 255 255 255 249 249 249 249 249 249 249 249 249 249 249 249
131897 +249 249 249 249 249 249 249 249 249 249 249 249 249 249 249 255 255 255
131898 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131899 +255 255 255 238 238 238 138 129 110 47 47 47 43 43 43 42 42 42
131900 +39 39 39 37 37 37 35 35 35 32 32 32 30 30 30 27 27 27
131901 +25 25 25 22 22 22 20 20 20 18 18 18 16 16 16 13 13 13
131902 +11 11 11 9 9 9 8 8 8 6 6 6 4 4 4 3 3 3
131903 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
131904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131932 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 3 3 3
131933 +4 4 4 5 5 5 7 7 7 9 9 9 11 11 11 13 13 13
131934 +15 14 14 17 17 17 19 19 19 21 21 21 24 24 24 26 26 26
131935 +28 28 28 30 30 30 33 33 33 35 35 35 38 38 38 39 39 39
131936 +42 42 42 45 45 45 46 46 46 45 45 45 140 134 120 249 249 249
131937 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131938 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131939 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131940 +255 255 255 255 255 255 255 255 255 238 238 238 138 129 110 52 52 52
131941 +66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 231 230 220
131942 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131943 +249 249 249 255 255 255 249 249 249 255 255 255 249 249 249 255 255 255
131944 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131945 +255 255 255 255 255 255 255 255 255 255 255 255 200 196 176 66 66 66
131946 +65 65 65 52 52 52 65 65 65 52 52 52 65 65 65 65 65 65
131947 +66 66 66 140 134 120 255 255 255 255 255 255 255 255 255 255 255 255
131948 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131949 +255 255 255 249 249 249 255 255 255 249 249 249 255 255 255 249 249 249
131950 +255 255 255 249 249 249 255 255 255 249 249 249 249 249 249 249 249 249
131951 +249 249 249 231 230 220 52 52 52 65 65 65 52 52 52 65 65 65
131952 +200 196 176 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
131953 +200 196 176 65 65 65 65 65 65 52 52 52 65 65 65 65 65 65
131954 +52 52 52 65 65 65 65 65 65 65 65 65 52 52 52 65 65 65
131955 +65 65 65 52 52 52 200 196 176 249 249 249 249 249 249 255 255 255
131956 +255 255 255 255 255 255 200 196 176 66 66 66 65 65 65 65 65 65
131957 +52 52 52 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
131958 +249 249 249 140 134 120 66 66 66 65 65 65 65 65 65 52 52 52
131959 +65 65 65 52 52 52 65 65 65 65 65 65 52 52 52 65 65 65
131960 +192 187 164 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
131961 +231 230 220 52 52 52 65 65 65 52 52 52 65 65 65 52 52 52
131962 +65 65 65 52 52 52 65 65 65 65 65 65 52 52 52 66 66 66
131963 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131964 +138 129 110 52 52 52 65 65 65 52 52 52 52 52 52 65 65 65
131965 +65 65 65 192 187 164 249 249 249 255 255 255 255 255 255 255 255 255
131966 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 255 255 255
131967 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
131968 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131969 +230 227 205 66 66 66 65 65 65 65 65 65 52 52 52 65 65 65
131970 +52 52 52 65 65 65 238 238 238 255 255 255 255 255 255 255 255 255
131971 +255 255 255 255 255 255 140 134 120 66 66 66 65 65 65 52 52 52
131972 +52 52 52 65 65 65 65 65 65 52 52 52 65 65 65 65 65 65
131973 +65 65 65 176 168 138 249 249 249 255 255 255 255 255 255 255 255 255
131974 +249 249 249 249 249 249 238 238 238 66 66 66 66 66 66 65 65 65
131975 +65 65 65 66 66 66 249 249 249 255 255 255 255 255 255 255 255 255
131976 +255 255 255 255 255 255 255 255 255 249 249 249 255 255 255 249 249 249
131977 +255 255 255 255 255 255 249 249 249 249 249 249 255 255 255 255 255 255
131978 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
131979 +249 249 249 140 134 120 39 39 39 41 41 41 42 42 42 41 41 41
131980 +38 38 38 35 35 35 33 33 33 30 30 30 28 28 28 26 26 26
131981 +24 24 24 21 21 21 19 19 19 17 17 17 15 14 14 13 13 13
131982 +11 11 11 9 9 9 7 7 7 5 5 5 4 4 4 3 3 3
131983 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
131999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132012 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2
132013 +3 3 3 5 5 5 6 6 6 8 8 8 10 10 10 12 12 12
132014 +14 14 14 16 16 16 18 18 18 20 20 20 24 24 24 25 25 25
132015 +27 27 27 30 30 30 32 32 32 35 35 35 35 35 35 38 38 38
132016 +41 41 41 43 43 43 45 45 45 45 45 45 65 65 65 66 66 66
132017 +231 230 220 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132018 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132019 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132020 +255 255 255 255 255 255 200 196 176 66 66 66 52 52 52 66 66 66
132021 +66 66 66 66 66 66 66 66 66 66 66 66 65 65 65 200 196 176
132022 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132023 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132024 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132025 +255 255 255 255 255 255 249 249 249 176 168 138 65 65 65 52 52 52
132026 +52 52 52 65 65 65 52 52 52 65 65 65 52 52 52 52 52 52
132027 +52 52 52 52 52 52 138 129 110 249 249 249 255 255 255 255 255 255
132028 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132029 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132030 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132031 +249 249 249 231 230 220 65 65 65 52 52 52 65 65 65 52 52 52
132032 +200 196 176 249 249 249 255 255 255 255 255 255 255 255 255 249 249 249
132033 +200 196 176 65 65 65 52 52 52 65 65 65 52 52 52 65 65 65
132034 +52 52 52 65 65 65 52 52 52 52 52 52 65 65 65 52 52 52
132035 +65 65 65 52 52 52 200 196 176 255 255 255 255 255 255 255 255 255
132036 +255 255 255 255 255 255 200 196 176 52 52 52 65 65 65 52 52 52
132037 +65 65 65 238 238 238 255 255 255 255 255 255 255 255 255 255 255 255
132038 +249 249 249 176 168 138 65 65 65 65 65 65 52 52 52 65 65 65
132039 +65 65 65 52 52 52 65 65 65 52 52 52 65 65 65 52 52 52
132040 +192 187 164 255 255 255 255 255 255 255 255 255 255 255 255 249 249 249
132041 +231 230 220 65 65 65 52 52 52 65 65 65 65 65 65 52 52 52
132042 +65 65 65 65 65 65 52 52 52 52 52 52 65 65 65 138 129 110
132043 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132044 +66 66 66 52 52 52 52 52 52 65 65 65 65 65 65 52 52 52
132045 +52 52 52 65 65 65 140 134 120 238 238 238 255 255 255 255 255 255
132046 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132047 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132048 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 176 168 138
132049 +65 65 65 52 52 52 65 65 65 52 52 52 65 65 65 52 52 52
132050 +65 65 65 52 52 52 249 249 249 255 255 255 255 255 255 255 255 255
132051 +255 255 255 255 255 255 140 134 120 52 52 52 65 65 65 52 52 52
132052 +65 65 65 52 52 52 52 52 52 65 65 65 52 52 52 52 52 52
132053 +65 65 65 52 52 52 185 178 149 255 255 255 255 255 255 255 255 255
132054 +255 255 255 249 249 249 249 249 249 249 249 249 66 66 66 65 65 65
132055 +66 66 66 66 66 66 66 66 66 200 196 176 255 255 255 255 255 255
132056 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132057 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132058 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 238 238 238
132059 +66 66 66 47 47 47 45 45 45 42 42 42 41 41 41 38 38 38
132060 +35 35 35 33 33 33 32 32 32 30 30 30 27 27 27 25 25 25
132061 +24 24 24 20 20 20 18 18 18 16 16 16 14 14 14 12 12 12
132062 +10 10 10 8 8 8 6 6 6 5 5 5 3 3 3 2 2 2
132063 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132092 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2
132093 +3 3 3 4 4 4 6 6 6 8 8 8 9 9 9 11 11 11
132094 +13 13 13 15 14 14 17 17 17 20 20 20 21 21 21 24 24 24
132095 +26 26 26 28 28 28 30 30 30 32 32 32 35 35 35 37 37 37
132096 +39 39 39 41 41 41 43 43 43 45 45 45 47 47 47 52 52 52
132097 +52 52 52 140 134 120 200 196 176 255 255 255 255 255 255 255 255 255
132098 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132099 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 238 238 238
132100 +192 187 164 138 129 110 52 52 52 66 66 66 66 66 66 65 65 65
132101 +65 65 65 65 65 65 66 66 66 66 66 66 66 66 66 200 196 176
132102 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132103 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132104 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132105 +231 230 220 185 178 149 66 66 66 65 65 65 52 52 52 52 52 52
132106 +65 65 65 50 50 50 52 52 52 52 52 52 52 52 52 65 65 65
132107 +52 52 52 52 52 52 52 52 52 66 66 66 185 178 149 238 238 238
132108 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132109 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132110 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132111 +249 249 249 231 230 220 50 50 50 52 52 52 65 65 65 52 52 52
132112 +200 196 176 249 249 249 249 249 249 255 255 255 255 255 255 255 255 255
132113 +200 196 176 65 65 65 52 52 52 52 52 52 52 52 52 52 52 52
132114 +65 65 65 52 52 52 52 52 52 65 65 65 52 52 52 52 52 52
132115 +52 52 52 52 52 52 200 196 176 249 249 249 249 249 249 255 255 255
132116 +255 255 255 255 255 255 200 196 176 65 65 65 52 52 52 65 65 65
132117 +52 52 52 249 249 249 255 255 255 255 255 255 255 255 255 255 255 255
132118 +249 249 249 140 134 120 65 65 65 52 52 52 52 52 52 52 52 52
132119 +52 52 52 65 65 65 52 52 52 52 52 52 52 52 52 52 52 52
132120 +192 187 164 238 238 238 255 255 255 255 255 255 255 255 255 249 249 249
132121 +231 230 220 47 47 47 52 52 52 52 52 52 52 52 52 65 65 65
132122 +52 52 52 52 52 52 65 65 65 52 52 52 52 52 52 138 129 110
132123 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132124 +66 66 66 66 66 66 65 65 65 52 52 52 52 52 52 65 65 65
132125 +52 52 52 52 52 52 65 65 65 66 66 66 163 154 123 231 230 220
132126 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132127 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132128 +255 255 255 255 255 255 231 230 220 176 168 138 66 66 66 65 65 65
132129 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132130 +52 52 52 52 52 52 249 249 249 255 255 255 255 255 255 255 255 255
132131 +255 255 255 255 255 255 140 134 120 65 65 65 52 52 52 52 52 52
132132 +65 65 65 52 52 52 52 52 52 52 52 52 65 65 65 52 52 52
132133 +52 52 52 52 52 52 65 65 65 192 187 164 249 249 249 255 255 255
132134 +255 255 255 255 255 255 255 255 255 255 255 255 238 238 238 66 66 66
132135 +65 65 65 65 65 65 65 65 65 52 52 52 138 129 110 192 187 164
132136 +238 238 238 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132137 +255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
132138 +255 255 255 255 255 255 255 255 255 200 196 176 140 134 120 49 49 49
132139 +52 52 52 52 52 52 43 43 43 41 41 41 39 39 39 37 37 37
132140 +35 35 35 32 32 32 30 30 30 28 28 28 26 26 26 24 24 24
132141 +21 21 21 19 19 19 17 17 17 15 14 14 13 13 13 11 11 11
132142 +9 9 9 8 8 8 6 6 6 4 4 4 3 3 3 2 2 2
132143 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132172 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
132173 +3 3 3 4 4 4 5 5 5 7 7 7 9 9 9 10 10 10
132174 +12 12 12 14 14 14 16 16 16 18 18 18 20 20 20 22 22 22
132175 +25 25 25 27 27 27 30 30 30 30 30 30 33 33 33 35 35 35
132176 +37 37 37 39 39 39 41 41 41 43 43 43 45 45 45 49 49 49
132177 +47 47 47 49 49 49 52 52 52 66 66 66 66 66 66 140 134 120
132178 +176 168 138 192 187 164 192 187 164 231 229 217 231 230 220 200 196 176
132179 +192 187 164 192 187 164 140 134 120 140 134 120 66 66 66 65 65 65
132180 +52 52 52 52 52 52 65 65 65 65 65 65 65 65 65 65 65 65
132181 +65 65 65 65 65 65 65 65 65 66 66 66 66 66 66 200 196 176
132182 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 231 230 220
132183 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
132184 +140 134 120 140 134 120 140 134 120 140 134 120 138 129 110 66 66 66
132185 +52 52 52 52 52 52 65 65 65 52 52 52 52 52 52 52 52 52
132186 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132187 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132188 +66 66 66 138 129 110 140 134 120 140 134 120 140 134 120 140 134 120
132189 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
132190 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
132191 +140 134 120 140 134 120 52 52 52 52 52 52 52 52 52 43 43 43
132192 +138 129 110 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
132193 +140 134 120 52 52 52 52 52 52 52 52 52 65 65 65 52 52 52
132194 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 65 65 65
132195 +52 52 52 47 47 47 138 129 110 140 134 120 140 134 120 140 134 120
132196 +140 134 120 140 134 120 138 129 110 65 65 65 52 52 52 52 52 52
132197 +52 52 52 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
132198 +140 134 120 66 66 66 52 52 52 52 52 52 65 65 65 52 52 52
132199 +65 65 65 52 52 52 52 52 52 52 52 52 65 65 65 66 66 66
132200 +66 66 66 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
132201 +140 134 120 52 52 52 52 52 52 65 65 65 52 52 52 52 52 52
132202 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 66 66 66
132203 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 140 134 120
132204 +66 66 66 65 65 65 52 52 52 52 52 52 52 52 52 52 52 52
132205 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132206 +65 65 65 138 129 110 140 134 120 185 178 149 192 187 164 192 187 164
132207 +230 228 210 231 230 220 200 196 176 192 187 164 192 187 164 140 134 120
132208 +140 134 120 66 66 66 52 52 52 65 65 65 52 52 52 52 52 52
132209 +52 52 52 52 52 52 52 52 52 65 65 65 52 52 52 65 65 65
132210 +52 52 52 52 52 52 140 134 120 140 134 120 140 134 120 140 134 120
132211 +140 134 120 140 134 120 66 66 66 52 52 52 52 52 52 52 52 52
132212 +52 52 52 52 52 52 65 65 65 52 52 52 52 52 52 52 52 52
132213 +52 52 52 52 52 52 52 52 52 52 52 52 140 134 120 140 134 120
132214 +140 134 120 140 134 120 140 134 120 140 134 120 140 134 120 138 129 110
132215 +52 52 52 52 52 52 52 52 52 52 52 52 46 46 46 50 50 50
132216 +65 65 65 66 66 66 140 134 120 140 134 120 192 187 164 192 187 164
132217 +200 196 176 230 228 210 231 229 217 192 187 164 192 187 164 176 168 138
132218 +140 134 120 138 129 110 52 52 52 49 49 49 45 45 45 46 46 46
132219 +45 45 45 43 43 43 41 41 41 39 39 39 37 37 37 35 35 35
132220 +33 33 33 30 30 30 28 28 28 26 26 26 25 25 25 22 22 22
132221 +20 20 20 18 18 18 16 16 16 14 14 14 12 12 12 10 10 10
132222 +9 9 9 7 7 7 5 5 5 4 4 4 3 3 3 1 1 1
132223 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
132253 +2 2 2 3 3 3 5 5 5 6 6 6 8 8 8 10 10 10
132254 +11 11 11 13 13 13 15 14 14 17 17 17 19 19 19 21 21 21
132255 +24 24 24 25 25 25 27 27 27 30 30 30 30 30 30 33 33 33
132256 +35 35 35 37 37 37 39 39 39 41 41 41 42 42 42 43 43 43
132257 +45 45 45 46 46 46 47 47 47 52 52 52 65 65 65 52 52 52
132258 +47 47 47 45 45 45 46 46 46 46 46 46 49 49 49 52 52 52
132259 +52 52 52 52 52 52 65 65 65 65 65 65 65 65 65 65 65 65
132260 +52 52 52 65 65 65 52 52 52 52 52 52 65 65 65 52 52 52
132261 +65 65 65 52 52 52 65 65 65 65 65 65 65 65 65 200 196 176
132262 +249 249 249 255 255 255 255 255 255 255 255 255 255 255 255 200 196 176
132263 +65 65 65 66 66 66 66 66 66 66 66 66 66 66 66 65 65 65
132264 +65 65 65 65 65 65 52 52 52 52 52 52 49 49 49 52 52 52
132265 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132266 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132267 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132268 +52 52 52 49 49 49 49 49 49 52 52 52 52 52 52 52 52 52
132269 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132270 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132271 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132272 +46 46 46 49 49 49 52 52 52 52 52 52 52 52 52 49 49 49
132273 +45 45 45 49 49 49 52 52 52 52 52 52 50 50 50 52 52 52
132274 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 49 49 49
132275 +52 52 52 50 50 50 45 45 45 49 49 49 52 52 52 52 52 52
132276 +52 52 52 52 52 52 47 47 47 47 47 47 52 52 52 52 52 52
132277 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 65 65 65
132278 +65 65 65 65 65 65 52 52 52 52 52 52 52 52 52 52 52 52
132279 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132280 +65 65 65 65 65 65 52 52 52 52 52 52 52 52 52 50 50 50
132281 +47 47 47 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132282 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132283 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 65 65 65
132284 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132285 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132286 +52 52 52 46 46 46 49 49 49 49 49 49 49 49 49 50 50 50
132287 +47 47 47 45 45 45 49 49 49 49 49 49 47 47 47 50 50 50
132288 +50 50 50 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132289 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132290 +52 52 52 52 52 52 50 50 50 52 52 52 52 52 52 52 52 52
132291 +52 52 52 65 65 65 52 52 52 65 65 65 52 52 52 52 52 52
132292 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132293 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132294 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 49 49 49
132295 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132296 +52 52 52 65 65 65 52 52 52 65 65 65 50 50 50 50 50 50
132297 +52 52 52 49 49 49 43 43 43 45 45 45 45 45 45 45 45 45
132298 +43 43 43 39 39 39 43 43 43 47 47 47 45 45 45 43 43 43
132299 +43 43 43 41 41 41 39 39 39 37 37 37 35 35 35 33 33 33
132300 +32 32 32 30 30 30 27 27 27 25 25 25 24 24 24 21 21 21
132301 +19 19 19 17 17 17 15 14 14 13 13 13 11 11 11 9 9 9
132302 +8 8 8 6 6 6 5 5 5 3 3 3 2 2 2 1 1 1
132303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
132333 +2 2 2 3 3 3 4 4 4 5 5 5 7 7 7 9 9 9
132334 +10 10 10 12 12 12 14 14 14 16 16 16 18 18 18 20 20 20
132335 +21 21 21 24 24 24 25 25 25 27 27 27 30 30 30 32 32 32
132336 +33 33 33 35 35 35 37 37 37 38 38 38 39 39 39 41 41 41
132337 +43 43 43 45 45 45 45 45 45 45 45 45 46 46 46 46 46 46
132338 +49 49 49 49 49 49 49 49 49 49 49 49 52 52 52 52 52 52
132339 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132340 +52 52 52 52 52 52 52 52 52 65 65 65 52 52 52 65 65 65
132341 +52 52 52 65 65 65 65 65 65 65 65 65 66 66 66 200 196 176
132342 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
132343 +65 65 65 65 65 65 65 65 65 65 65 65 65 65 65 52 52 52
132344 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132345 +52 52 52 52 52 52 52 52 52 50 50 50 50 50 50 49 49 49
132346 +49 49 49 47 47 47 49 49 49 49 49 49 49 49 49 49 49 49
132347 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
132348 +49 49 49 49 49 49 49 49 49 49 49 49 52 52 52 52 52 52
132349 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132350 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132351 +52 52 52 50 50 50 52 52 52 52 52 52 50 50 50 50 50 50
132352 +50 50 50 49 49 49 50 50 50 49 49 49 47 47 47 49 49 49
132353 +47 47 47 49 49 49 49 49 49 49 49 49 47 47 47 49 49 49
132354 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 47 47 47
132355 +49 49 49 49 49 49 47 47 47 49 49 49 49 49 49 50 50 50
132356 +50 50 50 49 49 49 49 49 49 50 50 50 50 50 50 50 50 50
132357 +52 52 52 50 50 50 52 52 52 52 52 52 50 50 50 47 47 47
132358 +47 47 47 49 49 49 52 52 52 50 50 50 49 49 49 49 49 49
132359 +49 49 49 50 50 50 52 52 52 50 50 50 50 50 50 50 50 50
132360 +49 49 49 47 47 47 49 49 49 49 49 49 49 49 49 50 50 50
132361 +49 49 49 49 49 49 50 50 50 50 50 50 50 50 50 50 50 50
132362 +52 52 52 52 52 52 52 52 52 52 52 52 50 50 50 50 50 50
132363 +49 49 49 49 49 49 49 49 49 50 50 50 49 49 49 47 47 47
132364 +49 49 49 50 50 50 50 50 50 52 52 52 50 50 50 52 52 52
132365 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 50 50 50
132366 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 50 50 50
132367 +49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
132368 +49 49 49 50 50 50 50 50 50 49 49 49 50 50 50 50 50 50
132369 +52 52 52 52 52 52 52 52 52 49 49 49 49 49 49 49 49 49
132370 +49 49 49 49 49 49 47 47 47 49 49 49 49 49 49 49 49 49
132371 +49 49 49 47 47 47 49 49 49 47 47 47 47 47 47 49 49 49
132372 +50 50 50 50 50 50 49 49 49 50 50 50 50 50 50 52 52 52
132373 +52 52 52 49 49 49 49 49 49 49 49 49 47 47 47 49 49 49
132374 +49 49 49 49 49 49 50 50 50 50 50 50 50 50 50 49 49 49
132375 +50 50 50 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132376 +50 50 50 50 50 50 50 50 50 49 49 49 50 50 50 50 50 50
132377 +49 49 49 49 49 49 49 49 49 47 47 47 49 49 49 47 47 47
132378 +47 47 47 46 46 46 45 45 45 45 45 45 43 43 43 41 41 41
132379 +41 41 41 38 38 38 37 37 37 35 35 35 33 33 33 30 30 30
132380 +30 30 30 27 27 27 25 25 25 24 24 24 21 21 21 20 20 20
132381 +18 18 18 16 16 16 14 14 14 12 12 12 10 10 10 9 9 9
132382 +7 7 7 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1
132383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132413 +1 1 1 3 3 3 3 3 3 5 5 5 6 6 6 8 8 8
132414 +9 9 9 11 11 11 13 13 13 15 14 14 16 16 16 18 18 18
132415 +20 20 20 22 22 22 24 24 24 26 26 26 27 27 27 28 28 28
132416 +32 32 32 33 33 33 35 35 35 35 35 35 37 37 37 39 39 39
132417 +41 41 41 41 41 41 43 43 43 43 43 43 43 43 43 46 46 46
132418 +45 45 45 46 46 46 47 47 47 47 47 47 49 49 49 50 50 50
132419 +50 50 50 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132420 +65 65 65 52 52 52 52 52 52 52 52 52 65 65 65 52 52 52
132421 +65 65 65 52 52 52 65 65 65 52 52 52 66 66 66 200 196 176
132422 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
132423 +52 52 52 65 65 65 52 52 52 52 52 52 52 52 52 65 65 65
132424 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132425 +50 50 50 49 49 49 46 46 46 47 47 47 46 46 46 46 46 46
132426 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
132427 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
132428 +45 45 45 46 46 46 45 45 45 46 46 46 46 46 46 46 46 46
132429 +47 47 47 49 49 49 49 49 49 49 49 49 49 49 49 49 49 49
132430 +50 50 50 50 50 50 49 49 49 49 49 49 49 49 49 49 49 49
132431 +49 49 49 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
132432 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
132433 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
132434 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
132435 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
132436 +46 46 46 46 46 46 46 46 46 46 46 46 47 47 47 47 47 47
132437 +47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
132438 +47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
132439 +47 47 47 47 47 47 47 47 47 46 46 46 46 46 46 46 46 46
132440 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
132441 +46 46 46 46 46 46 46 46 46 47 47 47 47 47 47 47 47 47
132442 +47 47 47 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
132443 +46 46 46 46 46 46 47 47 47 46 46 46 46 46 46 46 46 46
132444 +46 46 46 46 46 46 46 46 46 47 47 47 47 47 47 47 47 47
132445 +47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
132446 +47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 46 46 46
132447 +46 46 46 46 46 46 46 46 46 47 47 47 47 47 47 47 47 47
132448 +47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47 47
132449 +47 47 47 46 46 46 47 47 47 47 47 47 46 46 46 46 46 46
132450 +46 46 46 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
132451 +45 45 45 45 45 45 45 45 45 46 46 46 46 46 46 47 47 47
132452 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
132453 +46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46 46
132454 +46 46 46 46 46 46 46 46 46 46 46 46 47 47 47 47 47 47
132455 +47 47 47 47 47 47 49 49 49 47 47 47 49 49 49 49 49 49
132456 +49 49 49 49 49 49 49 49 49 47 47 47 47 47 47 47 47 47
132457 +47 47 47 47 47 47 46 46 46 46 46 46 45 45 45 45 45 45
132458 +43 43 43 43 43 43 43 43 43 41 41 41 41 41 41 39 39 39
132459 +37 37 37 35 35 35 35 35 35 33 33 33 30 30 30 30 30 30
132460 +27 27 27 26 26 26 24 24 24 22 22 22 20 20 20 18 18 18
132461 +16 16 16 15 14 14 13 13 13 11 11 11 9 9 9 8 8 8
132462 +6 6 6 5 5 5 3 3 3 2 2 2 1 1 1 0 0 0
132463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132493 +1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 7 7 7
132494 +8 8 8 10 10 10 12 12 12 13 13 13 15 14 14 17 17 17
132495 +19 19 19 20 20 20 22 22 22 24 24 24 26 26 26 27 27 27
132496 +30 30 30 30 30 30 32 32 32 35 35 35 35 35 35 37 37 37
132497 +38 38 38 39 39 39 39 39 39 42 42 42 42 42 42 42 42 42
132498 +43 43 43 43 43 43 43 43 43 46 46 46 45 45 45 46 46 46
132499 +47 47 47 47 47 47 49 49 49 50 50 50 52 52 52 52 52 52
132500 +52 52 52 52 52 52 65 65 65 52 52 52 52 52 52 52 52 52
132501 +52 52 52 65 65 65 52 52 52 65 65 65 66 66 66 200 196 176
132502 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
132503 +52 52 52 65 65 65 52 52 52 65 65 65 52 52 52 52 52 52
132504 +52 52 52 52 52 52 52 52 52 50 50 50 49 49 49 47 47 47
132505 +47 47 47 46 46 46 45 45 45 45 45 45 45 45 45 43 43 43
132506 +43 43 43 43 43 43 43 43 43 42 42 42 42 42 42 42 42 42
132507 +42 42 42 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132508 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132509 +45 45 45 43 43 43 45 45 45 45 45 45 45 45 45 45 45 45
132510 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
132511 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 43 43 43
132512 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132513 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132514 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132515 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132516 +43 43 43 43 43 43 43 43 43 43 43 43 45 45 45 45 45 45
132517 +43 43 43 45 45 45 43 43 43 45 45 45 43 43 43 45 45 45
132518 +45 45 45 43 43 43 45 45 45 45 45 45 43 43 43 45 45 45
132519 +43 43 43 45 45 45 43 43 43 45 45 45 43 43 43 43 43 43
132520 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132521 +43 43 43 43 43 43 43 43 43 45 45 45 43 43 43 45 45 45
132522 +43 43 43 45 45 45 43 43 43 43 43 43 43 43 43 43 43 43
132523 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132524 +43 43 43 43 43 43 43 43 43 43 43 43 45 45 45 43 43 43
132525 +45 45 45 43 43 43 45 45 45 43 43 43 45 45 45 43 43 43
132526 +45 45 45 45 45 45 45 45 45 43 43 43 45 45 45 43 43 43
132527 +43 43 43 43 43 43 43 43 43 45 45 45 43 43 43 45 45 45
132528 +43 43 43 45 45 45 43 43 43 45 45 45 43 43 43 45 45 45
132529 +45 45 45 43 43 43 45 45 45 43 43 43 43 43 43 43 43 43
132530 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132531 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132532 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132533 +43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
132534 +43 43 43 43 43 43 43 43 43 43 43 43 45 45 45 43 43 43
132535 +45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45 45
132536 +43 43 43 45 45 45 45 45 45 45 45 45 45 45 45 46 46 46
132537 +43 43 43 45 45 45 43 43 43 43 43 43 43 43 43 42 42 42
132538 +43 43 43 41 41 41 41 41 41 39 39 39 38 38 38 35 35 35
132539 +35 35 35 35 35 35 32 32 32 30 30 30 30 30 30 27 27 27
132540 +26 26 26 24 24 24 22 22 22 20 20 20 19 19 19 17 17 17
132541 +15 14 14 13 13 13 12 12 12 10 10 10 8 8 8 7 7 7
132542 +5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 0 0 0
132543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132573 +0 0 0 1 1 1 2 2 2 3 3 3 5 5 5 6 6 6
132574 +7 7 7 9 9 9 10 10 10 12 12 12 14 14 14 16 16 16
132575 +17 17 17 19 19 19 20 20 20 22 22 22 24 24 24 25 25 25
132576 +27 27 27 28 28 28 30 30 30 30 30 30 33 33 33 35 35 35
132577 +35 35 35 35 35 35 38 38 38 38 38 38 39 39 39 39 39 39
132578 +41 41 41 41 41 41 43 43 43 42 42 42 43 43 43 45 45 45
132579 +45 45 45 45 45 45 46 46 46 47 47 47 47 47 47 49 49 49
132580 +49 49 49 50 50 50 52 52 52 52 52 52 52 52 52 52 52 52
132581 +65 65 65 52 52 52 52 52 52 65 65 65 52 52 52 200 196 176
132582 +255 255 255 255 255 255 255 255 255 255 255 255 249 249 249 200 196 176
132583 +52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52
132584 +52 52 52 52 52 52 49 49 49 47 47 47 46 46 46 45 45 45
132585 +43 43 43 43 43 43 43 43 43 42 42 42 42 42 42 41 41 41
132586 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
132587 +41 41 41 41 41 41 41 41 41 39 39 39 41 41 41 39 39 39
132588 +41 41 41 39 39 39 41 41 41 41 41 41 41 41 41 42 42 42
132589 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
132590 +42 42 42 42 42 42 43 43 43 43 43 43 43 43 43 42 42 42
132591 +42 42 42 42 42 42 42 42 42 42 42 42 41 41 41 42 42 42
132592 +42 42 42 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
132593 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
132594 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
132595 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
132596 +42 42 42 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
132597 +41 41 41 42 42 42 43 43 43 42 42 42 42 42 42 42 42 42
132598 +42 42 42 42 42 42 42 42 42 42 42 42 43 43 43 42 42 42
132599 +42 42 42 42 42 42 41 41 41 41 41 41 41 41 41 41 41 41
132600 +41 41 41 42 42 42 41 41 41 42 42 42 41 41 41 42 42 42
132601 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 42 42 42
132602 +43 43 43 41 41 41 42 42 42 41 41 41 41 41 41 41 41 41
132603 +41 41 41 41 41 41 39 39 39 41 41 41 39 39 39 41 41 41
132604 +41 41 41 41 41 41 42 42 42 42 42 42 42 42 42 42 42 42
132605 +42 42 42 43 43 43 42 42 42 43 43 43 42 42 42 42 42 42
132606 +42 42 42 42 42 42 41 41 41 41 41 41 41 41 41 41 41 41
132607 +42 42 42 41 41 41 42 42 42 41 41 41 42 42 42 42 42 42
132608 +43 43 43 42 42 42 42 42 42 42 42 42 43 43 43 42 42 42
132609 +42 42 42 42 42 42 41 41 41 42 42 42 41 41 41 41 41 41
132610 +41 41 41 39 39 39 41 41 41 41 41 41 41 41 41 41 41 41
132611 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 39 39 39
132612 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
132613 +41 41 41 41 41 41 42 42 42 41 41 41 39 39 39 41 41 41
132614 +41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 43 43 43
132615 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
132616 +43 43 43 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
132617 +43 43 43 41 41 41 41 41 41 41 41 41 41 41 41 39 39 39
132618 +39 39 39 38 38 38 37 37 37 37 37 37 35 35 35 33 33 33
132619 +33 33 33 30 30 30 30 30 30 28 28 28 27 27 27 25 25 25
132620 +24 24 24 22 22 22 20 20 20 19 19 19 17 17 17 16 16 16
132621 +14 14 14 12 12 12 10 10 10 9 9 9 7 7 7 6 6 6
132622 +4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0
132623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132653 +0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
132654 +6 6 6 8 8 8 9 9 9 11 11 11 13 13 13 14 14 14
132655 +16 16 16 17 17 17 19 19 19 20 20 20 22 22 22 24 24 24
132656 +25 25 25 26 26 26 28 28 28 30 30 30 30 30 30 32 32 32
132657 +33 33 33 35 35 35 35 35 35 35 35 35 37 37 37 37 37 37
132658 +37 37 37 38 38 38 39 39 39 39 39 39 41 41 41 41 41 41
132659 +42 42 42 43 43 43 45 45 45 45 45 45 46 46 46 47 47 47
132660 +47 47 47 47 47 47 49 49 49 52 52 52 52 52 52 52 52 52
132661 +52 52 52 52 52 52 52 52 52 52 52 52 65 65 65 200 196 176
132662 +255 255 255 255 255 255 255 255 255 249 249 249 249 249 249 200 196 176
132663 +65 65 65 52 52 52 52 52 52 52 52 52 52 52 52 50 50 50
132664 +49 49 49 47 47 47 46 46 46 45 45 45 45 45 45 43 43 43
132665 +42 42 42 42 42 42 39 39 39 41 41 41 39 39 39 39 39 39
132666 +38 38 38 38 38 38 37 37 37 37 37 37 37 37 37 37 37 37
132667 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
132668 +37 37 37 37 37 37 38 38 38 38 38 38 38 38 38 38 38 38
132669 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
132670 +39 39 39 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41
132671 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 38 38 38
132672 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
132673 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
132674 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
132675 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
132676 +38 38 38 39 39 39 38 38 38 38 38 38 38 38 38 38 38 38
132677 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
132678 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
132679 +39 39 39 39 39 39 38 38 38 38 38 38 39 39 39 38 38 38
132680 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 39 39 39
132681 +38 38 38 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39
132682 +39 39 39 39 39 39 38 38 38 38 38 38 38 38 38 38 38 38
132683 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
132684 +38 38 38 38 38 38 38 38 38 38 38 38 39 39 39 39 39 39
132685 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
132686 +39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38
132687 +38 38 38 38 38 38 39 39 39 38 38 38 39 39 39 39 39 39
132688 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
132689 +39 39 39 39 39 39 39 39 39 38 38 38 38 38 38 38 38 38
132690 +38 38 38 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
132691 +37 37 37 37 37 37 37 37 37 37 37 37 38 38 38 38 38 38
132692 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
132693 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38
132694 +38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 39 39 39
132695 +39 39 39 39 39 39 39 39 39 39 39 39 41 41 41 39 39 39
132696 +41 41 41 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
132697 +39 39 39 38 38 38 38 38 38 38 38 38 37 37 37 37 37 37
132698 +37 37 37 35 35 35 35 35 35 35 35 35 33 33 33 32 32 32
132699 +30 30 30 30 30 30 28 28 28 26 26 26 25 25 25 24 24 24
132700 +22 22 22 20 20 20 19 19 19 17 17 17 16 16 16 14 14 14
132701 +12 12 12 11 11 11 9 9 9 8 8 8 6 6 6 5 5 5
132702 +4 4 4 3 3 3 2 2 2 1 1 1 0 0 0 0 0 0
132703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132733 +0 0 0 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4
132734 +5 5 5 7 7 7 8 8 8 10 10 10 11 11 11 13 13 13
132735 +14 14 14 16 16 16 17 17 17 18 18 18 20 20 20 21 21 21
132736 +24 24 24 24 24 24 25 25 25 27 27 27 28 28 28 28 28 28
132737 +30 30 30 30 30 30 32 32 32 33 33 33 33 33 33 35 35 35
132738 +35 35 35 35 35 35 37 37 37 37 37 37 38 38 38 39 39 39
132739 +41 41 41 39 39 39 42 42 42 42 42 42 43 43 43 45 45 45
132740 +45 45 45 46 46 46 47 47 47 47 47 47 49 49 49 50 50 50
132741 +50 50 50 52 52 52 52 52 52 52 52 52 52 52 52 200 196 176
132742 +249 249 249 255 255 255 255 255 255 255 255 255 249 249 249 192 187 164
132743 +49 49 49 52 52 52 52 52 52 52 52 52 49 49 49 47 47 47
132744 +46 46 46 45 45 45 43 43 43 43 43 43 42 42 42 41 41 41
132745 +41 41 41 39 39 39 38 38 38 37 37 37 37 37 37 37 37 37
132746 +35 35 35 35 35 35 35 35 35 33 33 33 35 35 35 33 33 33
132747 +35 35 35 33 33 33 35 35 35 35 35 35 33 33 33 35 35 35
132748 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132749 +37 37 37 35 35 35 37 37 37 37 37 37 37 37 37 37 37 37
132750 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
132751 +37 37 37 37 37 37 37 37 37 35 35 35 37 37 37 35 35 35
132752 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132753 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132754 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132755 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132756 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 37 37 37
132757 +35 35 35 37 37 37 37 37 37 35 35 35 37 37 37 35 35 35
132758 +37 37 37 35 35 35 37 37 37 35 35 35 37 37 37 35 35 35
132759 +37 37 37 35 35 35 37 37 37 35 35 35 35 35 35 35 35 35
132760 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132761 +35 35 35 35 35 35 35 35 35 35 35 35 37 37 37 35 35 35
132762 +37 37 37 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132763 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132764 +35 35 35 35 35 35 35 35 35 35 35 35 37 37 37 35 35 35
132765 +37 37 37 35 35 35 37 37 37 35 35 35 37 37 37 35 35 35
132766 +37 37 37 37 37 37 35 35 35 37 37 37 35 35 35 35 35 35
132767 +35 35 35 35 35 35 35 35 35 35 35 35 37 37 37 37 37 37
132768 +35 35 35 37 37 37 35 35 35 37 37 37 35 35 35 37 37 37
132769 +37 37 37 35 35 35 37 37 37 35 35 35 35 35 35 35 35 35
132770 +35 35 35 35 35 35 35 35 35 35 35 35 33 33 33 33 33 33
132771 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132772 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132773 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132774 +35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35
132775 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37
132776 +37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 35 35 35
132777 +37 37 37 35 35 35 35 35 35 35 35 35 35 35 35 33 33 33
132778 +33 33 33 33 33 33 32 32 32 30 30 30 30 30 30 30 30 30
132779 +28 28 28 27 27 27 25 25 25 24 24 24 24 24 24 21 21 21
132780 +20 20 20 18 18 18 17 17 17 16 16 16 14 14 14 13 13 13
132781 +11 11 11 10 10 10 8 8 8 7 7 7 5 5 5 4 4 4
132782 +3 3 3 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
132783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132813 +0 0 0 0 0 0 1 1 1 1 1 1 3 3 3 3 3 3
132814 +4 4 4 6 6 6 7 7 7 8 8 8 10 10 10 11 11 11
132815 +13 13 13 14 14 14 16 16 16 17 17 17 18 18 18 20 20 20
132816 +21 21 21 22 22 22 22 22 22 25 25 25 26 26 26 27 27 27
132817 +28 28 28 28 28 28 30 30 30 30 30 30 30 30 30 32 32 32
132818 +32 32 32 33 33 33 33 33 33 35 35 35 35 35 35 35 35 35
132819 +37 37 37 38 38 38 39 39 39 41 41 41 41 41 41 42 42 42
132820 +43 43 43 43 43 43 45 45 45 45 45 45 46 46 46 47 47 47
132821 +47 47 47 49 49 49 50 50 50 52 52 52 52 52 52 200 196 176
132822 +255 255 255 255 255 255 255 255 255 249 249 249 249 249 249 200 196 176
132823 +49 49 49 50 50 50 49 49 49 47 47 47 46 46 46 45 45 45
132824 +43 43 43 42 42 42 41 41 41 41 41 41 39 39 39 38 38 38
132825 +37 37 37 35 35 35 35 35 35 35 35 35 33 33 33 33 33 33
132826 +33 33 33 32 32 32 32 32 32 32 32 32 30 30 30 32 32 32
132827 +30 30 30 32 32 32 30 30 30 30 30 30 30 30 30 32 32 32
132828 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33
132829 +33 33 33 33 33 33 33 33 33 35 35 35 33 33 33 35 35 35
132830 +33 33 33 35 35 35 33 33 33 35 35 35 33 33 33 35 35 35
132831 +35 35 35 35 35 35 35 35 35 33 33 33 33 33 33 33 33 33
132832 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 33 33 33
132833 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
132834 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
132835 +33 33 33 32 32 32 32 32 32 33 33 33 33 33 33 32 32 32
132836 +32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 33 33 33
132837 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
132838 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
132839 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32
132840 +33 33 33 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
132841 +32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
132842 +33 33 33 33 33 33 33 33 33 33 33 33 32 32 32 32 32 32
132843 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
132844 +32 32 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33
132845 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
132846 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
132847 +32 32 32 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
132848 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
132849 +33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 32 32 32
132850 +32 32 32 32 32 32 32 32 32 30 30 30 30 30 30 32 32 32
132851 +30 30 30 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
132852 +32 32 32 32 32 32 33 33 33 33 33 33 32 32 32 32 32 32
132853 +32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
132854 +32 32 32 32 32 32 32 32 32 33 33 33 33 33 33 33 33 33
132855 +33 33 33 35 35 35 33 33 33 35 35 35 33 33 33 35 35 35
132856 +35 35 35 35 35 35 35 35 35 33 33 33 35 35 35 33 33 33
132857 +33 33 33 33 33 33 33 33 33 32 32 32 32 32 32 32 32 32
132858 +30 30 30 30 30 30 30 30 30 28 28 28 28 28 28 27 27 27
132859 +26 26 26 25 25 25 22 22 22 22 22 22 21 21 21 20 20 20
132860 +18 18 18 17 17 17 16 16 16 14 14 14 13 13 13 11 11 11
132861 +10 10 10 8 8 8 7 7 7 6 6 6 4 4 4 3 3 3
132862 +2 2 2 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
132863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132893 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 3 3 3
132894 +4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 10 10 10
132895 +11 11 11 12 12 12 14 14 14 15 14 14 16 16 16 18 18 18
132896 +19 19 19 20 20 20 21 21 21 22 22 22 24 24 24 25 25 25
132897 +25 25 25 26 26 26 27 27 27 27 27 27 28 28 28 28 28 28
132898 +28 28 28 30 30 30 32 32 32 32 32 32 33 33 33 35 35 35
132899 +35 35 35 35 35 35 35 35 35 37 37 37 38 38 38 39 39 39
132900 +41 41 41 41 41 41 42 42 42 43 43 43 43 43 43 45 45 45
132901 +45 45 45 47 47 47 46 46 46 47 47 47 47 47 47 140 134 120
132902 +192 187 164 192 187 164 185 178 149 192 187 164 192 187 164 140 134 120
132903 +41 41 41 46 46 46 45 45 45 43 43 43 43 43 43 42 42 42
132904 +41 41 41 41 41 41 39 39 39 38 38 38 37 37 37 35 35 35
132905 +35 35 35 35 35 35 33 33 33 32 32 32 30 30 30 32 32 32
132906 +30 30 30 30 30 30 28 28 28 30 30 30 28 28 28 28 28 28
132907 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 30 30 30
132908 +28 28 28 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132909 +30 30 30 32 32 32 30 30 30 32 32 32 30 30 30 32 32 32
132910 +30 30 30 32 32 32 30 30 30 32 32 32 30 30 30 32 32 32
132911 +30 30 30 30 30 30 32 32 32 32 32 32 30 30 30 30 30 30
132912 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132913 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132914 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132915 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132916 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132917 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132918 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132919 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132920 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132921 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132922 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132923 +30 30 30 30 30 30 30 30 30 30 30 30 28 28 28 30 30 30
132924 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132925 +30 30 30 32 32 32 32 32 32 30 30 30 32 32 32 30 30 30
132926 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132927 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132928 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132929 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132930 +30 30 30 30 30 30 28 28 28 30 30 30 28 28 28 30 30 30
132931 +28 28 28 30 30 30 28 28 28 30 30 30 28 28 28 30 30 30
132932 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132933 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132934 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
132935 +30 30 30 30 30 30 32 32 32 30 30 30 32 32 32 30 30 30
132936 +30 30 30 30 30 30 30 30 30 32 32 32 30 30 30 32 32 32
132937 +30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 28 28 28
132938 +28 28 28 27 27 27 27 27 27 26 26 26 25 25 25 25 25 25
132939 +24 24 24 22 22 22 21 21 21 20 20 20 19 19 19 17 17 17
132940 +16 16 16 15 14 14 13 13 13 12 12 12 11 11 11 10 10 10
132941 +8 8 8 7 7 7 6 6 6 5 5 5 3 3 3 3 3 3
132942 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
132943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
132973 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 2 2 2
132974 +3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 8
132975 +10 10 10 11 11 11 12 12 12 13 13 13 15 14 14 16 16 16
132976 +17 17 17 18 18 18 19 19 19 20 20 20 21 21 21 21 21 21
132977 +24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 26 26 26
132978 +27 27 27 27 27 27 28 28 28 30 30 30 30 30 30 32 32 32
132979 +32 32 32 33 33 33 35 35 35 35 35 35 35 35 35 37 37 37
132980 +37 37 37 38 38 38 39 39 39 41 41 41 41 41 41 42 42 42
132981 +42 42 42 43 43 43 45 45 45 43 43 43 46 46 46 45 45 45
132982 +41 41 41 39 39 39 41 41 41 38 38 38 37 37 37 39 39 39
132983 +43 43 43 43 43 43 43 43 43 43 43 43 41 41 41 39 39 39
132984 +38 38 38 37 37 37 35 35 35 35 35 35 35 35 35 33 33 33
132985 +32 32 32 30 30 30 30 30 30 30 30 30 30 30 30 28 28 28
132986 +27 27 27 27 27 27 26 26 26 26 26 26 26 26 26 26 26 26
132987 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
132988 +26 26 26 26 26 26 26 26 26 27 27 27 27 27 27 27 27 27
132989 +27 27 27 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
132990 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
132991 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 27 27 27
132992 +28 28 28 27 27 27 28 28 28 27 27 27 27 27 27 27 27 27
132993 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
132994 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
132995 +27 27 27 27 27 27 28 28 28 27 27 27 27 27 27 27 27 27
132996 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
132997 +27 27 27 27 27 27 28 28 28 28 28 28 28 28 28 28 28 28
132998 +28 28 28 30 30 30 28 28 28 28 28 28 28 28 28 27 27 27
132999 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133000 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133001 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133002 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133003 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133004 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133005 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
133006 +28 28 28 28 28 28 27 27 27 28 28 28 28 28 28 28 28 28
133007 +27 27 27 27 27 27 27 27 27 28 28 28 27 27 27 28 28 28
133008 +27 27 27 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
133009 +28 28 28 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133010 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
133011 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 27 27 27
133012 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133013 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 27
133014 +27 27 27 27 27 27 27 27 27 27 27 27 27 27 27 28 28 28
133015 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
133016 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
133017 +28 28 28 27 27 27 27 27 27 27 27 27 26 26 26 26 26 26
133018 +25 25 25 25 25 25 25 25 25 24 24 24 22 22 22 22 22 22
133019 +21 21 21 20 20 20 19 19 19 18 18 18 17 17 17 16 16 16
133020 +15 14 14 13 13 13 12 12 12 11 11 11 9 9 9 8 8 8
133021 +7 7 7 6 6 6 5 5 5 4 4 4 3 3 3 2 2 2
133022 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
133054 +2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7
133055 +8 8 8 9 9 9 10 10 10 11 11 11 13 13 13 14 14 14
133056 +15 14 14 16 16 16 17 17 17 18 18 18 19 19 19 20 20 20
133057 +20 20 20 21 21 21 22 22 22 22 22 22 22 22 22 24 24 24
133058 +24 24 24 25 25 25 26 26 26 26 26 26 27 27 27 28 28 28
133059 +30 30 30 30 30 30 30 30 30 33 33 33 33 33 33 35 35 35
133060 +35 35 35 35 35 35 37 37 37 37 37 37 38 38 38 39 39 39
133061 +41 41 41 39 39 39 41 41 41 42 42 42 43 43 43 42 42 42
133062 +42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42 42
133063 +41 41 41 41 41 41 41 41 41 39 39 39 38 38 38 37 37 37
133064 +37 37 37 35 35 35 33 33 33 32 32 32 32 32 32 30 30 30
133065 +30 30 30 28 28 28 28 28 28 27 27 27 26 26 26 25 25 25
133066 +25 25 25 24 24 24 24 24 24 22 22 22 24 24 24 22 22 22
133067 +24 24 24 22 22 22 24 24 24 22 22 22 24 24 24 22 22 22
133068 +24 24 24 22 22 22 24 24 24 24 24 24 25 25 25 25 25 25
133069 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 26 26 26
133070 +26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26
133071 +26 26 26 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
133072 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
133073 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
133074 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
133075 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
133076 +25 25 25 24 24 24 25 25 25 25 25 25 25 25 25 25 25 25
133077 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
133078 +25 25 25 25 25 25 25 25 25 26 26 26 25 25 25 25 25 25
133079 +25 25 25 25 25 25 25 25 25 25 25 25 24 24 24 24 24 24
133080 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
133081 +24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 25 25 25
133082 +25 25 25 25 25 25 25 25 25 25 25 25 24 24 24 24 24 24
133083 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
133084 +24 24 24 24 24 24 25 25 25 25 25 25 25 25 25 25 25 25
133085 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
133086 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
133087 +24 24 24 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
133088 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 25
133089 +25 25 25 25 25 25 25 25 25 25 25 25 25 25 25 24 24 24
133090 +24 24 24 24 24 24 22 22 22 24 24 24 22 22 22 24 24 24
133091 +22 22 22 24 24 24 22 22 22 24 24 24 24 24 24 24 24 24
133092 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
133093 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 24
133094 +24 24 24 24 24 24 24 24 24 25 25 25 25 25 25 25 25 25
133095 +25 25 25 25 25 25 25 25 25 26 26 26 26 26 26 26 26 26
133096 +26 26 26 26 26 26 25 25 25 25 25 25 25 25 25 25 25 25
133097 +25 25 25 25 25 25 25 25 25 24 24 24 24 24 24 24 24 24
133098 +24 24 24 22 22 22 22 22 22 21 21 21 20 20 20 20 20 20
133099 +19 19 19 18 18 18 17 17 17 16 16 16 15 14 14 14 14 14
133100 +13 13 13 11 11 11 10 10 10 9 9 9 8 8 8 7 7 7
133101 +6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1
133102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
133134 +1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 5 5 5
133135 +6 6 6 8 8 8 9 9 9 10 10 10 11 11 11 12 12 12
133136 +13 13 13 14 14 14 15 14 14 16 16 16 17 17 17 17 17 17
133137 +18 18 18 19 19 19 20 20 20 20 20 20 20 20 20 21 21 21
133138 +21 21 21 22 22 22 24 24 24 24 24 24 25 25 25 26 26 26
133139 +27 27 27 28 28 28 28 28 28 30 30 30 30 30 30 30 30 30
133140 +32 32 32 33 33 33 35 35 35 35 35 35 35 35 35 35 35 35
133141 +37 37 37 38 38 38 38 38 38 39 39 39 39 39 39 39 39 39
133142 +39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39
133143 +39 39 39 38 38 38 37 37 37 37 37 37 35 35 35 35 35 35
133144 +33 33 33 33 33 33 30 30 30 30 30 30 30 30 30 28 28 28
133145 +27 27 27 26 26 26 25 25 25 24 24 24 22 22 22 24 24 24
133146 +22 22 22 21 21 21 21 21 21 20 20 20 20 20 20 20 20 20
133147 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133148 +20 20 20 21 21 21 21 21 21 21 21 21 21 21 21 22 22 22
133149 +22 22 22 22 22 22 22 22 22 24 24 24 22 22 22 24 24 24
133150 +24 24 24 22 22 22 24 24 24 24 24 24 24 24 24 22 22 22
133151 +24 24 24 22 22 22 24 24 24 24 24 24 22 22 22 22 22 22
133152 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
133153 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
133154 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
133155 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
133156 +21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22
133157 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
133158 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
133159 +22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 21 21 21
133160 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
133161 +21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22
133162 +22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 21 21 21
133163 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
133164 +21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22
133165 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
133166 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
133167 +21 21 21 21 21 21 22 22 22 22 22 22 22 22 22 22 22 22
133168 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22
133169 +22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 21 21 21
133170 +21 21 21 21 21 21 20 20 20 20 20 20 20 20 20 20 20 20
133171 +20 20 20 20 20 20 21 21 21 21 21 21 21 21 21 21 21 21
133172 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
133173 +21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21 21
133174 +21 21 21 21 21 21 21 21 21 21 21 21 22 22 22 22 22 22
133175 +24 24 24 22 22 22 24 24 24 22 22 22 24 24 24 22 22 22
133176 +24 24 24 24 24 24 24 24 24 24 24 24 24 24 24 22 22 22
133177 +22 22 22 22 22 22 22 22 22 21 21 21 21 21 21 20 20 20
133178 +20 20 20 20 20 20 20 20 20 19 19 19 18 18 18 17 17 17
133179 +17 17 17 16 16 16 15 14 14 14 14 14 13 13 13 12 12 12
133180 +11 11 11 10 10 10 9 9 9 8 8 8 6 6 6 5 5 5
133181 +5 5 5 4 4 4 3 3 3 2 2 2 1 1 1 1 1 1
133182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133214 +1 1 1 1 1 1 2 2 2 3 3 3 3 3 3 4 4 4
133215 +5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10
133216 +11 11 11 12 12 12 13 13 13 14 14 14 15 14 14 15 14 14
133217 +16 16 16 16 16 16 17 17 17 18 18 18 18 18 18 18 18 18
133218 +19 19 19 20 20 20 20 20 20 21 21 21 22 22 22 24 24 24
133219 +24 24 24 25 25 25 26 26 26 27 27 27 28 28 28 28 28 28
133220 +30 30 30 30 30 30 32 32 32 32 32 32 33 33 33 35 35 35
133221 +35 35 35 35 35 35 35 35 35 35 35 35 37 37 37 35 35 35
133222 +37 37 37 37 37 37 37 37 37 35 35 35 37 37 37 35 35 35
133223 +37 37 37 35 35 35 35 35 35 33 33 33 33 33 33 32 32 32
133224 +30 30 30 30 30 30 28 28 28 27 27 27 26 26 26 25 25 25
133225 +24 24 24 24 24 24 22 22 22 21 21 21 21 21 21 20 20 20
133226 +19 19 19 19 19 19 18 18 18 18 18 18 18 18 18 18 18 18
133227 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
133228 +18 18 18 18 18 18 18 18 18 19 19 19 19 19 19 20 20 20
133229 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133230 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133231 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133232 +19 19 19 19 19 19 19 19 19 19 19 19 18 18 18 18 18 18
133233 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 19 19 19
133234 +19 19 19 19 19 19 19 19 19 18 18 18 18 18 18 18 18 18
133235 +18 18 18 18 18 18 18 18 18 18 18 18 19 19 19 19 19 19
133236 +19 19 19 19 19 19 19 19 19 21 21 21 20 20 20 20 20 20
133237 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133238 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133239 +20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19
133240 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
133241 +19 19 19 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20
133242 +20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19
133243 +19 19 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
133244 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20
133245 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133246 +20 20 20 20 20 20 20 20 20 19 19 19 19 19 19 19 19 19
133247 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 20 20 20
133248 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133249 +20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 19 19 19
133250 +19 19 19 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
133251 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 19 19 19
133252 +19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19 19
133253 +19 19 19 19 19 19 18 18 18 18 18 18 18 18 18 18 18 18
133254 +18 18 18 19 19 19 19 19 19 19 19 19 20 20 20 20 20 20
133255 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133256 +20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
133257 +20 20 20 20 20 20 19 19 19 19 19 19 19 19 19 18 18 18
133258 +18 18 18 18 18 18 17 17 17 16 16 16 16 16 16 16 16 16
133259 +14 14 14 14 14 14 13 13 13 12 12 12 11 11 11 10 10 10
133260 +9 9 9 8 8 8 7 7 7 6 6 6 5 5 5 4 4 4
133261 +3 3 3 3 3 3 2 2 2 1 1 1 1 1 1 0 0 0
133262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133294 +0 0 0 1 1 1 1 1 1 2 2 2 3 3 3 3 3 3
133295 +4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 8 8 8
133296 +9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 13 13 13
133297 +14 14 14 14 14 14 16 16 16 16 16 16 16 16 16 16 16 16
133298 +16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 20 20 20
133299 +21 21 21 22 22 22 24 24 24 24 24 24 25 25 25 26 26 26
133300 +27 27 27 28 28 28 28 28 28 30 30 30 30 30 30 30 30 30
133301 +32 32 32 32 32 32 33 33 33 33 33 33 33 33 33 33 33 33
133302 +33 33 33 33 33 33 33 33 33 35 35 35 35 35 35 33 33 33
133303 +33 33 33 33 33 33 33 33 33 30 30 30 30 30 30 30 30 30
133304 +28 28 28 27 27 27 26 26 26 25 25 25 24 24 24 24 24 24
133305 +21 21 21 21 21 21 20 20 20 19 19 19 18 18 18 17 17 17
133306 +16 16 16 16 16 16 16 16 16 16 16 16 14 14 14 16 16 16
133307 +14 14 14 16 16 16 14 14 14 16 16 16 14 14 14 16 16 16
133308 +16 16 16 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17
133309 +17 17 17 17 17 17 17 17 17 17 17 17 18 18 18 18 18 18
133310 +18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18
133311 +18 18 18 18 18 18 17 17 17 17 17 17 17 17 17 17 17 17
133312 +17 17 17 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133313 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133314 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133315 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133316 +16 16 16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
133317 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
133318 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
133319 +17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16
133320 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133321 +16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 17 17 17
133322 +17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 16 16 16
133323 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133324 +16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17
133325 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
133326 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
133327 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
133328 +17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
133329 +17 17 17 17 17 17 17 17 17 17 17 17 16 16 16 16 16 16
133330 +16 16 16 16 16 16 16 16 16 16 16 16 14 14 14 16 16 16
133331 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133332 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133333 +16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16
133334 +16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17
133335 +17 17 17 17 17 17 18 18 18 18 18 18 18 18 18 18 18 18
133336 +18 18 18 18 18 18 18 18 18 17 17 17 17 17 17 17 17 17
133337 +17 17 17 17 17 17 17 17 17 16 16 16 16 16 16 16 16 16
133338 +16 16 16 16 16 16 16 16 16 14 14 14 14 14 14 13 13 13
133339 +13 13 13 12 12 12 11 11 11 10 10 10 9 9 9 8 8 8
133340 +8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3
133341 +3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0
133342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133374 +0 0 0 0 0 0 0 0 0 1 1 1 2 2 2 2 2 2
133375 +3 3 3 4 4 4 4 4 4 5 5 5 6 6 6 7 7 7
133376 +8 8 8 8 8 8 9 9 9 10 10 10 10 10 10 11 11 11
133377 +11 11 11 12 12 12 13 13 13 13 13 13 13 13 13 14 14 14
133378 +14 14 14 14 14 14 16 16 16 16 16 16 17 17 17 18 18 18
133379 +19 19 19 20 20 20 21 21 21 21 21 21 24 24 24 22 22 22
133380 +24 24 24 25 25 25 26 26 26 27 27 27 27 27 27 28 28 28
133381 +30 30 30 30 30 30 30 30 30 32 32 32 32 32 32 30 30 30
133382 +32 32 32 30 30 30 32 32 32 30 30 30 30 30 30 32 32 32
133383 +30 30 30 30 30 30 30 30 30 28 28 28 28 28 28 27 27 27
133384 +26 26 26 25 25 25 24 24 24 22 22 22 21 21 21 20 20 20
133385 +19 19 19 18 18 18 17 17 17 16 16 16 16 16 16 16 16 16
133386 +14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133387 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133388 +13 13 13 13 13 13 14 14 14 14 14 14 14 14 14 16 16 16
133389 +14 14 14 16 16 16 14 14 14 16 16 16 14 14 14 16 16 16
133390 +14 14 14 16 16 16 14 14 14 16 16 16 14 14 14 16 16 16
133391 +14 14 14 16 16 16 14 14 14 16 16 16 14 14 14 16 16 16
133392 +14 14 14 14 14 14 13 13 13 13 13 13 13 13 13 13 13 13
133393 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133394 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133395 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133396 +14 14 14 14 14 14 16 16 16 16 16 16 16 16 16 16 16 16
133397 +16 16 16 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133398 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133399 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133400 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133401 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133402 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133403 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133404 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133405 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133406 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133407 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133408 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133409 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133410 +14 14 14 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133411 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133412 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133413 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133414 +13 13 13 13 13 13 14 14 14 14 14 14 16 16 16 14 14 14
133415 +16 16 16 14 14 14 16 16 16 14 14 14 16 16 16 14 14 14
133416 +16 16 16 14 14 14 16 16 16 14 14 14 16 16 16 14 14 14
133417 +16 16 16 14 14 14 14 14 14 14 14 14 14 14 14 14 14 14
133418 +13 13 13 13 13 13 13 13 13 12 12 12 11 11 11 11 11 11
133419 +10 10 10 10 10 10 9 9 9 8 8 8 8 8 8 7 7 7
133420 +6 6 6 5 5 5 4 4 4 4 4 4 3 3 3 2 2 2
133421 +2 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
133422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133454 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
133455 +2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5
133456 +6 6 6 6 6 6 7 7 7 8 8 8 9 9 9 9 9 9
133457 +10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11
133458 +12 12 12 12 12 12 13 13 13 14 14 14 16 16 16 16 16 16
133459 +16 16 16 17 17 17 18 18 18 19 19 19 20 20 20 21 21 21
133460 +21 21 21 22 22 22 24 24 24 24 24 24 25 25 25 25 25 25
133461 +26 26 26 27 27 27 27 27 27 28 28 28 28 28 28 28 28 28
133462 +28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28 28
133463 +28 28 28 27 27 27 27 27 27 26 26 26 25 25 25 25 25 25
133464 +22 22 22 22 22 22 21 21 21 20 20 20 19 19 19 18 18 18
133465 +17 17 17 16 16 16 14 14 14 14 14 14 13 13 13 12 12 12
133466 +11 11 11 11 11 11 10 10 10 10 10 10 10 10 10 10 10 10
133467 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
133468 +11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12
133469 +12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133470 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133471 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 12 12 12
133472 +12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 11 11
133473 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
133474 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
133475 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
133476 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
133477 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
133478 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
133479 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11
133480 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
133481 +11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12
133482 +12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11
133483 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
133484 +11 11 11 11 11 11 11 11 11 12 12 12 12 12 12 12 12 12
133485 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
133486 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
133487 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
133488 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
133489 +12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11
133490 +11 11 11 11 11 11 11 11 11 11 11 11 10 10 10 10 10 10
133491 +10 10 10 10 10 10 11 11 11 11 11 11 11 11 11 11 11 11
133492 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
133493 +11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11
133494 +11 11 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12
133495 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133496 +13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
133497 +12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11
133498 +11 11 11 11 11 11 10 10 10 10 10 10 10 10 10 9 9 9
133499 +9 9 9 8 8 8 7 7 7 6 6 6 6 6 6 5 5 5
133500 +4 4 4 4 4 4 3 3 3 3 3 3 2 2 2 1 1 1
133501 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
133535 +1 1 1 2 2 2 2 2 2 3 3 3 3 3 3 4 4 4
133536 +4 4 4 5 5 5 5 5 5 6 6 6 7 7 7 7 7 7
133537 +8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9
133538 +10 10 10 10 10 10 10 10 10 11 11 11 12 12 12 13 13 13
133539 +14 14 14 16 16 16 16 16 16 16 16 16 17 17 17 18 18 18
133540 +19 19 19 20 20 20 21 21 21 21 21 21 22 22 22 24 24 24
133541 +24 24 24 25 25 25 25 25 25 25 25 25 26 26 26 27 27 27
133542 +26 26 26 27 27 27 26 26 26 27 27 27 26 26 26 26 26 26
133543 +26 26 26 25 25 25 25 25 25 24 24 24 24 24 24 22 22 22
133544 +21 21 21 20 20 20 19 19 19 18 18 18 16 16 16 16 16 16
133545 +14 14 14 13 13 13 12 12 12 11 11 11 10 10 10 10 10 10
133546 +9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133547 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133548 +9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10
133549 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
133550 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
133551 +10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 11 11 11
133552 +11 11 11 11 11 11 10 10 10 10 10 10 9 9 9 9 9 9
133553 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133554 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133555 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133556 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
133557 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9
133558 +9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10
133559 +10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 9 9 9
133560 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133561 +9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10
133562 +10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 9 9 9
133563 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133564 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133565 +9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10
133566 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
133567 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
133568 +10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9
133569 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133570 +9 9 9 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8
133571 +8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9
133572 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133573 +9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
133574 +9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10
133575 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
133576 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
133577 +10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9
133578 +9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 7 7 7
133579 +7 7 7 6 6 6 5 5 5 5 5 5 4 4 4 4 4 4
133580 +3 3 3 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1
133581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133615 +0 0 0 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3
133616 +3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5
133617 +6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7
133618 +8 8 8 8 8 8 8 8 8 9 9 9 10 10 10 10 10 10
133619 +11 11 11 12 12 12 13 13 13 14 14 14 14 14 14 16 16 16
133620 +17 17 17 17 17 17 18 18 18 19 19 19 20 20 20 20 20 20
133621 +21 21 21 22 22 22 22 22 22 22 22 22 24 24 24 24 24 24
133622 +24 24 24 24 24 24 24 24 24 25 25 25 24 24 24 24 24 24
133623 +22 22 22 24 24 24 22 22 22 21 21 21 20 20 20 20 20 20
133624 +18 18 18 17 17 17 16 16 16 16 16 16 14 14 14 13 13 13
133625 +12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 7 7 7
133626 +6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5
133627 +5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6
133628 +7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8
133629 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133630 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133631 +8 8 8 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8
133632 +8 8 8 8 8 8 7 7 7 8 8 8 8 8 8 7 7 7
133633 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
133634 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
133635 +7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8
133636 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133637 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133638 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133639 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133640 +7 7 7 7 7 7 6 6 6 6 6 6 7 7 7 7 7 7
133641 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
133642 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
133643 +7 7 7 7 7 7 6 6 6 6 6 6 7 7 7 7 7 7
133644 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
133645 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
133646 +7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8
133647 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7
133648 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
133649 +7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7
133650 +7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6
133651 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
133652 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
133653 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7
133654 +7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8
133655 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133656 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8
133657 +8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7
133658 +7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 5 5 5
133659 +5 5 5 5 5 5 4 4 4 4 4 4 3 3 3 3 3 3
133660 +2 2 2 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0
133661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133695 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2
133696 +2 2 2 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4
133697 +4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133698 +6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 8 8 8
133699 +9 9 9 10 10 10 11 11 11 11 11 11 13 13 13 13 13 13
133700 +14 14 14 14 14 14 16 16 16 16 16 16 17 17 17 18 18 18
133701 +19 19 19 20 20 20 20 20 20 20 20 20 21 21 21 21 21 21
133702 +22 22 22 22 22 22 22 22 22 22 22 22 21 21 21 21 21 21
133703 +22 22 22 20 20 20 20 20 20 19 19 19 18 18 18 17 17 17
133704 +16 16 16 16 16 16 14 14 14 13 13 13 12 12 12 11 11 11
133705 +10 10 10 9 9 9 8 8 8 6 6 6 5 5 5 5 5 5
133706 +4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133707 +3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5
133708 +5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6
133709 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
133710 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7
133711 +7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 7 7 7
133712 +7 7 7 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5
133713 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133714 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133715 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6
133716 +6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7
133717 +7 7 7 7 7 7 6 6 6 6 6 6 5 5 5 5 5 5
133718 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133719 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6
133720 +6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5
133721 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133722 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133723 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133724 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133725 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133726 +5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6
133727 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5
133728 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133729 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133730 +5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
133731 +5 5 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4
133732 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133733 +4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5
133734 +5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6
133735 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
133736 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
133737 +6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5
133738 +5 5 5 5 5 5 5 5 5 5 5 5 4 4 4 4 4 4
133739 +4 4 4 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2
133740 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
133741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
133776 +1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 3 3 3
133777 +3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4
133778 +4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 6 6 6
133779 +7 7 7 8 8 8 8 8 8 9 9 9 10 10 10 11 11 11
133780 +12 12 12 13 13 13 13 13 13 14 14 14 14 14 14 16 16 16
133781 +16 16 16 17 17 17 18 18 18 18 18 18 20 20 20 20 20 20
133782 +20 20 20 20 20 20 21 21 21 20 20 20 21 21 21 19 19 19
133783 +18 18 18 18 18 18 17 17 17 16 16 16 16 16 16 14 14 14
133784 +14 14 14 13 13 13 12 12 12 11 11 11 10 10 10 9 9 9
133785 +8 8 8 7 7 7 6 6 6 5 5 5 4 4 4 3 3 3
133786 +2 2 2 2 2 2 1 1 1 1 1 1 2 2 2 2 2 2
133787 +2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133788 +3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133789 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133790 +4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5
133791 +4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5
133792 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3
133793 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133794 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133795 +3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4
133796 +4 4 4 5 5 5 5 5 5 4 4 4 4 4 4 4 4 4
133797 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133798 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133799 +4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3
133800 +3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133801 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133802 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133803 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133804 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133805 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133806 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133807 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133808 +4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133809 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133810 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133811 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133812 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133813 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133814 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133815 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133816 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133817 +4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4
133818 +4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3
133819 +2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1
133820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133856 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
133857 +2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3
133858 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4
133859 +5 5 5 5 5 5 6 6 6 7 7 7 8 8 8 9 9 9
133860 +9 9 9 10 10 10 11 11 11 12 12 12 13 13 13 13 13 13
133861 +14 14 14 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17
133862 +19 19 19 18 18 18 18 18 18 18 18 18 17 17 17 17 17 17
133863 +16 16 16 16 16 16 16 16 16 14 14 14 13 13 13 13 13 13
133864 +12 12 12 11 11 11 10 10 10 9 9 9 8 8 8 7 7 7
133865 +6 6 6 5 5 5 4 4 4 3 3 3 2 2 2 1 1 1
133866 +1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
133867 +1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2
133868 +2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3
133869 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133870 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133871 +3 3 3 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3
133872 +3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2
133873 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133874 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133875 +2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3
133876 +3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 3 3 3
133877 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 2 2
133878 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133879 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133880 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133881 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133882 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133883 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133884 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1
133885 +1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133886 +2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133887 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133888 +3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133889 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133890 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133891 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133892 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133893 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133894 +3 3 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2
133895 +2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3
133896 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133897 +3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
133898 +3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1
133899 +1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
133900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133937 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133938 +1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
133939 +3 3 3 3 3 3 4 4 4 5 5 5 6 6 6 6 6 6
133940 +7 7 7 8 8 8 9 9 9 10 10 10 11 11 11 11 11 11
133941 +12 12 12 13 13 13 14 14 14 16 16 16 16 16 16 16 16 16
133942 +16 16 16 16 16 16 17 17 17 16 16 16 16 16 16 16 16 16
133943 +16 16 16 14 14 14 13 13 13 13 13 13 12 12 12 11 11 11
133944 +10 10 10 9 9 9 8 8 8 7 7 7 6 6 6 5 5 5
133945 +4 4 4 3 3 3 3 3 3 2 2 2 1 1 1 0 0 0
133946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133947 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
133948 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133949 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133950 +1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133951 +2 2 2 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2
133952 +2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1
133953 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133954 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133955 +1 1 1 1 1 1 2 2 2 1 1 1 1 1 1 2 2 2
133956 +2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2
133957 +2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1
133958 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133959 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133960 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133961 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133962 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133963 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133964 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133965 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133966 +1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
133967 +2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1
133968 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
133969 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
133970 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133971 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
133972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
133973 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133974 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133975 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133976 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133977 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
133978 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
133979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
133999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134018 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
134019 +1 1 1 2 2 2 3 3 3 3 3 3 4 4 4 5 5 5
134020 +5 5 5 6 6 6 7 7 7 8 8 8 9 9 9 10 10 10
134021 +11 11 11 11 11 11 12 12 12 13 13 13 13 13 13 13 13 13
134022 +14 14 14 14 14 14 14 14 14 14 14 14 14 14 14 13 13 13
134023 +13 13 13 12 12 12 11 11 11 11 11 11 10 10 10 9 9 9
134024 +8 8 8 7 7 7 6 6 6 5 5 5 5 5 5 4 4 4
134025 +3 3 3 2 2 2 1 1 1 1 1 1 0 0 0 0 0 0
134026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134031 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
134032 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
134033 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
134034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
134035 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
134036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
134037 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
134038 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0
134039 +0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
134040 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
134041 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
134042 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
134043 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
134044 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
134045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
134047 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
134048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
134057 +1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
134058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134099 +0 0 0 1 1 1 2 2 2 2 2 2 3 3 3 4 4 4
134100 +4 4 4 5 5 5 6 6 6 7 7 7 8 8 8 8 8 8
134101 +9 9 9 10 10 10 10 10 10 11 11 11 11 11 11 12 12 12
134102 +12 12 12 12 12 12 13 13 13 12 12 12 12 12 12 11 11 11
134103 +11 11 11 10 10 10 10 10 10 9 9 9 8 8 8 8 8 8
134104 +7 7 7 6 6 6 5 5 5 4 4 4 4 4 4 3 3 3
134105 +2 2 2 2 2 2 1 1 1 0 0 0 0 0 0 0 0 0
134106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134179 +0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 3 3 3
134180 +3 3 3 4 4 4 5 5 5 5 5 5 6 6 6 7 7 7
134181 +8 8 8 8 8 8 9 9 9 9 9 9 10 10 10 10 10 10
134182 +10 10 10 11 11 11 11 11 11 11 11 11 11 11 11 10 10 10
134183 +10 10 10 9 9 9 8 8 8 8 8 8 7 7 7 6 6 6
134184 +5 5 5 5 5 5 4 4 4 3 3 3 3 3 3 2 2 2
134185 +1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
134186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134259 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2
134260 +3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5
134261 +6 6 6 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8
134262 +9 9 9 9 9 9 8 8 8 8 8 8 9 9 9 8 8 8
134263 +8 8 8 7 7 7 7 7 7 6 6 6 5 5 5 5 5 5
134264 +4 4 4 4 4 4 3 3 3 3 3 3 2 2 2 1 1 1
134265 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134339 +0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
134340 +2 2 2 2 2 2 3 3 3 3 3 3 4 4 4 4 4 4
134341 +5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 7 7 7
134342 +7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 7 7 7
134343 +7 7 7 6 6 6 5 5 5 5 5 5 5 5 5 4 4 4
134344 +4 4 4 3 3 3 2 2 2 2 2 2 1 1 1 1 1 1
134345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1
134420 +1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 3 3 3
134421 +3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 6 6 6
134422 +5 5 5 5 5 5 5 5 5 6 6 6 5 5 5 5 5 5
134423 +4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3
134424 +2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 0 0 0
134425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134500 +0 0 0 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
134501 +2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4
134502 +4 4 4 4 4 4 4 4 4 5 5 5 4 4 4 4 4 4
134503 +3 3 3 3 3 3 3 3 3 3 3 3 2 2 2 2 2 2
134504 +1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0
134505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134580 +0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
134581 +1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3
134582 +3 3 3 4 4 4 3 3 3 3 3 3 2 2 2 2 2 2
134583 +2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1
134584 +1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134661 +1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
134662 +1 1 1 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1
134663 +1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0
134664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
134999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
135999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
136999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
137999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
138999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
139999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
140999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
141999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142278 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142279 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142280 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142281 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142282 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142283 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142284 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142285 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142286 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142287 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142288 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142289 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142290 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142291 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142292 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142293 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142294 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142295 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142296 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142297 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142298 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142299 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142300 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142301 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142302 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142303 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142304 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142305 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142306 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142307 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142308 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142309 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142310 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142311 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142312 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142313 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142314 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142315 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142316 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142317 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142318 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142319 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142320 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142321 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142322 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142323 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142324 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142325 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142326 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142327 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142328 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142329 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142330 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142331 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142332 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142333 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142334 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142335 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142336 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142337 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142338 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142339 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142340 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142341 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142342 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142343 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142344 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142345 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142346 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142347 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142348 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142349 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142350 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142351 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142352 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142353 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142354 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142355 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142356 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142357 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142358 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142359 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142360 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142361 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142362 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142363 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142364 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142365 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142366 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142367 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142368 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142369 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142370 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142371 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142372 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142373 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142374 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142375 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142376 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142377 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142378 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142379 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142380 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142381 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142382 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142383 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142384 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142385 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142386 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142387 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142388 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142389 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142390 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142391 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142392 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142393 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142394 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142395 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142396 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142397 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142398 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142399 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142400 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142401 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142402 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142403 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142404 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142405 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142406 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142407 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142408 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142409 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142410 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142411 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142412 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142413 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142414 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142415 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142416 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142417 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142418 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142419 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142420 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142421 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142422 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142423 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142424 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142425 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142426 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142427 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142428 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142429 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142430 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142431 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142432 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142433 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142434 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142435 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142436 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142437 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142438 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142439 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142440 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142441 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142442 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142443 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142444 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142445 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142446 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142447 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142448 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142449 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142450 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142451 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142452 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142453 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142454 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142455 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142456 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142457 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142458 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142459 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142460 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142461 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142462 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142463 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142464 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142465 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142466 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142467 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142468 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142469 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142470 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142471 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142472 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142473 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142474 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142475 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142476 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142477 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142478 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142479 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142480 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142481 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142482 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142483 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142484 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142485 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142486 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142487 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142488 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142489 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142490 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142491 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142492 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142493 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142494 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142495 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142496 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142497 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142498 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142499 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142500 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142501 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142502 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142503 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142504 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142505 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142506 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142507 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142508 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142509 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142510 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142511 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142512 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142513 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142514 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142515 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142516 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142517 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142518 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142519 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142520 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142521 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142522 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142523 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142524 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142525 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142526 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142527 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142528 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142529 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142530 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142531 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142532 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142533 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142534 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142535 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142536 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142537 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142538 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142539 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142540 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142541 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142542 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142543 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142544 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142545 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142546 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142547 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142548 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142549 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142550 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142551 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142552 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142553 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142554 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142555 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142556 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142557 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142558 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142559 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142560 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142561 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142562 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142563 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142564 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142565 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142566 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142567 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142568 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142569 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142570 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142571 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142572 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142573 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142574 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142575 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142576 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142577 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142578 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142579 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142580 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142581 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142582 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142583 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142584 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142585 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142586 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142587 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142588 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142589 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142590 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142591 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142592 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142593 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142594 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142595 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142596 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142597 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142598 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142599 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142600 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142601 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142602 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142603 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142604 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142605 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142606 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142607 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142608 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142609 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142610 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142611 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142612 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142613 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142614 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142615 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142616 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142617 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142618 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142619 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142620 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142621 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142622 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142623 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142624 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142625 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142626 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142627 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142628 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142629 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142630 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142631 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142632 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142633 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142634 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142635 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142636 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142637 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142638 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142639 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142640 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142641 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142642 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142643 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142644 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142645 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142646 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142647 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142648 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142649 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142650 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142651 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142652 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142653 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142654 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142655 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142656 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142657 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142658 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142659 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142660 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142661 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142662 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142663 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142664 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142665 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142666 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142667 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142668 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142669 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142670 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142671 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142672 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142673 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142674 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142675 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142676 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142677 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142678 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142679 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142680 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142681 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142682 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142683 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142684 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142685 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142686 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142687 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142688 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142689 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142690 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142691 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142692 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142693 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142694 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142695 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142696 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142697 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142698 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142699 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142700 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142701 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142702 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142703 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142704 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142705 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142706 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142707 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142708 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142709 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142710 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142711 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142712 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142713 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142714 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142715 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142716 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142717 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142718 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142719 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142720 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142721 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142722 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142723 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142724 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142725 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142726 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142727 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142728 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142729 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142730 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142731 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142732 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142733 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142734 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142735 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142736 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142737 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142738 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142739 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142740 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142741 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142742 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142743 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142744 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142745 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142746 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142747 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142748 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142749 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142750 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142751 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142752 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142753 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142754 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142755 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142756 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142757 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142758 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142759 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142760 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142761 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142762 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142763 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142764 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142765 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142766 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142767 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142768 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142769 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142770 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142771 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142772 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142773 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142774 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142775 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142776 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142777 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142778 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142779 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142780 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142781 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142782 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142783 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142784 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142785 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142786 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142787 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142788 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142789 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142790 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142791 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142792 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142793 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142794 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142795 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142796 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142797 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142798 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142799 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142800 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142801 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142802 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142803 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142804 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142805 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142806 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142807 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142808 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142809 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142810 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142811 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142812 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142813 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142814 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142815 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142816 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142817 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142818 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142819 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142820 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142821 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142822 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142823 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142824 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142825 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142826 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142827 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142828 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142829 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142830 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142831 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142832 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142833 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142834 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142835 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142836 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142837 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142838 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142839 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142840 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142841 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142842 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142843 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142844 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142845 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142846 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142847 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142848 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142849 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142850 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142851 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142852 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142853 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142854 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142855 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142856 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142857 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142858 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142859 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142860 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142861 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142862 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142863 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142864 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142865 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142866 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142867 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142868 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142869 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142870 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142871 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142872 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142873 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142874 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142875 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142876 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142877 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142878 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142879 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142880 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142881 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142882 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142883 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142884 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142885 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142886 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142887 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142888 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142889 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142890 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142891 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142892 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142893 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142894 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142895 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142896 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142897 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142898 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142899 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142900 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142901 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142902 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142903 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142904 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142905 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142906 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142907 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142908 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142909 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142910 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142911 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142912 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142913 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142914 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142915 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142916 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142917 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142918 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142919 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142920 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142921 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142922 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142923 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142924 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142925 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142926 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142927 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142928 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142929 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142930 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142931 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142932 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142933 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142934 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142935 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142936 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142937 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142938 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142939 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142940 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142941 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142942 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142943 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142944 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142945 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142946 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142947 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142948 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142949 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142950 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142951 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142952 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142953 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142954 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142955 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142956 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142957 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142958 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142959 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142960 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142961 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142962 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142963 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142964 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142965 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142966 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142967 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142968 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142969 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142970 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142971 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142972 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142973 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142974 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142975 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142976 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142977 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142978 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142979 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142980 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142981 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142982 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142983 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142984 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142985 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142986 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142987 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142988 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142989 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142990 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142991 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142992 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142993 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142994 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142995 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142996 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142997 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142998 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
142999 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143000 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143001 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143002 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143003 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143004 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143005 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143006 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143007 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143008 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143009 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143010 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143011 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143012 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143013 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143014 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143015 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143016 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143017 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143018 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143019 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143020 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143021 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143022 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143023 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143024 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143025 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143026 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143027 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143028 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143029 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143030 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143031 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143032 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143033 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143034 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143035 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143036 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143037 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143038 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143039 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143040 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143041 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143042 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143043 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143044 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143045 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143046 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143047 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143048 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143049 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143050 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143051 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143052 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143053 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143054 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143055 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143056 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143057 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143058 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143059 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143060 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143061 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143062 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143063 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143064 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143065 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143066 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143067 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143068 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143069 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143070 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143071 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143072 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143073 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143074 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143075 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143076 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143077 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143078 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143079 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143080 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143081 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143082 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143083 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143084 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143085 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143086 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143087 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143088 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143089 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143090 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143091 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143092 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143093 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143094 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143095 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143096 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143097 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143098 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143099 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143100 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143101 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143102 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143103 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143104 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143105 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143106 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143107 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143108 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143109 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143110 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143111 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143112 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143113 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143114 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143115 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143116 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143117 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143118 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143119 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143120 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143121 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143122 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143123 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143124 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143125 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143126 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143127 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143128 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143129 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143130 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143131 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143132 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143133 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143134 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143135 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143136 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143137 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143138 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143139 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143140 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143141 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143142 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143143 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143144 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143145 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143146 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143147 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143148 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143149 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143150 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143151 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143152 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143153 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143154 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143155 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143156 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143157 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143158 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143159 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143160 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143161 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143162 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143163 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143164 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143165 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143166 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143167 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143168 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143169 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143170 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143171 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143172 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143173 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143174 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143175 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143176 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143177 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143178 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143179 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143180 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143181 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143182 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143183 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143184 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143185 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143186 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143187 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143188 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143189 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143190 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143191 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143192 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143193 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143194 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143195 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143196 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143197 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143198 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143199 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143200 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143201 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143202 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143203 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143204 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143205 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143206 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143207 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143208 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143209 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143210 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143211 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143212 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143213 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143214 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143215 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143216 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143217 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143218 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143219 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143220 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143221 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143222 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143223 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143224 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143225 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143226 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143227 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143228 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143229 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143230 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143231 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143232 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143233 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143234 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143235 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143236 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143237 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143238 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143239 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143240 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143241 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143242 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143243 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143244 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143245 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143246 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143247 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143248 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143249 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143250 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143251 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143252 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143253 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143254 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143255 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143256 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143257 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143258 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143259 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143260 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143261 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143262 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143263 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143264 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143265 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143266 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143267 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143268 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143269 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143270 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143271 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143272 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143273 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143274 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143275 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143276 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143277 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
143278 Index: linux-2.6.28/drivers/video/logo/Makefile
143279 ===================================================================
143280 --- linux-2.6.28.orig/drivers/video/logo/Makefile 2008-12-25 00:26:37.000000000 +0100
143281 +++ linux-2.6.28/drivers/video/logo/Makefile 2009-01-02 00:01:57.000000000 +0100
143282 @@ -15,6 +15,7 @@ obj-$(CONFIG_LOGO_SUPERH_MONO) += logo_
143283 obj-$(CONFIG_LOGO_SUPERH_VGA16) += logo_superh_vga16.o
143284 obj-$(CONFIG_LOGO_SUPERH_CLUT224) += logo_superh_clut224.o
143285 obj-$(CONFIG_LOGO_M32R_CLUT224) += logo_m32r_clut224.o
143286 +obj-$(CONFIG_LOGO_OPENMOKO_CLUT224) += logo_openmoko_clut224.o
143287
143288 obj-$(CONFIG_SPU_BASE) += logo_spe_clut224.o
143289
143290 Index: linux-2.6.28/drivers/video/Makefile
143291 ===================================================================
143292 --- linux-2.6.28.orig/drivers/video/Makefile 2008-12-25 00:26:37.000000000 +0100
143293 +++ linux-2.6.28/drivers/video/Makefile 2009-01-02 00:01:57.000000000 +0100
143294 @@ -109,6 +109,7 @@ obj-$(CONFIG_FB_METRONOME) += met
143295 obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o
143296 obj-$(CONFIG_FB_SH7760) += sh7760fb.o
143297 obj-$(CONFIG_FB_IMX) += imxfb.o
143298 +obj-$(CONFIG_FB_S3C) += s3c-fb.o
143299 obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o
143300 obj-$(CONFIG_FB_FSL_DIU) += fsl-diu-fb.o
143301 obj-$(CONFIG_FB_COBALT) += cobalt_lcdfb.o
143302 Index: linux-2.6.28/drivers/video/s3c2410fb.c
143303 ===================================================================
143304 --- linux-2.6.28.orig/drivers/video/s3c2410fb.c 2008-12-25 00:26:37.000000000 +0100
143305 +++ linux-2.6.28/drivers/video/s3c2410fb.c 2009-01-02 00:01:57.000000000 +0100
143306 @@ -1017,6 +1017,8 @@ static int s3c2410fb_resume(struct platf
143307
143308 s3c2410fb_init_registers(fbinfo);
143309
143310 + s3c2410fb_set_par(fbinfo);
143311 +
143312 return 0;
143313 }
143314
143315 Index: linux-2.6.28/drivers/video/s3c-fb.c
143316 ===================================================================
143317 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
143318 +++ linux-2.6.28/drivers/video/s3c-fb.c 2009-01-02 00:01:57.000000000 +0100
143319 @@ -0,0 +1,1036 @@
143320 +/* linux/drivers/video/s3c-fb.c
143321 + *
143322 + * Copyright 2008 Openmoko Inc.
143323 + * Copyright 2008 Simtec Electronics
143324 + * Ben Dooks <ben@simtec.co.uk>
143325 + * http://armlinux.simtec.co.uk/
143326 + *
143327 + * Samsung SoC Framebuffer driver
143328 + *
143329 + * This program is free software; you can redistribute it and/or modify
143330 + * it under the terms of the GNU General Public License version 2 as
143331 + * published by the Free Software Foundation.
143332 +*/
143333 +
143334 +#include <linux/kernel.h>
143335 +#include <linux/module.h>
143336 +#include <linux/platform_device.h>
143337 +#include <linux/dma-mapping.h>
143338 +#include <linux/init.h>
143339 +#include <linux/gfp.h>
143340 +#include <linux/clk.h>
143341 +#include <linux/fb.h>
143342 +#include <linux/io.h>
143343 +
143344 +#include <mach/map.h>
143345 +#include <mach/regs-fb.h>
143346 +#include <plat/fb.h>
143347 +
143348 +/* This driver will export a number of framebuffer interfaces depending
143349 + * on the configuration passed in via the platform data. Each fb instance
143350 + * maps to a hardware window. Currently there is no support for runtime
143351 + * setting of the alpha-blending functions that each window has, so only
143352 + * window 0 is actually useful.
143353 + *
143354 + * Window 0 is treated specially, it is used for the basis of the LCD
143355 + * output timings and as the control for the output power-down state.
143356 +*/
143357 +
143358 +/* note, some of the functions that get called are derived from including
143359 + * <mach/regs-fb.h> as they are specific to the architecture that the code
143360 + * is being built for.
143361 +*/
143362 +
143363 +#ifdef CONFIG_FB_S3C_DEBUG_REGWRITE
143364 +#undef writel
143365 +#define writel(v, r) do { \
143366 + printk(KERN_DEBUG "%s: %08x => %p\n", __func__, (unsigned int)v, r); \
143367 + __raw_writel(v, r); } while(0)
143368 +#endif /* FB_S3C_DEBUG_REGWRITE */
143369 +
143370 +struct s3c_fb;
143371 +
143372 +/**
143373 + * struct s3c_fb_win - per window private data for each framebuffer.
143374 + * @windata: The platform data supplied for the window configuration.
143375 + * @parent: The hardware that this window is part of.
143376 + * @fbinfo: Pointer pack to the framebuffer info for this window.
143377 + * @palette_buffer: Buffer/cache to hold palette entries.
143378 + * @pseudo_palette: For use in TRUECOLOUR modes for entries 0..15/
143379 + * @index: The window number of this window.
143380 + * @palette: The bitfields for changing r/g/b into a hardware palette entry.
143381 + */
143382 +struct s3c_fb_win {
143383 + struct s3c_fb_pd_win *windata;
143384 + struct s3c_fb *parent;
143385 + struct fb_info *fbinfo;
143386 + struct s3c_fb_palette palette;
143387 +
143388 + u32 *palette_buffer;
143389 + u32 pseudo_palette[16];
143390 + unsigned int index;
143391 +};
143392 +
143393 +/**
143394 + * struct s3c_fb - overall hardware state of the hardware
143395 + * @dev: The device that we bound to, for printing, etc.
143396 + * @regs_res: The resource we claimed for the IO registers.
143397 + * @bus_clk: The clk (hclk) feeding our interface and possibly pixclk.
143398 + * @regs: The mapped hardware registers.
143399 + * @enabled: A bitmask of enabled hardware windows.
143400 + * @pdata: The platform configuration data passed with the device.
143401 + * @windows: The hardware windows that have been claimed.
143402 + */
143403 +struct s3c_fb {
143404 + struct device *dev;
143405 + struct resource *regs_res;
143406 + struct clk *bus_clk;
143407 + void __iomem *regs;
143408 +
143409 + unsigned char enabled;
143410 +
143411 + struct s3c_fb_platdata *pdata;
143412 + struct s3c_fb_win *windows[S3C_FB_MAX_WIN];
143413 +};
143414 +
143415 +/**
143416 + * s3c_fb_win_has_palette() - determine if a mode has a palette
143417 + * @win: The window number being queried.
143418 + * @bpp: The number of bits per pixel to test.
143419 + *
143420 + * Work out if the given window supports palletised data at the specified bpp.
143421 + */
143422 +static int s3c_fb_win_has_palette(unsigned int win, unsigned int bpp)
143423 +{
143424 + return s3c_fb_win_pal_size(win) <= (1 << bpp);
143425 +}
143426 +
143427 +/**
143428 + * s3c_fb_check_var() - framebuffer layer request to verify a given mode.
143429 + * @var: The screen information to verify.
143430 + * @info: The framebuffer device.
143431 + *
143432 + * Framebuffer layer call to verify the given information and allow us to
143433 + * update various information depending on the hardware capabilities.
143434 + */
143435 +static int s3c_fb_check_var(struct fb_var_screeninfo *var,
143436 + struct fb_info *info)
143437 +{
143438 + struct s3c_fb_win *win = info->par;
143439 + struct s3c_fb_pd_win *windata = win->windata;
143440 + struct s3c_fb *sfb = win->parent;
143441 +
143442 + dev_dbg(sfb->dev, "checking parameters\n");
143443 +
143444 + var->xres_virtual = max((unsigned int)windata->virtual_x, var->xres);
143445 + var->yres_virtual = max((unsigned int)windata->virtual_y, var->yres);
143446 +
143447 + if (!s3c_fb_validate_win_bpp(win->index, var->bits_per_pixel)) {
143448 + dev_dbg(sfb->dev, "win %d: unsupported bpp %d\n",
143449 + win->index, var->bits_per_pixel);
143450 + return -EINVAL;
143451 + }
143452 +
143453 + /* always ensure these are zero, for drop through cases below */
143454 + var->transp.offset = 0;
143455 + var->transp.length = 0;
143456 +
143457 + switch (var->bits_per_pixel) {
143458 + case 1:
143459 + case 2:
143460 + case 4:
143461 + case 8:
143462 + if (!s3c_fb_win_has_palette(win->index, var->bits_per_pixel)) {
143463 + /* non palletised, A:1,R:2,G:3,B:2 mode */
143464 + var->red.offset = 4;
143465 + var->green.offset = 2;
143466 + var->blue.offset = 0;
143467 + var->red.length = 5;
143468 + var->green.length = 3;
143469 + var->blue.length = 2;
143470 + var->transp.offset = 7;
143471 + var->transp.length = 1;
143472 + } else {
143473 + var->red.offset = 0;
143474 + var->red.length = var->bits_per_pixel;
143475 + var->green = var->red;
143476 + var->blue = var->red;
143477 + }
143478 + break;
143479 +
143480 + case 19:
143481 + /* 666 with one bit alpha/transparency */
143482 + var->transp.offset = 18;
143483 + var->transp.length = 1;
143484 + case 18:
143485 + var->bits_per_pixel = 32;
143486 +
143487 + /* 666 format */
143488 + var->red.offset = 12;
143489 + var->green.offset = 6;
143490 + var->blue.offset = 0;
143491 + var->red.length = 6;
143492 + var->green.length = 6;
143493 + var->blue.length = 6;
143494 + break;
143495 +
143496 + case 16:
143497 + /* 16 bpp, 565 format */
143498 + var->red.offset = 11;
143499 + var->green.offset = 5;
143500 + var->blue.offset = 0;
143501 + var->red.length = 5;
143502 + var->green.length = 6;
143503 + var->blue.length = 5;
143504 + break;
143505 +
143506 + case 28:
143507 + case 25:
143508 + var->transp.length = var->bits_per_pixel - 24;
143509 + var->transp.offset = 24;
143510 + /* drop through */
143511 + case 24:
143512 + /* our 24bpp is unpacked, so 32bpp */
143513 + var->bits_per_pixel = 32;
143514 + case 32:
143515 + var->red.offset = 16;
143516 + var->red.length = 8;
143517 + var->green.offset = 8;
143518 + var->green.length = 8;
143519 + var->blue.offset = 0;
143520 + var->blue.length = 8;
143521 + break;
143522 +
143523 + default:
143524 + dev_err(sfb->dev, "invalid bpp\n");
143525 + }
143526 +
143527 + dev_dbg(sfb->dev, "%s: verified parameters\n", __func__);
143528 + return 0;
143529 +}
143530 +
143531 +/**
143532 + * s3c_fb_calc_pixclk() - calculate the divider to create the pixel clock.
143533 + * @sfb: The hardware state.
143534 + * @pixclock: The pixel clock wanted, in picoseconds.
143535 + *
143536 + * Given the specified pixel clock, work out the necessary divider to get
143537 + * close to the output frequency.
143538 + */
143539 +static int s3c_fb_calc_pixclk(struct s3c_fb *sfb, unsigned int pixclk)
143540 +{
143541 + unsigned long clk = clk_get_rate(sfb->bus_clk);
143542 + unsigned long long tmp;
143543 + unsigned int result;
143544 +
143545 + tmp = (unsigned long long)clk;
143546 + tmp *= pixclk;
143547 +
143548 + do_div(tmp, 1000000000UL);
143549 + result = (unsigned int)tmp / 1000;
143550 +
143551 + dev_dbg(sfb->dev, "pixclk=%u, clk=%lu, div=%d (%lu)\n",
143552 + pixclk, clk, result, clk / result);
143553 +
143554 + return result;
143555 +}
143556 +
143557 +/**
143558 + * s3c_fb_align_word() - align pixel count to word boundary
143559 + * @bpp: The number of bits per pixel
143560 + * @pix: The value to be aligned.
143561 + *
143562 + * Align the given pixel count so that it will start on an 32bit word
143563 + * boundary.
143564 + */
143565 +static int s3c_fb_align_word(unsigned int bpp, unsigned int pix)
143566 +{
143567 + int pix_per_word;
143568 +
143569 + if (bpp > 16)
143570 + return pix;
143571 +
143572 + pix_per_word = (8 * 32) / bpp;
143573 + return ALIGN(pix, pix_per_word);
143574 +}
143575 +
143576 +/**
143577 + * s3c_fb_set_par() - framebuffer request to set new framebuffer state.
143578 + * @info: The framebuffer to change.
143579 + *
143580 + * Framebuffer layer request to set a new mode for the specified framebuffer
143581 + */
143582 +static int s3c_fb_set_par(struct fb_info *info)
143583 +{
143584 + struct fb_var_screeninfo *var = &info->var;
143585 + struct s3c_fb_win *win = info->par;
143586 + struct s3c_fb *sfb = win->parent;
143587 + void __iomem *regs = sfb->regs;
143588 + int win_no = win->index;
143589 + u32 data;
143590 + u32 pagewidth;
143591 + int clkdiv;
143592 +
143593 + dev_dbg(sfb->dev, "setting framebuffer parameters\n");
143594 +
143595 + switch (var->bits_per_pixel) {
143596 + case 32:
143597 + case 24:
143598 + case 16:
143599 + case 12:
143600 + info->fix.visual = FB_VISUAL_TRUECOLOR;
143601 + break;
143602 + case 8:
143603 + if (s3c_fb_win_has_palette(win_no, 8))
143604 + info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
143605 + else
143606 + info->fix.visual = FB_VISUAL_TRUECOLOR;
143607 + break;
143608 + case 1:
143609 + info->fix.visual = FB_VISUAL_MONO01;
143610 + break;
143611 + default:
143612 + info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
143613 + break;
143614 + }
143615 +
143616 + info->fix.line_length = (var->xres_virtual * var->bits_per_pixel) / 8;
143617 +
143618 + /* disable the window whilst we update it */
143619 + writel(0, regs + WINCON(win_no));
143620 +
143621 + /* use window 0 as the basis for the lcd output timings */
143622 +
143623 + if (win_no == 0) {
143624 + clkdiv = s3c_fb_calc_pixclk(sfb, var->pixclock);
143625 +
143626 + data = sfb->pdata->vidcon0;
143627 + data &= ~(VIDCON0_CLKVAL_F_MASK | VIDCON0_CLKDIR);
143628 +
143629 + if (clkdiv > 1)
143630 + data |= VIDCON0_CLKVAL_F(clkdiv-1) | VIDCON0_CLKDIR;
143631 + else
143632 + data &= ~VIDCON0_CLKDIR; /* 1:1 clock */
143633 +
143634 + /* write the timing data to the panel */
143635 +
143636 + data |= VIDCON0_ENVID | VIDCON0_ENVID_F;
143637 + writel(data, regs + VIDCON0);
143638 +
143639 + data = VIDTCON0_VBPD(var->upper_margin - 1) |
143640 + VIDTCON0_VFPD(var->lower_margin - 1) |
143641 + VIDTCON0_VSPW(var->vsync_len - 1);
143642 +
143643 + writel(data, regs + VIDTCON0);
143644 +
143645 + data = VIDTCON1_HBPD(var->left_margin - 1) |
143646 + VIDTCON1_HFPD(var->right_margin - 1) |
143647 + VIDTCON1_HSPW(var->hsync_len - 1);
143648 +
143649 + writel(data, regs + VIDTCON1);
143650 +
143651 + data = VIDTCON2_LINEVAL(var->yres - 1) |
143652 + VIDTCON2_HOZVAL(var->xres - 1);
143653 + writel(data, regs + VIDTCON2);
143654 + }
143655 +
143656 + /* write the buffer address */
143657 +
143658 + writel(info->fix.smem_start, regs + VIDW_BUF_START(win_no));
143659 +
143660 + data = info->fix.smem_start + info->fix.line_length * var->yres;
143661 + writel(data, regs + VIDW_BUF_END(win_no));
143662 +
143663 + pagewidth = (var->xres * var->bits_per_pixel) >> 3;
143664 + data = VIDW_BUF_SIZE_OFFSET(info->fix.line_length - pagewidth) |
143665 + VIDW_BUF_SIZE_PAGEWIDTH(pagewidth);
143666 + writel(data, regs + VIDW_BUF_SIZE(win_no));
143667 +
143668 + /* write 'OSD' registers to control position of framebuffer */
143669 +
143670 + data = VIDOSDxA_TOPLEFT_X(0) | VIDOSDxA_TOPLEFT_Y(0);
143671 + writel(data, regs + VIDOSD_A(win_no));
143672 +
143673 + data = VIDOSDxB_BOTRIGHT_X(s3c_fb_align_word(var->bits_per_pixel,
143674 + var->xres - 1)) |
143675 + VIDOSDxB_BOTRIGHT_Y(var->yres - 1);
143676 +
143677 + writel(data, regs + VIDOSD_B(win_no));
143678 +
143679 + data = var->xres * var->yres;
143680 + if (s3c_fb_has_osd_d(win_no)) {
143681 + writel(data, regs + VIDOSD_D(win_no));
143682 + writel(0, regs + VIDOSD_C(win_no));
143683 + } else
143684 + writel(data, regs + VIDOSD_C(win_no));
143685 +
143686 + data = WINCONx_ENWIN;
143687 +
143688 + /* note, since we have to round up the bits-per-pixel, we end up
143689 + * relying on the bitfield information for r/g/b/a to work out
143690 + * exactly which mode of operation is intended. */
143691 +
143692 + switch (var->bits_per_pixel) {
143693 + case 1:
143694 + data |= WINCON0_BPPMODE_1BPP;
143695 + data |= WINCONx_BITSWP;
143696 + data |= WINCONx_BURSTLEN_4WORD;
143697 + break;
143698 + case 2:
143699 + data |= WINCON0_BPPMODE_2BPP;
143700 + data |= WINCONx_BITSWP;
143701 + data |= WINCONx_BURSTLEN_8WORD;
143702 + break;
143703 + case 4:
143704 + data |= WINCON0_BPPMODE_4BPP;
143705 + data |= WINCONx_BITSWP;
143706 + data |= WINCONx_BURSTLEN_8WORD;
143707 + break;
143708 + case 8:
143709 + if (var->transp.length != 0)
143710 + data |= WINCON1_BPPMODE_8BPP_1232;
143711 + else
143712 + data |= WINCON0_BPPMODE_8BPP_PALETTE;
143713 + data |= WINCONx_BURSTLEN_8WORD;
143714 + data |= WINCONx_BYTSWP;
143715 + break;
143716 + case 16:
143717 + if (var->transp.length != 0)
143718 + data |= WINCON1_BPPMODE_16BPP_A1555;
143719 + else
143720 + data |= WINCON0_BPPMODE_16BPP_565;
143721 + data |= WINCONx_HAWSWP;
143722 + data |= WINCONx_BURSTLEN_16WORD;
143723 + break;
143724 + case 24:
143725 + case 32:
143726 + if (var->red.length == 6) {
143727 + if (var->transp.length != 0)
143728 + data |= WINCON1_BPPMODE_19BPP_A1666;
143729 + else
143730 + data |= WINCON1_BPPMODE_18BPP_666;
143731 + } else if (var->transp.length != 0)
143732 + data |= WINCON1_BPPMODE_25BPP_A1888;
143733 + else
143734 + data |= WINCON0_BPPMODE_24BPP_888;
143735 +
143736 + data |= WINCONx_BURSTLEN_16WORD;
143737 + break;
143738 + }
143739 +
143740 + writel(data, regs + WINCON(win_no));
143741 + writel(0x0, regs + WINxMAP(win_no));
143742 +
143743 + return 0;
143744 +}
143745 +
143746 +/**
143747 + * s3c_fb_update_palette() - set or schedule a palette update.
143748 + * @sfb: The hardware information.
143749 + * @win: The window being updated.
143750 + * @reg: The palette index being changed.
143751 + * @value: The computed palette value.
143752 + *
143753 + * Change the value of a palette register, either by directly writing to
143754 + * the palette (this requires the palette RAM to be disconnected from the
143755 + * hardware whilst this is in progress) or schedule the update for later.
143756 + *
143757 + * At the moment, since we have no VSYNC interrupt support, we simply set
143758 + * the palette entry directly.
143759 + */
143760 +static void s3c_fb_update_palette(struct s3c_fb *sfb,
143761 + struct s3c_fb_win *win,
143762 + unsigned int reg,
143763 + u32 value)
143764 +{
143765 + void __iomem *palreg;
143766 + u32 palcon;
143767 +
143768 + palreg = sfb->regs + s3c_fb_pal_reg(win->index, reg);
143769 +
143770 + dev_dbg(sfb->dev, "%s: win %d, reg %d (%p): %08x\n",
143771 + __func__, win->index, reg, palreg, value);
143772 +
143773 + win->palette_buffer[reg] = value;
143774 +
143775 + palcon = readl(sfb->regs + WPALCON);
143776 + writel(palcon | WPALCON_PAL_UPDATE, sfb->regs + WPALCON);
143777 +
143778 + if (s3c_fb_pal_is16(win->index))
143779 + writew(value, palreg);
143780 + else
143781 + writel(value, palreg);
143782 +
143783 + writel(palcon, sfb->regs + WPALCON);
143784 +}
143785 +
143786 +static inline unsigned int chan_to_field(unsigned int chan,
143787 + struct fb_bitfield *bf)
143788 +{
143789 + chan &= 0xffff;
143790 + chan >>= 16 - bf->length;
143791 + return chan << bf->offset;
143792 +}
143793 +
143794 +/**
143795 + * s3c_fb_setcolreg() - framebuffer layer request to change palette.
143796 + * @regno: The palette index to change.
143797 + * @red: The red field for the palette data.
143798 + * @green: The green field for the palette data.
143799 + * @blue: The blue field for the palette data.
143800 + * @trans: The transparency (alpha) field for the palette data.
143801 + * @info: The framebuffer being changed.
143802 + */
143803 +static int s3c_fb_setcolreg(unsigned regno,
143804 + unsigned red, unsigned green, unsigned blue,
143805 + unsigned transp, struct fb_info *info)
143806 +{
143807 + struct s3c_fb_win *win = info->par;
143808 + struct s3c_fb *sfb = win->parent;
143809 + unsigned int val;
143810 +
143811 + dev_dbg(sfb->dev, "%s: win %d: %d => rgb=%d/%d/%d\n",
143812 + __func__, win->index, regno, red, green, blue);
143813 +
143814 + switch (info->fix.visual) {
143815 + case FB_VISUAL_TRUECOLOR:
143816 + /* true-colour, use pseudo-palette */
143817 +
143818 + if (regno < 16) {
143819 + u32 *pal = info->pseudo_palette;
143820 +
143821 + val = chan_to_field(red, &info->var.red);
143822 + val |= chan_to_field(green, &info->var.green);
143823 + val |= chan_to_field(blue, &info->var.blue);
143824 +
143825 + pal[regno] = val;
143826 + }
143827 + break;
143828 +
143829 + case FB_VISUAL_PSEUDOCOLOR:
143830 + if (regno < s3c_fb_win_pal_size(win->index)) {
143831 + val = chan_to_field(red, &win->palette.r);
143832 + val |= chan_to_field(green, &win->palette.g);
143833 + val |= chan_to_field(blue, &win->palette.b);
143834 +
143835 + s3c_fb_update_palette(sfb, win, regno, val);
143836 + }
143837 +
143838 + break;
143839 +
143840 + default:
143841 + return 1; /* unknown type */
143842 + }
143843 +
143844 + return 0;
143845 +}
143846 +
143847 +/**
143848 + * s3c_fb_enable() - Set the state of the main LCD output
143849 + * @sfb: The main framebuffer state.
143850 + * @enable: The state to set.
143851 + */
143852 +static void s3c_fb_enable(struct s3c_fb *sfb, int enable)
143853 +{
143854 + u32 vidcon0 = readl(sfb->regs + VIDCON0);
143855 +
143856 + if (enable)
143857 + vidcon0 |= VIDCON0_ENVID | VIDCON0_ENVID_F;
143858 + else {
143859 + /* see the note in the framebuffer datasheet about
143860 + * why you cannot take both of these bits down at the
143861 + * same time. */
143862 +
143863 + if (!(vidcon0 & VIDCON0_ENVID))
143864 + return;
143865 +
143866 + vidcon0 |= VIDCON0_ENVID;
143867 + vidcon0 &= ~VIDCON0_ENVID_F;
143868 + }
143869 +
143870 + writel(vidcon0, sfb->regs + VIDCON0);
143871 +}
143872 +
143873 +/**
143874 + * s3c_fb_blank() - blank or unblank the given window
143875 + * @blank_mode: The blank state from FB_BLANK_*
143876 + * @info: The framebuffer to blank.
143877 + *
143878 + * Framebuffer layer request to change the power state.
143879 + */
143880 +static int s3c_fb_blank(int blank_mode, struct fb_info *info)
143881 +{
143882 + struct s3c_fb_win *win = info->par;
143883 + struct s3c_fb *sfb = win->parent;
143884 + unsigned int index = win->index;
143885 + u32 wincon;
143886 +
143887 + dev_dbg(sfb->dev, "blank mode %d\n", blank_mode);
143888 +
143889 + wincon = readl(sfb->regs + WINCON(index));
143890 +
143891 + switch (blank_mode) {
143892 + case FB_BLANK_POWERDOWN:
143893 + wincon &= ~WINCONx_ENWIN;
143894 + sfb->enabled &= ~(1 << index);
143895 + /* fall through to FB_BLANK_NORMAL */
143896 +
143897 + case FB_BLANK_NORMAL:
143898 + /* disable the DMA and display 0x0 (black) */
143899 + writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x0),
143900 + sfb->regs + WINxMAP(index));
143901 + break;
143902 +
143903 + case FB_BLANK_UNBLANK:
143904 + writel(0x0, sfb->regs + WINxMAP(index));
143905 + wincon |= WINCONx_ENWIN;
143906 + sfb->enabled |= (1 << index);
143907 + break;
143908 +
143909 + case FB_BLANK_VSYNC_SUSPEND:
143910 + case FB_BLANK_HSYNC_SUSPEND:
143911 + default:
143912 + return 1;
143913 + }
143914 +
143915 + writel(wincon, sfb->regs + WINCON(index));
143916 +
143917 + /* Check the enabled state to see if we need to be running the
143918 + * main LCD interface, as if there are no active windows then
143919 + * it is highly likely that we also do not need to output
143920 + * anything.
143921 + */
143922 +
143923 + /* We could do something like the following code, but the current
143924 + * system of using framebuffer events means that we cannot make
143925 + * the distinction between just window 0 being inactive and all
143926 + * the windows being down.
143927 + *
143928 + * s3c_fb_enable(sfb, sfb->enabled ? 1 : 0);
143929 + */
143930 +
143931 + /* we're stuck with this until we can do something about overriding
143932 + * the power control using the blanking event for a single fb.
143933 + */
143934 + if (index == 0)
143935 + s3c_fb_enable(sfb, blank_mode != FB_BLANK_POWERDOWN ? 1 : 0);
143936 +
143937 + return 0;
143938 +}
143939 +
143940 +static struct fb_ops s3c_fb_ops = {
143941 + .owner = THIS_MODULE,
143942 + .fb_check_var = s3c_fb_check_var,
143943 + .fb_set_par = s3c_fb_set_par,
143944 + .fb_blank = s3c_fb_blank,
143945 + .fb_setcolreg = s3c_fb_setcolreg,
143946 + .fb_fillrect = cfb_fillrect,
143947 + .fb_copyarea = cfb_copyarea,
143948 + .fb_imageblit = cfb_imageblit,
143949 +};
143950 +
143951 +/**
143952 + * s3c_fb_alloc_memory() - allocate display memory for framebuffer window
143953 + * @sfb: The base resources for the hardware.
143954 + * @win: The window to initialise memory for.
143955 + *
143956 + * Allocate memory for the given framebuffer.
143957 + */
143958 +static int __devinit s3c_fb_alloc_memory(struct s3c_fb *sfb,
143959 + struct s3c_fb_win *win)
143960 +{
143961 + struct s3c_fb_pd_win *windata = win->windata;
143962 + unsigned int real_size, virt_size, size;
143963 + struct fb_info *fbi = win->fbinfo;
143964 + dma_addr_t map_dma;
143965 +
143966 + dev_dbg(sfb->dev, "allocating memory for display\n");
143967 +
143968 + real_size = windata->win_mode.xres * windata->win_mode.yres;
143969 + virt_size = windata->virtual_x * windata->virtual_y;
143970 +
143971 + dev_dbg(sfb->dev, "real_size=%u (%u.%u), virt_size=%u (%u.%u)\n",
143972 + real_size, windata->win_mode.xres, windata->win_mode.yres,
143973 + virt_size, windata->virtual_x, windata->virtual_y);
143974 +
143975 + size = (real_size > virt_size) ? real_size : virt_size;
143976 + size *= (windata->max_bpp > 16) ? 32 : windata->max_bpp;
143977 + size /= 8;
143978 +
143979 + fbi->fix.smem_len = size;
143980 + size = PAGE_ALIGN(size);
143981 +
143982 + dev_dbg(sfb->dev, "want %u bytes for window\n", size);
143983 +
143984 + fbi->screen_base = dma_alloc_writecombine(sfb->dev, size,
143985 + &map_dma, GFP_KERNEL);
143986 + if (!fbi->screen_base)
143987 + return -ENOMEM;
143988 +
143989 + dev_dbg(sfb->dev, "mapped %x to %p\n",
143990 + (unsigned int)map_dma, fbi->screen_base);
143991 +
143992 + memset(fbi->screen_base, 0x0, size);
143993 + fbi->fix.smem_start = map_dma;
143994 +
143995 + return 0;
143996 +}
143997 +
143998 +/**
143999 + * s3c_fb_free_memory() - free the display memory for the given window
144000 + * @sfb: The base resources for the hardware.
144001 + * @win: The window to free the display memory for.
144002 + *
144003 + * Free the display memory allocated by s3c_fb_alloc_memory().
144004 + */
144005 +static void s3c_fb_free_memory(struct s3c_fb *sfb, struct s3c_fb_win *win)
144006 +{
144007 + struct fb_info *fbi = win->fbinfo;
144008 +
144009 + dma_free_writecombine(sfb->dev, PAGE_ALIGN(fbi->fix.smem_len),
144010 + fbi->screen_base, fbi->fix.smem_start);
144011 +}
144012 +
144013 +/**
144014 + * s3c_fb_release_win() - release resources for a framebuffer window.
144015 + * @win: The window to cleanup the resources for.
144016 + *
144017 + * Release the resources that where claimed for the hardware window,
144018 + * such as the framebuffer instance and any memory claimed for it.
144019 + */
144020 +static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win)
144021 +{
144022 + fb_dealloc_cmap(&win->fbinfo->cmap);
144023 + unregister_framebuffer(win->fbinfo);
144024 + s3c_fb_free_memory(sfb, win);
144025 +}
144026 +
144027 +/**
144028 + * s3c_fb_probe_win() - register an hardware window
144029 + * @sfb: The base resources for the hardware
144030 + * @res: Pointer to where to place the resultant window.
144031 + *
144032 + * Allocate and do the basic initialisation for one of the hardware's graphics
144033 + * windows.
144034 + */
144035 +static int __devinit s3c_fb_probe_win(struct s3c_fb *sfb, unsigned int win_no,
144036 + struct s3c_fb_win **res)
144037 +{
144038 + struct fb_var_screeninfo *var;
144039 + struct fb_videomode *initmode;
144040 + struct s3c_fb_pd_win *windata;
144041 + struct s3c_fb_win *win;
144042 + struct fb_info *fbinfo;
144043 + int palette_size;
144044 + int ret;
144045 +
144046 + dev_dbg(sfb->dev, "probing window %d\n", win_no);
144047 +
144048 + palette_size = s3c_fb_win_pal_size(win_no);
144049 +
144050 + fbinfo = framebuffer_alloc(sizeof(struct s3c_fb_win) +
144051 + palette_size * sizeof(u32), sfb->dev);
144052 + if (!fbinfo) {
144053 + dev_err(sfb->dev, "failed to allocate framebuffer\n");
144054 + return -ENOENT;
144055 + }
144056 +
144057 + windata = sfb->pdata->win[win_no];
144058 + initmode = &windata->win_mode;
144059 +
144060 + WARN_ON(windata->max_bpp == 0);
144061 + WARN_ON(windata->win_mode.xres == 0);
144062 + WARN_ON(windata->win_mode.yres == 0);
144063 +
144064 + win = fbinfo->par;
144065 + var = &fbinfo->var;
144066 + win->fbinfo = fbinfo;
144067 + win->parent = sfb;
144068 + win->windata = windata;
144069 + win->index = win_no;
144070 + win->palette_buffer = (u32 *)(win + 1);
144071 +
144072 + ret = s3c_fb_alloc_memory(sfb, win);
144073 + if (ret) {
144074 + dev_err(sfb->dev, "failed to allocate display memory\n");
144075 + goto err_framebuffer;
144076 + }
144077 +
144078 + /* setup the r/b/g positions for the window's palette */
144079 + s3c_fb_init_palette(win_no, &win->palette);
144080 +
144081 + /* setup the initial video mode from the window */
144082 + fb_videomode_to_var(&fbinfo->var, initmode);
144083 +
144084 + fbinfo->fix.type = FB_TYPE_PACKED_PIXELS;
144085 + fbinfo->fix.accel = FB_ACCEL_NONE;
144086 + fbinfo->var.activate = FB_ACTIVATE_NOW;
144087 + fbinfo->var.vmode = FB_VMODE_NONINTERLACED;
144088 + fbinfo->var.bits_per_pixel = windata->default_bpp;
144089 + fbinfo->fbops = &s3c_fb_ops;
144090 + fbinfo->flags = FBINFO_FLAG_DEFAULT;
144091 + fbinfo->pseudo_palette = &win->pseudo_palette;
144092 +
144093 + /* prepare to actually start the framebuffer */
144094 +
144095 + ret = s3c_fb_check_var(&fbinfo->var, fbinfo);
144096 + if (ret < 0) {
144097 + dev_err(sfb->dev, "check_var failed on initial video params\n");
144098 + goto err_alloc_mem;
144099 + }
144100 +
144101 + /* create initial colour map */
144102 +
144103 + ret = fb_alloc_cmap(&fbinfo->cmap, s3c_fb_win_pal_size(win_no), 1);
144104 + if (ret == 0)
144105 + fb_set_cmap(&fbinfo->cmap, fbinfo);
144106 + else
144107 + dev_err(sfb->dev, "failed to allocate fb cmap\n");
144108 +
144109 + s3c_fb_set_par(fbinfo);
144110 +
144111 + dev_dbg(sfb->dev, "about to register framebuffer\n");
144112 +
144113 + /* run the check_var and set_par on our configuration. */
144114 +
144115 + ret = register_framebuffer(fbinfo);
144116 + if (ret < 0) {
144117 + dev_err(sfb->dev, "failed to register framebuffer\n");
144118 + goto err_alloc_mem;
144119 + }
144120 +
144121 + *res = win;
144122 + dev_info(sfb->dev, "window %d: fb %s\n", win_no, fbinfo->fix.id);
144123 +
144124 + return 0;
144125 +
144126 +err_alloc_mem:
144127 + s3c_fb_free_memory(sfb, win);
144128 +
144129 +err_framebuffer:
144130 + unregister_framebuffer(fbinfo);
144131 + return ret;
144132 +}
144133 +
144134 +/**
144135 + * s3c_fb_clear_win() - clear hardware window registers.
144136 + * @sfb: The base resources for the hardware.
144137 + * @win: The window to process.
144138 + *
144139 + * Reset the specific window registers to a known state.
144140 + */
144141 +static void s3c_fb_clear_win(struct s3c_fb *sfb, int win)
144142 +{
144143 + void __iomem *regs = sfb->regs;
144144 +
144145 + writel(0, regs + WINCON(win));
144146 + writel(0xffffff, regs + WxKEYCONy(win, 0));
144147 + writel(0xffffff, regs + WxKEYCONy(win, 1));
144148 +
144149 + writel(0, regs + VIDOSD_A(win));
144150 + writel(0, regs + VIDOSD_B(win));
144151 + writel(0, regs + VIDOSD_C(win));
144152 +}
144153 +
144154 +static int __devinit s3c_fb_probe(struct platform_device *pdev)
144155 +{
144156 + struct device *dev = &pdev->dev;
144157 + struct s3c_fb_platdata *pd;
144158 + struct s3c_fb *sfb;
144159 + struct resource *res;
144160 + int win;
144161 + int ret = 0;
144162 +
144163 + pd = pdev->dev.platform_data;
144164 + if (!pd) {
144165 + dev_err(dev, "no platform data specified\n");
144166 + return -EINVAL;
144167 + }
144168 +
144169 + sfb = kzalloc(sizeof(struct s3c_fb), GFP_KERNEL);
144170 + if (!sfb) {
144171 + dev_err(dev, "no memory for framebuffers\n");
144172 + return -ENOMEM;
144173 + }
144174 +
144175 + sfb->dev = dev;
144176 + sfb->pdata = pd;
144177 +
144178 + sfb->bus_clk = clk_get(dev, "lcd");
144179 + if (IS_ERR(sfb->bus_clk)) {
144180 + dev_err(dev, "failed to get bus clock\n");
144181 + goto err_sfb;
144182 + }
144183 +
144184 + clk_enable(sfb->bus_clk);
144185 +
144186 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
144187 + if (!res) {
144188 + dev_err(dev, "failed to find registers\n");
144189 + ret = -ENOENT;
144190 + goto err_clk;
144191 + }
144192 +
144193 + sfb->regs_res = request_mem_region(res->start, resource_size(res),
144194 + dev_name(dev));
144195 + if (!sfb->regs_res) {
144196 + dev_err(dev, "failed to claim register region\n");
144197 + ret = -ENOENT;
144198 + goto err_clk;
144199 + }
144200 +
144201 + sfb->regs = ioremap(res->start, resource_size(res));
144202 + if (!sfb->regs) {
144203 + dev_err(dev, "failed to map registers\n");
144204 + ret = -ENXIO;
144205 + goto err_req_region;
144206 + }
144207 +
144208 + dev_dbg(dev, "got resources (regs %p), probing windows\n", sfb->regs);
144209 +
144210 + /* setup gpio and output polarity controls */
144211 +
144212 + pd->setup_gpio();
144213 +
144214 + writel(pd->vidcon1, sfb->regs + VIDCON1);
144215 +
144216 + /* zero all windows before we do anything */
144217 +
144218 + for (win = 0; win < S3C_FB_MAX_WIN; win++)
144219 + s3c_fb_clear_win(sfb, win);
144220 +
144221 + /* we have the register setup, start allocating framebuffers */
144222 +
144223 + for (win = 0; win < S3C_FB_MAX_WIN; win++) {
144224 + if (!pd->win[win])
144225 + continue;
144226 +
144227 + ret = s3c_fb_probe_win(sfb, win, &sfb->windows[win]);
144228 + if (ret < 0) {
144229 + dev_err(dev, "failed to create window %d\n", win);
144230 + for (; win >= 0; win--)
144231 + s3c_fb_release_win(sfb, sfb->windows[win]);
144232 + goto err_ioremap;
144233 + }
144234 + }
144235 +
144236 + platform_set_drvdata(pdev, sfb);
144237 +
144238 + return 0;
144239 +
144240 +err_ioremap:
144241 + iounmap(sfb->regs);
144242 +
144243 +err_req_region:
144244 + release_resource(sfb->regs_res);
144245 + kfree(sfb->regs_res);
144246 +
144247 +err_clk:
144248 + clk_disable(sfb->bus_clk);
144249 + clk_put(sfb->bus_clk);
144250 +
144251 +err_sfb:
144252 + kfree(sfb);
144253 + return ret;
144254 +}
144255 +
144256 +/**
144257 + * s3c_fb_remove() - Cleanup on module finalisation
144258 + * @pdev: The platform device we are bound to.
144259 + *
144260 + * Shutdown and then release all the resources that the driver allocated
144261 + * on initialisation.
144262 + */
144263 +static int __devexit s3c_fb_remove(struct platform_device *pdev)
144264 +{
144265 + struct s3c_fb *sfb = platform_get_drvdata(pdev);
144266 + int win;
144267 +
144268 + for (win = 0; win <= S3C_FB_MAX_WIN; win++)
144269 + s3c_fb_release_win(sfb, sfb->windows[win]);
144270 +
144271 + iounmap(sfb->regs);
144272 +
144273 + clk_disable(sfb->bus_clk);
144274 + clk_put(sfb->bus_clk);
144275 +
144276 + release_resource(sfb->regs_res);
144277 + kfree(sfb->regs_res);
144278 +
144279 + kfree(sfb);
144280 +
144281 + return 0;
144282 +}
144283 +
144284 +#ifdef CONFIG_PM
144285 +static int s3c_fb_suspend(struct platform_device *pdev, pm_message_t state)
144286 +{
144287 + struct s3c_fb *sfb = platform_get_drvdata(pdev);
144288 + struct s3c_fb_win *win;
144289 + int win_no;
144290 +
144291 + for (win_no = S3C_FB_MAX_WIN; win_no >= 0; win_no--) {
144292 + win = sfb->windows[win_no];
144293 + if (!win)
144294 + continue;
144295 +
144296 + /* use the blank function to push into power-down */
144297 + s3c_fb_blank(FB_BLANK_POWERDOWN, win->fbinfo);
144298 + }
144299 +
144300 + clk_disable(sfb->bus_clk);
144301 + return 0;
144302 +}
144303 +
144304 +static int s3c_fb_resume(struct platform_device *pdev)
144305 +{
144306 + struct s3c_fb *sfb = platform_get_drvdata(pdev);
144307 + struct s3c_fb_win *win;
144308 + int win_no;
144309 +
144310 + clk_enable(sfb->bus_clk);
144311 +
144312 + for (win_no = 0; win_no < S3C_FB_MAX_WIN; win_no++) {
144313 + win = sfb->windows[win_no];
144314 + if (!win)
144315 + continue;
144316 +
144317 + dev_dbg(&pdev->dev, "resuming window %d\n", win_no);
144318 + s3c_fb_set_par(win->fbinfo);
144319 + }
144320 +
144321 + return 0;
144322 +}
144323 +#else
144324 +#define s3c_fb_suspend NULL
144325 +#define s3c_fb_resume NULL
144326 +#endif
144327 +
144328 +static struct platform_driver s3c_fb_driver = {
144329 + .probe = s3c_fb_probe,
144330 + .remove = s3c_fb_remove,
144331 + .suspend = s3c_fb_suspend,
144332 + .resume = s3c_fb_resume,
144333 + .driver = {
144334 + .name = "s3c-fb",
144335 + .owner = THIS_MODULE,
144336 + },
144337 +};
144338 +
144339 +static int __init s3c_fb_init(void)
144340 +{
144341 + return platform_driver_register(&s3c_fb_driver);
144342 +}
144343 +
144344 +static void __exit s3c_fb_cleanup(void)
144345 +{
144346 + platform_driver_unregister(&s3c_fb_driver);
144347 +}
144348 +
144349 +module_init(s3c_fb_init);
144350 +module_exit(s3c_fb_cleanup);
144351 +
144352 +MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
144353 +MODULE_DESCRIPTION("Samsung S3C SoC Framebuffer driver");
144354 +MODULE_LICENSE("GPL");
144355 +MODULE_ALIAS("platform:s3c-fb");
144356 Index: linux-2.6.28/drivers/watchdog/Kconfig
144357 ===================================================================
144358 --- linux-2.6.28.orig/drivers/watchdog/Kconfig 2008-12-25 00:26:37.000000000 +0100
144359 +++ linux-2.6.28/drivers/watchdog/Kconfig 2009-01-02 00:01:57.000000000 +0100
144360 @@ -233,6 +233,12 @@ config ORION5X_WATCHDOG
144361 To compile this driver as a module, choose M here: the
144362 module will be called orion5x_wdt.
144363
144364 +config PCF50606_WATCHDOG
144365 + tristate "NXP PCF50606 Watchdog"
144366 + depends on MFD_PCF50606
144367 + help
144368 + Say Y here to include support for NXP PCF50606 watchdog timer.
144369 +
144370 # ARM26 Architecture
144371
144372 # AVR32 Architecture
144373 @@ -784,7 +790,7 @@ config WATCHDOG_RTAS
144374 tristate "RTAS watchdog"
144375 depends on PPC_RTAS
144376 help
144377 - This driver adds watchdog support for the RTAS watchdog.
144378 + his driver adds watchdog support for the RTAS watchdog.
144379
144380 To compile this driver as a module, choose M here. The module
144381 will be called wdrtas.
144382 Index: linux-2.6.28/drivers/watchdog/Makefile
144383 ===================================================================
144384 --- linux-2.6.28.orig/drivers/watchdog/Makefile 2008-12-25 00:26:37.000000000 +0100
144385 +++ linux-2.6.28/drivers/watchdog/Makefile 2009-01-02 00:01:57.000000000 +0100
144386 @@ -41,6 +41,7 @@ obj-$(CONFIG_PNX4008_WATCHDOG) += pnx400
144387 obj-$(CONFIG_IOP_WATCHDOG) += iop_wdt.o
144388 obj-$(CONFIG_DAVINCI_WATCHDOG) += davinci_wdt.o
144389 obj-$(CONFIG_ORION5X_WATCHDOG) += orion5x_wdt.o
144390 +obj-$(CONFIG_PCF50606_WATCHDOG) += pcf50606_wdt.o
144391
144392 # ARM26 Architecture
144393
144394 Index: linux-2.6.28/drivers/watchdog/pcf50606_wdt.c
144395 ===================================================================
144396 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
144397 +++ linux-2.6.28/drivers/watchdog/pcf50606_wdt.c 2009-01-02 00:01:57.000000000 +0100
144398 @@ -0,0 +1,213 @@
144399 +/* Philips PCF50606 Watchdog Timer Driver
144400 + *
144401 + * (C) 2006-2008 by Openmoko, Inc.
144402 + * Author: Balaji Rao <balajirrao@openmoko.org>
144403 + * All rights reserved.
144404 + *
144405 + * Broken down from monstrous PCF50606 driver mainly by
144406 + * Harald Welte, Matt Hsu, Andy Green and Werner Almesberger
144407 + *
144408 + * This program is free software; you can redistribute it and/or
144409 + * modify it under the terms of the GNU General Public License as
144410 + * published by the Free Software Foundation; either version 2 of
144411 + * the License, or (at your option) any later version.
144412 + *
144413 + * This program is distributed in the hope that it will be useful,
144414 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
144415 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
144416 + * GNU General Public License for more details.
144417 + *
144418 + * You should have received a copy of the GNU General Public License
144419 + * along with this program; if not, write to the Free Software
144420 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
144421 + * MA 02111-1307 USA
144422 + */
144423 +
144424 +#include <linux/miscdevice.h>
144425 +#include <linux/watchdog.h>
144426 +
144427 +#include <linux/mfd/pcf50606/core.h>
144428 +#include <linux/mfd/pcf50606/wdt.h>
144429 +
144430 +static struct pcf50606 *pcf;
144431 +static unsigned long wdt_status;
144432 +#define WDT_IN_USE 0
144433 +#define WDT_OK_TO_CLOSE 1
144434 +#define WDT_REGION_INITED 2
144435 +#define WDT_DEVICE_INITED 3
144436 +
144437 +static int allow_close;
144438 +#define CLOSE_STATE_NOT 0x0000
144439 +#define CLOSE_STATE_ALLOW 0x2342
144440 +
144441 +static void pcf50606_wdt_start(void)
144442 +{
144443 + pcf50606_reg_set_bit_mask(pcf, PCF50606_REG_OOCC1, PCF50606_OOCC1_WDTRST,
144444 + PCF50606_OOCC1_WDTRST);
144445 +}
144446 +
144447 +static void pcf50606_wdt_stop(void)
144448 +{
144449 + pcf50606_reg_clear_bits(pcf, PCF50606_REG_OOCS, PCF50606_OOCS_WDTEXP);
144450 +}
144451 +
144452 +static void pcf50606_wdt_keepalive(void)
144453 +{
144454 + pcf50606_wdt_start();
144455 +}
144456 +
144457 +static int pcf50606_wdt_open(struct inode *inode, struct file *file)
144458 +{
144459 + if (test_and_set_bit(WDT_IN_USE, &wdt_status))
144460 + return -EBUSY;
144461 +
144462 + pcf50606_wdt_start();
144463 +
144464 + return nonseekable_open(inode, file);
144465 +}
144466 +
144467 +static int pcf50606_wdt_release(struct inode *inode, struct file *file)
144468 +{
144469 + if (allow_close == CLOSE_STATE_ALLOW)
144470 + pcf50606_wdt_stop();
144471 + else {
144472 + printk(KERN_CRIT "Unexpected close, not stopping watchdog!\n");
144473 + pcf50606_wdt_keepalive();
144474 + }
144475 +
144476 + allow_close = CLOSE_STATE_NOT;
144477 + clear_bit(WDT_IN_USE, &wdt_status);
144478 +
144479 + return 0;
144480 +}
144481 +
144482 +static ssize_t pcf50606_wdt_write(struct file *file, const char __user *data,
144483 + size_t len, loff_t *ppos)
144484 +{
144485 + if (len) {
144486 + size_t i;
144487 +
144488 + for (i = 0; i != len; i++) {
144489 + char c;
144490 + if (get_user(c, data + i))
144491 + return -EFAULT;
144492 + if (c == 'V')
144493 + allow_close = CLOSE_STATE_ALLOW;
144494 + }
144495 + pcf50606_wdt_keepalive();
144496 + }
144497 +
144498 + return len;
144499 +}
144500 +
144501 +static struct watchdog_info pcf50606_wdt_ident = {
144502 + .options = WDIOF_MAGICCLOSE,
144503 + .firmware_version = 0,
144504 + .identity = "PCF50606 Watchdog",
144505 +};
144506 +
144507 +static int pcf50606_wdt_ioctl(struct inode *inode, struct file *file,
144508 + unsigned int cmd, unsigned long arg)
144509 +{
144510 + void __user *argp = (void __user *)arg;
144511 + int __user *p = argp;
144512 +
144513 + switch (cmd) {
144514 + case WDIOC_GETSUPPORT:
144515 + return copy_to_user(argp, &pcf50606_wdt_ident,
144516 + sizeof(pcf50606_wdt_ident)) ? -EFAULT : 0;
144517 + break;
144518 + case WDIOC_GETSTATUS:
144519 + case WDIOC_GETBOOTSTATUS:
144520 + return put_user(0, p);
144521 + case WDIOC_KEEPALIVE:
144522 + pcf50606_wdt_keepalive();
144523 + return 0;
144524 + case WDIOC_GETTIMEOUT:
144525 + return put_user(8, p);
144526 + default:
144527 + return -ENOIOCTLCMD;
144528 + }
144529 +}
144530 +
144531 +static struct file_operations pcf50606_wdt_fops = {
144532 + .owner = THIS_MODULE,
144533 + .llseek = no_llseek,
144534 + .write = &pcf50606_wdt_write,
144535 + .ioctl = &pcf50606_wdt_ioctl,
144536 + .open = &pcf50606_wdt_open,
144537 + .release = &pcf50606_wdt_release,
144538 +};
144539 +
144540 +static struct miscdevice pcf50606_wdt_miscdev = {
144541 + .minor = WATCHDOG_MINOR,
144542 + .name = "watchdog",
144543 + .fops = &pcf50606_wdt_fops,
144544 +};
144545 +
144546 +static void pcf50606_wdt_irq(struct pcf50606 *pcf, int irq, void *unused)
144547 +{
144548 + pcf50606_reg_set_bit_mask(pcf, PCF50606_REG_OOCC1,
144549 + PCF50606_OOCC1_WDTRST,
144550 + PCF50606_OOCC1_WDTRST);
144551 +}
144552 +
144553 +int __init pcf50606_wdt_probe(struct platform_device *pdev)
144554 +{
144555 + struct pcf50606 *pcf;
144556 + int err;
144557 +
144558 + pcf = platform_get_drvdata(pdev);
144559 +
144560 + err = misc_register(&pcf50606_wdt_miscdev);
144561 + if (err) {
144562 + dev_err(&pdev->dev, "cannot register miscdev on "
144563 + "minor=%d (%d)\n", WATCHDOG_MINOR, err);
144564 + return err;
144565 + }
144566 + set_bit(WDT_DEVICE_INITED, &wdt_status);
144567 +
144568 + /* Set up IRQ handlers */
144569 + pcf->irq_handler[PCF50606_IRQ_CHGWD10S].handler = pcf50606_wdt_irq;
144570 +
144571 + return 0;
144572 +}
144573 +
144574 +static int __devexit pcf50606_wdt_remove(struct platform_device *pdev)
144575 +{
144576 + struct pcf50606 *pcf;
144577 +
144578 + pcf = platform_get_drvdata(pdev);
144579 +
144580 + misc_deregister(&pcf50606_wdt_miscdev);
144581 +
144582 + pcf->irq_handler[PCF50606_IRQ_CHGWD10S].handler = NULL;
144583 +
144584 + return 0;
144585 +}
144586 +
144587 +struct platform_driver pcf50606_wdt_driver = {
144588 + .driver = {
144589 + .name = "pcf50606-wdt",
144590 + },
144591 + .probe = pcf50606_wdt_probe,
144592 + .remove = __devexit_p(pcf50606_wdt_remove),
144593 +};
144594 +
144595 +static int __init pcf50606_wdt_init(void)
144596 +{
144597 + return platform_driver_register(&pcf50606_wdt_driver);
144598 +}
144599 +module_init(pcf50606_wdt_init);
144600 +
144601 +static void __exit pcf50606_wdt_exit(void)
144602 +{
144603 + platform_driver_unregister(&pcf50606_wdt_driver);
144604 +}
144605 +module_exit(pcf50606_wdt_exit);
144606 +
144607 +MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>");
144608 +MODULE_DESCRIPTION("PCF50606 wdt driver");
144609 +MODULE_LICENSE("GPL");
144610 +MODULE_ALIAS("platform:pcf50606-wdt");
144611 +
144612 Index: linux-2.6.28/drivers/watchdog/s3c2410_wdt.c
144613 ===================================================================
144614 --- linux-2.6.28.orig/drivers/watchdog/s3c2410_wdt.c 2008-12-25 00:26:37.000000000 +0100
144615 +++ linux-2.6.28/drivers/watchdog/s3c2410_wdt.c 2009-01-02 00:01:57.000000000 +0100
144616 @@ -42,7 +42,7 @@
144617 #undef S3C_VA_WATCHDOG
144618 #define S3C_VA_WATCHDOG (0)
144619
144620 -#include <asm/plat-s3c/regs-watchdog.h>
144621 +#include <plat/regs-watchdog.h>
144622
144623 #define PFX "s3c2410-wdt: "
144624
144625 Index: linux-2.6.28/fs/jffs2/background.c
144626 ===================================================================
144627 --- linux-2.6.28.orig/fs/jffs2/background.c 2008-12-25 00:26:37.000000000 +0100
144628 +++ linux-2.6.28/fs/jffs2/background.c 2009-01-02 00:01:57.000000000 +0100
144629 @@ -95,13 +95,17 @@ static int jffs2_garbage_collect_thread(
144630 spin_unlock(&c->erase_completion_lock);
144631
144632
144633 - /* This thread is purely an optimisation. But if it runs when
144634 - other things could be running, it actually makes things a
144635 - lot worse. Use yield() and put it at the back of the runqueue
144636 - every time. Especially during boot, pulling an inode in
144637 - with read_inode() is much preferable to having the GC thread
144638 - get there first. */
144639 - yield();
144640 + /* Problem - immediately after bootup, the GCD spends a lot
144641 + * of time in places like jffs2_kill_fragtree(); so much so
144642 + * that userspace processes (like gdm and X) are starved
144643 + * despite plenty of cond_resched()s and renicing. Yield()
144644 + * doesn't help, either (presumably because userspace and GCD
144645 + * are generally competing for a higher latency resource -
144646 + * disk).
144647 + * This forces the GCD to slow the hell down. Pulling an
144648 + * inode in with read_inode() is much preferable to having
144649 + * the GC thread get there first. */
144650 + schedule_timeout_interruptible(msecs_to_jiffies(50));
144651
144652 /* Put_super will send a SIGKILL and then wait on the sem.
144653 */
144654 Index: linux-2.6.28/include/asm-arm/plat-s3c/iic.h
144655 ===================================================================
144656 --- linux-2.6.28.orig/include/asm-arm/plat-s3c/iic.h 2008-12-25 00:26:37.000000000 +0100
144657 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
144658 @@ -1,33 +0,0 @@
144659 -/* arch/arm/mach-s3c2410/include/mach/iic.h
144660 - *
144661 - * Copyright (c) 2004 Simtec Electronics
144662 - * Ben Dooks <ben@simtec.co.uk>
144663 - *
144664 - * S3C2410 - I2C Controller platfrom_device info
144665 - *
144666 - * This program is free software; you can redistribute it and/or modify
144667 - * it under the terms of the GNU General Public License version 2 as
144668 - * published by the Free Software Foundation.
144669 -*/
144670 -
144671 -#ifndef __ASM_ARCH_IIC_H
144672 -#define __ASM_ARCH_IIC_H __FILE__
144673 -
144674 -#define S3C_IICFLG_FILTER (1<<0) /* enable s3c2440 filter */
144675 -
144676 -/* Notes:
144677 - * 1) All frequencies are expressed in Hz
144678 - * 2) A value of zero is `do not care`
144679 -*/
144680 -
144681 -struct s3c2410_platform_i2c {
144682 - int bus_num; /* bus number to use */
144683 - unsigned int flags;
144684 - unsigned int slave_addr; /* slave address for controller */
144685 - unsigned long bus_freq; /* standard bus frequency */
144686 - unsigned long max_freq; /* max frequency for the bus */
144687 - unsigned long min_freq; /* min frequency for the bus */
144688 - unsigned int sda_delay; /* pclks (s3c2440 only) */
144689 -};
144690 -
144691 -#endif /* __ASM_ARCH_IIC_H */
144692 Index: linux-2.6.28/include/asm-arm/plat-s3c/nand.h
144693 ===================================================================
144694 --- linux-2.6.28.orig/include/asm-arm/plat-s3c/nand.h 2008-12-25 00:26:37.000000000 +0100
144695 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
144696 @@ -1,50 +0,0 @@
144697 -/* arch/arm/mach-s3c2410/include/mach/nand.h
144698 - *
144699 - * Copyright (c) 2004 Simtec Electronics
144700 - * Ben Dooks <ben@simtec.co.uk>
144701 - *
144702 - * S3C2410 - NAND device controller platfrom_device info
144703 - *
144704 - * This program is free software; you can redistribute it and/or modify
144705 - * it under the terms of the GNU General Public License version 2 as
144706 - * published by the Free Software Foundation.
144707 -*/
144708 -
144709 -/* struct s3c2410_nand_set
144710 - *
144711 - * define an set of one or more nand chips registered with an unique mtd
144712 - *
144713 - * nr_chips = number of chips in this set
144714 - * nr_partitions = number of partitions pointed to be partitoons (or zero)
144715 - * name = name of set (optional)
144716 - * nr_map = map for low-layer logical to physical chip numbers (option)
144717 - * partitions = mtd partition list
144718 -*/
144719 -
144720 -struct s3c2410_nand_set {
144721 - unsigned int disable_ecc : 1;
144722 -
144723 - int nr_chips;
144724 - int nr_partitions;
144725 - char *name;
144726 - int *nr_map;
144727 - struct mtd_partition *partitions;
144728 - struct nand_ecclayout *ecc_layout;
144729 -};
144730 -
144731 -struct s3c2410_platform_nand {
144732 - /* timing information for controller, all times in nanoseconds */
144733 -
144734 - int tacls; /* time for active CLE/ALE to nWE/nOE */
144735 - int twrph0; /* active time for nWE/nOE */
144736 - int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */
144737 -
144738 - unsigned int ignore_unset_ecc : 1;
144739 -
144740 - int nr_sets;
144741 - struct s3c2410_nand_set *sets;
144742 -
144743 - void (*select_chip)(struct s3c2410_nand_set *,
144744 - int chip);
144745 -};
144746 -
144747 Index: linux-2.6.28/include/asm-arm/plat-s3c/regs-ac97.h
144748 ===================================================================
144749 --- linux-2.6.28.orig/include/asm-arm/plat-s3c/regs-ac97.h 2008-12-25 00:26:37.000000000 +0100
144750 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
144751 @@ -1,67 +0,0 @@
144752 -/* arch/arm/mach-s3c2410/include/mach/regs-ac97.h
144753 - *
144754 - * Copyright (c) 2006 Simtec Electronics <linux@simtec.co.uk>
144755 - * http://www.simtec.co.uk/products/SWLINUX/
144756 - *
144757 - * This program is free software; you can redistribute it and/or modify
144758 - * it under the terms of the GNU General Public License version 2 as
144759 - * published by the Free Software Foundation.
144760 - *
144761 - * S3C2440 AC97 Controller
144762 -*/
144763 -
144764 -#ifndef __ASM_ARCH_REGS_AC97_H
144765 -#define __ASM_ARCH_REGS_AC97_H __FILE__
144766 -
144767 -#define S3C_AC97_GLBCTRL (0x00)
144768 -
144769 -#define S3C_AC97_GLBCTRL_CODECREADYIE (1<<22)
144770 -#define S3C_AC97_GLBCTRL_PCMOUTURIE (1<<21)
144771 -#define S3C_AC97_GLBCTRL_PCMINORIE (1<<20)
144772 -#define S3C_AC97_GLBCTRL_MICINORIE (1<<19)
144773 -#define S3C_AC97_GLBCTRL_PCMOUTTIE (1<<18)
144774 -#define S3C_AC97_GLBCTRL_PCMINTIE (1<<17)
144775 -#define S3C_AC97_GLBCTRL_MICINTIE (1<<16)
144776 -#define S3C_AC97_GLBCTRL_PCMOUTTM_OFF (0<<12)
144777 -#define S3C_AC97_GLBCTRL_PCMOUTTM_PIO (1<<12)
144778 -#define S3C_AC97_GLBCTRL_PCMOUTTM_DMA (2<<12)
144779 -#define S3C_AC97_GLBCTRL_PCMOUTTM_MASK (3<<12)
144780 -#define S3C_AC97_GLBCTRL_PCMINTM_OFF (0<<10)
144781 -#define S3C_AC97_GLBCTRL_PCMINTM_PIO (1<<10)
144782 -#define S3C_AC97_GLBCTRL_PCMINTM_DMA (2<<10)
144783 -#define S3C_AC97_GLBCTRL_PCMINTM_MASK (3<<10)
144784 -#define S3C_AC97_GLBCTRL_MICINTM_OFF (0<<8)
144785 -#define S3C_AC97_GLBCTRL_MICINTM_PIO (1<<8)
144786 -#define S3C_AC97_GLBCTRL_MICINTM_DMA (2<<8)
144787 -#define S3C_AC97_GLBCTRL_MICINTM_MASK (3<<8)
144788 -#define S3C_AC97_GLBCTRL_TRANSFERDATAENABLE (1<<3)
144789 -#define S3C_AC97_GLBCTRL_ACLINKON (1<<2)
144790 -#define S3C_AC97_GLBCTRL_WARMRESET (1<<1)
144791 -#define S3C_AC97_GLBCTRL_COLDRESET (1<<0)
144792 -
144793 -#define S3C_AC97_GLBSTAT (0x04)
144794 -
144795 -#define S3C_AC97_GLBSTAT_CODECREADY (1<<22)
144796 -#define S3C_AC97_GLBSTAT_PCMOUTUR (1<<21)
144797 -#define S3C_AC97_GLBSTAT_PCMINORI (1<<20)
144798 -#define S3C_AC97_GLBSTAT_MICINORI (1<<19)
144799 -#define S3C_AC97_GLBSTAT_PCMOUTTI (1<<18)
144800 -#define S3C_AC97_GLBSTAT_PCMINTI (1<<17)
144801 -#define S3C_AC97_GLBSTAT_MICINTI (1<<16)
144802 -#define S3C_AC97_GLBSTAT_MAINSTATE_IDLE (0<<0)
144803 -#define S3C_AC97_GLBSTAT_MAINSTATE_INIT (1<<0)
144804 -#define S3C_AC97_GLBSTAT_MAINSTATE_READY (2<<0)
144805 -#define S3C_AC97_GLBSTAT_MAINSTATE_ACTIVE (3<<0)
144806 -#define S3C_AC97_GLBSTAT_MAINSTATE_LP (4<<0)
144807 -#define S3C_AC97_GLBSTAT_MAINSTATE_WARM (5<<0)
144808 -
144809 -#define S3C_AC97_CODEC_CMD (0x08)
144810 -
144811 -#define S3C_AC97_CODEC_CMD_READ (1<<23)
144812 -
144813 -#define S3C_AC97_STAT (0x0c)
144814 -#define S3C_AC97_PCM_ADDR (0x10)
144815 -#define S3C_AC97_PCM_DATA (0x18)
144816 -#define S3C_AC97_MIC_DATA (0x1C)
144817 -
144818 -#endif /* __ASM_ARCH_REGS_AC97_H */
144819 Index: linux-2.6.28/include/asm-arm/plat-s3c/regs-iic.h
144820 ===================================================================
144821 --- linux-2.6.28.orig/include/asm-arm/plat-s3c/regs-iic.h 2008-12-25 00:26:37.000000000 +0100
144822 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
144823 @@ -1,56 +0,0 @@
144824 -/* arch/arm/mach-s3c2410/include/mach/regs-iic.h
144825 - *
144826 - * Copyright (c) 2004 Simtec Electronics <linux@simtec.co.uk>
144827 - * http://www.simtec.co.uk/products/SWLINUX/
144828 - *
144829 - * This program is free software; you can redistribute it and/or modify
144830 - * it under the terms of the GNU General Public License version 2 as
144831 - * published by the Free Software Foundation.
144832 - *
144833 - * S3C2410 I2C Controller
144834 -*/
144835 -
144836 -#ifndef __ASM_ARCH_REGS_IIC_H
144837 -#define __ASM_ARCH_REGS_IIC_H __FILE__
144838 -
144839 -/* see s3c2410x user guide, v1.1, section 9 (p447) for more info */
144840 -
144841 -#define S3C2410_IICREG(x) (x)
144842 -
144843 -#define S3C2410_IICCON S3C2410_IICREG(0x00)
144844 -#define S3C2410_IICSTAT S3C2410_IICREG(0x04)
144845 -#define S3C2410_IICADD S3C2410_IICREG(0x08)
144846 -#define S3C2410_IICDS S3C2410_IICREG(0x0C)
144847 -#define S3C2440_IICLC S3C2410_IICREG(0x10)
144848 -
144849 -#define S3C2410_IICCON_ACKEN (1<<7)
144850 -#define S3C2410_IICCON_TXDIV_16 (0<<6)
144851 -#define S3C2410_IICCON_TXDIV_512 (1<<6)
144852 -#define S3C2410_IICCON_IRQEN (1<<5)
144853 -#define S3C2410_IICCON_IRQPEND (1<<4)
144854 -#define S3C2410_IICCON_SCALE(x) ((x)&15)
144855 -#define S3C2410_IICCON_SCALEMASK (0xf)
144856 -
144857 -#define S3C2410_IICSTAT_MASTER_RX (2<<6)
144858 -#define S3C2410_IICSTAT_MASTER_TX (3<<6)
144859 -#define S3C2410_IICSTAT_SLAVE_RX (0<<6)
144860 -#define S3C2410_IICSTAT_SLAVE_TX (1<<6)
144861 -#define S3C2410_IICSTAT_MODEMASK (3<<6)
144862 -
144863 -#define S3C2410_IICSTAT_START (1<<5)
144864 -#define S3C2410_IICSTAT_BUSBUSY (1<<5)
144865 -#define S3C2410_IICSTAT_TXRXEN (1<<4)
144866 -#define S3C2410_IICSTAT_ARBITR (1<<3)
144867 -#define S3C2410_IICSTAT_ASSLAVE (1<<2)
144868 -#define S3C2410_IICSTAT_ADDR0 (1<<1)
144869 -#define S3C2410_IICSTAT_LASTBIT (1<<0)
144870 -
144871 -#define S3C2410_IICLC_SDA_DELAY0 (0 << 0)
144872 -#define S3C2410_IICLC_SDA_DELAY5 (1 << 0)
144873 -#define S3C2410_IICLC_SDA_DELAY10 (2 << 0)
144874 -#define S3C2410_IICLC_SDA_DELAY15 (3 << 0)
144875 -#define S3C2410_IICLC_SDA_DELAY_MASK (3 << 0)
144876 -
144877 -#define S3C2410_IICLC_FILTER_ON (1<<2)
144878 -
144879 -#endif /* __ASM_ARCH_REGS_IIC_H */
144880 Index: linux-2.6.28/include/asm-arm/plat-s3c/regs-nand.h
144881 ===================================================================
144882 --- linux-2.6.28.orig/include/asm-arm/plat-s3c/regs-nand.h 2008-12-25 00:26:37.000000000 +0100
144883 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
144884 @@ -1,123 +0,0 @@
144885 -/* arch/arm/mach-s3c2410/include/mach/regs-nand.h
144886 - *
144887 - * Copyright (c) 2004,2005 Simtec Electronics <linux@simtec.co.uk>
144888 - * http://www.simtec.co.uk/products/SWLINUX/
144889 - *
144890 - * This program is free software; you can redistribute it and/or modify
144891 - * it under the terms of the GNU General Public License version 2 as
144892 - * published by the Free Software Foundation.
144893 - *
144894 - * S3C2410 NAND register definitions
144895 -*/
144896 -
144897 -#ifndef __ASM_ARM_REGS_NAND
144898 -#define __ASM_ARM_REGS_NAND
144899 -
144900 -
144901 -#define S3C2410_NFREG(x) (x)
144902 -
144903 -#define S3C2410_NFCONF S3C2410_NFREG(0x00)
144904 -#define S3C2410_NFCMD S3C2410_NFREG(0x04)
144905 -#define S3C2410_NFADDR S3C2410_NFREG(0x08)
144906 -#define S3C2410_NFDATA S3C2410_NFREG(0x0C)
144907 -#define S3C2410_NFSTAT S3C2410_NFREG(0x10)
144908 -#define S3C2410_NFECC S3C2410_NFREG(0x14)
144909 -
144910 -#define S3C2440_NFCONT S3C2410_NFREG(0x04)
144911 -#define S3C2440_NFCMD S3C2410_NFREG(0x08)
144912 -#define S3C2440_NFADDR S3C2410_NFREG(0x0C)
144913 -#define S3C2440_NFDATA S3C2410_NFREG(0x10)
144914 -#define S3C2440_NFECCD0 S3C2410_NFREG(0x14)
144915 -#define S3C2440_NFECCD1 S3C2410_NFREG(0x18)
144916 -#define S3C2440_NFECCD S3C2410_NFREG(0x1C)
144917 -#define S3C2440_NFSTAT S3C2410_NFREG(0x20)
144918 -#define S3C2440_NFESTAT0 S3C2410_NFREG(0x24)
144919 -#define S3C2440_NFESTAT1 S3C2410_NFREG(0x28)
144920 -#define S3C2440_NFMECC0 S3C2410_NFREG(0x2C)
144921 -#define S3C2440_NFMECC1 S3C2410_NFREG(0x30)
144922 -#define S3C2440_NFSECC S3C2410_NFREG(0x34)
144923 -#define S3C2440_NFSBLK S3C2410_NFREG(0x38)
144924 -#define S3C2440_NFEBLK S3C2410_NFREG(0x3C)
144925 -
144926 -#define S3C2412_NFSBLK S3C2410_NFREG(0x20)
144927 -#define S3C2412_NFEBLK S3C2410_NFREG(0x24)
144928 -#define S3C2412_NFSTAT S3C2410_NFREG(0x28)
144929 -#define S3C2412_NFMECC_ERR0 S3C2410_NFREG(0x2C)
144930 -#define S3C2412_NFMECC_ERR1 S3C2410_NFREG(0x30)
144931 -#define S3C2412_NFMECC0 S3C2410_NFREG(0x34)
144932 -#define S3C2412_NFMECC1 S3C2410_NFREG(0x38)
144933 -#define S3C2412_NFSECC S3C2410_NFREG(0x3C)
144934 -
144935 -#define S3C2410_NFCONF_EN (1<<15)
144936 -#define S3C2410_NFCONF_512BYTE (1<<14)
144937 -#define S3C2410_NFCONF_4STEP (1<<13)
144938 -#define S3C2410_NFCONF_INITECC (1<<12)
144939 -#define S3C2410_NFCONF_nFCE (1<<11)
144940 -#define S3C2410_NFCONF_TACLS(x) ((x)<<8)
144941 -#define S3C2410_NFCONF_TWRPH0(x) ((x)<<4)
144942 -#define S3C2410_NFCONF_TWRPH1(x) ((x)<<0)
144943 -
144944 -#define S3C2410_NFSTAT_BUSY (1<<0)
144945 -
144946 -#define S3C2440_NFCONF_BUSWIDTH_8 (0<<0)
144947 -#define S3C2440_NFCONF_BUSWIDTH_16 (1<<0)
144948 -#define S3C2440_NFCONF_ADVFLASH (1<<3)
144949 -#define S3C2440_NFCONF_TACLS(x) ((x)<<12)
144950 -#define S3C2440_NFCONF_TWRPH0(x) ((x)<<8)
144951 -#define S3C2440_NFCONF_TWRPH1(x) ((x)<<4)
144952 -
144953 -#define S3C2440_NFCONT_LOCKTIGHT (1<<13)
144954 -#define S3C2440_NFCONT_SOFTLOCK (1<<12)
144955 -#define S3C2440_NFCONT_ILLEGALACC_EN (1<<10)
144956 -#define S3C2440_NFCONT_RNBINT_EN (1<<9)
144957 -#define S3C2440_NFCONT_RN_FALLING (1<<8)
144958 -#define S3C2440_NFCONT_SPARE_ECCLOCK (1<<6)
144959 -#define S3C2440_NFCONT_MAIN_ECCLOCK (1<<5)
144960 -#define S3C2440_NFCONT_INITECC (1<<4)
144961 -#define S3C2440_NFCONT_nFCE (1<<1)
144962 -#define S3C2440_NFCONT_ENABLE (1<<0)
144963 -
144964 -#define S3C2440_NFSTAT_READY (1<<0)
144965 -#define S3C2440_NFSTAT_nCE (1<<1)
144966 -#define S3C2440_NFSTAT_RnB_CHANGE (1<<2)
144967 -#define S3C2440_NFSTAT_ILLEGAL_ACCESS (1<<3)
144968 -
144969 -#define S3C2412_NFCONF_NANDBOOT (1<<31)
144970 -#define S3C2412_NFCONF_ECCCLKCON (1<<30)
144971 -#define S3C2412_NFCONF_ECC_MLC (1<<24)
144972 -#define S3C2412_NFCONF_TACLS_MASK (7<<12) /* 1 extra bit of Tacls */
144973 -
144974 -#define S3C2412_NFCONT_ECC4_DIRWR (1<<18)
144975 -#define S3C2412_NFCONT_LOCKTIGHT (1<<17)
144976 -#define S3C2412_NFCONT_SOFTLOCK (1<<16)
144977 -#define S3C2412_NFCONT_ECC4_ENCINT (1<<13)
144978 -#define S3C2412_NFCONT_ECC4_DECINT (1<<12)
144979 -#define S3C2412_NFCONT_MAIN_ECC_LOCK (1<<7)
144980 -#define S3C2412_NFCONT_INIT_MAIN_ECC (1<<5)
144981 -#define S3C2412_NFCONT_nFCE1 (1<<2)
144982 -#define S3C2412_NFCONT_nFCE0 (1<<1)
144983 -
144984 -#define S3C2412_NFSTAT_ECC_ENCDONE (1<<7)
144985 -#define S3C2412_NFSTAT_ECC_DECDONE (1<<6)
144986 -#define S3C2412_NFSTAT_ILLEGAL_ACCESS (1<<5)
144987 -#define S3C2412_NFSTAT_RnB_CHANGE (1<<4)
144988 -#define S3C2412_NFSTAT_nFCE1 (1<<3)
144989 -#define S3C2412_NFSTAT_nFCE0 (1<<2)
144990 -#define S3C2412_NFSTAT_Res1 (1<<1)
144991 -#define S3C2412_NFSTAT_READY (1<<0)
144992 -
144993 -#define S3C2412_NFECCERR_SERRDATA(x) (((x) >> 21) & 0xf)
144994 -#define S3C2412_NFECCERR_SERRBIT(x) (((x) >> 18) & 0x7)
144995 -#define S3C2412_NFECCERR_MERRDATA(x) (((x) >> 7) & 0x3ff)
144996 -#define S3C2412_NFECCERR_MERRBIT(x) (((x) >> 4) & 0x7)
144997 -#define S3C2412_NFECCERR_SPARE_ERR(x) (((x) >> 2) & 0x3)
144998 -#define S3C2412_NFECCERR_MAIN_ERR(x) (((x) >> 2) & 0x3)
144999 -#define S3C2412_NFECCERR_NONE (0)
145000 -#define S3C2412_NFECCERR_1BIT (1)
145001 -#define S3C2412_NFECCERR_MULTIBIT (2)
145002 -#define S3C2412_NFECCERR_ECCAREA (3)
145003 -
145004 -
145005 -
145006 -#endif /* __ASM_ARM_REGS_NAND */
145007 -
145008 Index: linux-2.6.28/include/asm-arm/plat-s3c/regs-rtc.h
145009 ===================================================================
145010 --- linux-2.6.28.orig/include/asm-arm/plat-s3c/regs-rtc.h 2008-12-25 00:26:37.000000000 +0100
145011 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
145012 @@ -1,61 +0,0 @@
145013 -/* arch/arm/mach-s3c2410/include/mach/regs-rtc.h
145014 - *
145015 - * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
145016 - * http://www.simtec.co.uk/products/SWLINUX/
145017 - *
145018 - * This program is free software; you can redistribute it and/or modify
145019 - * it under the terms of the GNU General Public License version 2 as
145020 - * published by the Free Software Foundation.
145021 - *
145022 - * S3C2410 Internal RTC register definition
145023 -*/
145024 -
145025 -#ifndef __ASM_ARCH_REGS_RTC_H
145026 -#define __ASM_ARCH_REGS_RTC_H __FILE__
145027 -
145028 -#define S3C2410_RTCREG(x) (x)
145029 -
145030 -#define S3C2410_RTCCON S3C2410_RTCREG(0x40)
145031 -#define S3C2410_RTCCON_RTCEN (1<<0)
145032 -#define S3C2410_RTCCON_CLKSEL (1<<1)
145033 -#define S3C2410_RTCCON_CNTSEL (1<<2)
145034 -#define S3C2410_RTCCON_CLKRST (1<<3)
145035 -
145036 -#define S3C2410_TICNT S3C2410_RTCREG(0x44)
145037 -#define S3C2410_TICNT_ENABLE (1<<7)
145038 -
145039 -#define S3C2410_RTCALM S3C2410_RTCREG(0x50)
145040 -#define S3C2410_RTCALM_ALMEN (1<<6)
145041 -#define S3C2410_RTCALM_YEAREN (1<<5)
145042 -#define S3C2410_RTCALM_MONEN (1<<4)
145043 -#define S3C2410_RTCALM_DAYEN (1<<3)
145044 -#define S3C2410_RTCALM_HOUREN (1<<2)
145045 -#define S3C2410_RTCALM_MINEN (1<<1)
145046 -#define S3C2410_RTCALM_SECEN (1<<0)
145047 -
145048 -#define S3C2410_RTCALM_ALL \
145049 - S3C2410_RTCALM_ALMEN | S3C2410_RTCALM_YEAREN | S3C2410_RTCALM_MONEN |\
145050 - S3C2410_RTCALM_DAYEN | S3C2410_RTCALM_HOUREN | S3C2410_RTCALM_MINEN |\
145051 - S3C2410_RTCALM_SECEN
145052 -
145053 -
145054 -#define S3C2410_ALMSEC S3C2410_RTCREG(0x54)
145055 -#define S3C2410_ALMMIN S3C2410_RTCREG(0x58)
145056 -#define S3C2410_ALMHOUR S3C2410_RTCREG(0x5c)
145057 -
145058 -#define S3C2410_ALMDATE S3C2410_RTCREG(0x60)
145059 -#define S3C2410_ALMMON S3C2410_RTCREG(0x64)
145060 -#define S3C2410_ALMYEAR S3C2410_RTCREG(0x68)
145061 -
145062 -#define S3C2410_RTCRST S3C2410_RTCREG(0x6c)
145063 -
145064 -#define S3C2410_RTCSEC S3C2410_RTCREG(0x70)
145065 -#define S3C2410_RTCMIN S3C2410_RTCREG(0x74)
145066 -#define S3C2410_RTCHOUR S3C2410_RTCREG(0x78)
145067 -#define S3C2410_RTCDATE S3C2410_RTCREG(0x7c)
145068 -#define S3C2410_RTCDAY S3C2410_RTCREG(0x80)
145069 -#define S3C2410_RTCMON S3C2410_RTCREG(0x84)
145070 -#define S3C2410_RTCYEAR S3C2410_RTCREG(0x88)
145071 -
145072 -
145073 -#endif /* __ASM_ARCH_REGS_RTC_H */
145074 Index: linux-2.6.28/include/asm-arm/plat-s3c/regs-watchdog.h
145075 ===================================================================
145076 --- linux-2.6.28.orig/include/asm-arm/plat-s3c/regs-watchdog.h 2008-12-25 00:26:37.000000000 +0100
145077 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
145078 @@ -1,41 +0,0 @@
145079 -/* arch/arm/mach-s3c2410/include/mach/regs-watchdog.h
145080 - *
145081 - * Copyright (c) 2003 Simtec Electronics <linux@simtec.co.uk>
145082 - * http://www.simtec.co.uk/products/SWLINUX/
145083 - *
145084 - * This program is free software; you can redistribute it and/or modify
145085 - * it under the terms of the GNU General Public License version 2 as
145086 - * published by the Free Software Foundation.
145087 - *
145088 - * S3C2410 Watchdog timer control
145089 -*/
145090 -
145091 -
145092 -#ifndef __ASM_ARCH_REGS_WATCHDOG_H
145093 -#define __ASM_ARCH_REGS_WATCHDOG_H
145094 -
145095 -#define S3C_WDOGREG(x) ((x) + S3C_VA_WATCHDOG)
145096 -
145097 -#define S3C2410_WTCON S3C_WDOGREG(0x00)
145098 -#define S3C2410_WTDAT S3C_WDOGREG(0x04)
145099 -#define S3C2410_WTCNT S3C_WDOGREG(0x08)
145100 -
145101 -/* the watchdog can either generate a reset pulse, or an
145102 - * interrupt.
145103 - */
145104 -
145105 -#define S3C2410_WTCON_RSTEN (0x01)
145106 -#define S3C2410_WTCON_INTEN (1<<2)
145107 -#define S3C2410_WTCON_ENABLE (1<<5)
145108 -
145109 -#define S3C2410_WTCON_DIV16 (0<<3)
145110 -#define S3C2410_WTCON_DIV32 (1<<3)
145111 -#define S3C2410_WTCON_DIV64 (2<<3)
145112 -#define S3C2410_WTCON_DIV128 (3<<3)
145113 -
145114 -#define S3C2410_WTCON_PRESCALE(x) ((x) << 8)
145115 -#define S3C2410_WTCON_PRESCALE_MASK (0xff00)
145116 -
145117 -#endif /* __ASM_ARCH_REGS_WATCHDOG_H */
145118 -
145119 -
145120 Index: linux-2.6.28/include/asm-arm/plat-s3c24xx/mci.h
145121 ===================================================================
145122 --- linux-2.6.28.orig/include/asm-arm/plat-s3c24xx/mci.h 2008-12-25 00:26:37.000000000 +0100
145123 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
145124 @@ -1,15 +0,0 @@
145125 -#ifndef _ARCH_MCI_H
145126 -#define _ARCH_MCI_H
145127 -
145128 -struct s3c24xx_mci_pdata {
145129 - unsigned int wprotect_invert : 1;
145130 - unsigned int detect_invert : 1; /* set => detect active high. */
145131 -
145132 - unsigned int gpio_detect;
145133 - unsigned int gpio_wprotect;
145134 - unsigned long ocr_avail;
145135 - void (*set_power)(unsigned char power_mode,
145136 - unsigned short vdd);
145137 -};
145138 -
145139 -#endif /* _ARCH_NCI_H */
145140 Index: linux-2.6.28/include/asm-arm/plat-s3c24xx/neo1973.h
145141 ===================================================================
145142 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
145143 +++ linux-2.6.28/include/asm-arm/plat-s3c24xx/neo1973.h 2009-01-02 00:01:57.000000000 +0100
145144 @@ -0,0 +1,33 @@
145145 +/*
145146 + * include/asm-arm/plat-s3c24xx/neo1973.h
145147 + *
145148 + * Common utility code for GTA01 and GTA02
145149 + *
145150 + * Copyright (C) 2008 by Openmoko, Inc.
145151 + * Author: Holger Hans Peter Freyther <freyther@openmoko.org>
145152 + * All rights reserved.
145153 + *
145154 + * This program is free software; you can redistribute it and/or
145155 + * modify it under the terms of the GNU General Public License as
145156 + * published by the Free Software Foundation; either version 2 of
145157 + * the License, or (at your option) any later version.
145158 + *
145159 + * This program is distributed in the hope that it will be useful,
145160 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
145161 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145162 + * GNU General Public License for more details.
145163 + *
145164 + * You should have received a copy of the GNU General Public License
145165 + * along with this program; if not, write to the Free Software
145166 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
145167 + * MA 02111-1307 USA
145168 + *
145169 + */
145170 +
145171 +#ifndef NEO1973_H
145172 +#define NEO1973_H
145173 +
145174 +void neo1973_gpb_add_shadow_gpio(unsigned int gpio);
145175 +void neo1973_gpb_setpin(unsigned int pin, unsigned to);
145176 +
145177 +#endif
145178 Index: linux-2.6.28/include/asm-arm/plat-s3c24xx/regs-spi.h
145179 ===================================================================
145180 --- linux-2.6.28.orig/include/asm-arm/plat-s3c24xx/regs-spi.h 2008-12-25 00:26:37.000000000 +0100
145181 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
145182 @@ -1,82 +0,0 @@
145183 -/* arch/arm/mach-s3c2410/include/mach/regs-spi.h
145184 - *
145185 - * Copyright (c) 2004 Fetron GmbH
145186 - *
145187 - * This program is free software; you can redistribute it and/or modify
145188 - * it under the terms of the GNU General Public License version 2 as
145189 - * published by the Free Software Foundation.
145190 - *
145191 - * S3C2410 SPI register definition
145192 -*/
145193 -
145194 -#ifndef __ASM_ARCH_REGS_SPI_H
145195 -#define __ASM_ARCH_REGS_SPI_H
145196 -
145197 -#define S3C2410_SPI1 (0x20)
145198 -#define S3C2412_SPI1 (0x100)
145199 -
145200 -#define S3C2410_SPCON (0x00)
145201 -
145202 -#define S3C2412_SPCON_RXFIFO_RB2 (0<<14)
145203 -#define S3C2412_SPCON_RXFIFO_RB4 (1<<14)
145204 -#define S3C2412_SPCON_RXFIFO_RB12 (2<<14)
145205 -#define S3C2412_SPCON_RXFIFO_RB14 (3<<14)
145206 -#define S3C2412_SPCON_TXFIFO_RB2 (0<<12)
145207 -#define S3C2412_SPCON_TXFIFO_RB4 (1<<12)
145208 -#define S3C2412_SPCON_TXFIFO_RB12 (2<<12)
145209 -#define S3C2412_SPCON_TXFIFO_RB14 (3<<12)
145210 -#define S3C2412_SPCON_RXFIFO_RESET (1<<11) /* RxFIFO reset */
145211 -#define S3C2412_SPCON_TXFIFO_RESET (1<<10) /* TxFIFO reset */
145212 -#define S3C2412_SPCON_RXFIFO_EN (1<<9) /* RxFIFO Enable */
145213 -#define S3C2412_SPCON_TXFIFO_EN (1<<8) /* TxFIFO Enable */
145214 -
145215 -#define S3C2412_SPCON_DIRC_RX (1<<7)
145216 -
145217 -#define S3C2410_SPCON_SMOD_DMA (2<<5) /* DMA mode */
145218 -#define S3C2410_SPCON_SMOD_INT (1<<5) /* interrupt mode */
145219 -#define S3C2410_SPCON_SMOD_POLL (0<<5) /* polling mode */
145220 -#define S3C2410_SPCON_ENSCK (1<<4) /* Enable SCK */
145221 -#define S3C2410_SPCON_MSTR (1<<3) /* Master/Slave select
145222 - 0: slave, 1: master */
145223 -#define S3C2410_SPCON_CPOL_HIGH (1<<2) /* Clock polarity select */
145224 -#define S3C2410_SPCON_CPOL_LOW (0<<2) /* Clock polarity select */
145225 -
145226 -#define S3C2410_SPCON_CPHA_FMTB (1<<1) /* Clock Phase Select */
145227 -#define S3C2410_SPCON_CPHA_FMTA (0<<1) /* Clock Phase Select */
145228 -
145229 -#define S3C2410_SPCON_TAGD (1<<0) /* Tx auto garbage data mode */
145230 -
145231 -
145232 -#define S3C2410_SPSTA (0x04)
145233 -
145234 -#define S3C2412_SPSTA_RXFIFO_AE (1<<11)
145235 -#define S3C2412_SPSTA_TXFIFO_AE (1<<10)
145236 -#define S3C2412_SPSTA_RXFIFO_ERROR (1<<9)
145237 -#define S3C2412_SPSTA_TXFIFO_ERROR (1<<8)
145238 -#define S3C2412_SPSTA_RXFIFO_FIFO (1<<7)
145239 -#define S3C2412_SPSTA_RXFIFO_EMPTY (1<<6)
145240 -#define S3C2412_SPSTA_TXFIFO_NFULL (1<<5)
145241 -#define S3C2412_SPSTA_TXFIFO_EMPTY (1<<4)
145242 -
145243 -#define S3C2410_SPSTA_DCOL (1<<2) /* Data Collision Error */
145244 -#define S3C2410_SPSTA_MULD (1<<1) /* Multi Master Error */
145245 -#define S3C2410_SPSTA_READY (1<<0) /* Data Tx/Rx ready */
145246 -#define S3C2412_SPSTA_READY_ORG (1<<3)
145247 -
145248 -#define S3C2410_SPPIN (0x08)
145249 -
145250 -#define S3C2410_SPPIN_ENMUL (1<<2) /* Multi Master Error detect */
145251 -#define S3C2410_SPPIN_RESERVED (1<<1)
145252 -#define S3C2400_SPPIN_nCS (1<<1) /* SPI Card Select */
145253 -#define S3C2410_SPPIN_KEEP (1<<0) /* Master Out keep */
145254 -
145255 -#define S3C2410_SPPRE (0x0C)
145256 -#define S3C2410_SPTDAT (0x10)
145257 -#define S3C2410_SPRDAT (0x14)
145258 -
145259 -#define S3C2412_TXFIFO (0x18)
145260 -#define S3C2412_RXFIFO (0x18)
145261 -#define S3C2412_SPFIC (0x24)
145262 -
145263 -
145264 -#endif /* __ASM_ARCH_REGS_SPI_H */
145265 Index: linux-2.6.28/include/asm-arm/plat-s3c24xx/regs-udc.h
145266 ===================================================================
145267 --- linux-2.6.28.orig/include/asm-arm/plat-s3c24xx/regs-udc.h 2008-12-25 00:26:37.000000000 +0100
145268 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
145269 @@ -1,153 +0,0 @@
145270 -/* arch/arm/mach-s3c2410/include/mach/regs-udc.h
145271 - *
145272 - * Copyright (C) 2004 Herbert Poetzl <herbert@13thfloor.at>
145273 - *
145274 - * This include file is free software; you can redistribute it and/or
145275 - * modify it under the terms of the GNU General Public License as
145276 - * published by the Free Software Foundation; either version 2 of
145277 - * the License, or (at your option) any later version.
145278 -*/
145279 -
145280 -#ifndef __ASM_ARCH_REGS_UDC_H
145281 -#define __ASM_ARCH_REGS_UDC_H
145282 -
145283 -#define S3C2410_USBDREG(x) (x)
145284 -
145285 -#define S3C2410_UDC_FUNC_ADDR_REG S3C2410_USBDREG(0x0140)
145286 -#define S3C2410_UDC_PWR_REG S3C2410_USBDREG(0x0144)
145287 -#define S3C2410_UDC_EP_INT_REG S3C2410_USBDREG(0x0148)
145288 -
145289 -#define S3C2410_UDC_USB_INT_REG S3C2410_USBDREG(0x0158)
145290 -#define S3C2410_UDC_EP_INT_EN_REG S3C2410_USBDREG(0x015c)
145291 -
145292 -#define S3C2410_UDC_USB_INT_EN_REG S3C2410_USBDREG(0x016c)
145293 -
145294 -#define S3C2410_UDC_FRAME_NUM1_REG S3C2410_USBDREG(0x0170)
145295 -#define S3C2410_UDC_FRAME_NUM2_REG S3C2410_USBDREG(0x0174)
145296 -
145297 -#define S3C2410_UDC_EP0_FIFO_REG S3C2410_USBDREG(0x01c0)
145298 -#define S3C2410_UDC_EP1_FIFO_REG S3C2410_USBDREG(0x01c4)
145299 -#define S3C2410_UDC_EP2_FIFO_REG S3C2410_USBDREG(0x01c8)
145300 -#define S3C2410_UDC_EP3_FIFO_REG S3C2410_USBDREG(0x01cc)
145301 -#define S3C2410_UDC_EP4_FIFO_REG S3C2410_USBDREG(0x01d0)
145302 -
145303 -#define S3C2410_UDC_EP1_DMA_CON S3C2410_USBDREG(0x0200)
145304 -#define S3C2410_UDC_EP1_DMA_UNIT S3C2410_USBDREG(0x0204)
145305 -#define S3C2410_UDC_EP1_DMA_FIFO S3C2410_USBDREG(0x0208)
145306 -#define S3C2410_UDC_EP1_DMA_TTC_L S3C2410_USBDREG(0x020c)
145307 -#define S3C2410_UDC_EP1_DMA_TTC_M S3C2410_USBDREG(0x0210)
145308 -#define S3C2410_UDC_EP1_DMA_TTC_H S3C2410_USBDREG(0x0214)
145309 -
145310 -#define S3C2410_UDC_EP2_DMA_CON S3C2410_USBDREG(0x0218)
145311 -#define S3C2410_UDC_EP2_DMA_UNIT S3C2410_USBDREG(0x021c)
145312 -#define S3C2410_UDC_EP2_DMA_FIFO S3C2410_USBDREG(0x0220)
145313 -#define S3C2410_UDC_EP2_DMA_TTC_L S3C2410_USBDREG(0x0224)
145314 -#define S3C2410_UDC_EP2_DMA_TTC_M S3C2410_USBDREG(0x0228)
145315 -#define S3C2410_UDC_EP2_DMA_TTC_H S3C2410_USBDREG(0x022c)
145316 -
145317 -#define S3C2410_UDC_EP3_DMA_CON S3C2410_USBDREG(0x0240)
145318 -#define S3C2410_UDC_EP3_DMA_UNIT S3C2410_USBDREG(0x0244)
145319 -#define S3C2410_UDC_EP3_DMA_FIFO S3C2410_USBDREG(0x0248)
145320 -#define S3C2410_UDC_EP3_DMA_TTC_L S3C2410_USBDREG(0x024c)
145321 -#define S3C2410_UDC_EP3_DMA_TTC_M S3C2410_USBDREG(0x0250)
145322 -#define S3C2410_UDC_EP3_DMA_TTC_H S3C2410_USBDREG(0x0254)
145323 -
145324 -#define S3C2410_UDC_EP4_DMA_CON S3C2410_USBDREG(0x0258)
145325 -#define S3C2410_UDC_EP4_DMA_UNIT S3C2410_USBDREG(0x025c)
145326 -#define S3C2410_UDC_EP4_DMA_FIFO S3C2410_USBDREG(0x0260)
145327 -#define S3C2410_UDC_EP4_DMA_TTC_L S3C2410_USBDREG(0x0264)
145328 -#define S3C2410_UDC_EP4_DMA_TTC_M S3C2410_USBDREG(0x0268)
145329 -#define S3C2410_UDC_EP4_DMA_TTC_H S3C2410_USBDREG(0x026c)
145330 -
145331 -#define S3C2410_UDC_INDEX_REG S3C2410_USBDREG(0x0178)
145332 -
145333 -/* indexed registers */
145334 -
145335 -#define S3C2410_UDC_MAXP_REG S3C2410_USBDREG(0x0180)
145336 -
145337 -#define S3C2410_UDC_EP0_CSR_REG S3C2410_USBDREG(0x0184)
145338 -
145339 -#define S3C2410_UDC_IN_CSR1_REG S3C2410_USBDREG(0x0184)
145340 -#define S3C2410_UDC_IN_CSR2_REG S3C2410_USBDREG(0x0188)
145341 -
145342 -#define S3C2410_UDC_OUT_CSR1_REG S3C2410_USBDREG(0x0190)
145343 -#define S3C2410_UDC_OUT_CSR2_REG S3C2410_USBDREG(0x0194)
145344 -#define S3C2410_UDC_OUT_FIFO_CNT1_REG S3C2410_USBDREG(0x0198)
145345 -#define S3C2410_UDC_OUT_FIFO_CNT2_REG S3C2410_USBDREG(0x019c)
145346 -
145347 -#define S3C2410_UDC_FUNCADDR_UPDATE (1<<7)
145348 -
145349 -#define S3C2410_UDC_PWR_ISOUP (1<<7) // R/W
145350 -#define S3C2410_UDC_PWR_RESET (1<<3) // R
145351 -#define S3C2410_UDC_PWR_RESUME (1<<2) // R/W
145352 -#define S3C2410_UDC_PWR_SUSPEND (1<<1) // R
145353 -#define S3C2410_UDC_PWR_ENSUSPEND (1<<0) // R/W
145354 -
145355 -#define S3C2410_UDC_PWR_DEFAULT 0x00
145356 -
145357 -#define S3C2410_UDC_INT_EP4 (1<<4) // R/W (clear only)
145358 -#define S3C2410_UDC_INT_EP3 (1<<3) // R/W (clear only)
145359 -#define S3C2410_UDC_INT_EP2 (1<<2) // R/W (clear only)
145360 -#define S3C2410_UDC_INT_EP1 (1<<1) // R/W (clear only)
145361 -#define S3C2410_UDC_INT_EP0 (1<<0) // R/W (clear only)
145362 -
145363 -#define S3C2410_UDC_USBINT_RESET (1<<2) // R/W (clear only)
145364 -#define S3C2410_UDC_USBINT_RESUME (1<<1) // R/W (clear only)
145365 -#define S3C2410_UDC_USBINT_SUSPEND (1<<0) // R/W (clear only)
145366 -
145367 -#define S3C2410_UDC_INTE_EP4 (1<<4) // R/W
145368 -#define S3C2410_UDC_INTE_EP3 (1<<3) // R/W
145369 -#define S3C2410_UDC_INTE_EP2 (1<<2) // R/W
145370 -#define S3C2410_UDC_INTE_EP1 (1<<1) // R/W
145371 -#define S3C2410_UDC_INTE_EP0 (1<<0) // R/W
145372 -
145373 -#define S3C2410_UDC_USBINTE_RESET (1<<2) // R/W
145374 -#define S3C2410_UDC_USBINTE_SUSPEND (1<<0) // R/W
145375 -
145376 -
145377 -#define S3C2410_UDC_INDEX_EP0 (0x00)
145378 -#define S3C2410_UDC_INDEX_EP1 (0x01) // ??
145379 -#define S3C2410_UDC_INDEX_EP2 (0x02) // ??
145380 -#define S3C2410_UDC_INDEX_EP3 (0x03) // ??
145381 -#define S3C2410_UDC_INDEX_EP4 (0x04) // ??
145382 -
145383 -#define S3C2410_UDC_ICSR1_CLRDT (1<<6) // R/W
145384 -#define S3C2410_UDC_ICSR1_SENTSTL (1<<5) // R/W (clear only)
145385 -#define S3C2410_UDC_ICSR1_SENDSTL (1<<4) // R/W
145386 -#define S3C2410_UDC_ICSR1_FFLUSH (1<<3) // W (set only)
145387 -#define S3C2410_UDC_ICSR1_UNDRUN (1<<2) // R/W (clear only)
145388 -#define S3C2410_UDC_ICSR1_PKTRDY (1<<0) // R/W (set only)
145389 -
145390 -#define S3C2410_UDC_ICSR2_AUTOSET (1<<7) // R/W
145391 -#define S3C2410_UDC_ICSR2_ISO (1<<6) // R/W
145392 -#define S3C2410_UDC_ICSR2_MODEIN (1<<5) // R/W
145393 -#define S3C2410_UDC_ICSR2_DMAIEN (1<<4) // R/W
145394 -
145395 -#define S3C2410_UDC_OCSR1_CLRDT (1<<7) // R/W
145396 -#define S3C2410_UDC_OCSR1_SENTSTL (1<<6) // R/W (clear only)
145397 -#define S3C2410_UDC_OCSR1_SENDSTL (1<<5) // R/W
145398 -#define S3C2410_UDC_OCSR1_FFLUSH (1<<4) // R/W
145399 -#define S3C2410_UDC_OCSR1_DERROR (1<<3) // R
145400 -#define S3C2410_UDC_OCSR1_OVRRUN (1<<2) // R/W (clear only)
145401 -#define S3C2410_UDC_OCSR1_PKTRDY (1<<0) // R/W (clear only)
145402 -
145403 -#define S3C2410_UDC_OCSR2_AUTOCLR (1<<7) // R/W
145404 -#define S3C2410_UDC_OCSR2_ISO (1<<6) // R/W
145405 -#define S3C2410_UDC_OCSR2_DMAIEN (1<<5) // R/W
145406 -
145407 -#define S3C2410_UDC_EP0_CSR_OPKRDY (1<<0)
145408 -#define S3C2410_UDC_EP0_CSR_IPKRDY (1<<1)
145409 -#define S3C2410_UDC_EP0_CSR_SENTSTL (1<<2)
145410 -#define S3C2410_UDC_EP0_CSR_DE (1<<3)
145411 -#define S3C2410_UDC_EP0_CSR_SE (1<<4)
145412 -#define S3C2410_UDC_EP0_CSR_SENDSTL (1<<5)
145413 -#define S3C2410_UDC_EP0_CSR_SOPKTRDY (1<<6)
145414 -#define S3C2410_UDC_EP0_CSR_SSE (1<<7)
145415 -
145416 -#define S3C2410_UDC_MAXP_8 (1<<0)
145417 -#define S3C2410_UDC_MAXP_16 (1<<1)
145418 -#define S3C2410_UDC_MAXP_32 (1<<2)
145419 -#define S3C2410_UDC_MAXP_64 (1<<3)
145420 -
145421 -
145422 -#endif
145423 Index: linux-2.6.28/include/asm-arm/plat-s3c24xx/udc.h
145424 ===================================================================
145425 --- linux-2.6.28.orig/include/asm-arm/plat-s3c24xx/udc.h 2008-12-25 00:26:37.000000000 +0100
145426 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000
145427 @@ -1,36 +0,0 @@
145428 -/* arch/arm/mach-s3c2410/include/mach/udc.h
145429 - *
145430 - * Copyright (c) 2005 Arnaud Patard <arnaud.patard@rtp-net.org>
145431 - *
145432 - *
145433 - * This program is free software; you can redistribute it and/or modify
145434 - * it under the terms of the GNU General Public License version 2 as
145435 - * published by the Free Software Foundation.
145436 - *
145437 - *
145438 - * Changelog:
145439 - * 14-Mar-2005 RTP Created file
145440 - * 02-Aug-2005 RTP File rename
145441 - * 07-Sep-2005 BJD Minor cleanups, changed cmd to enum
145442 - * 18-Jan-2007 HMW Add per-platform vbus_draw function
145443 -*/
145444 -
145445 -#ifndef __ASM_ARM_ARCH_UDC_H
145446 -#define __ASM_ARM_ARCH_UDC_H
145447 -
145448 -enum s3c2410_udc_cmd_e {
145449 - S3C2410_UDC_P_ENABLE = 1, /* Pull-up enable */
145450 - S3C2410_UDC_P_DISABLE = 2, /* Pull-up disable */
145451 - S3C2410_UDC_P_RESET = 3, /* UDC reset, in case of */
145452 -};
145453 -
145454 -struct s3c2410_udc_mach_info {
145455 - void (*udc_command)(enum s3c2410_udc_cmd_e);
145456 - void (*vbus_draw)(unsigned int ma);
145457 - unsigned int vbus_pin;
145458 - unsigned char vbus_pin_inverted;
145459 -};
145460 -
145461 -extern void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *);
145462 -
145463 -#endif /* __ASM_ARM_ARCH_UDC_H */
145464 Index: linux-2.6.28/include/linux/android_aid.h
145465 ===================================================================
145466 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
145467 +++ linux-2.6.28/include/linux/android_aid.h 2009-01-02 00:01:57.000000000 +0100
145468 @@ -0,0 +1,25 @@
145469 +/* include/linux/android_aid.h
145470 + *
145471 + * Copyright (C) 2008 Google, Inc.
145472 + *
145473 + * This software is licensed under the terms of the GNU General Public
145474 + * License version 2, as published by the Free Software Foundation, and
145475 + * may be copied, distributed, and modified under those terms.
145476 + *
145477 + * This program is distributed in the hope that it will be useful,
145478 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
145479 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145480 + * GNU General Public License for more details.
145481 + *
145482 + */
145483 +
145484 +#ifndef _LINUX_ANDROID_AID_H
145485 +#define _LINUX_ANDROID_AID_H
145486 +
145487 +/* AIDs that the kernel treats differently */
145488 +#define AID_NET_BT_ADMIN 3001
145489 +#define AID_NET_BT 3002
145490 +#define AID_INET 3003
145491 +#define AID_NET_RAW 3004
145492 +
145493 +#endif
145494 Index: linux-2.6.28/include/linux/android_alarm.h
145495 ===================================================================
145496 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
145497 +++ linux-2.6.28/include/linux/android_alarm.h 2009-01-02 00:01:57.000000000 +0100
145498 @@ -0,0 +1,59 @@
145499 +/* include/linux/android_alarm.h
145500 + *
145501 + * Copyright (C) 2006-2007 Google, Inc.
145502 + *
145503 + * This software is licensed under the terms of the GNU General Public
145504 + * License version 2, as published by the Free Software Foundation, and
145505 + * may be copied, distributed, and modified under those terms.
145506 + *
145507 + * This program is distributed in the hope that it will be useful,
145508 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
145509 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145510 + * GNU General Public License for more details.
145511 + *
145512 + */
145513 +
145514 +#ifndef _LINUX_ANDROID_ALARM_H
145515 +#define _LINUX_ANDROID_ALARM_H
145516 +
145517 +#include <asm/ioctl.h>
145518 +#include <linux/time.h>
145519 +
145520 +typedef enum {
145521 + /* return code bit numbers or set alarm arg */
145522 + ANDROID_ALARM_RTC_WAKEUP,
145523 + ANDROID_ALARM_RTC,
145524 + ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP,
145525 + ANDROID_ALARM_ELAPSED_REALTIME,
145526 + ANDROID_ALARM_SYSTEMTIME,
145527 +
145528 + ANDROID_ALARM_TYPE_COUNT,
145529 +
145530 + /* return code bit numbers */
145531 + /* ANDROID_ALARM_TIME_CHANGE = 16 */
145532 +} android_alarm_type_t;
145533 +
145534 +typedef enum {
145535 + ANDROID_ALARM_RTC_WAKEUP_MASK = 1U << ANDROID_ALARM_RTC_WAKEUP,
145536 + ANDROID_ALARM_RTC_MASK = 1U << ANDROID_ALARM_RTC,
145537 + ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP_MASK = 1U << ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP,
145538 + ANDROID_ALARM_ELAPSED_REALTIME_MASK = 1U << ANDROID_ALARM_ELAPSED_REALTIME,
145539 + ANDROID_ALARM_SYSTEMTIME_MASK = 1U << ANDROID_ALARM_SYSTEMTIME,
145540 + ANDROID_ALARM_TIME_CHANGE_MASK = 1U << 16
145541 +} android_alarm_return_flags_t;
145542 +
145543 +/* Disable alarm */
145544 +#define ANDROID_ALARM_CLEAR(type) _IO('a', 0 | ((type) << 4))
145545 +
145546 +/* Ack last alarm and wait for next */
145547 +#define ANDROID_ALARM_WAIT _IO('a', 1)
145548 +
145549 +/* Set alarm */
145550 +#define ANDROID_ALARM_SET(type) _IOW('a', 2 | ((type) << 4), struct timespec)
145551 +#define ANDROID_ALARM_SET_AND_WAIT(type) _IOW('a', 3 | ((type) << 4), struct timespec)
145552 +#define ANDROID_ALARM_GET_TIME(type) _IOW('a', 4 | ((type) << 4), struct timespec)
145553 +#define ANDROID_ALARM_SET_RTC _IOW('a', 5, struct timespec)
145554 +#define ANDROID_ALARM_BASE_CMD(cmd) (cmd & ~(_IOC(0, 0, 0xf0, 0)))
145555 +#define ANDROID_ALARM_IOCTL_TO_TYPE(cmd) (_IOC_NR(cmd) >> 4)
145556 +
145557 +#endif
145558 Index: linux-2.6.28/include/linux/android_power.h
145559 ===================================================================
145560 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
145561 +++ linux-2.6.28/include/linux/android_power.h 2009-01-02 00:01:57.000000000 +0100
145562 @@ -0,0 +1,98 @@
145563 +/* include/linux/android_power.h
145564 + *
145565 + * Copyright (C) 2007-2008 Google, Inc.
145566 + *
145567 + * This software is licensed under the terms of the GNU General Public
145568 + * License version 2, as published by the Free Software Foundation, and
145569 + * may be copied, distributed, and modified under those terms.
145570 + *
145571 + * This program is distributed in the hope that it will be useful,
145572 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
145573 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145574 + * GNU General Public License for more details.
145575 + *
145576 + */
145577 +
145578 +#ifndef _LINUX_ANDROID_POWER_H
145579 +#define _LINUX_ANDROID_POWER_H
145580 +
145581 +#include <linux/list.h>
145582 +#include <linux/ktime.h>
145583 +
145584 +typedef struct
145585 +{
145586 + struct list_head link;
145587 + int flags;
145588 + const char *name;
145589 + int expires;
145590 +#ifdef CONFIG_ANDROID_POWER_STAT
145591 + struct {
145592 + int count;
145593 + int expire_count;
145594 + ktime_t total_time;
145595 + ktime_t max_time;
145596 + ktime_t last_time;
145597 + } stat;
145598 +#endif
145599 +} android_suspend_lock_t;
145600 +
145601 +#if 0 /* none of these flags are implemented */
145602 +#define ANDROID_SUSPEND_LOCK_FLAG_COUNTED (1U << 0)
145603 +#define ANDROID_SUSPEND_LOCK_FLAG_USER_READABLE (1U << 1)
145604 +#define ANDROID_SUSPEND_LOCK_FLAG_USER_SET (1U << 2)
145605 +#define ANDROID_SUSPEND_LOCK_FLAG_USER_CLEAR (1U << 3)
145606 +#define ANDROID_SUSPEND_LOCK_FLAG_USER_INC (1U << 4)
145607 +#define ANDROID_SUSPEND_LOCK_FLAG_USER_DEC (1U << 5)
145608 +#define ANDROID_SUSPEND_LOCK_FLAG_USER_VISIBLE_MASK (0x1fU << 1)
145609 +#endif
145610 +#define ANDROID_SUSPEND_LOCK_AUTO_EXPIRE (1U << 6)
145611 +#define ANDROID_SUSPEND_LOCK_ACTIVE (1U << 7)
145612 +
145613 +enum {
145614 + ANDROID_STOPPED_DRAWING,
145615 + ANDROID_REQUEST_STOP_DRAWING,
145616 + ANDROID_DRAWING_OK,
145617 +};
145618 +
145619 +enum {
145620 + ANDROID_EARLY_SUSPEND_LEVEL_BLANK_SCREEN = 50,
145621 + ANDROID_EARLY_SUSPEND_LEVEL_CONSOLE_SWITCH = 100,
145622 + ANDROID_EARLY_SUSPEND_LEVEL_DISABLE_FB = 150,
145623 +};
145624 +typedef struct android_early_suspend android_early_suspend_t;
145625 +struct android_early_suspend
145626 +{
145627 + struct list_head link;
145628 + int level;
145629 + void (*suspend)(android_early_suspend_t *h);
145630 + void (*resume)(android_early_suspend_t *h);
145631 +};
145632 +
145633 +typedef enum {
145634 + ANDROID_CHARGING_STATE_UNKNOWN,
145635 + ANDROID_CHARGING_STATE_DISCHARGE,
145636 + ANDROID_CHARGING_STATE_MAINTAIN, /* or trickle */
145637 + ANDROID_CHARGING_STATE_SLOW,
145638 + ANDROID_CHARGING_STATE_NORMAL,
145639 + ANDROID_CHARGING_STATE_FAST,
145640 + ANDROID_CHARGING_STATE_OVERHEAT
145641 +} android_charging_state_t;
145642 +
145643 +/* android_suspend_lock_t *android_allocate_suspend_lock(const char *debug_name); */
145644 +/* void android_free_suspend_lock(android_suspend_lock_t *lock); */
145645 +int android_init_suspend_lock(android_suspend_lock_t *lock);
145646 +void android_uninit_suspend_lock(android_suspend_lock_t *lock);
145647 +void android_lock_idle(android_suspend_lock_t *lock);
145648 +void android_lock_idle_auto_expire(android_suspend_lock_t *lock, int timeout);
145649 +void android_lock_suspend(android_suspend_lock_t *lock);
145650 +void android_lock_suspend_auto_expire(android_suspend_lock_t *lock, int timeout);
145651 +void android_unlock_suspend(android_suspend_lock_t *lock);
145652 +
145653 +int android_power_is_driver_suspended(void);
145654 +int android_power_is_low_power_idle_ok(void);
145655 +
145656 +void android_register_early_suspend(android_early_suspend_t *handler);
145657 +void android_unregister_early_suspend(android_early_suspend_t *handler);
145658 +
145659 +#endif
145660 +
145661 Index: linux-2.6.28/include/linux/android_timed_gpio.h
145662 ===================================================================
145663 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
145664 +++ linux-2.6.28/include/linux/android_timed_gpio.h 2009-01-02 00:01:57.000000000 +0100
145665 @@ -0,0 +1,31 @@
145666 +/* include/linux/android_timed_gpio.h
145667 + *
145668 + * Copyright (C) 2008 Google, Inc.
145669 + *
145670 + * This software is licensed under the terms of the GNU General Public
145671 + * License version 2, as published by the Free Software Foundation, and
145672 + * may be copied, distributed, and modified under those terms.
145673 + *
145674 + * This program is distributed in the hope that it will be useful,
145675 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
145676 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145677 + * GNU General Public License for more details.
145678 + *
145679 +*/
145680 +
145681 +#ifndef _LINUX_ANDROID_TIMED_GPIO_H
145682 +#define _LINUX_ANDROID_TIMED_GPIO_H
145683 +
145684 +struct timed_gpio {
145685 + const char *name;
145686 + unsigned gpio;
145687 + int max_timeout;
145688 + u8 active_low;
145689 +};
145690 +
145691 +struct timed_gpio_platform_data {
145692 + int num_gpios;
145693 + struct timed_gpio *gpios;
145694 +};
145695 +
145696 +#endif
145697 Index: linux-2.6.28/include/linux/ashmem.h
145698 ===================================================================
145699 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
145700 +++ linux-2.6.28/include/linux/ashmem.h 2009-01-02 00:01:57.000000000 +0100
145701 @@ -0,0 +1,48 @@
145702 +/*
145703 + * include/linux/ashmem.h
145704 + *
145705 + * Copyright 2008 Google Inc.
145706 + * Author: Robert Love
145707 + *
145708 + * This file is dual licensed. It may be redistributed and/or modified
145709 + * under the terms of the Apache 2.0 License OR version 2 of the GNU
145710 + * General Public License.
145711 + */
145712 +
145713 +#ifndef _LINUX_ASHMEM_H
145714 +#define _LINUX_ASHMEM_H
145715 +
145716 +#include <linux/limits.h>
145717 +#include <linux/ioctl.h>
145718 +
145719 +#define ASHMEM_NAME_LEN 256
145720 +
145721 +#define ASHMEM_NAME_DEF "dev/ashmem"
145722 +
145723 +/* Return values from ASHMEM_PIN: Was the mapping purged while unpinned? */
145724 +#define ASHMEM_NOT_PURGED 0
145725 +#define ASHMEM_WAS_PURGED 1
145726 +
145727 +/* Return values from ASHMEM_GET_PIN_STATUS: Is the mapping pinned? */
145728 +#define ASHMEM_IS_UNPINNED 0
145729 +#define ASHMEM_IS_PINNED 1
145730 +
145731 +struct ashmem_pin {
145732 + __u32 offset; /* offset into region, in bytes, page-aligned */
145733 + __u32 len; /* length forward from offset, in bytes, page-aligned */
145734 +};
145735 +
145736 +#define __ASHMEMIOC 0x77
145737 +
145738 +#define ASHMEM_SET_NAME _IOW(__ASHMEMIOC, 1, char[ASHMEM_NAME_LEN])
145739 +#define ASHMEM_GET_NAME _IOR(__ASHMEMIOC, 2, char[ASHMEM_NAME_LEN])
145740 +#define ASHMEM_SET_SIZE _IOW(__ASHMEMIOC, 3, size_t)
145741 +#define ASHMEM_GET_SIZE _IO(__ASHMEMIOC, 4)
145742 +#define ASHMEM_SET_PROT_MASK _IOW(__ASHMEMIOC, 5, unsigned long)
145743 +#define ASHMEM_GET_PROT_MASK _IO(__ASHMEMIOC, 6)
145744 +#define ASHMEM_PIN _IOW(__ASHMEMIOC, 7, struct ashmem_pin)
145745 +#define ASHMEM_UNPIN _IOW(__ASHMEMIOC, 8, struct ashmem_pin)
145746 +#define ASHMEM_GET_PIN_STATUS _IO(__ASHMEMIOC, 9)
145747 +#define ASHMEM_PURGE_ALL_CACHES _IO(__ASHMEMIOC, 10)
145748 +
145749 +#endif /* _LINUX_ASHMEM_H */
145750 Index: linux-2.6.28/include/linux/binder.h
145751 ===================================================================
145752 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
145753 +++ linux-2.6.28/include/linux/binder.h 2009-01-02 00:01:57.000000000 +0100
145754 @@ -0,0 +1,330 @@
145755 +/*
145756 + * Copyright (C) 2008 Google, Inc.
145757 + *
145758 + * Based on, but no longer compatible with, the original
145759 + * OpenBinder.org binder driver interface, which is:
145760 + *
145761 + * Copyright (c) 2005 Palmsource, Inc.
145762 + *
145763 + * This software is licensed under the terms of the GNU General Public
145764 + * License version 2, as published by the Free Software Foundation, and
145765 + * may be copied, distributed, and modified under those terms.
145766 + *
145767 + * This program is distributed in the hope that it will be useful,
145768 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
145769 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
145770 + * GNU General Public License for more details.
145771 + *
145772 + */
145773 +
145774 +#ifndef _LINUX_BINDER_H
145775 +#define _LINUX_BINDER_H
145776 +
145777 +#include <linux/ioctl.h>
145778 +
145779 +#define B_PACK_CHARS(c1, c2, c3, c4) \
145780 + ((((c1)<<24)) | (((c2)<<16)) | (((c3)<<8)) | (c4))
145781 +#define B_TYPE_LARGE 0x85
145782 +
145783 +enum {
145784 + BINDER_TYPE_BINDER = B_PACK_CHARS('s', 'b', '*', B_TYPE_LARGE),
145785 + BINDER_TYPE_WEAK_BINDER = B_PACK_CHARS('w', 'b', '*', B_TYPE_LARGE),
145786 + BINDER_TYPE_HANDLE = B_PACK_CHARS('s', 'h', '*', B_TYPE_LARGE),
145787 + BINDER_TYPE_WEAK_HANDLE = B_PACK_CHARS('w', 'h', '*', B_TYPE_LARGE),
145788 + BINDER_TYPE_FD = B_PACK_CHARS('f', 'd', '*', B_TYPE_LARGE),
145789 +};
145790 +
145791 +enum {
145792 + FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
145793 + FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
145794 +};
145795 +
145796 +/*
145797 + * This is the flattened representation of a Binder object for transfer
145798 + * between processes. The 'offsets' supplied as part of a binder transaction
145799 + * contains offsets into the data where these structures occur. The Binder
145800 + * driver takes care of re-writing the structure type and data as it moves
145801 + * between processes.
145802 + */
145803 +struct flat_binder_object {
145804 + /* 8 bytes for large_flat_header. */
145805 + unsigned long type;
145806 + unsigned long flags;
145807 +
145808 + /* 8 bytes of data. */
145809 + union {
145810 + void *binder; /* local object */
145811 + signed long handle; /* remote object */
145812 + };
145813 +
145814 + /* extra data associated with local object */
145815 + void *cookie;
145816 +};
145817 +
145818 +/*
145819 + * On 64-bit platforms where user code may run in 32-bits the driver must
145820 + * translate the buffer (and local binder) addresses apropriately.
145821 + */
145822 +
145823 +struct binder_write_read {
145824 + signed long write_size; /* bytes to write */
145825 + signed long write_consumed; /* bytes consumed by driver */
145826 + unsigned long write_buffer;
145827 + signed long read_size; /* bytes to read */
145828 + signed long read_consumed; /* bytes consumed by driver */
145829 + unsigned long read_buffer;
145830 +};
145831 +
145832 +/* Use with BINDER_VERSION, driver fills in fields. */
145833 +struct binder_version {
145834 + /* driver protocol version -- increment with incompatible change */
145835 + signed long protocol_version;
145836 +};
145837 +
145838 +/* This is the current protocol version. */
145839 +#define BINDER_CURRENT_PROTOCOL_VERSION 7
145840 +
145841 +#define BINDER_WRITE_READ _IOWR('b', 1, struct binder_write_read)
145842 +#define BINDER_SET_IDLE_TIMEOUT _IOW('b', 3, int64_t)
145843 +#define BINDER_SET_MAX_THREADS _IOW('b', 5, size_t)
145844 +#define BINDER_SET_IDLE_PRIORITY _IOW('b', 6, int)
145845 +#define BINDER_SET_CONTEXT_MGR _IOW('b', 7, int)
145846 +#define BINDER_THREAD_EXIT _IOW('b', 8, int)
145847 +#define BINDER_VERSION _IOWR('b', 9, struct binder_version)
145848 +
145849 +/*
145850 + * NOTE: Two special error codes you should check for when calling
145851 + * in to the driver are:
145852 + *
145853 + * EINTR -- The operation has been interupted. This should be
145854 + * handled by retrying the ioctl() until a different error code
145855 + * is returned.
145856 + *
145857 + * ECONNREFUSED -- The driver is no longer accepting operations
145858 + * from your process. That is, the process is being destroyed.
145859 + * You should handle this by exiting from your process. Note
145860 + * that once this error code is returned, all further calls to
145861 + * the driver from any thread will return this same code.
145862 + */
145863 +
145864 +enum transaction_flags {
145865 + TF_ONE_WAY = 0x01, /* this is a one-way call: async, no return */
145866 + TF_ROOT_OBJECT = 0x04, /* contents are the component's root object */
145867 + TF_STATUS_CODE = 0x08, /* contents are a 32-bit status code */
145868 + TF_ACCEPT_FDS = 0x10, /* allow replies with file descriptors */
145869 +};
145870 +
145871 +struct binder_transaction_data {
145872 + /* The first two are only used for bcTRANSACTION and brTRANSACTION,
145873 + * identifying the target and contents of the transaction.
145874 + */
145875 + union {
145876 + size_t handle; /* target descriptor of command transaction */
145877 + void *ptr; /* target descriptor of return transaction */
145878 + } target;
145879 + void *cookie; /* target object cookie */
145880 + unsigned int code; /* transaction command */
145881 +
145882 + /* General information about the transaction. */
145883 + unsigned int flags;
145884 + pid_t sender_pid;
145885 + uid_t sender_euid;
145886 + size_t data_size; /* number of bytes of data */
145887 + size_t offsets_size; /* number of bytes of offsets */
145888 +
145889 + /* If this transaction is inline, the data immediately
145890 + * follows here; otherwise, it ends with a pointer to
145891 + * the data buffer.
145892 + */
145893 + union {
145894 + struct {
145895 + /* transaction data */
145896 + const void *buffer;
145897 + /* offsets from buffer to flat_binder_object structs */
145898 + const void *offsets;
145899 + } ptr;
145900 + uint8_t buf[8];
145901 + } data;
145902 +};
145903 +
145904 +struct binder_ptr_cookie {
145905 + void *ptr;
145906 + void *cookie;
145907 +};
145908 +
145909 +struct binder_pri_desc {
145910 + int priority;
145911 + int desc;
145912 +};
145913 +
145914 +struct binder_pri_ptr_cookie {
145915 + int priority;
145916 + void *ptr;
145917 + void *cookie;
145918 +};
145919 +
145920 +enum BinderDriverReturnProtocol {
145921 + BR_ERROR = _IOR('r', 0, int),
145922 + /*
145923 + * int: error code
145924 + */
145925 +
145926 + BR_OK = _IO('r', 1),
145927 + /* No parameters! */
145928 +
145929 + BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data),
145930 + BR_REPLY = _IOR('r', 3, struct binder_transaction_data),
145931 + /*
145932 + * binder_transaction_data: the received command.
145933 + */
145934 +
145935 + BR_ACQUIRE_RESULT = _IOR('r', 4, int),
145936 + /*
145937 + * not currently supported
145938 + * int: 0 if the last bcATTEMPT_ACQUIRE was not successful.
145939 + * Else the remote object has acquired a primary reference.
145940 + */
145941 +
145942 + BR_DEAD_REPLY = _IO('r', 5),
145943 + /*
145944 + * The target of the last transaction (either a bcTRANSACTION or
145945 + * a bcATTEMPT_ACQUIRE) is no longer with us. No parameters.
145946 + */
145947 +
145948 + BR_TRANSACTION_COMPLETE = _IO('r', 6),
145949 + /*
145950 + * No parameters... always refers to the last transaction requested
145951 + * (including replies). Note that this will be sent even for
145952 + * asynchronous transactions.
145953 + */
145954 +
145955 + BR_INCREFS = _IOR('r', 7, struct binder_ptr_cookie),
145956 + BR_ACQUIRE = _IOR('r', 8, struct binder_ptr_cookie),
145957 + BR_RELEASE = _IOR('r', 9, struct binder_ptr_cookie),
145958 + BR_DECREFS = _IOR('r', 10, struct binder_ptr_cookie),
145959 + /*
145960 + * void *: ptr to binder
145961 + * void *: cookie for binder
145962 + */
145963 +
145964 + BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct binder_pri_ptr_cookie),
145965 + /*
145966 + * not currently supported
145967 + * int: priority
145968 + * void *: ptr to binder
145969 + * void *: cookie for binder
145970 + */
145971 +
145972 + BR_NOOP = _IO('r', 12),
145973 + /*
145974 + * No parameters. Do nothing and examine the next command. It exists
145975 + * primarily so that we can replace it with a BR_SPAWN_LOOPER command.
145976 + */
145977 +
145978 + BR_SPAWN_LOOPER = _IO('r', 13),
145979 + /*
145980 + * No parameters. The driver has determined that a process has no
145981 + * threads waiting to service incomming transactions. When a process
145982 + * receives this command, it must spawn a new service thread and
145983 + * register it via bcENTER_LOOPER.
145984 + */
145985 +
145986 + BR_FINISHED = _IO('r', 14),
145987 + /*
145988 + * not currently supported
145989 + * stop threadpool thread
145990 + */
145991 +
145992 + BR_DEAD_BINDER = _IOR('r', 15, void *),
145993 + /*
145994 + * void *: cookie
145995 + */
145996 + BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, void *),
145997 + /*
145998 + * void *: cookie
145999 + */
146000 +
146001 + BR_FAILED_REPLY = _IO('r', 17),
146002 + /*
146003 + * The the last transaction (either a bcTRANSACTION or
146004 + * a bcATTEMPT_ACQUIRE) failed (e.g. out of memory). No parameters.
146005 + */
146006 +};
146007 +
146008 +enum BinderDriverCommandProtocol {
146009 + BC_TRANSACTION = _IOW('c', 0, struct binder_transaction_data),
146010 + BC_REPLY = _IOW('c', 1, struct binder_transaction_data),
146011 + /*
146012 + * binder_transaction_data: the sent command.
146013 + */
146014 +
146015 + BC_ACQUIRE_RESULT = _IOW('c', 2, int),
146016 + /*
146017 + * not currently supported
146018 + * int: 0 if the last BR_ATTEMPT_ACQUIRE was not successful.
146019 + * Else you have acquired a primary reference on the object.
146020 + */
146021 +
146022 + BC_FREE_BUFFER = _IOW('c', 3, int),
146023 + /*
146024 + * void *: ptr to transaction data received on a read
146025 + */
146026 +
146027 + BC_INCREFS = _IOW('c', 4, int),
146028 + BC_ACQUIRE = _IOW('c', 5, int),
146029 + BC_RELEASE = _IOW('c', 6, int),
146030 + BC_DECREFS = _IOW('c', 7, int),
146031 + /*
146032 + * int: descriptor
146033 + */
146034 +
146035 + BC_INCREFS_DONE = _IOW('c', 8, struct binder_ptr_cookie),
146036 + BC_ACQUIRE_DONE = _IOW('c', 9, struct binder_ptr_cookie),
146037 + /*
146038 + * void *: ptr to binder
146039 + * void *: cookie for binder
146040 + */
146041 +
146042 + BC_ATTEMPT_ACQUIRE = _IOW('c', 10, struct binder_pri_desc),
146043 + /*
146044 + * not currently supported
146045 + * int: priority
146046 + * int: descriptor
146047 + */
146048 +
146049 + BC_REGISTER_LOOPER = _IO('c', 11),
146050 + /*
146051 + * No parameters.
146052 + * Register a spawned looper thread with the device.
146053 + */
146054 +
146055 + BC_ENTER_LOOPER = _IO('c', 12),
146056 + BC_EXIT_LOOPER = _IO('c', 13),
146057 + /*
146058 + * No parameters.
146059 + * These two commands are sent as an application-level thread
146060 + * enters and exits the binder loop, respectively. They are
146061 + * used so the binder can have an accurate count of the number
146062 + * of looping threads it has available.
146063 + */
146064 +
146065 + BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct binder_ptr_cookie),
146066 + /*
146067 + * void *: ptr to binder
146068 + * void *: cookie
146069 + */
146070 +
146071 + BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct binder_ptr_cookie),
146072 + /*
146073 + * void *: ptr to binder
146074 + * void *: cookie
146075 + */
146076 +
146077 + BC_DEAD_BINDER_DONE = _IOW('c', 16, void *),
146078 + /*
146079 + * void *: cookie
146080 + */
146081 +};
146082 +
146083 +#endif /* _LINUX_BINDER_H */
146084 +
146085 Index: linux-2.6.28/include/linux/bq27000_battery.h
146086 ===================================================================
146087 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146088 +++ linux-2.6.28/include/linux/bq27000_battery.h 2009-01-02 00:01:57.000000000 +0100
146089 @@ -0,0 +1,14 @@
146090 +#ifndef __BQ27000_BATTERY_H__
146091 +#define __BQ27000_BATTERY_H__
146092 +
146093 +struct bq27000_platform_data {
146094 + const char *name;
146095 + int rsense_mohms;
146096 + int (*hdq_read)(int);
146097 + int (*hdq_write)(int, u8);
146098 + int (*hdq_initialized)(void);
146099 + int (*get_charger_online_status)(void);
146100 + int (*get_charger_active_status)(void);
146101 +};
146102 +
146103 +#endif
146104 Index: linux-2.6.28/include/linux/device.h
146105 ===================================================================
146106 --- linux-2.6.28.orig/include/linux/device.h 2008-12-25 00:26:37.000000000 +0100
146107 +++ linux-2.6.28/include/linux/device.h 2009-01-02 00:01:57.000000000 +0100
146108 @@ -48,6 +48,11 @@ extern int __must_check bus_create_file(
146109 struct bus_attribute *);
146110 extern void bus_remove_file(struct bus_type *, struct bus_attribute *);
146111
146112 +extern int __must_check bus_create_device_link(struct bus_type *bus,
146113 + struct kobject *target,
146114 + const char *name);
146115 +extern void bus_remove_device_link(struct bus_type *bus, const char *name);
146116 +
146117 struct bus_type {
146118 const char *name;
146119 struct bus_attribute *bus_attrs;
146120 Index: linux-2.6.28/include/linux/fb.h
146121 ===================================================================
146122 --- linux-2.6.28.orig/include/linux/fb.h 2008-12-25 00:26:37.000000000 +0100
146123 +++ linux-2.6.28/include/linux/fb.h 2009-01-02 00:01:57.000000000 +0100
146124 @@ -123,6 +123,7 @@ struct dentry;
146125 #define FB_ACCEL_TRIDENT_3DIMAGE 51 /* Trident 3DImage */
146126 #define FB_ACCEL_TRIDENT_BLADE3D 52 /* Trident Blade3D */
146127 #define FB_ACCEL_TRIDENT_BLADEXP 53 /* Trident BladeXP */
146128 +#define FB_ACCEL_GLAMO 50 /* SMedia Glamo */
146129 #define FB_ACCEL_NEOMAGIC_NM2070 90 /* NeoMagic NM2070 */
146130 #define FB_ACCEL_NEOMAGIC_NM2090 91 /* NeoMagic NM2090 */
146131 #define FB_ACCEL_NEOMAGIC_NM2093 92 /* NeoMagic NM2093 */
146132 Index: linux-2.6.28/include/linux/glamofb.h
146133 ===================================================================
146134 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146135 +++ linux-2.6.28/include/linux/glamofb.h 2009-01-02 00:01:57.000000000 +0100
146136 @@ -0,0 +1,45 @@
146137 +#ifndef _LINUX_GLAMOFB_H
146138 +#define _LINUX_GLAMOFB_H
146139 +
146140 +#include <linux/spi/glamo.h>
146141 +
146142 +struct glamofb_val {
146143 + unsigned int defval;
146144 + unsigned int min;
146145 + unsigned int max;
146146 +};
146147 +
146148 +struct glamo_core;
146149 +
146150 +struct glamofb_platform_data {
146151 + int width, height;
146152 + int pixclock;
146153 + int left_margin, right_margin;
146154 + int upper_margin, lower_margin;
146155 + int hsync_len, vsync_len;
146156 + int fb_mem_size;
146157 +
146158 + struct glamofb_val xres;
146159 + struct glamofb_val yres;
146160 + struct glamofb_val bpp;
146161 +
146162 + struct glamo_spi_info *spi_info;
146163 + struct glamo_spigpio_info *spigpio_info;
146164 + struct glamo_core *glamo;
146165 +
146166 + struct platform_device *mmc_dev;
146167 +
146168 + /* glamo mmc platform specific info */
146169 + int (*glamo_can_set_mci_power)(void);
146170 +
146171 + /* glamo-mci asking if it should use the slow clock to card */
146172 + int (*glamo_mci_use_slow)(void);
146173 + int (*glamo_irq_is_wired)(void);
146174 + void (*glamo_external_reset)(int);
146175 +};
146176 +
146177 +int glamofb_cmd_mode(struct glamofb_handle *gfb, int on);
146178 +int glamofb_cmd_write(struct glamofb_handle *gfb, u_int16_t val);
146179 +void glamo_lcm_reset(int level);
146180 +
146181 +#endif
146182 Index: linux-2.6.28/include/linux/glamo-gpio.h
146183 ===================================================================
146184 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146185 +++ linux-2.6.28/include/linux/glamo-gpio.h 2009-01-02 00:01:57.000000000 +0100
146186 @@ -0,0 +1,99 @@
146187 +#ifndef __GLAMO_GPIO_H
146188 +#define __GLAMO_GPIO_H
146189 +
146190 +struct glamo_core;
146191 +
146192 +#define GLAMO_GPIO_BANKA 0x0000
146193 +#define GLAMO_GPIO_BANKB 0x1000
146194 +#define GLAMO_GPIO_BANKC 0x2000
146195 +#define GLAMO_GPIO_BANKD 0x3000
146196 +
146197 +#define GLAMO_GPIONO(bank, pin) ((bank & 0xf000) | ((pin & 0xf) << 8))
146198 +
146199 +#define GLAMO_GPIO_F_IN 0x0010
146200 +#define GLAMO_GPIO_F_OUT 0x0020
146201 +#define GLAMO_GPIO_F_FUNC 0x0030
146202 +
146203 +#define GLAMO_GPIO0 GLAMO_GPIONO(GLAMO_GPIO_BANKA, 0)
146204 +#define GLAMO_GPIO0_INPUT (GLAMO_GPIO0 | GLAMO_GPIO_F_IN)
146205 +#define GLAMO_GPIO0_OUTPUT (GLAMO_GPIO0 | GLAMO_GPIO_F_OUT)
146206 +#define GLAMO_GPIO0_HA20 (GLAMO_GPIO0 | GLAMO_GPIO_F_FUNC)
146207 +
146208 +#define GLAMO_GPIO1 GLAMO_GPIONO(GLAMO_GPIO_BANKA, 1)
146209 +#define GLAMO_GPIO1_INPUT (GLAMO_GPIO1 | GLAMO_GPIO_F_IN)
146210 +#define GLAMO_GPIO1_OUTPUT (GLAMO_GPIO1 | GLAMO_GPIO_F_OUT)
146211 +#define GLAMO_GPIO1_HA21 (GLAMO_GPIO1 | GLAMO_GPIO_F_FUNC)
146212 +
146213 +#define GLAMO_GPIO2 GLAMO_GPIONO(GLAMO_GPIO_BANKA, 2)
146214 +#define GLAMO_GPIO2_INPUT (GLAMO_GPIO2 | GLAMO_GPIO_F_IN)
146215 +#define GLAMO_GPIO2_OUTPUT (GLAMO_GPIO2 | GLAMO_GPIO_F_OUT)
146216 +#define GLAMO_GPIO2_HA22 (GLAMO_GPIO2 | GLAMO_GPIO_F_FUNC)
146217 +
146218 +#define GLAMO_GPIO3 GLAMO_GPIONO(GLAMO_GPIO_BANKA, 3)
146219 +#define GLAMO_GPIO3_INPUT (GLAMO_GPIO3 | GLAMO_GPIO_F_IN)
146220 +#define GLAMO_GPIO3_OUTPUT (GLAMO_GPIO3 | GLAMO_GPIO_F_OUT)
146221 +#define GLAMO_GPIO3_HA23 (GLAMO_GPIO3 | GLAMO_GPIO_F_FUNC)
146222 +
146223 +#define GLAMO_GPIO4 GLAMO_GPIONO(GLAMO_GPIO_BANKB, 0)
146224 +#define GLAMO_GPIO4_INPUT (GLAMO_GPIO4 | GLAMO_GPIO_F_IN)
146225 +#define GLAMO_GPIO4_OUTPUT (GLAMO_GPIO4 | GLAMO_GPIO_F_OUT)
146226 +#define GLAMO_GPIO4_nLCS0 (GLAMO_GPIO4 | GLAMO_GPIO_F_FUNC)
146227 +
146228 +#define GLAMO_GPIO5 GLAMO_GPIONO(GLAMO_GPIO_BANKB, 1)
146229 +#define GLAMO_GPIO5_INPUT (GLAMO_GPIO5 | GLAMO_GPIO_F_IN)
146230 +#define GLAMO_GPIO5_OUTPUT (GLAMO_GPIO5 | GLAMO_GPIO_F_OUT)
146231 +#define GLAMO_GPIO5_nLCS1 (GLAMO_GPIO5 | GLAMO_GPIO_F_FUNC)
146232 +
146233 +#define GLAMO_GPIO6 GLAMO_GPIONO(GLAMO_GPIO_BANKB, 2)
146234 +#define GLAMO_GPIO6_INPUT (GLAMO_GPIO6 | GLAMO_GPIO_F_IN)
146235 +#define GLAMO_GPIO6_OUTPUT (GLAMO_GPIO6 | GLAMO_GPIO_F_OUT)
146236 +#define GLAMO_GPIO6_LDCLK (GLAMO_GPIO6 | GLAMO_GPIO_F_FUNC)
146237 +
146238 +#define GLAMO_GPIO7 GLAMO_GPIONO(GLAMO_GPIO_BANKB, 3)
146239 +#define GLAMO_GPIO7_INPUT (GLAMO_GPIO7 | GLAMO_GPIO_F_IN)
146240 +#define GLAMO_GPIO7_OUTPUT (GLAMO_GPIO7 | GLAMO_GPIO_F_OUT)
146241 +#define GLAMO_GPIO7_nLDE (GLAMO_GPIO7 | GLAMO_GPIO_F_FUNC)
146242 +
146243 +#define GLAMO_GPIO8 GLAMO_GPIONO(GLAMO_GPIO_BANKC, 0)
146244 +#define GLAMO_GPIO8_INPUT (GLAMO_GPIO8 | GLAMO_GPIO_F_IN)
146245 +#define GLAMO_GPIO8_OUTPUT (GLAMO_GPIO8 | GLAMO_GPIO_F_OUT)
146246 +#define GLAMO_GPIO8_LD16 (GLAMO_GPIO8 | GLAMO_GPIO_F_FUNC)
146247 +
146248 +#define GLAMO_GPIO9 GLAMO_GPIONO(GLAMO_GPIO_BANKC, 1)
146249 +#define GLAMO_GPIO9_INPUT (GLAMO_GPIO9 | GLAMO_GPIO_F_IN)
146250 +#define GLAMO_GPIO9_OUTPUT (GLAMO_GPIO9 | GLAMO_GPIO_F_OUT)
146251 +#define GLAMO_GPIO9_LD17 (GLAMO_GPIO9 | GLAMO_GPIO_F_FUNC)
146252 +
146253 +#define GLAMO_GPIO10 GLAMO_GPIONO(GLAMO_GPIO_BANKC, 2)
146254 +#define GLAMO_GPIO10_INPUT (GLAMO_GPIO10 | GLAMO_GPIO_F_IN)
146255 +#define GLAMO_GPIO10_OUTPUT (GLAMO_GPIO10 | GLAMO_GPIO_F_OUT)
146256 +#define GLAMO_GPIO10_LSCK (GLAMO_GPIO10 | GLAMO_GPIO_F_FUNC)
146257 +
146258 +#define GLAMO_GPIO11 GLAMO_GPIONO(GLAMO_GPIO_BANKC, 3)
146259 +#define GLAMO_GPIO11_INPUT (GLAMO_GPIO11 | GLAMO_GPIO_F_IN)
146260 +#define GLAMO_GPIO11_OUTPUT (GLAMO_GPIO11 | GLAMO_GPIO_F_OUT)
146261 +#define GLAMO_GPIO11_LSDA (GLAMO_GPIO11 | GLAMO_GPIO_F_FUNC)
146262 +
146263 +#define GLAMO_GPIO12 GLAMO_GPIONO(GLAMO_GPIO_BANKD, 0)
146264 +#define GLAMO_GPIO12_INPUT (GLAMO_GPIO12 | GLAMO_GPIO_F_IN)
146265 +#define GLAMO_GPIO12_OUTPUT (GLAMO_GPIO12 | GLAMO_GPIO_F_OUT)
146266 +#define GLAMO_GPIO12_LSA0 (GLAMO_GPIO12 | GLAMO_GPIO_F_FUNC)
146267 +
146268 +
146269 +#define REG_OF_GPIO(gpio) (((gpio & 0xf000) >> 12)*2 \
146270 + + GLAMO_REG_GPIO_GEN1)
146271 +#define NUM_OF_GPIO(gpio) ((gpio & 0x0f00) >> 8)
146272 +#define GPIO_OUT_BIT(gpio) (1 << (NUM_OF_GPIO(gpio) + 0))
146273 +#define OUTPUT_BIT(gpio) (1 << (NUM_OF_GPIO(gpio) + 4))
146274 +#define INPUT_BIT(gpio) (1 << (NUM_OF_GPIO(gpio) + 8))
146275 +#define FUNC_BIT(gpio) (1 << (NUM_OF_GPIO(gpio) + 12))
146276 +
146277 +void glamo_gpio_setpin(struct glamo_core *glamo, unsigned int pin,
146278 + unsigned int value);
146279 +
146280 +int glamo_gpio_getpin(struct glamo_core *glamo, unsigned int pin);
146281 +
146282 +void glamo_gpio_cfgpin(struct glamo_core *glamo, unsigned int pinfunc);
146283 +
146284 +
146285 +#endif /* _GLAMO_GPIO */
146286 Index: linux-2.6.28/include/linux/gta02_hdq.h
146287 ===================================================================
146288 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146289 +++ linux-2.6.28/include/linux/gta02_hdq.h 2009-01-02 00:01:57.000000000 +0100
146290 @@ -0,0 +1,18 @@
146291 +#ifndef __GTA02HDQ_H__
146292 +#define __GTA02HDQ_H__
146293 +
146294 +/* platform data */
146295 +
146296 +struct gta02_hdq_platform_data {
146297 + /*
146298 + * give an opportunity to use us as parent for
146299 + * devices that depend on us
146300 + */
146301 + void (*attach_child_devices)(struct device *parent_device);
146302 +};
146303 +
146304 +int gta02hdq_read(int address);
146305 +int gta02hdq_write(int address, u8 data);
146306 +int gta02hdq_initialized(void);
146307 +
146308 +#endif
146309 Index: linux-2.6.28/include/linux/i2c-id.h
146310 ===================================================================
146311 --- linux-2.6.28.orig/include/linux/i2c-id.h 2008-12-25 00:26:37.000000000 +0100
146312 +++ linux-2.6.28/include/linux/i2c-id.h 2009-01-02 00:01:57.000000000 +0100
146313 @@ -83,6 +83,9 @@
146314 #define I2C_DRIVERID_CS5345 96 /* cs5345 audio processor */
146315
146316 #define I2C_DRIVERID_OV7670 1048 /* Omnivision 7670 camera */
146317 +#define I2C_DRIVERID_PCF50606 1049
146318 +#define I2C_DRIVERID_PCF50633 1051
146319 +#define I2C_DRIVERID_PCA9632 1052
146320
146321 /*
146322 * ---- Adapter types ----------------------------------------------------
146323 Index: linux-2.6.28/include/linux/jbt6k74.h
146324 ===================================================================
146325 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146326 +++ linux-2.6.28/include/linux/jbt6k74.h 2009-01-02 00:01:57.000000000 +0100
146327 @@ -0,0 +1,14 @@
146328 +#ifndef __JBT6K74_H__
146329 +#define __JBT6K74_H__
146330 +
146331 +#include <linux/spi/spi.h>
146332 +#include <linux/device.h>
146333 +
146334 +
146335 +struct jbt6k74_platform_data {
146336 + void (*reset)(int devindex, int level);
146337 + void (*resuming)(int devindex); /* called when LCM is resumed */
146338 + void (*probe_completed)(struct device *dev);
146339 +};
146340 +
146341 +#endif
146342 Index: linux-2.6.28/include/linux/kernel.h
146343 ===================================================================
146344 --- linux-2.6.28.orig/include/linux/kernel.h 2008-12-25 00:26:37.000000000 +0100
146345 +++ linux-2.6.28/include/linux/kernel.h 2009-01-02 00:01:57.000000000 +0100
146346 @@ -225,6 +225,8 @@ extern struct ratelimit_state printk_rat
146347 extern int printk_ratelimit(void);
146348 extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
146349 unsigned int interval_msec);
146350 +extern void (*printk_emergency_debug_spew_init)(void);
146351 +extern void (*printk_emergency_debug_spew_send_string)(const char *);
146352 #else
146353 static inline int vprintk(const char *s, va_list args)
146354 __attribute__ ((format (printf, 1, 0)));
146355 Index: linux-2.6.28/include/linux/kexec.h
146356 ===================================================================
146357 --- linux-2.6.28.orig/include/linux/kexec.h 2008-12-25 00:26:37.000000000 +0100
146358 +++ linux-2.6.28/include/linux/kexec.h 2009-01-02 00:01:57.000000000 +0100
146359 @@ -1,7 +1,6 @@
146360 #ifndef LINUX_KEXEC_H
146361 #define LINUX_KEXEC_H
146362
146363 -#ifdef CONFIG_KEXEC
146364 #include <linux/types.h>
146365 #include <linux/list.h>
146366 #include <linux/linkage.h>
146367 @@ -11,6 +10,8 @@
146368 #include <linux/elf.h>
146369 #include <asm/kexec.h>
146370
146371 +#ifdef CONFIG_KEXEC
146372 +
146373 /* Verify architecture specific macros are defined */
146374
146375 #ifndef KEXEC_SOURCE_MEMORY_LIMIT
146376 Index: linux-2.6.28/include/linux/lis302dl.h
146377 ===================================================================
146378 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146379 +++ linux-2.6.28/include/linux/lis302dl.h 2009-01-02 00:01:57.000000000 +0100
146380 @@ -0,0 +1,154 @@
146381 +#ifndef _LINUX_LIS302DL_H
146382 +#define _LINUX_LIS302DL_H
146383 +
146384 +#include <linux/types.h>
146385 +#include <linux/spi/spi.h>
146386 +#include <linux/input.h>
146387 +
146388 +
146389 +struct lis302dl_info;
146390 +
146391 +struct lis302dl_platform_data {
146392 + char *name;
146393 + unsigned long pin_chip_select;
146394 + unsigned long pin_clk;
146395 + unsigned long pin_mosi;
146396 + unsigned long pin_miso;
146397 + int open_drain;
146398 + int interrupt;
146399 + void (*lis302dl_bitbang)(struct lis302dl_info *lis, u8 *tx,
146400 + int tx_bytes, u8 *rx, int rx_bytes);
146401 + void (*lis302dl_suspend_io)(struct lis302dl_info *, int resuming);
146402 + int (*lis302dl_bitbang_reg_read)(struct lis302dl_info *, u8 reg);
146403 + void (*lis302dl_bitbang_reg_write)(struct lis302dl_info *, u8 reg,
146404 + u8 val);
146405 +};
146406 +
146407 +struct lis302dl_info {
146408 + struct lis302dl_platform_data *pdata;
146409 + struct device *dev;
146410 + struct input_dev *input_dev;
146411 + unsigned int flags;
146412 + unsigned int threshold;
146413 + unsigned int duration;
146414 + struct {
146415 + unsigned int threshold; /* mg */
146416 + unsigned int duration; /* ms */
146417 + } wakeup;
146418 + u_int8_t regs[0x40];
146419 +};
146420 +
146421 +enum lis302dl_reg {
146422 + LIS302DL_REG_WHO_AM_I = 0x0f,
146423 + LIS302DL_REG_CTRL1 = 0x20,
146424 + LIS302DL_REG_CTRL2 = 0x21,
146425 + LIS302DL_REG_CTRL3 = 0x22,
146426 + LIS302DL_REG_HP_FILTER_RESET = 0x23,
146427 + LIS302DL_REG_STATUS = 0x27,
146428 + LIS302DL_REG_OUT_X = 0x29,
146429 + LIS302DL_REG_OUT_Y = 0x2b,
146430 + LIS302DL_REG_OUT_Z = 0x2d,
146431 + LIS302DL_REG_FF_WU_CFG_1 = 0x30,
146432 + LIS302DL_REG_FF_WU_SRC_1 = 0x31,
146433 + LIS302DL_REG_FF_WU_THS_1 = 0x32,
146434 + LIS302DL_REG_FF_WU_DURATION_1 = 0x33,
146435 + LIS302DL_REG_FF_WU_CFG_2 = 0x34,
146436 + LIS302DL_REG_FF_WU_SRC_2 = 0x35,
146437 + LIS302DL_REG_FF_WU_THS_2 = 0x36,
146438 + LIS302DL_REG_FF_WU_DURATION_2 = 0x37,
146439 + LIS302DL_REG_CLICK_CFG = 0x38,
146440 + LIS302DL_REG_CLICK_SRC = 0x39,
146441 + LIS302DL_REG_CLICK_THSY_X = 0x3b,
146442 + LIS302DL_REG_CLICK_THSZ = 0x3c,
146443 + LIS302DL_REG_CLICK_TIME_LIMIT = 0x3d,
146444 + LIS302DL_REG_CLICK_LATENCY = 0x3e,
146445 + LIS302DL_REG_CLICK_WINDOW = 0x3f,
146446 +};
146447 +
146448 +enum lis302dl_reg_ctrl1 {
146449 + LIS302DL_CTRL1_Xen = 0x01,
146450 + LIS302DL_CTRL1_Yen = 0x02,
146451 + LIS302DL_CTRL1_Zen = 0x04,
146452 + LIS302DL_CTRL1_STM = 0x08,
146453 + LIS302DL_CTRL1_STP = 0x10,
146454 + LIS302DL_CTRL1_FS = 0x20,
146455 + LIS302DL_CTRL1_PD = 0x40,
146456 + LIS302DL_CTRL1_DR = 0x80,
146457 +};
146458 +
146459 +enum lis302dl_reg_ctrl2 {
146460 + LIS302DL_CTRL2_HPC1 = 0x01,
146461 + LIS302DL_CTRL2_HPC2 = 0x02,
146462 + LIS302DL_CTRL2_HPFF1 = 0x04,
146463 + LIS302DL_CTRL2_HPFF2 = 0x08,
146464 + LIS302DL_CTRL2_FDS = 0x10,
146465 + LIS302DL_CTRL2_BOOT = 0x40,
146466 + LIS302DL_CTRL2_SIM = 0x80,
146467 +};
146468 +enum lis302dl_reg_ctrl3 {
146469 + LIS302DL_CTRL3_PP_OD = 0x40,
146470 + LIS302DL_CTRL3_IHL = 0x80,
146471 +};
146472 +
146473 +enum lis302dl_reg_status {
146474 + LIS302DL_STATUS_XDA = 0x01,
146475 + LIS302DL_STATUS_YDA = 0x02,
146476 + LIS302DL_STATUS_ZDA = 0x04,
146477 + LIS302DL_STATUS_XYZDA = 0x08,
146478 + LIS302DL_STATUS_XOR = 0x10,
146479 + LIS302DL_STATUS_YOR = 0x20,
146480 + LIS302DL_STATUS_ZOR = 0x40,
146481 + LIS302DL_STATUS_XYZOR = 0x80,
146482 +};
146483 +
146484 +/* Wakeup/freefall interrupt defs */
146485 +enum lis302dl_reg_ffwucfg {
146486 + LIS302DL_FFWUCFG_XLIE = 0x01,
146487 + LIS302DL_FFWUCFG_XHIE = 0x02,
146488 + LIS302DL_FFWUCFG_YLIE = 0x04,
146489 + LIS302DL_FFWUCFG_YHIE = 0x08,
146490 + LIS302DL_FFWUCFG_ZLIE = 0x10,
146491 + LIS302DL_FFWUCFG_ZHIE = 0x20,
146492 + LIS302DL_FFWUCFG_LIR = 0x40,
146493 + LIS302DL_FFWUCFG_AOI = 0x80,
146494 +};
146495 +
146496 +enum lis302dl_reg_ffwuths {
146497 + LIS302DL_FFWUTHS_DCRM = 0x80,
146498 +};
146499 +
146500 +enum lis302dl_reg_ffwusrc {
146501 + LIS302DL_FFWUSRC_XL = 0x01,
146502 + LIS302DL_FFWUSRC_XH = 0x02,
146503 + LIS302DL_FFWUSRC_YL = 0x04,
146504 + LIS302DL_FFWUSRC_YH = 0x08,
146505 + LIS302DL_FFWUSRC_ZL = 0x10,
146506 + LIS302DL_FFWUSRC_ZH = 0x20,
146507 + LIS302DL_FFWUSRC_IA = 0x40,
146508 +};
146509 +
146510 +enum lis302dl_reg_cloik_src {
146511 + LIS302DL_CLICKSRC_SINGLE_X = 0x01,
146512 + LIS302DL_CLICKSRC_DOUBLE_X = 0x02,
146513 + LIS302DL_CLICKSRC_SINGLE_Y = 0x04,
146514 + LIS302DL_CLICKSRC_DOUBLE_Y = 0x08,
146515 + LIS302DL_CLICKSRC_SINGLE_Z = 0x10,
146516 + LIS302DL_CLICKSRC_DOUBLE_Z = 0x20,
146517 + LIS302DL_CLICKSRC_IA = 0x40,
146518 +};
146519 +
146520 +#define LIS302DL_WHO_AM_I_MAGIC 0x3b
146521 +
146522 +#define LIS302DL_F_WUP_FF_1 0x0001 /* wake up from free fall */
146523 +#define LIS302DL_F_WUP_FF_2 0x0002
146524 +#define LIS302DL_F_WUP_FF 0x0003
146525 +#define LIS302DL_F_WUP_CLICK 0x0004
146526 +#define LIS302DL_F_POWER 0x0010
146527 +#define LIS302DL_F_FS 0x0020 /* ADC full scale */
146528 +#define LIS302DL_F_INPUT_OPEN 0x0040 /* Set if input device is opened */
146529 +#define LIS302DL_F_IRQ_WAKE 0x0080 /* IRQ is setup in wake mode */
146530 +#define LIS302DL_F_DR 0x0100 /* Data rate, 400Hz/100Hz */
146531 +
146532 +
146533 +#endif /* _LINUX_LIS302DL_H */
146534 +
146535 Index: linux-2.6.28/include/linux/logger.h
146536 ===================================================================
146537 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146538 +++ linux-2.6.28/include/linux/logger.h 2009-01-02 00:01:57.000000000 +0100
146539 @@ -0,0 +1,48 @@
146540 +/* include/linux/logger.h
146541 + *
146542 + * Copyright (C) 2007-2008 Google, Inc.
146543 + * Author: Robert Love <rlove@android.com>
146544 + *
146545 + * This software is licensed under the terms of the GNU General Public
146546 + * License version 2, as published by the Free Software Foundation, and
146547 + * may be copied, distributed, and modified under those terms.
146548 + *
146549 + * This program is distributed in the hope that it will be useful,
146550 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
146551 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
146552 + * GNU General Public License for more details.
146553 + *
146554 + */
146555 +
146556 +#ifndef _LINUX_LOGGER_H
146557 +#define _LINUX_LOGGER_H
146558 +
146559 +#include <linux/types.h>
146560 +#include <linux/ioctl.h>
146561 +
146562 +struct logger_entry {
146563 + __u16 len; /* length of the payload */
146564 + __u16 __pad; /* no matter what, we get 2 bytes of padding */
146565 + __s32 pid; /* generating process's pid */
146566 + __s32 tid; /* generating process's tid */
146567 + __s32 sec; /* seconds since Epoch */
146568 + __s32 nsec; /* nanoseconds */
146569 + char msg[0]; /* the entry's payload */
146570 +};
146571 +
146572 +#define LOGGER_LOG_RADIO "log_radio" /* radio-related messages */
146573 +#define LOGGER_LOG_EVENTS "log_events" /* system/hardware events */
146574 +#define LOGGER_LOG_MAIN "log_main" /* everything else */
146575 +
146576 +#define LOGGER_ENTRY_MAX_LEN (4*1024)
146577 +#define LOGGER_ENTRY_MAX_PAYLOAD \
146578 + (LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))
146579 +
146580 +#define __LOGGERIO 0xAE
146581 +
146582 +#define LOGGER_GET_LOG_BUF_SIZE _IO(__LOGGERIO, 1) /* size of log */
146583 +#define LOGGER_GET_LOG_LEN _IO(__LOGGERIO, 2) /* used log len */
146584 +#define LOGGER_GET_NEXT_ENTRY_LEN _IO(__LOGGERIO, 3) /* next entry len */
146585 +#define LOGGER_FLUSH_LOG _IO(__LOGGERIO, 4) /* flush log */
146586 +
146587 +#endif /* _LINUX_LOGGER_H */
146588 Index: linux-2.6.28/include/linux/mfd/pcf50606/adc.h
146589 ===================================================================
146590 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146591 +++ linux-2.6.28/include/linux/mfd/pcf50606/adc.h 2009-01-02 00:01:57.000000000 +0100
146592 @@ -0,0 +1,87 @@
146593 +/*
146594 + * adc.h -- Driver for NXP PCF50606 ADC
146595 + *
146596 + * (C) 2006-2008 by Openmoko, Inc.
146597 + * All rights reserved.
146598 + *
146599 + * This program is free software; you can redistribute it and/or modify it
146600 + * under the terms of the GNU General Public License as published by the
146601 + * Free Software Foundation; either version 2 of the License, or (at your
146602 + * option) any later version.
146603 + */
146604 +
146605 +#ifndef __LINUX_MFD_PCF50606_ADC_H
146606 +#define __LINUX_MFD_PCF50606_ADC_H
146607 +
146608 +#include <linux/platform_device.h>
146609 +
146610 +/* ADC Registers */
146611 +#define PCF50606_REG_ADCC1 0x2e
146612 +#define PCF50606_REG_ADCC2 0x2f
146613 +#define PCF50606_REG_ADCS1 0x30
146614 +#define PCF50606_REG_ADCS2 0x31
146615 +#define PCF50606_REG_ADCS3 0x32
146616 +
146617 +#define PCF50606_ADCC1_TSCMODACT 0x01
146618 +#define PCF50606_ADCC1_TSCMODSTB 0x02
146619 +#define PCF50606_ADCC1_TRATSET 0x04
146620 +#define PCF50606_ADCC1_NTCSWAPE 0x08
146621 +#define PCF50606_ADCC1_NTCSWAOFF 0x10
146622 +#define PCF50606_ADCC1_EXTSYNCBREAK 0x20
146623 + /* reserved */
146624 +#define PCF50606_ADCC1_TSCINT 0x80
146625 +
146626 +#define PCF50606_ADCC2_ADCSTART 0x01
146627 + /* see enum pcf50606_adcc2_adcmux */
146628 +#define PCF50606_ADCC2_SYNC_NONE 0x00
146629 +#define PCF50606_ADCC2_SYNC_TXON 0x20
146630 +#define PCF50606_ADCC2_SYNC_PWREN1 0x40
146631 +#define PCF50606_ADCC2_SYNC_PWREN2 0x60
146632 +#define PCF50606_ADCC2_RES_10BIT 0x00
146633 +#define PCF50606_ADCC2_RES_8BIT 0x80
146634 +
146635 +#define PCF50606_ADCC2_ADCMUX_MASK (0xf << 1)
146636 +
146637 +#define ADCMUX_SHIFT 1
146638 +#define PCF50606_ADCMUX_BATVOLT_RES (0x0 << ADCMUX_SHIFT)
146639 +#define PCF50606_ADCMUX_BATVOLT_SUBTR (0x1 << ADCMUX_SHIFT)
146640 +#define PCF50606_ADCMUX_ADCIN1_RES (0x2 << ADCMUX_SHIFT)
146641 +#define PCF50606_ADCMUX_ADCIN1_SUBTR (0x3 << ADCMUX_SHIFT)
146642 +#define PCF50606_ADCMUX_BATTEMP (0x4 << ADCMUX_SHIFT)
146643 +#define PCF50606_ADCMUX_ADCIN2 (0x5 << ADCMUX_SHIFT)
146644 +#define PCF50606_ADCMUX_ADCIN3 (0x6 << ADCMUX_SHIFT)
146645 +#define PCF50606_ADCMUX_ADCIN3_RATIO (0x7 << ADCMUX_SHIFT)
146646 +#define PCF50606_ADCMUX_XPOS (0x8 << ADCMUX_SHIFT)
146647 +#define PCF50606_ADCMUX_YPOS (0x9 << ADCMUX_SHIFT)
146648 +#define PCF50606_ADCMUX_P1 (0xa << ADCMUX_SHIFT)
146649 +#define PCF50606_ADCMUX_P2 (0xb << ADCMUX_SHIFT)
146650 +#define PCF50606_ADCMUX_BATVOLT_ADCIN1 (0xc << ADCMUX_SHIFT)
146651 +#define PCF50606_ADCMUX_XY_SEQUENCE (0xe << ADCMUX_SHIFT)
146652 +#define PCF50606_P1_P2_RESISTANCE (0xf << ADCMUX_SHIFT)
146653 +
146654 +#define PCF50606_ADCS2_ADCRDY 0x80
146655 +
146656 +struct pcf50606;
146657 +
146658 +#define PCF50606_MAX_ADC_FIFO_DEPTH 8
146659 +
146660 +struct pcf50606_adc_request;
146661 +
146662 +struct pcf50606_adc {
146663 + struct platform_device *pdev;
146664 +
146665 + /* Private stuff */
146666 + struct pcf50606_adc_request *queue[PCF50606_MAX_ADC_FIFO_DEPTH];
146667 + int queue_head;
146668 + int queue_tail;
146669 + struct mutex queue_mutex;
146670 +};
146671 +
146672 +extern int
146673 +pcf50606_adc_async_read(struct pcf50606 *pcf, int mux, int avg,
146674 + void (*callback)(struct pcf50606 *, void *, int),
146675 + void *callback_param);
146676 +extern int
146677 +pcf50606_adc_sync_read(struct pcf50606 *pcf, int mux, int avg);
146678 +
146679 +#endif /* __LINUX_PCF50606_ADC_H */
146680 Index: linux-2.6.28/include/linux/mfd/pcf50606/core.h
146681 ===================================================================
146682 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146683 +++ linux-2.6.28/include/linux/mfd/pcf50606/core.h 2009-01-02 00:01:57.000000000 +0100
146684 @@ -0,0 +1,163 @@
146685 +/*
146686 + * core.h -- Core driver for NXP PCF50606
146687 + *
146688 + * (C) 2006-2008 by Openmoko, Inc.
146689 + * All rights reserved.
146690 + *
146691 + * This program is free software; you can redistribute it and/or modify it
146692 + * under the terms of the GNU General Public License as published by the
146693 + * Free Software Foundation; either version 2 of the License, or (at your
146694 + * option) any later version.
146695 + */
146696 +
146697 +#ifndef __LINUX_MFD_PCF50606_CORE_H
146698 +#define __LINUX_MFD_PCF50606_CORE_H
146699 +
146700 +#include <linux/i2c.h>
146701 +#include <linux/workqueue.h>
146702 +#include <linux/regulator/driver.h>
146703 +#include <linux/regulator/machine.h>
146704 +#include <linux/power_supply.h>
146705 +
146706 +#include <linux/mfd/pcf50606/pmic.h>
146707 +#include <linux/mfd/pcf50606/input.h>
146708 +#include <linux/mfd/pcf50606/mbc.h>
146709 +#include <linux/mfd/pcf50606/rtc.h>
146710 +#include <linux/mfd/pcf50606/adc.h>
146711 +#include <linux/mfd/pcf50606/wdt.h>
146712 +
146713 +struct pcf50606;
146714 +
146715 +struct pcf50606_platform_data {
146716 + struct regulator_init_data reg_init_data[PCF50606_NUM_REGULATORS];
146717 +
146718 + char **batteries;
146719 + int num_batteries;
146720 +
146721 + /* Callbacks */
146722 + void (*probe_done)(struct pcf50606 *);
146723 + void (*mbc_event_callback)(struct pcf50606 *, int);
146724 + void (*regulator_registered)(struct pcf50606 *, int);
146725 + void (*force_shutdown)(struct pcf50606 *);
146726 +
146727 + u8 resumers[3];
146728 +
146729 + /* Runtime data - filled by driver afer probe */
146730 + struct pcf50606 *pcf;
146731 +};
146732 +
146733 +struct pcf50606_irq {
146734 + void (*handler)(struct pcf50606 *, int, void *);
146735 + void *data;
146736 +};
146737 +
146738 +int pcf50606_irq_mask(struct pcf50606 *pcf, int irq);
146739 +int pcf50606_irq_unmask(struct pcf50606 *pcf, int irq);
146740 +int pcf50606_irq_mask_get(struct pcf50606 *pcf, int irq);
146741 +
146742 +int pcf50606_read_block(struct pcf50606 *, u8 reg,
146743 + int nr_regs, u8 *data);
146744 +int pcf50606_write_block(struct pcf50606 *pcf, u8 reg,
146745 + int nr_regs, u8 *data);
146746 +u8 pcf50606_reg_read(struct pcf50606 *, u8 reg);
146747 +int pcf50606_reg_write(struct pcf50606 *pcf, u8 reg, u8 val);
146748 +
146749 +int pcf50606_reg_set_bit_mask(struct pcf50606 *pcf, u8 reg, u8 mask, u8 val);
146750 +int pcf50606_reg_clear_bits(struct pcf50606 *pcf, u8 reg, u8 bits);
146751 +
146752 +/* Interrupt registers */
146753 +
146754 +#define PCF50606_REG_INT1 0x02
146755 +#define PCF50606_REG_INT2 0x03
146756 +#define PCF50606_REG_INT3 0x04
146757 +
146758 +#define PCF50606_REG_INT1M 0x05
146759 +#define PCF50606_REG_INT2M 0x06
146760 +#define PCF50606_REG_INT3M 0x07
146761 +
146762 +enum {
146763 + /* Chip IRQs */
146764 + PCF50606_IRQ_ONKEYR,
146765 + PCF50606_IRQ_ONKEYF,
146766 + PCF50606_IRQ_ONKEY1S,
146767 + PCF50606_IRQ_EXTONR,
146768 + PCF50606_IRQ_EXTONF,
146769 + PCF50606_IRQ_SECOND,
146770 + PCF50606_IRQ_ALARM,
146771 + PCF50606_IRQ_CHGINS,
146772 + PCF50606_IRQ_CHGRM,
146773 + PCF50606_IRQ_CHGFOK,
146774 + PCF50606_IRQ_CHGERR,
146775 + PCF50606_IRQ_CHGFRDY,
146776 + PCF50606_IRQ_CHGPROT,
146777 + PCF50606_IRQ_CHGWD10S,
146778 + PCF50606_IRQ_CHGWDEXP,
146779 + PCF50606_IRQ_ADCRDY,
146780 + PCF50606_IRQ_ACDINS,
146781 + PCF50606_IRQ_ACDREM,
146782 + PCF50606_IRQ_TSCPRES,
146783 + PCF50606_IRQ_LOWBAT,
146784 + PCF50606_IRQ_HIGHTMP,
146785 +
146786 + /* Always last */
146787 + PCF50606_NUM_IRQ,
146788 +};
146789 +
146790 +struct pcf50606 {
146791 + struct device *dev;
146792 + struct i2c_client *i2c_client;
146793 +
146794 + struct pcf50606_platform_data *pdata;
146795 + int irq;
146796 + struct pcf50606_irq irq_handler[PCF50606_NUM_IRQ];
146797 + struct work_struct irq_work;
146798 + struct mutex lock;
146799 +
146800 + u8 mask_regs[3];
146801 +
146802 + u8 suspend_irq_masks[3];
146803 + u8 resume_reason[3];
146804 + int is_suspended;
146805 +
146806 + int onkey1s_held;
146807 +
146808 + struct pcf50606_pmic pmic;
146809 + struct pcf50606_input input;
146810 + struct pcf50606_mbc mbc;
146811 + struct pcf50606_rtc rtc;
146812 + struct pcf50606_adc adc;
146813 + struct pcf50606_wdt wdt;
146814 +};
146815 +
146816 +enum pcf50606_reg_int1 {
146817 + PCF50606_INT1_ONKEYR = 0x01, /* ONKEY rising edge */
146818 + PCF50606_INT1_ONKEYF = 0x02, /* ONKEY falling edge */
146819 + PCF50606_INT1_ONKEY1S = 0x04, /* OMKEY at least 1sec low */
146820 + PCF50606_INT1_EXTONR = 0x08, /* EXTON rising edge */
146821 + PCF50606_INT1_EXTONF = 0x10, /* EXTON falling edge */
146822 + PCF50606_INT1_SECOND = 0x40, /* RTC periodic second interrupt */
146823 + PCF50606_INT1_ALARM = 0x80, /* RTC alarm time is reached */
146824 +};
146825 +
146826 +enum pcf50606_reg_int2 {
146827 + PCF50606_INT2_CHGINS = 0x01, /* Charger inserted */
146828 + PCF50606_INT2_CHGRM = 0x02, /* Charger removed */
146829 + PCF50606_INT2_CHGFOK = 0x04, /* Fast charging OK */
146830 + PCF50606_INT2_CHGERR = 0x08, /* Error in charging mode */
146831 + PCF50606_INT2_CHGFRDY = 0x10, /* Fast charge completed */
146832 + PCF50606_INT2_CHGPROT = 0x20, /* Charging protection interrupt */
146833 + PCF50606_INT2_CHGWD10S = 0x40, /* Charger watchdig expires in 10s */
146834 + PCF50606_INT2_CHGWDEXP = 0x80, /* Charger watchdog expires */
146835 +};
146836 +
146837 +enum pcf50606_reg_int3 {
146838 + PCF50606_INT3_ADCRDY = 0x01, /* ADC conversion finished */
146839 + PCF50606_INT3_ACDINS = 0x02, /* Accessory inserted */
146840 + PCF50606_INT3_ACDREM = 0x04, /* Accessory removed */
146841 + PCF50606_INT3_TSCPRES = 0x08, /* Touch screen pressed */
146842 + PCF50606_INT3_LOWBAT = 0x40, /* Low battery voltage */
146843 + PCF50606_INT3_HIGHTMP = 0x80, /* High temperature */
146844 +};
146845 +
146846 +#endif
146847 +
146848 Index: linux-2.6.28/include/linux/mfd/pcf50606/gpo.h
146849 ===================================================================
146850 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146851 +++ linux-2.6.28/include/linux/mfd/pcf50606/gpo.h 2009-01-02 00:01:57.000000000 +0100
146852 @@ -0,0 +1,43 @@
146853 +/*
146854 + * gpo.h -- GPO driver for NXP PCF50606
146855 + *
146856 + * (C) 2006-2008 by Openmoko, Inc.
146857 + * All rights reserved.
146858 + *
146859 + * This program is free software; you can redistribute it and/or modify it
146860 + * under the terms of the GNU General Public License as published by the
146861 + * Free Software Foundation; either version 2 of the License, or (at your
146862 + * option) any later version.
146863 + */
146864 +
146865 +#ifndef __LINUX_MFD_PCF50606_GPO_H
146866 +#define __LINUX_MFD_PCF50606_GPO_H
146867 +
146868 +#define PCF50606_REG_GPOC1 0x38
146869 +#define PCF50606_REG_GPOC2 0x39
146870 +#define PCF50606_REG_GPOC3 0x3a
146871 +#define PCF50606_REG_GPOC4 0x3b
146872 +#define PCF50606_REG_GPOC5 0x3c
146873 +
146874 +#define PCF50606_GPO1 PCF50606_REG_GPOC1
146875 +#define PCF50606_GPO2 PCF50606_REG_GPOC1
146876 +#define PCF50606_GPOOD1 PCF50606_REG_GPOC2
146877 +#define PCF50606_GPOOD2 PCF50606_REG_GPOC3
146878 +#define PCF50606_GPOOD3 PCF50606_REG_GPOC4
146879 +#define PCF50606_GPOOD4 PCF50606_REG_GPOC5
146880 +
146881 +#define PCF50606_GPOCFG_GPOSEL_MASK 0x07
146882 +
146883 +struct pcf50606;
146884 +
146885 +void pcf50606_gpo_set_active(struct pcf50606 *pcf, int gpo, int value);
146886 +int pcf50606_gpo_get_active(struct pcf50606 *pcf, int gpo);
146887 +void pcf50606_gpo_set_standby(struct pcf50606 *pcf, int gpo, int value);
146888 +int pcf50606_gpo_get_standby(struct pcf50606 *pcf, int gpo);
146889 +
146890 +void pcf50606_gpo_invert_set(struct pcf50606 *, int gpo, int invert);
146891 +int pcf50606_gpo_invert_get(struct pcf50606 *pcf, int gpo);
146892 +
146893 +#endif /* __LINUX_MFD_PCF50606_GPIO_H */
146894 +
146895 +
146896 Index: linux-2.6.28/include/linux/mfd/pcf50606/input.h
146897 ===================================================================
146898 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146899 +++ linux-2.6.28/include/linux/mfd/pcf50606/input.h 2009-01-02 00:01:57.000000000 +0100
146900 @@ -0,0 +1,37 @@
146901 +/*
146902 + * input.h -- Input driver for NXP PCF50606
146903 + *
146904 + * (C) 2006-2008 by Openmoko, Inc.
146905 + * All rights reserved.
146906 + *
146907 + * This program is free software; you can redistribute it and/or modify it
146908 + * under the terms of the GNU General Public License as published by the
146909 + * Free Software Foundation; either version 2 of the License, or (at your
146910 + * option) any later version.
146911 + */
146912 +
146913 +#ifndef __LINUX_MFD_PCF50606_INPUT_H
146914 +#define __LINUX_MFD_PCF50606_INPUT_H
146915 +
146916 +#include <linux/platform_device.h>
146917 +#include <linux/input.h>
146918 +
146919 +#define PFC50606_OOCS_ONKEY 0x01
146920 +#define PCF50606_OOCS_EXTON 0x02
146921 +
146922 +#define PCF50606_OOCC2_ONKEYDB_NONE 0x00
146923 +#define PCF50606_OOCC2_ONKEYDB_14ms 0x01
146924 +#define PCF50606_OOCC2_ONKEYDB_62ms 0x02
146925 +#define PCF50606_OOCC2_ONKEYDB_500ms 0x03
146926 +#define PCF50606_OOCC2_EXTONDB_NONE 0x00
146927 +#define PCF50606_OOCC2_EXTONDB_14ms 0x04
146928 +#define PCF50606_OOCC2_EXTONDB_62ms 0x08
146929 +#define PCF50606_OOCC2_EXTONDB_500ms 0x0c
146930 +
146931 +struct pcf50606_input {
146932 + struct input_dev *input_dev;
146933 + struct platform_device *pdev;
146934 +};
146935 +
146936 +#endif
146937 +
146938 Index: linux-2.6.28/include/linux/mfd/pcf50606/led.h
146939 ===================================================================
146940 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146941 +++ linux-2.6.28/include/linux/mfd/pcf50606/led.h 2009-01-02 00:01:57.000000000 +0100
146942 @@ -0,0 +1,22 @@
146943 +/*
146944 + * led.h -- LED driver for NXP PCF50606
146945 + *
146946 + * (C) 2006-2008 by Openmoko, Inc.
146947 + * All rights reserved.
146948 + *
146949 + * This program is free software; you can redistribute it and/or modify it
146950 + * under the terms of the GNU General Public License as published by the
146951 + * Free Software Foundation; either version 2 of the License, or (at your
146952 + * option) any later version.
146953 + */
146954 +
146955 +#ifndef __LINUX_MFD_PCF50606_LED_H
146956 +#define __LINUX_MFD_PCF50606_LED_H
146957 +
146958 +#define PCF50606_REG_LEDC1 0x36
146959 +#define PCF50606_REG_LEDC2 0x37
146960 +
146961 +#include <linux/platform_device.h>
146962 +
146963 +#endif
146964 +
146965 Index: linux-2.6.28/include/linux/mfd/pcf50606/mbc.h
146966 ===================================================================
146967 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
146968 +++ linux-2.6.28/include/linux/mfd/pcf50606/mbc.h 2009-01-02 00:01:57.000000000 +0100
146969 @@ -0,0 +1,53 @@
146970 +/*
146971 + * mbc.h -- Driver for NXP PCF50606 Main Battery Charger
146972 + *
146973 + * (C) 2006-2008 by Openmoko, Inc.
146974 + * All rights reserved.
146975 + *
146976 + * This program is free software; you can redistribute it and/or modify it
146977 + * under the terms of the GNU General Public License as published by the
146978 + * Free Software Foundation; either version 2 of the License, or (at your
146979 + * option) any later version.
146980 + */
146981 +
146982 +#ifndef __LINUX_MFD_PCF50606_MBC_H
146983 +#define __LINUX_MFD_PCF50606_MBC_H
146984 +
146985 +#include <linux/platform_device.h>
146986 +
146987 +#define PCF50606_REG_MBCC1 0x29
146988 +#define PCF50606_REG_MBCC2 0x2a
146989 +#define PCF50606_REG_MBCC3 0x2b
146990 +#define PCF50606_REG_MBCS1 0x2c
146991 +
146992 +enum pcf50606_reg_mbcc1 {
146993 + PCF50606_MBCC1_CHGAPE = 0x01,
146994 + PCF50606_MBCC1_AUTOFST = 0x02,
146995 +#define PCF50606_MBCC1_CHGMOD_MASK 0x1c
146996 +#define PCF50606_MBCC1_CHGMOD_SHIFT 2
146997 + PCF50606_MBCC1_CHGMOD_QUAL = 0x00,
146998 + PCF50606_MBCC1_CHGMOD_PRE = 0x04,
146999 + PCF50606_MBCC1_CHGMOD_TRICKLE = 0x08,
147000 + PCF50606_MBCC1_CHGMOD_FAST_CCCV = 0x0c,
147001 + PCF50606_MBCC1_CHGMOD_FAST_NOCC = 0x10,
147002 + PCF50606_MBCC1_CHGMOD_FAST_NOCV = 0x14,
147003 + PCF50606_MBCC1_CHGMOD_FAST_SW = 0x18,
147004 + PCF50606_MBCC1_CHGMOD_IDLE = 0x1c,
147005 + PCF50606_MBCC1_DETMOD_LOWCHG = 0x20,
147006 + PCF50606_MBCC1_DETMOD_WDRST = 0x40,
147007 +};
147008 +
147009 +struct pcf50606;
147010 +
147011 +void pcf50606_mbc_usb_curlim_set(struct pcf50606 *pcf, int ma);
147012 +
147013 +struct pcf50606_mbc {
147014 + int charger_online;
147015 + int charger_active;
147016 +
147017 + struct power_supply charger;
147018 +
147019 + struct platform_device *pdev;
147020 +};
147021 +#endif
147022 +
147023 Index: linux-2.6.28/include/linux/mfd/pcf50606/pmic.h
147024 ===================================================================
147025 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147026 +++ linux-2.6.28/include/linux/mfd/pcf50606/pmic.h 2009-01-02 00:01:57.000000000 +0100
147027 @@ -0,0 +1,82 @@
147028 +#ifndef __LINUX_MFD_PCF50606_PMIC_H
147029 +#define __LINUX_MFD_PCF50606_PMIC_H
147030 +
147031 +#include <linux/platform_device.h>
147032 +
147033 +#define PCF50606_REG_DCDC1 0x1b
147034 +#define PCF50606_REG_DCDC2 0x1c
147035 +#define PCF50606_REG_DCDC3 0x1d
147036 +#define PCF50606_REG_DCDC4 0x1e
147037 +#define PCF50606_REG_DCDEC1 0x1f
147038 +#define PCF50606_REG_DCDEC2 0x20
147039 +#define PCF50606_REG_DCUDC1 0x21
147040 +#define PCF50606_REG_DCUDC2 0x22
147041 +#define PCF50606_REG_IOREGC 0x23
147042 +#define PCF50606_REG_D1REGC1 0x24
147043 +#define PCF50606_REG_D2REGC1 0x25
147044 +#define PCF50606_REG_D3REGC1 0x26
147045 +#define PCF50606_REG_LPREGC1 0x27
147046 +#define PCF50606_REG_LPREGC2 0x28
147047 +
147048 +/* used by PSSC, PWROKM, PWROKS, */
147049 +enum pcf50606_regu {
147050 + PCF50606_REGU_DCD = 0x01, /* DCD in phase 2 */
147051 + PCF50606_REGU_DCDE = 0x02, /* DCDE in phase 2 */
147052 + PCF50606_REGU_DCUD = 0x04, /* DCDU in phase 2 */
147053 + PCF50606_REGU_IO = 0x08, /* IO in phase 2 */
147054 + PCF50606_REGU_D1 = 0x10, /* D1 in phase 2 */
147055 + PCF50606_REGU_D2 = 0x20, /* D2 in phase 2 */
147056 + PCF50606_REGU_D3 = 0x40, /* D3 in phase 2 */
147057 + PCF50606_REGU_LP = 0x80, /* LP in phase 2 */
147058 +};
147059 +
147060 +enum pcf50606_reg_dcdc4 {
147061 + PCF50606_DCDC4_MODE_AUTO = 0x00,
147062 + PCF50606_DCDC4_MODE_PWM = 0x01,
147063 + PCF50606_DCDC4_MODE_PCF = 0x02,
147064 + PCF50606_DCDC4_OFF_FLOAT = 0x00,
147065 + PCF50606_DCDC4_OFF_BYPASS = 0x04,
147066 + PCF50606_DCDC4_OFF_PULLDOWN = 0x08,
147067 + PCF50606_DCDC4_CURLIM_500mA = 0x00,
147068 + PCF50606_DCDC4_CURLIM_750mA = 0x10,
147069 + PCF50606_DCDC4_CURLIM_1000mA = 0x20,
147070 + PCF50606_DCDC4_CURLIM_1250mA = 0x30,
147071 + PCF50606_DCDC4_TOGGLE = 0x40,
147072 + PCF50606_DCDC4_REGSEL_DCDC2 = 0x80,
147073 +};
147074 +
147075 +enum pcf50606_reg_dcdec2 {
147076 + PCF50606_DCDEC2_MODE_AUTO = 0x00,
147077 + PCF50606_DCDEC2_MODE_PWM = 0x01,
147078 + PCF50606_DCDEC2_MODE_PCF = 0x02,
147079 + PCF50606_DCDEC2_OFF_FLOAT = 0x00,
147080 + PCF50606_DCDEC2_OFF_BYPASS = 0x04,
147081 +};
147082 +
147083 +enum pcf50606_reg_dcudc2 {
147084 + PCF50606_DCUDC2_MODE_AUTO = 0x00,
147085 + PCF50606_DCUDC2_MODE_PWM = 0x01,
147086 + PCF50606_DCUDC2_MODE_PCF = 0x02,
147087 + PCF50606_DCUDC2_OFF_FLOAT = 0x00,
147088 + PCF50606_DCUDC2_OFF_BYPASS = 0x04,
147089 +};
147090 +
147091 +enum pcf50606_regulator_id {
147092 + PCF50606_REGULATOR_DCD,
147093 + PCF50606_REGULATOR_DCDE,
147094 + PCF50606_REGULATOR_DCUD,
147095 + PCF50606_REGULATOR_D1REG,
147096 + PCF50606_REGULATOR_D2REG,
147097 + PCF50606_REGULATOR_D3REG,
147098 + PCF50606_REGULATOR_LPREG,
147099 + PCF50606_REGULATOR_IOREG,
147100 +
147101 + /* Always last */
147102 + PCF50606_NUM_REGULATORS
147103 +};
147104 +
147105 +struct pcf50606_pmic {
147106 + struct platform_device *pdev[PCF50606_NUM_REGULATORS];
147107 +};
147108 +#endif
147109 +
147110 Index: linux-2.6.28/include/linux/mfd/pcf50606/rtc.h
147111 ===================================================================
147112 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147113 +++ linux-2.6.28/include/linux/mfd/pcf50606/rtc.h 2009-01-02 00:01:57.000000000 +0100
147114 @@ -0,0 +1,43 @@
147115 +/*
147116 + * rtc.h -- RTC driver for NXP PCF50606
147117 + *
147118 + * (C) 2006-2008 by Openmoko, Inc.
147119 + * All rights reserved.
147120 + *
147121 + * This program is free software; you can redistribute it and/or modify it
147122 + * under the terms of the GNU General Public License as published by the
147123 + * Free Software Foundation; either version 2 of the License, or (at your
147124 + * option) any later version.
147125 + */
147126 +
147127 +#ifndef __LINUX_MFD_PCF50606_RTC_H
147128 +#define __LINUX_MFD_PCF50606_RTC_H
147129 +
147130 +#include <linux/rtc.h>
147131 +#include <linux/platform_device.h>
147132 +
147133 +#define PCF50606_REG_RTCSC 0x0a /* Second */
147134 +#define PCF50606_REG_RTCMN 0x0b /* Minute */
147135 +#define PCF50606_REG_RTCHR 0x0c /* Hour */
147136 +#define PCF50606_REG_RTCWD 0x0d /* Weekday */
147137 +#define PCF50606_REG_RTCDT 0x0e /* Day */
147138 +#define PCF50606_REG_RTCMT 0x0f /* Month */
147139 +#define PCF50606_REG_RTCYR 0x10 /* Year */
147140 +#define PCF50606_REG_RTCSCA 0x11 /* Alarm Second */
147141 +#define PCF50606_REG_RTCMNA 0x12 /* Alarm Minute */
147142 +#define PCF50606_REG_RTCHRA 0x13 /* Alarm Hour */
147143 +#define PCF50606_REG_RTCWDA 0x14 /* Alarm Weekday */
147144 +#define PCF50606_REG_RTCDTA 0x15 /* Alarm Day */
147145 +#define PCF50606_REG_RTCMTA 0x16 /* Alarm Month */
147146 +#define PCF50606_REG_RTCYRA 0x17 /* Alarm Year */
147147 +
147148 +struct pcf50606_rtc {
147149 + int alarm_enabled;
147150 + int second_enabled;
147151 +
147152 + struct rtc_device *rtc_dev;
147153 + struct platform_device *pdev;
147154 +};
147155 +
147156 +#endif
147157 +
147158 Index: linux-2.6.28/include/linux/mfd/pcf50606/wdt.h
147159 ===================================================================
147160 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147161 +++ linux-2.6.28/include/linux/mfd/pcf50606/wdt.h 2009-01-02 00:01:57.000000000 +0100
147162 @@ -0,0 +1,32 @@
147163 +/*
147164 + * wdt.h -- WDT driver for NXP PCF50606
147165 + *
147166 + * (C) 2006-2008 by Openmoko, Inc.
147167 + * All rights reserved.
147168 + *
147169 + * This program is free software; you can redistribute it and/or modify it
147170 + * under the terms of the GNU General Public License as published by the
147171 + * Free Software Foundation; either version 2 of the License, or (at your
147172 + * option) any later version.
147173 + */
147174 +
147175 +#ifndef __LINUX_MFD_PCF50606_WDT_H
147176 +#define __LINUX_MFD_PCF50606_WDT_H
147177 +
147178 +#define PCF50606_REG_OOCC1 0x08
147179 +#define PCF50606_REG_OOCS 0x01
147180 +
147181 +#define PCF50606_OOCS_WDTEXP 0x80
147182 +#define PCF50606_OOCC1_WDTRST 0x08
147183 +
147184 +#define CLOSE_STATE_NOT 0x0000
147185 +#define CLOSE_STATE_ALLOW 0x2342
147186 +
147187 +struct pcf50606;
147188 +
147189 +struct pcf50606_wdt {
147190 + struct platform_device *pdev;
147191 +};
147192 +#endif /* __LINUX_MFD_PCF50606_WDT_H */
147193 +
147194 +
147195 Index: linux-2.6.28/include/linux/mfd/pcf50633/adc.h
147196 ===================================================================
147197 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147198 +++ linux-2.6.28/include/linux/mfd/pcf50633/adc.h 2009-01-02 00:01:57.000000000 +0100
147199 @@ -0,0 +1,88 @@
147200 +/*
147201 + * adc.h -- Driver for NXP PCF50633 ADC
147202 + *
147203 + * (C) 2006-2008 by Openmoko, Inc.
147204 + * All rights reserved.
147205 + *
147206 + * This program is free software; you can redistribute it and/or modify it
147207 + * under the terms of the GNU General Public License as published by the
147208 + * Free Software Foundation; either version 2 of the License, or (at your
147209 + * option) any later version.
147210 + */
147211 +
147212 +#ifndef __LINUX_MFD_PCF50633_ADC_H
147213 +#define __LINUX_MFD_PCF50633_ADC_H
147214 +
147215 +#include <linux/platform_device.h>
147216 +
147217 +/* ADC Registers */
147218 +#define PCF50633_REG_ADCC3 0x52
147219 +#define PCF50633_REG_ADCC2 0x53
147220 +#define PCF50633_REG_ADCC1 0x54
147221 +#define PCF50633_REG_ADCS1 0x55
147222 +#define PCF50633_REG_ADCS2 0x56
147223 +#define PCF50633_REG_ADCS3 0x57
147224 +
147225 +#define PCF50633_ADCC1_ADCSTART 0x01
147226 +#define PCF50633_ADCC1_RES_10BIT 0x02
147227 +#define PCF50633_ADCC1_AVERAGE_NO 0x00
147228 +#define PCF50633_ADCC1_AVERAGE_4 0x04
147229 +#define PCF50633_ADCC1_AVERAGE_8 0x08
147230 +#define PCF50633_ADCC1_AVERAGE_16 0x0c
147231 +#define PCF50633_ADCC1_MUX_BATSNS_RES 0x00
147232 +#define PCF50633_ADCC1_MUX_BATSNS_SUBTR 0x10
147233 +#define PCF50633_ADCC1_MUX_ADCIN2_RES 0x20
147234 +#define PCF50633_ADCC1_MUX_ADCIN2_SUBTR 0x30
147235 +#define PCF50633_ADCC1_MUX_BATTEMP 0x60
147236 +#define PCF50633_ADCC1_MUX_ADCIN1 0x70
147237 +#define PCF50633_ADCC1_AVERAGE_MASK 0x0c
147238 +#define PCF50633_ADCC1_ADCMUX_MASK 0xf0
147239 +
147240 +#define PCF50633_ADCC2_RATIO_NONE 0x00
147241 +#define PCF50633_ADCC2_RATIO_BATTEMP 0x01
147242 +#define PCF50633_ADCC2_RATIO_ADCIN1 0x02
147243 +#define PCF50633_ADCC2_RATIO_BOTH 0x03
147244 +#define PCF50633_ADCC2_RATIOSETTL_100US 0x04
147245 +
147246 +#define PCF50633_ADCC3_ACCSW_EN 0x01
147247 +#define PCF50633_ADCC3_NTCSW_EN 0x04
147248 +#define PCF50633_ADCC3_RES_DIV_TWO 0x10
147249 +#define PCF50633_ADCC3_RES_DIV_THREE 0x00
147250 +
147251 +#define PCF50633_ADCS3_REF_NTCSW 0x00
147252 +#define PCF50633_ADCS3_REF_ACCSW 0x10
147253 +#define PCF50633_ADCS3_REF_2V0 0x20
147254 +#define PCF50633_ADCS3_REF_VISA 0x30
147255 +#define PCF50633_ADCS3_REF_2V0_2 0x70
147256 +#define PCF50633_ADCS3_ADCRDY 0x80
147257 +
147258 +#define PCF50633_ADCS3_ADCDAT1L_MASK 0x03
147259 +#define PCF50633_ADCS3_ADCDAT2L_MASK 0x0c
147260 +#define PCF50633_ADCS3_ADCDAT2L_SHIFT 2
147261 +#define PCF50633_ASCS3_REF_MASK 0x70
147262 +
147263 +
147264 +struct pcf50633;
147265 +
147266 +#define PCF50633_MAX_ADC_FIFO_DEPTH 8
147267 +
147268 +struct pcf50633_adc_request;
147269 +
147270 +struct pcf50633_adc {
147271 + struct platform_device *pdev;
147272 +
147273 + /* Private stuff */
147274 + struct pcf50633_adc_request *queue[PCF50633_MAX_ADC_FIFO_DEPTH];
147275 + int queue_head;
147276 + int queue_tail;
147277 + struct mutex queue_mutex;
147278 +};
147279 +
147280 +extern int
147281 +pcf50633_adc_async_read(struct pcf50633 *pcf, int mux, int avg,
147282 + void (*callback)(struct pcf50633 *, void *, int),
147283 + void *callback_param);
147284 +extern int
147285 +pcf50633_adc_sync_read(struct pcf50633 *pcf, int mux, int avg);
147286 +
147287 +#endif /* __LINUX_PCF50633_ADC_H */
147288 Index: linux-2.6.28/include/linux/mfd/pcf50633/core.h
147289 ===================================================================
147290 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147291 +++ linux-2.6.28/include/linux/mfd/pcf50633/core.h 2009-01-02 00:01:57.000000000 +0100
147292 @@ -0,0 +1,212 @@
147293 +/*
147294 + * core.h -- Core driver for NXP PCF50633
147295 + *
147296 + * (C) 2006-2008 by Openmoko, Inc.
147297 + * All rights reserved.
147298 + *
147299 + * This program is free software; you can redistribute it and/or modify it
147300 + * under the terms of the GNU General Public License as published by the
147301 + * Free Software Foundation; either version 2 of the License, or (at your
147302 + * option) any later version.
147303 + */
147304 +
147305 +#ifndef __LINUX_MFD_PCF50633_CORE_H
147306 +#define __LINUX_MFD_PCF50633_CORE_H
147307 +
147308 +#include <linux/i2c.h>
147309 +#include <linux/workqueue.h>
147310 +#include <linux/regulator/driver.h>
147311 +#include <linux/regulator/machine.h>
147312 +#include <linux/power_supply.h>
147313 +
147314 +#include <linux/mfd/pcf50633/pmic.h>
147315 +#include <linux/mfd/pcf50633/input.h>
147316 +#include <linux/mfd/pcf50633/mbc.h>
147317 +#include <linux/mfd/pcf50633/rtc.h>
147318 +#include <linux/mfd/pcf50633/adc.h>
147319 +#include <linux/mfd/pcf50633/gpio.h>
147320 +
147321 +struct pcf50633;
147322 +
147323 +struct pcf50633_platform_data {
147324 + struct regulator_init_data reg_init_data[PCF50633_NUM_REGULATORS];
147325 +
147326 + char **batteries;
147327 + int num_batteries;
147328 +
147329 + /* Callbacks */
147330 + void (*probe_done)(struct pcf50633 *);
147331 + void (*mbc_event_callback)(struct pcf50633 *, int);
147332 + void (*regulator_registered)(struct pcf50633 *, int);
147333 + void (*force_shutdown)(struct pcf50633 *);
147334 +
147335 + u8 resumers[5];
147336 +
147337 + /* Runtime data - filled by driver afer probe */
147338 + struct pcf50633 *pcf;
147339 +};
147340 +
147341 +struct pcf50633_irq {
147342 + void (*handler)(struct pcf50633 *, int, void *);
147343 + void *data;
147344 +};
147345 +
147346 +int pcf50633_irq_mask(struct pcf50633 *pcf, int irq);
147347 +int pcf50633_irq_unmask(struct pcf50633 *pcf, int irq);
147348 +int pcf50633_irq_mask_get(struct pcf50633 *pcf, int irq);
147349 +
147350 +int pcf50633_read_block(struct pcf50633 *, u8 reg,
147351 + int nr_regs, u8 *data);
147352 +int pcf50633_write_block(struct pcf50633 *pcf, u8 reg,
147353 + int nr_regs, u8 *data);
147354 +u8 pcf50633_reg_read(struct pcf50633 *, u8 reg);
147355 +int pcf50633_reg_write(struct pcf50633 *pcf, u8 reg, u8 val);
147356 +
147357 +int pcf50633_reg_set_bit_mask(struct pcf50633 *pcf, u8 reg, u8 mask, u8 val);
147358 +int pcf50633_reg_clear_bits(struct pcf50633 *pcf, u8 reg, u8 bits);
147359 +
147360 +/* Interrupt registers */
147361 +
147362 +#define PCF50633_REG_INT1 0x02
147363 +#define PCF50633_REG_INT2 0x03
147364 +#define PCF50633_REG_INT3 0x04
147365 +#define PCF50633_REG_INT4 0x05
147366 +#define PCF50633_REG_INT5 0x06
147367 +
147368 +#define PCF50633_REG_INT1M 0x07
147369 +#define PCF50633_REG_INT2M 0x08
147370 +#define PCF50633_REG_INT3M 0x09
147371 +#define PCF50633_REG_INT4M 0x0a
147372 +#define PCF50633_REG_INT5M 0x0b
147373 +
147374 +enum {
147375 + /* Chip IRQs */
147376 + PCF50633_IRQ_ADPINS = 0,
147377 + PCF50633_IRQ_ADPREM,
147378 + PCF50633_IRQ_USBINS,
147379 + PCF50633_IRQ_USBREM,
147380 + PCF50633_IRQ_RESERVED1,
147381 + PCF50633_IRQ_RESERVED2,
147382 + PCF50633_IRQ_ALARM,
147383 + PCF50633_IRQ_SECOND,
147384 + PCF50633_IRQ_ONKEYR,
147385 + PCF50633_IRQ_ONKEYF,
147386 + PCF50633_IRQ_EXTON1R,
147387 + PCF50633_IRQ_EXTON1F,
147388 + PCF50633_IRQ_EXTON2R,
147389 + PCF50633_IRQ_EXTON2F,
147390 + PCF50633_IRQ_EXTON3R,
147391 + PCF50633_IRQ_EXTON3F,
147392 + PCF50633_IRQ_BATFULL,
147393 + PCF50633_IRQ_CHGHALT,
147394 + PCF50633_IRQ_THLIMON,
147395 + PCF50633_IRQ_THLIMOFF,
147396 + PCF50633_IRQ_USBLIMON,
147397 + PCF50633_IRQ_USBLIMOFF,
147398 + PCF50633_IRQ_ADCRDY,
147399 + PCF50633_IRQ_ONKEY1S,
147400 + PCF50633_IRQ_LOWSYS,
147401 + PCF50633_IRQ_LOWBAT,
147402 + PCF50633_IRQ_HIGHTMP,
147403 + PCF50633_IRQ_AUTOPWRFAIL,
147404 + PCF50633_IRQ_DWN1PWRFAIL,
147405 + PCF50633_IRQ_DWN2PWRFAIL,
147406 + PCF50633_IRQ_LEDPWRFAIL,
147407 + PCF50633_IRQ_LEDOVP,
147408 + PCF50633_IRQ_LDO1PWRFAIL,
147409 + PCF50633_IRQ_LDO2PWRFAIL,
147410 + PCF50633_IRQ_LDO3PWRFAIL,
147411 + PCF50633_IRQ_LDO4PWRFAIL,
147412 + PCF50633_IRQ_LDO5PWRFAIL,
147413 + PCF50633_IRQ_LDO6PWRFAIL,
147414 + PCF50633_IRQ_HCLDOPWRFAIL,
147415 + PCF50633_IRQ_HCLDOOVL,
147416 +
147417 + /* Always last */
147418 + PCF50633_NUM_IRQ,
147419 +};
147420 +
147421 +struct pcf50633 {
147422 + struct device *dev;
147423 + struct i2c_client *i2c_client;
147424 +
147425 + struct pcf50633_platform_data *pdata;
147426 + int irq;
147427 + struct pcf50633_irq irq_handler[PCF50633_NUM_IRQ];
147428 + struct work_struct irq_work;
147429 + struct mutex lock;
147430 +
147431 + u8 mask_regs[5];
147432 +
147433 + u8 suspend_irq_masks[5];
147434 + u8 resume_reason[5];
147435 + int is_suspended;
147436 +
147437 + int onkey1s_held;
147438 +
147439 + struct pcf50633_pmic pmic;
147440 + struct pcf50633_input input;
147441 + struct pcf50633_mbc mbc;
147442 + struct pcf50633_rtc rtc;
147443 + struct pcf50633_adc adc;
147444 +};
147445 +
147446 +enum pcf50633_reg_int1 {
147447 + PCF50633_INT1_ADPINS = 0x01, /* Adapter inserted */
147448 + PCF50633_INT1_ADPREM = 0x02, /* Adapter removed */
147449 + PCF50633_INT1_USBINS = 0x04, /* USB inserted */
147450 + PCF50633_INT1_USBREM = 0x08, /* USB removed */
147451 + /* reserved */
147452 + PCF50633_INT1_ALARM = 0x40, /* RTC alarm time is reached */
147453 + PCF50633_INT1_SECOND = 0x80, /* RTC periodic second interrupt */
147454 +};
147455 +
147456 +enum pcf50633_reg_int2 {
147457 + PCF50633_INT2_ONKEYR = 0x01, /* ONKEY rising edge */
147458 + PCF50633_INT2_ONKEYF = 0x02, /* ONKEY falling edge */
147459 + PCF50633_INT2_EXTON1R = 0x04, /* EXTON1 rising edge */
147460 + PCF50633_INT2_EXTON1F = 0x08, /* EXTON1 falling edge */
147461 + PCF50633_INT2_EXTON2R = 0x10, /* EXTON2 rising edge */
147462 + PCF50633_INT2_EXTON2F = 0x20, /* EXTON2 falling edge */
147463 + PCF50633_INT2_EXTON3R = 0x40, /* EXTON3 rising edge */
147464 + PCF50633_INT2_EXTON3F = 0x80, /* EXTON3 falling edge */
147465 +};
147466 +
147467 +enum pcf50633_reg_int3 {
147468 + PCF50633_INT3_BATFULL = 0x01, /* Battery full */
147469 + PCF50633_INT3_CHGHALT = 0x02, /* Charger halt */
147470 + PCF50633_INT3_THLIMON = 0x04,
147471 + PCF50633_INT3_THLIMOFF = 0x08,
147472 + PCF50633_INT3_USBLIMON = 0x10,
147473 + PCF50633_INT3_USBLIMOFF = 0x20,
147474 + PCF50633_INT3_ADCRDY = 0x40, /* ADC result ready */
147475 + PCF50633_INT3_ONKEY1S = 0x80, /* ONKEY pressed 1 second */
147476 +};
147477 +
147478 +enum pcf50633_reg_int4 {
147479 + PCF50633_INT4_LOWSYS = 0x01,
147480 + PCF50633_INT4_LOWBAT = 0x02,
147481 + PCF50633_INT4_HIGHTMP = 0x04,
147482 + PCF50633_INT4_AUTOPWRFAIL = 0x08,
147483 + PCF50633_INT4_DWN1PWRFAIL = 0x10,
147484 + PCF50633_INT4_DWN2PWRFAIL = 0x20,
147485 + PCF50633_INT4_LEDPWRFAIL = 0x40,
147486 + PCF50633_INT4_LEDOVP = 0x80,
147487 +};
147488 +
147489 +enum pcf50633_reg_int5 {
147490 + PCF50633_INT5_LDO1PWRFAIL = 0x01,
147491 + PCF50633_INT5_LDO2PWRFAIL = 0x02,
147492 + PCF50633_INT5_LDO3PWRFAIL = 0x04,
147493 + PCF50633_INT5_LDO4PWRFAIL = 0x08,
147494 + PCF50633_INT5_LDO5PWRFAIL = 0x10,
147495 + PCF50633_INT5_LDO6PWRFAIL = 0x20,
147496 + PCF50633_INT5_HCLDOPWRFAIL = 0x40,
147497 + PCF50633_INT5_HCLDOOVL = 0x80,
147498 +};
147499 +
147500 +/* misc. registers */
147501 +#define PCF50633_REG_OOCSHDWN 0x0c
147502 +
147503 +#endif
147504 +
147505 Index: linux-2.6.28/include/linux/mfd/pcf50633/gpio.h
147506 ===================================================================
147507 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147508 +++ linux-2.6.28/include/linux/mfd/pcf50633/gpio.h 2009-01-02 00:01:57.000000000 +0100
147509 @@ -0,0 +1,51 @@
147510 +/*
147511 + * gpio.h -- GPIO driver for NXP PCF50633
147512 + *
147513 + * (C) 2006-2008 by Openmoko, Inc.
147514 + * All rights reserved.
147515 + *
147516 + * This program is free software; you can redistribute it and/or modify it
147517 + * under the terms of the GNU General Public License as published by the
147518 + * Free Software Foundation; either version 2 of the License, or (at your
147519 + * option) any later version.
147520 + */
147521 +
147522 +#ifndef __LINUX_MFD_PCF50633_GPIO_H
147523 +#define __LINUX_MFD_PCF50633_GPIO_H
147524 +
147525 +#define PCF50633_GPIO1 1
147526 +#define PCF50633_GPIO2 2
147527 +#define PCF50633_GPIO3 3
147528 +#define PCF50633_GPO 4
147529 +
147530 +#define PCF50633_REG_GPIO1CFG 0x14
147531 +#define PCF50633_REG_GPIO2CFG 0x15
147532 +#define PCF50633_REG_GPIO3CFG 0x16
147533 +#define PCF50633_REG_GPOCFG 0x17
147534 +
147535 +enum pcf50633_reg_gpocfg {
147536 + PCF50633_GPOCFG_GPOSEL_0 = 0x00,
147537 + PCF50633_GPOCFG_GPOSEL_LED_NFET = 0x01,
147538 + PCF50633_GPOCFG_GPOSEL_SYSxOK = 0x02,
147539 + PCF50633_GPOCFG_GPOSEL_CLK32K = 0x03,
147540 + PCF50633_GPOCFG_GPOSEL_ADAPUSB = 0x04,
147541 + PCF50633_GPOCFG_GPOSEL_USBxOK = 0x05,
147542 + PCF50633_GPOCFG_GPOSEL_ACTPH4 = 0x06,
147543 + PCF50633_GPOCFG_GPOSEL_1 = 0x07,
147544 + PCF50633_GPOCFG_GPOSEL_INVERSE = 0x08,
147545 +};
147546 +#define PCF50633_GPOCFG_GPOSEL_MASK 0x07
147547 +
147548 +struct pcf50633;
147549 +
147550 +void pcf50633_gpio_set(struct pcf50633 *pcf, int gpio, int on);
147551 +int pcf50633_gpio_get(struct pcf50633 *pcf, int gpio);
147552 +
147553 +void pcf50633_gpio_invert_set(struct pcf50633 *, int gpio, int invert);
147554 +int pcf50633_gpio_invert_get(struct pcf50633 *pcf, int gpio);
147555 +
147556 +void pcf50633_gpio_power_supply_set(struct pcf50633 *,
147557 + int gpio, int regulator, int on);
147558 +#endif /* __LINUX_MFD_PCF50633_GPIO_H */
147559 +
147560 +
147561 Index: linux-2.6.28/include/linux/mfd/pcf50633/input.h
147562 ===================================================================
147563 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147564 +++ linux-2.6.28/include/linux/mfd/pcf50633/input.h 2009-01-02 00:01:57.000000000 +0100
147565 @@ -0,0 +1,29 @@
147566 +/*
147567 + * input.h -- Input driver for NXP PCF50633
147568 + *
147569 + * (C) 2006-2008 by Openmoko, Inc.
147570 + * All rights reserved.
147571 + *
147572 + * This program is free software; you can redistribute it and/or modify it
147573 + * under the terms of the GNU General Public License as published by the
147574 + * Free Software Foundation; either version 2 of the License, or (at your
147575 + * option) any later version.
147576 + */
147577 +
147578 +#ifndef __LINUX_MFD_PCF50633_INPUT_H
147579 +#define __LINUX_MFD_PCF50633_INPUT_H
147580 +
147581 +#include <linux/platform_device.h>
147582 +#include <linux/input.h>
147583 +
147584 +#define PCF50633_OOCSTAT_ONKEY 0x01
147585 +#define PCF50633_REG_OOCSTAT 0x12
147586 +#define PCF50633_REG_OOCMODE 0x10
147587 +
147588 +struct pcf50633_input {
147589 + struct input_dev *input_dev;
147590 + struct platform_device *pdev;
147591 +};
147592 +
147593 +#endif
147594 +
147595 Index: linux-2.6.28/include/linux/mfd/pcf50633/led.h
147596 ===================================================================
147597 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147598 +++ linux-2.6.28/include/linux/mfd/pcf50633/led.h 2009-01-02 00:01:57.000000000 +0100
147599 @@ -0,0 +1,24 @@
147600 +/*
147601 + * led.h -- LED driver for NXP PCF50633
147602 + *
147603 + * (C) 2006-2008 by Openmoko, Inc.
147604 + * All rights reserved.
147605 + *
147606 + * This program is free software; you can redistribute it and/or modify it
147607 + * under the terms of the GNU General Public License as published by the
147608 + * Free Software Foundation; either version 2 of the License, or (at your
147609 + * option) any later version.
147610 + */
147611 +
147612 +#ifndef __LINUX_MFD_PCF50633_LED_H
147613 +#define __LINUX_MFD_PCF50633_LED_H
147614 +
147615 +#include <linux/platform_device.h>
147616 +
147617 +#define PCF50633_REG_LEDOUT 0x28
147618 +#define PCF50633_REG_LEDENA 0x29
147619 +#define PCF50633_REG_LEDCTL 0x2a
147620 +#define PCF50633_REG_LEDDIM 0x2b
147621 +
147622 +#endif
147623 +
147624 Index: linux-2.6.28/include/linux/mfd/pcf50633/mbc.h
147625 ===================================================================
147626 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147627 +++ linux-2.6.28/include/linux/mfd/pcf50633/mbc.h 2009-01-02 00:01:57.000000000 +0100
147628 @@ -0,0 +1,140 @@
147629 +/*
147630 + * mbc.h -- Driver for NXP PCF50633 Main Battery Charger
147631 + *
147632 + * (C) 2006-2008 by Openmoko, Inc.
147633 + * All rights reserved.
147634 + *
147635 + * This program is free software; you can redistribute it and/or modify it
147636 + * under the terms of the GNU General Public License as published by the
147637 + * Free Software Foundation; either version 2 of the License, or (at your
147638 + * option) any later version.
147639 + */
147640 +
147641 +#ifndef __LINUX_MFD_PCF50633_MBC_H
147642 +#define __LINUX_MFD_PCF50633_MBC_H
147643 +
147644 +#include <linux/platform_device.h>
147645 +
147646 +#define PCF50633_REG_MBCC1 0x43
147647 +#define PCF50633_REG_MBCC2 0x44
147648 +#define PCF50633_REG_MBCC3 0x45
147649 +#define PCF50633_REG_MBCC4 0x46
147650 +#define PCF50633_REG_MBCC5 0x47
147651 +#define PCF50633_REG_MBCC6 0x48
147652 +#define PCF50633_REG_MBCC7 0x49
147653 +#define PCF50633_REG_MBCC8 0x4a
147654 +#define PCF50633_REG_MBCS1 0x4b
147655 +#define PCF50633_REG_MBCS2 0x4c
147656 +#define PCF50633_REG_MBCS3 0x4d
147657 +
147658 +enum pcf50633_reg_mbcc1 {
147659 + PCF50633_MBCC1_CHGENA = 0x01, /* Charger enable */
147660 + PCF50633_MBCC1_AUTOSTOP = 0x02,
147661 + PCF50633_MBCC1_AUTORES = 0x04, /* automatic resume */
147662 + PCF50633_MBCC1_RESUME = 0x08, /* explicit resume cmd */
147663 + PCF50633_MBCC1_RESTART = 0x10, /* restart charging */
147664 + PCF50633_MBCC1_PREWDTIME_60M = 0x20, /* max. precharging time */
147665 + PCF50633_MBCC1_WDTIME_1H = 0x00,
147666 + PCF50633_MBCC1_WDTIME_2H = 0x40,
147667 + PCF50633_MBCC1_WDTIME_4H = 0x80,
147668 + PCF50633_MBCC1_WDTIME_6H = 0xc0,
147669 +};
147670 +#define PCF50633_MBCC1_WDTIME_MASK 0xc0
147671 +
147672 +enum pcf50633_reg_mbcc2 {
147673 + PCF50633_MBCC2_VBATCOND_2V7 = 0x00,
147674 + PCF50633_MBCC2_VBATCOND_2V85 = 0x01,
147675 + PCF50633_MBCC2_VBATCOND_3V0 = 0x02,
147676 + PCF50633_MBCC2_VBATCOND_3V15 = 0x03,
147677 + PCF50633_MBCC2_VMAX_4V = 0x00,
147678 + PCF50633_MBCC2_VMAX_4V20 = 0x28,
147679 + PCF50633_MBCC2_VRESDEBTIME_64S = 0x80, /* debounce time (32/64sec) */
147680 +};
147681 +
147682 +enum pcf50633_reg_mbcc7 {
147683 + PCF50633_MBCC7_USB_100mA = 0x00,
147684 + PCF50633_MBCC7_USB_500mA = 0x01,
147685 + PCF50633_MBCC7_USB_1000mA = 0x02,
147686 + PCF50633_MBCC7_USB_SUSPEND = 0x03,
147687 + PCF50633_MBCC7_BATTEMP_EN = 0x04,
147688 + PCF50633_MBCC7_BATSYSIMAX_1A6 = 0x00,
147689 + PCF50633_MBCC7_BATSYSIMAX_1A8 = 0x40,
147690 + PCF50633_MBCC7_BATSYSIMAX_2A0 = 0x80,
147691 + PCF50633_MBCC7_BATSYSIMAX_2A2 = 0xc0,
147692 +};
147693 +#define PCF50633_MBCC7_USB_MASK 0x03
147694 +
147695 +enum pcf50633_reg_mbcc8 {
147696 + PCF50633_MBCC8_USBENASUS = 0x10,
147697 +};
147698 +
147699 +enum pcf50633_reg_mbcs1 {
147700 + PCF50633_MBCS1_USBPRES = 0x01,
147701 + PCF50633_MBCS1_USBOK = 0x02,
147702 + PCF50633_MBCS1_ADAPTPRES = 0x04,
147703 + PCF50633_MBCS1_ADAPTOK = 0x08,
147704 + PCF50633_MBCS1_TBAT_OK = 0x00,
147705 + PCF50633_MBCS1_TBAT_ABOVE = 0x10,
147706 + PCF50633_MBCS1_TBAT_BELOW = 0x20,
147707 + PCF50633_MBCS1_TBAT_UNDEF = 0x30,
147708 + PCF50633_MBCS1_PREWDTEXP = 0x40,
147709 + PCF50633_MBCS1_WDTEXP = 0x80,
147710 +};
147711 +
147712 +enum pcf50633_reg_mbcs2_mbcmod {
147713 + PCF50633_MBCS2_MBC_PLAY = 0x00,
147714 + PCF50633_MBCS2_MBC_USB_PRE = 0x01,
147715 + PCF50633_MBCS2_MBC_USB_PRE_WAIT = 0x02,
147716 + PCF50633_MBCS2_MBC_USB_FAST = 0x03,
147717 + PCF50633_MBCS2_MBC_USB_FAST_WAIT = 0x04,
147718 + PCF50633_MBCS2_MBC_USB_SUSPEND = 0x05,
147719 + PCF50633_MBCS2_MBC_ADP_PRE = 0x06,
147720 + PCF50633_MBCS2_MBC_ADP_PRE_WAIT = 0x07,
147721 + PCF50633_MBCS2_MBC_ADP_FAST = 0x08,
147722 + PCF50633_MBCS2_MBC_ADP_FAST_WAIT = 0x09,
147723 + PCF50633_MBCS2_MBC_BAT_FULL = 0x0a,
147724 + PCF50633_MBCS2_MBC_HALT = 0x0b,
147725 +};
147726 +#define PCF50633_MBCS2_MBC_MASK 0x0f
147727 +enum pcf50633_reg_mbcs2_chgstat {
147728 + PCF50633_MBCS2_CHGS_NONE = 0x00,
147729 + PCF50633_MBCS2_CHGS_ADAPTER = 0x10,
147730 + PCF50633_MBCS2_CHGS_USB = 0x20,
147731 + PCF50633_MBCS2_CHGS_BOTH = 0x30,
147732 +};
147733 +#define PCF50633_MBCS2_RESSTAT_AUTO 0x40
147734 +
147735 +enum pcf50633_reg_mbcs3 {
147736 + PCF50633_MBCS3_USBLIM_PLAY = 0x01,
147737 + PCF50633_MBCS3_USBLIM_CGH = 0x02,
147738 + PCF50633_MBCS3_TLIM_PLAY = 0x04,
147739 + PCF50633_MBCS3_TLIM_CHG = 0x08,
147740 + PCF50633_MBCS3_ILIM = 0x10, /* 1: Ibat > Icutoff */
147741 + PCF50633_MBCS3_VLIM = 0x20, /* 1: Vbat == Vmax */
147742 + PCF50633_MBCS3_VBATSTAT = 0x40, /* 1: Vbat > Vbatcond */
147743 + PCF50633_MBCS3_VRES = 0x80, /* 1: Vbat > Vth(RES) */
147744 +};
147745 +
147746 +#define PCF50633_MBCC2_VBATCOND_MASK 0x03
147747 +#define PCF50633_MBCC2_VMAX_MASK 0x3c
147748 +
147749 +struct pcf50633;
147750 +
147751 +void pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma);
147752 +
147753 +struct pcf50633_mbc {
147754 + int adapter_active;
147755 + int adapter_online;
147756 + int usb_active;
147757 + int usb_online;
147758 +
147759 + struct power_supply ac;
147760 + struct power_supply usb;
147761 + struct power_supply adapter;
147762 +
147763 + struct delayed_work charging_restart_work;
147764 +
147765 + struct platform_device *pdev;
147766 +};
147767 +#endif
147768 +
147769 Index: linux-2.6.28/include/linux/mfd/pcf50633/pmic.h
147770 ===================================================================
147771 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147772 +++ linux-2.6.28/include/linux/mfd/pcf50633/pmic.h 2009-01-02 00:01:57.000000000 +0100
147773 @@ -0,0 +1,73 @@
147774 +#ifndef __LINUX_MFD_PCF50633_PMIC_H
147775 +#define __LINUX_MFD_PCF50633_PMIC_H
147776 +
147777 +#include <linux/platform_device.h>
147778 +
147779 +#define PCF50633_REG_AUTOOUT 0x1a
147780 +#define PCF50633_REG_AUTOENA 0x1b
147781 +#define PCF50633_REG_AUTOCTL 0x1c
147782 +#define PCF50633_REG_AUTOMXC 0x1d
147783 +#define PCF50633_REG_DOWN1OUT 0x1e
147784 +#define PCF50633_REG_DOWN1ENA 0x1f
147785 +#define PCF50633_REG_DOWN1CTL 0x20
147786 +#define PCF50633_REG_DOWN1MXC 0x21
147787 +#define PCF50633_REG_DOWN2OUT 0x22
147788 +#define PCF50633_REG_DOWN2ENA 0x23
147789 +#define PCF50633_REG_DOWN2CTL 0x24
147790 +#define PCF50633_REG_DOWN2MXC 0x25
147791 +#define PCF50633_REG_MEMLDOOUT 0x26
147792 +#define PCF50633_REG_MEMLDOENA 0x27
147793 +#define PCF50633_REG_LDO1OUT 0x2d
147794 +#define PCF50633_REG_LDO1ENA 0x2e
147795 +#define PCF50633_REG_LDO2OUT 0x2f
147796 +#define PCF50633_REG_LDO2ENA 0x30
147797 +#define PCF50633_REG_LDO3OUT 0x31
147798 +#define PCF50633_REG_LDO3ENA 0x32
147799 +#define PCF50633_REG_LDO4OUT 0x33
147800 +#define PCF50633_REG_LDO4ENA 0x34
147801 +#define PCF50633_REG_LDO5OUT 0x35
147802 +#define PCF50633_REG_LDO5ENA 0x36
147803 +#define PCF50633_REG_LDO6OUT 0x37
147804 +#define PCF50633_REG_LDO6ENA 0x38
147805 +#define PCF50633_REG_HCLDOOUT 0x39
147806 +#define PCF50633_REG_HCLDOENA 0x3a
147807 +#define PCF50633_REG_HCLDOOVL 0x40
147808 +
147809 +enum pcf50633_regulator_enable {
147810 + PCF50633_REGULATOR_ON = 0x01,
147811 + PCF50633_REGULATOR_ON_GPIO1 = 0x02,
147812 + PCF50633_REGULATOR_ON_GPIO2 = 0x04,
147813 + PCF50633_REGULATOR_ON_GPIO3 = 0x08,
147814 +};
147815 +#define PCF50633_REGULATOR_ON_MASK 0x0f
147816 +
147817 +enum pcf50633_regulator_phase {
147818 + PCF50633_REGULATOR_ACTPH1 = 0x00,
147819 + PCF50633_REGULATOR_ACTPH2 = 0x10,
147820 + PCF50633_REGULATOR_ACTPH3 = 0x20,
147821 + PCF50633_REGULATOR_ACTPH4 = 0x30,
147822 +};
147823 +#define PCF50633_REGULATOR_ACTPH_MASK 0x30
147824 +
147825 +
147826 +enum pcf50633_regulator_id {
147827 + PCF50633_REGULATOR_AUTO,
147828 + PCF50633_REGULATOR_DOWN1,
147829 + PCF50633_REGULATOR_DOWN2,
147830 + PCF50633_REGULATOR_LDO1,
147831 + PCF50633_REGULATOR_LDO2,
147832 + PCF50633_REGULATOR_LDO3,
147833 + PCF50633_REGULATOR_LDO4,
147834 + PCF50633_REGULATOR_LDO5,
147835 + PCF50633_REGULATOR_LDO6,
147836 + PCF50633_REGULATOR_HCLDO,
147837 + PCF50633_REGULATOR_MEMLDO,
147838 +
147839 + PCF50633_NUM_REGULATORS
147840 +};
147841 +
147842 +struct pcf50633_pmic {
147843 + struct platform_device *pdev[PCF50633_NUM_REGULATORS];
147844 +};
147845 +#endif
147846 +
147847 Index: linux-2.6.28/include/linux/mfd/pcf50633/rtc.h
147848 ===================================================================
147849 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147850 +++ linux-2.6.28/include/linux/mfd/pcf50633/rtc.h 2009-01-02 00:01:57.000000000 +0100
147851 @@ -0,0 +1,43 @@
147852 +/*
147853 + * rtc.h -- RTC driver for NXP PCF50633
147854 + *
147855 + * (C) 2006-2008 by Openmoko, Inc.
147856 + * All rights reserved.
147857 + *
147858 + * This program is free software; you can redistribute it and/or modify it
147859 + * under the terms of the GNU General Public License as published by the
147860 + * Free Software Foundation; either version 2 of the License, or (at your
147861 + * option) any later version.
147862 + */
147863 +
147864 +#ifndef __LINUX_MFD_PCF50633_RTC_H
147865 +#define __LINUX_MFD_PCF50633_RTC_H
147866 +
147867 +#include <linux/rtc.h>
147868 +#include <linux/platform_device.h>
147869 +
147870 +#define PCF50633_REG_RTCSC 0x59 /* Second */
147871 +#define PCF50633_REG_RTCMN 0x5a /* Minute */
147872 +#define PCF50633_REG_RTCHR 0x5b /* Hour */
147873 +#define PCF50633_REG_RTCWD 0x5c /* Weekday */
147874 +#define PCF50633_REG_RTCDT 0x5d /* Day */
147875 +#define PCF50633_REG_RTCMT 0x5e /* Month */
147876 +#define PCF50633_REG_RTCYR 0x5f /* Year */
147877 +#define PCF50633_REG_RTCSCA 0x60 /* Alarm Second */
147878 +#define PCF50633_REG_RTCMNA 0x61 /* Alarm Minute */
147879 +#define PCF50633_REG_RTCHRA 0x62 /* Alarm Hour */
147880 +#define PCF50633_REG_RTCWDA 0x63 /* Alarm Weekday */
147881 +#define PCF50633_REG_RTCDTA 0x64 /* Alarm Day */
147882 +#define PCF50633_REG_RTCMTA 0x65 /* Alarm Month */
147883 +#define PCF50633_REG_RTCYRA 0x66 /* Alarm Year */
147884 +
147885 +struct pcf50633_rtc {
147886 + int alarm_enabled;
147887 + int second_enabled;
147888 +
147889 + struct rtc_device *rtc_dev;
147890 + struct platform_device *pdev;
147891 +};
147892 +
147893 +#endif
147894 +
147895 Index: linux-2.6.28/include/linux/mmc/core.h
147896 ===================================================================
147897 --- linux-2.6.28.orig/include/linux/mmc/core.h 2008-12-25 00:26:37.000000000 +0100
147898 +++ linux-2.6.28/include/linux/mmc/core.h 2009-01-02 00:01:57.000000000 +0100
147899 @@ -129,6 +129,8 @@ struct mmc_request {
147900 struct mmc_host;
147901 struct mmc_card;
147902
147903 +extern void mmc_flush_scheduled_work(void);
147904 +
147905 extern void mmc_wait_for_req(struct mmc_host *, struct mmc_request *);
147906 extern int mmc_wait_for_cmd(struct mmc_host *, struct mmc_command *, int);
147907 extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
147908 Index: linux-2.6.28/include/linux/mmc/sdio_ids.h
147909 ===================================================================
147910 --- linux-2.6.28.orig/include/linux/mmc/sdio_ids.h 2008-12-25 00:26:37.000000000 +0100
147911 +++ linux-2.6.28/include/linux/mmc/sdio_ids.h 2009-01-02 00:01:57.000000000 +0100
147912 @@ -25,5 +25,8 @@
147913
147914 #define SDIO_VENDOR_ID_MARVELL 0x02df
147915 #define SDIO_DEVICE_ID_MARVELL_LIBERTAS 0x9103
147916 +#define SDIO_DEVICE_ID_MARVELL_88W8688 0x9104
147917 +#define SDIO_VENDOR_ID_ATHEROS 0x0271
147918 +#define SDIO_DEVICE_ID_ATHEROS_AR6000 0x0100
147919
147920 #endif
147921 Index: linux-2.6.28/include/linux/mm.h
147922 ===================================================================
147923 --- linux-2.6.28.orig/include/linux/mm.h 2008-12-25 00:26:37.000000000 +0100
147924 +++ linux-2.6.28/include/linux/mm.h 2009-01-02 00:01:57.000000000 +0100
147925 @@ -714,7 +714,7 @@ static inline int shmem_lock(struct file
147926 }
147927 #endif
147928 struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags);
147929 -
147930 +void shmem_set_file(struct vm_area_struct *, struct file *);
147931 int shmem_zero_setup(struct vm_area_struct *);
147932
147933 #ifndef CONFIG_MMU
147934 Index: linux-2.6.28/include/linux/pcf50606.h
147935 ===================================================================
147936 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
147937 +++ linux-2.6.28/include/linux/pcf50606.h 2009-01-02 00:01:57.000000000 +0100
147938 @@ -0,0 +1,91 @@
147939 +#ifndef _LINUX_PCF50606_H
147940 +#define _LINUX_PCF50606_H
147941 +
147942 +#include <linux/pcf506xx.h>
147943 +
147944 +
147945 +/* public in-kernel pcf50606 api */
147946 +enum pcf50606_regulator_id {
147947 + PCF50606_REGULATOR_DCD,
147948 + PCF50606_REGULATOR_DCDE,
147949 + PCF50606_REGULATOR_DCUD,
147950 + PCF50606_REGULATOR_D1REG,
147951 + PCF50606_REGULATOR_D2REG,
147952 + PCF50606_REGULATOR_D3REG,
147953 + PCF50606_REGULATOR_LPREG,
147954 + PCF50606_REGULATOR_IOREG,
147955 + __NUM_PCF50606_REGULATORS
147956 +};
147957 +
147958 +struct pcf50606_data;
147959 +
147960 +/* This is an ugly construct on how to access the (currently single/global)
147961 + * pcf50606 handle from other code in the kernel. I didn't really come up with
147962 + * a more decent method of dynamically resolving this */
147963 +extern struct pcf50606_data *pcf50606_global;
147964 +
147965 +extern void
147966 +pcf50606_go_standby(void);
147967 +
147968 +extern void
147969 +pcf50606_gpo0_set(struct pcf50606_data *pcf, int on);
147970 +
147971 +extern int
147972 +pcf50606_gpo0_get(struct pcf50606_data *pcf);
147973 +
147974 +extern int
147975 +pcf50606_voltage_set(struct pcf50606_data *pcf,
147976 + enum pcf50606_regulator_id reg,
147977 + unsigned int millivolts);
147978 +extern unsigned int
147979 +pcf50606_voltage_get(struct pcf50606_data *pcf,
147980 + enum pcf50606_regulator_id reg);
147981 +extern int
147982 +pcf50606_onoff_get(struct pcf50606_data *pcf,
147983 + enum pcf50606_regulator_id reg);
147984 +
147985 +extern int
147986 +pcf50606_onoff_set(struct pcf50606_data *pcf,
147987 + enum pcf50606_regulator_id reg, int on);
147988 +
147989 +extern void
147990 +pcf50606_charge_fast(struct pcf50606_data *pcf, int on);
147991 +
147992 +
147993 +#define PCF50606_FEAT_EXTON 0x00000001 /* not yet supported */
147994 +#define PCF50606_FEAT_MBC 0x00000002
147995 +#define PCF50606_FEAT_BBC 0x00000004 /* not yet supported */
147996 +#define PCF50606_FEAT_TSC 0x00000008 /* not yet supported */
147997 +#define PCF50606_FEAT_WDT 0x00000010
147998 +#define PCF50606_FEAT_ACD 0x00000020
147999 +#define PCF50606_FEAT_RTC 0x00000040
148000 +#define PCF50606_FEAT_PWM 0x00000080
148001 +#define PCF50606_FEAT_CHGCUR 0x00000100
148002 +#define PCF50606_FEAT_BATVOLT 0x00000200
148003 +#define PCF50606_FEAT_BATTEMP 0x00000400
148004 +#define PCF50606_FEAT_PWM_BL 0x00000800
148005 +
148006 +struct pcf50606_platform_data {
148007 + /* general */
148008 + unsigned int used_features;
148009 + unsigned int onkey_seconds_required;
148010 +
148011 + /* voltage regulator related */
148012 + struct pmu_voltage_rail rails[__NUM_PCF50606_REGULATORS];
148013 + unsigned int used_regulators;
148014 +
148015 + /* charger related */
148016 + unsigned int r_fix_batt;
148017 + unsigned int r_fix_batt_par;
148018 + unsigned int r_sense_milli;
148019 +
148020 + /* backlight related */
148021 + unsigned int init_brightness;
148022 +
148023 + struct {
148024 + u_int8_t mbcc3; /* charger voltage / current */
148025 + } charger;
148026 + pmu_cb cb;
148027 +};
148028 +
148029 +#endif
148030 Index: linux-2.6.28/include/linux/pcf50633.h
148031 ===================================================================
148032 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
148033 +++ linux-2.6.28/include/linux/pcf50633.h 2009-01-02 00:01:57.000000000 +0100
148034 @@ -0,0 +1,618 @@
148035 +#ifndef _LINUX_PCF50633_H
148036 +#define _LINUX_PCF50633_H
148037 +
148038 +#include <linux/pcf506xx.h>
148039 +#include <linux/regulator/machine.h>
148040 +
148041 +#define PCF50633_FIDX_CHG_ENABLED 0 /* Charger enabled */
148042 +#define PCF50633_FIDX_CHG_PRESENT 1 /* Charger present */
148043 +#define PCF50633_FIDX_CHG_ERR 3 /* Charger Error */
148044 +#define PCF50633_FIDX_CHG_PROT 4 /* Charger Protection */
148045 +#define PCF50633_FIDX_CHG_READY 5 /* Charging completed */
148046 +#define PCF50633_FIDX_PWR_PRESSED 8
148047 +#define PCF50633_FIDX_RTC_SECOND 9
148048 +#define PCF50633_FIDX_USB_PRESENT 10
148049 +
148050 +#define PCF50633_F_CHG_ENABLED (1 << PCF50633_FIDX_CHG_ENABLED)
148051 +#define PCF50633_F_CHG_PRESENT (1 << PCF50633_FIDX_CHG_PRESENT)
148052 +#define PCF50633_F_CHG_ERR (1 << PCF50633_FIDX_CHG_ERR)
148053 +#define PCF50633_F_CHG_PROT (1 << PCF50633_FIDX_CHG_PROT)
148054 +#define PCF50633_F_CHG_READY (1 << PCF50633_FIDX_CHG_READY)
148055 +
148056 +#define PCF50633_F_CHG_MASK 0x000000fc
148057 +
148058 +#define PCF50633_F_PWR_PRESSED (1 << PCF50633_FIDX_PWR_PRESSED)
148059 +
148060 +#define PCF50633_F_RTC_SECOND (1 << PCF50633_FIDX_RTC_SECOND)
148061 +#define PCF50633_F_USB_PRESENT (1 << PCF50633_FIDX_USB_PRESENT)
148062 +
148063 +/* public in-kernel pcf50633 api */
148064 +enum pcf50633_regulator_id {
148065 + PCF50633_REGULATOR_AUTO,
148066 + PCF50633_REGULATOR_DOWN1,
148067 + PCF50633_REGULATOR_DOWN2,
148068 + PCF50633_REGULATOR_LDO1,
148069 + PCF50633_REGULATOR_LDO2,
148070 + PCF50633_REGULATOR_LDO3,
148071 + PCF50633_REGULATOR_LDO4,
148072 + PCF50633_REGULATOR_LDO5,
148073 + PCF50633_REGULATOR_LDO6,
148074 + PCF50633_REGULATOR_HCLDO,
148075 + PCF50633_REGULATOR_MEMLDO,
148076 + __NUM_PCF50633_REGULATORS
148077 +};
148078 +
148079 +enum pcf50633_reg_int1 {
148080 + PCF50633_INT1_ADPINS = 0x01, /* Adapter inserted */
148081 + PCF50633_INT1_ADPREM = 0x02, /* Adapter removed */
148082 + PCF50633_INT1_USBINS = 0x04, /* USB inserted */
148083 + PCF50633_INT1_USBREM = 0x08, /* USB removed */
148084 + /* reserved */
148085 + PCF50633_INT1_ALARM = 0x40, /* RTC alarm time is reached */
148086 + PCF50633_INT1_SECOND = 0x80, /* RTC periodic second interrupt */
148087 +};
148088 +
148089 +enum pcf50633_reg_int2 {
148090 + PCF50633_INT2_ONKEYR = 0x01, /* ONKEY rising edge */
148091 + PCF50633_INT2_ONKEYF = 0x02, /* ONKEY falling edge */
148092 + PCF50633_INT2_EXTON1R = 0x04, /* EXTON1 rising edge */
148093 + PCF50633_INT2_EXTON1F = 0x08, /* EXTON1 falling edge */
148094 + PCF50633_INT2_EXTON2R = 0x10, /* EXTON2 rising edge */
148095 + PCF50633_INT2_EXTON2F = 0x20, /* EXTON2 falling edge */
148096 + PCF50633_INT2_EXTON3R = 0x40, /* EXTON3 rising edge */
148097 + PCF50633_INT2_EXTON3F = 0x80, /* EXTON3 falling edge */
148098 +};
148099 +
148100 +enum pcf50633_reg_int3 {
148101 + PCF50633_INT3_BATFULL = 0x01, /* Battery full */
148102 + PCF50633_INT3_CHGHALT = 0x02, /* Charger halt */
148103 + PCF50633_INT3_THLIMON = 0x04,
148104 + PCF50633_INT3_THLIMOFF = 0x08,
148105 + PCF50633_INT3_USBLIMON = 0x10,
148106 + PCF50633_INT3_USBLIMOFF = 0x20,
148107 + PCF50633_INT3_ADCRDY = 0x40, /* ADC conversion finished */
148108 + PCF50633_INT3_ONKEY1S = 0x80, /* ONKEY pressed 1 second */
148109 +};
148110 +
148111 +enum pcf50633_reg_int4 {
148112 + PCF50633_INT4_LOWSYS = 0x01,
148113 + PCF50633_INT4_LOWBAT = 0x02,
148114 + PCF50633_INT4_HIGHTMP = 0x04,
148115 + PCF50633_INT4_AUTOPWRFAIL = 0x08,
148116 + PCF50633_INT4_DWN1PWRFAIL = 0x10,
148117 + PCF50633_INT4_DWN2PWRFAIL = 0x20,
148118 + PCF50633_INT4_LEDPWRFAIL = 0x40,
148119 + PCF50633_INT4_LEDOVP = 0x80,
148120 +};
148121 +
148122 +enum pcf50633_reg_int5 {
148123 + PCF50633_INT5_LDO1PWRFAIL = 0x01,
148124 + PCF50633_INT5_LDO2PWRFAIL = 0x02,
148125 + PCF50633_INT5_LDO3PWRFAIL = 0x04,
148126 + PCF50633_INT5_LDO4PWRFAIL = 0x08,
148127 + PCF50633_INT5_LDO5PWRFAIL = 0x10,
148128 + PCF50633_INT5_LDO6PWRFAIL = 0x20,
148129 + PCF50633_INT5_HCLDOPWRFAIL = 0x40,
148130 + PCF50633_INT5_HCLDOOVL = 0x80,
148131 +};
148132 +
148133 +struct pcf50633_data;
148134 +
148135 +extern void
148136 +pcf50633_go_standby(struct pcf50633_data *pcf);
148137 +
148138 +enum pcf50633_gpio {
148139 + PCF50633_GPIO1 = 1,
148140 + PCF50633_GPIO2 = 2,
148141 + PCF50633_GPIO3 = 3,
148142 + PCF50633_GPO = 4,
148143 +};
148144 +
148145 +extern void
148146 +pcf50633_gpio_set(struct pcf50633_data *pcf, enum pcf50633_gpio gpio, int on);
148147 +
148148 +extern int
148149 +pcf50633_gpio_get(struct pcf50633_data *pcf, enum pcf50633_gpio gpio);
148150 +
148151 +extern int
148152 +pcf50633_adc_async_read(struct pcf50633_data *pcf, int mux, int avg,
148153 + void (*callback)(struct pcf50633_data *, void *, int),
148154 + void *callback_param);
148155 +
148156 +extern int
148157 +pcf50633_adc_sync_read(struct pcf50633_data *pcf, int mux, int avg);
148158 +
148159 +extern void
148160 +pcf50633_backlight_resume(struct pcf50633_data *pcf);
148161 +
148162 +extern u_int16_t
148163 +pcf50633_battvolt(struct pcf50633_data *pcf);
148164 +
148165 +extern int
148166 +pcf50633_report_resumers(struct pcf50633_data *pcf, char *buf);
148167 +
148168 +extern int
148169 +pcf50633_notify_usb_current_limit_change(struct pcf50633_data *pcf,
148170 + unsigned int ma);
148171 +extern int
148172 +pcf50633_wait_for_ready(struct pcf50633_data *pcf, int timeout_ms,
148173 + char *name);
148174 +
148175 +/* 0 = initialized and resumed and ready to roll, !=0 = either not
148176 + * initialized or not resumed yet
148177 + */
148178 +extern int
148179 +pcf50633_ready(struct pcf50633_data *pcf);
148180 +
148181 +#define PCF50633_FEAT_EXTON 0x00000001 /* not yet supported */
148182 +#define PCF50633_FEAT_MBC 0x00000002
148183 +#define PCF50633_FEAT_BBC 0x00000004 /* not yet supported */
148184 +#define PCF50633_FEAT_RTC 0x00000040
148185 +#define PCF50633_FEAT_CHGCUR 0x00000100
148186 +#define PCF50633_FEAT_BATVOLT 0x00000200
148187 +#define PCF50633_FEAT_BATTEMP 0x00000400
148188 +#define PCF50633_FEAT_PWM_BL 0x00000800
148189 +
148190 +enum charger_type {
148191 + CHARGER_TYPE_NONE = 0,
148192 + CHARGER_TYPE_HOSTUSB,
148193 + CHARGER_TYPE_1A
148194 +};
148195 +
148196 +#define ADC_NOM_CHG_DETECT_1A 6
148197 +#define ADC_NOM_CHG_DETECT_NONE 43
148198 +
148199 +#define MAX_ADC_FIFO_DEPTH 8
148200 +
148201 +enum pcf50633_suspend_states {
148202 + PCF50633_SS_RUNNING,
148203 + PCF50633_SS_STARTING_SUSPEND,
148204 + PCF50633_SS_COMPLETED_SUSPEND,
148205 + PCF50633_SS_RESUMING_BUT_NOT_US_YET,
148206 + PCF50633_SS_STARTING_RESUME,
148207 + PCF50633_SS_COMPLETED_RESUME,
148208 +};
148209 +
148210 +struct pcf50633_data;
148211 +
148212 +struct pcf50633_platform_data {
148213 + /* general */
148214 + unsigned int used_features;
148215 + unsigned int onkey_seconds_sig_init;
148216 + unsigned int onkey_seconds_shutdown;
148217 +
148218 + /* callback to attach platform children (to enforce suspend / resume
148219 + * ordering */
148220 + void (*attach_child_devices)(struct device *parent_device);
148221 +
148222 + /* charger related */
148223 + unsigned int r_fix_batt;
148224 + unsigned int r_fix_batt_par;
148225 + unsigned int r_sense_milli;
148226 + int flag_use_apm_emulation;
148227 +
148228 + unsigned char resumers[5];
148229 +
148230 + struct {
148231 + u_int8_t mbcc3; /* charger voltage / current */
148232 + } charger;
148233 + pmu_cb cb;
148234 +
148235 + struct regulator_init_data reg_init_data[__NUM_PCF50633_REGULATORS];
148236 +
148237 + /* Called when a regulator has been registered */
148238 + void (*regulator_registered)(struct pcf50633_data *pcf, int id);
148239 +
148240 + /* Runtime data */
148241 + struct pcf50633_data *pcf;
148242 +};
148243 +
148244 +enum pfc50633_regs {
148245 + PCF50633_REG_VERSION = 0x00,
148246 + PCF50633_REG_VARIANT = 0x01,
148247 + PCF50633_REG_INT1 = 0x02, /* Interrupt Status */
148248 + PCF50633_REG_INT2 = 0x03, /* Interrupt Status */
148249 + PCF50633_REG_INT3 = 0x04, /* Interrupt Status */
148250 + PCF50633_REG_INT4 = 0x05, /* Interrupt Status */
148251 + PCF50633_REG_INT5 = 0x06, /* Interrupt Status */
148252 + PCF50633_REG_INT1M = 0x07, /* Interrupt Mask */
148253 + PCF50633_REG_INT2M = 0x08, /* Interrupt Mask */
148254 + PCF50633_REG_INT3M = 0x09, /* Interrupt Mask */
148255 + PCF50633_REG_INT4M = 0x0a, /* Interrupt Mask */
148256 + PCF50633_REG_INT5M = 0x0b, /* Interrupt Mask */
148257 + PCF50633_REG_OOCSHDWN = 0x0c,
148258 + PCF50633_REG_OOCWAKE = 0x0d,
148259 + PCF50633_REG_OOCTIM1 = 0x0e,
148260 + PCF50633_REG_OOCTIM2 = 0x0f,
148261 + PCF50633_REG_OOCMODE = 0x10,
148262 + PCF50633_REG_OOCCTL = 0x11,
148263 + PCF50633_REG_OOCSTAT = 0x12,
148264 + PCF50633_REG_GPIOCTL = 0x13,
148265 + PCF50633_REG_GPIO1CFG = 0x14,
148266 + PCF50633_REG_GPIO2CFG = 0x15,
148267 + PCF50633_REG_GPIO3CFG = 0x16,
148268 + PCF50633_REG_GPOCFG = 0x17,
148269 + PCF50633_REG_BVMCTL = 0x18,
148270 + PCF50633_REG_SVMCTL = 0x19,
148271 + PCF50633_REG_AUTOOUT = 0x1a,
148272 + PCF50633_REG_AUTOENA = 0x1b,
148273 + PCF50633_REG_AUTOCTL = 0x1c,
148274 + PCF50633_REG_AUTOMXC = 0x1d,
148275 + PCF50633_REG_DOWN1OUT = 0x1e,
148276 + PCF50633_REG_DOWN1ENA = 0x1f,
148277 + PCF50633_REG_DOWN1CTL = 0x20,
148278 + PCF50633_REG_DOWN1MXC = 0x21,
148279 + PCF50633_REG_DOWN2OUT = 0x22,
148280 + PCF50633_REG_DOWN2ENA = 0x23,
148281 + PCF50633_REG_DOWN2CTL = 0x24,
148282 + PCF50633_REG_DOWN2MXC = 0x25,
148283 + PCF50633_REG_MEMLDOOUT = 0x26,
148284 + PCF50633_REG_MEMLDOENA = 0x27,
148285 + PCF50633_REG_LEDOUT = 0x28,
148286 + PCF50633_REG_LEDENA = 0x29,
148287 + PCF50633_REG_LEDCTL = 0x2a,
148288 + PCF50633_REG_LEDDIM = 0x2b,
148289 + /* reserved */
148290 + PCF50633_REG_LDO1OUT = 0x2d,
148291 + PCF50633_REG_LDO1ENA = 0x2e,
148292 + PCF50633_REG_LDO2OUT = 0x2f,
148293 + PCF50633_REG_LDO2ENA = 0x30,
148294 + PCF50633_REG_LDO3OUT = 0x31,
148295 + PCF50633_REG_LDO3ENA = 0x32,
148296 + PCF50633_REG_LDO4OUT = 0x33,
148297 + PCF50633_REG_LDO4ENA = 0x34,
148298 + PCF50633_REG_LDO5OUT = 0x35,
148299 + PCF50633_REG_LDO5ENA = 0x36,
148300 + PCF50633_REG_LDO6OUT = 0x37,
148301 + PCF50633_REG_LDO6ENA = 0x38,
148302 + PCF50633_REG_HCLDOOUT = 0x39,
148303 + PCF50633_REG_HCLDOENA = 0x3a,
148304 + PCF50633_REG_STBYCTL1 = 0x3b,
148305 + PCF50633_REG_STBYCTL2 = 0x3c,
148306 + PCF50633_REG_DEBPF1 = 0x3d,
148307 + PCF50633_REG_DEBPF2 = 0x3e,
148308 + PCF50633_REG_DEBPF3 = 0x3f,
148309 + PCF50633_REG_HCLDOOVL = 0x40,
148310 + PCF50633_REG_DCDCSTAT = 0x41,
148311 + PCF50633_REG_LDOSTAT = 0x42,
148312 + PCF50633_REG_MBCC1 = 0x43,
148313 + PCF50633_REG_MBCC2 = 0x44,
148314 + PCF50633_REG_MBCC3 = 0x45,
148315 + PCF50633_REG_MBCC4 = 0x46,
148316 + PCF50633_REG_MBCC5 = 0x47,
148317 + PCF50633_REG_MBCC6 = 0x48,
148318 + PCF50633_REG_MBCC7 = 0x49,
148319 + PCF50633_REG_MBCC8 = 0x4a,
148320 + PCF50633_REG_MBCS1 = 0x4b,
148321 + PCF50633_REG_MBCS2 = 0x4c,
148322 + PCF50633_REG_MBCS3 = 0x4d,
148323 + PCF50633_REG_BBCCTL = 0x4e,
148324 + PCF50633_REG_ALMGAIN = 0x4f,
148325 + PCF50633_REG_ALMDATA = 0x50,
148326 + /* reserved */
148327 + PCF50633_REG_ADCC3 = 0x52,
148328 + PCF50633_REG_ADCC2 = 0x53,
148329 + PCF50633_REG_ADCC1 = 0x54,
148330 + PCF50633_REG_ADCS1 = 0x55,
148331 + PCF50633_REG_ADCS2 = 0x56,
148332 + PCF50633_REG_ADCS3 = 0x57,
148333 + /* reserved */
148334 + PCF50633_REG_RTCSC = 0x59, /* Second */
148335 + PCF50633_REG_RTCMN = 0x5a, /* Minute */
148336 + PCF50633_REG_RTCHR = 0x5b, /* Hour */
148337 + PCF50633_REG_RTCWD = 0x5c, /* Weekday */
148338 + PCF50633_REG_RTCDT = 0x5d, /* Day */
148339 + PCF50633_REG_RTCMT = 0x5e, /* Month */
148340 + PCF50633_REG_RTCYR = 0x5f, /* Year */
148341 + PCF50633_REG_RTCSCA = 0x60, /* Alarm Second */
148342 + PCF50633_REG_RTCMNA = 0x61, /* Alarm Minute */
148343 + PCF50633_REG_RTCHRA = 0x62, /* Alarm Hour */
148344 + PCF50633_REG_RTCWDA = 0x63, /* Alarm Weekday */
148345 + PCF50633_REG_RTCDTA = 0x64, /* Alarm Day */
148346 + PCF50633_REG_RTCMTA = 0x65, /* Alarm Month */
148347 + PCF50633_REG_RTCYRA = 0x66, /* Alarm Year */
148348 +
148349 + PCF50633_REG_MEMBYTE0 = 0x67,
148350 + PCF50633_REG_MEMBYTE1 = 0x68,
148351 + PCF50633_REG_MEMBYTE2 = 0x69,
148352 + PCF50633_REG_MEMBYTE3 = 0x6a,
148353 + PCF50633_REG_MEMBYTE4 = 0x6b,
148354 + PCF50633_REG_MEMBYTE5 = 0x6c,
148355 + PCF50633_REG_MEMBYTE6 = 0x6d,
148356 + PCF50633_REG_MEMBYTE7 = 0x6e,
148357 + /* reserved */
148358 + PCF50633_REG_DCDCPFM = 0x84,
148359 + __NUM_PCF50633_REGS
148360 +};
148361 +
148362 +
148363 +enum pcf50633_reg_oocshdwn {
148364 + PCF50633_OOCSHDWN_GOSTDBY = 0x01,
148365 + PCF50633_OOCSHDWN_TOTRST = 0x04,
148366 + PCF50633_OOCSHDWN_COLDBOOT = 0x08,
148367 +};
148368 +
148369 +enum pcf50633_reg_oocwake {
148370 + PCF50633_OOCWAKE_ONKEY = 0x01,
148371 + PCF50633_OOCWAKE_EXTON1 = 0x02,
148372 + PCF50633_OOCWAKE_EXTON2 = 0x04,
148373 + PCF50633_OOCWAKE_EXTON3 = 0x08,
148374 + PCF50633_OOCWAKE_RTC = 0x10,
148375 + /* reserved */
148376 + PCF50633_OOCWAKE_USB = 0x40,
148377 + PCF50633_OOCWAKE_ADP = 0x80,
148378 +};
148379 +
148380 +enum pcf50633_reg_mbcc1 {
148381 + PCF50633_MBCC1_CHGENA = 0x01, /* Charger enable */
148382 + PCF50633_MBCC1_AUTOSTOP = 0x02,
148383 + PCF50633_MBCC1_AUTORES = 0x04, /* automatic resume */
148384 + PCF50633_MBCC1_RESUME = 0x08, /* explicit resume cmd */
148385 + PCF50633_MBCC1_RESTART = 0x10, /* restart charging */
148386 + PCF50633_MBCC1_PREWDTIME_60M = 0x20, /* max. precharging time */
148387 + PCF50633_MBCC1_WDTIME_1H = 0x00,
148388 + PCF50633_MBCC1_WDTIME_2H = 0x40,
148389 + PCF50633_MBCC1_WDTIME_4H = 0x80,
148390 + PCF50633_MBCC1_WDTIME_6H = 0xc0,
148391 +};
148392 +#define PCF50633_MBCC1_WDTIME_MASK 0xc0
148393 +
148394 +enum pcf50633_reg_mbcc2 {
148395 + PCF50633_MBCC2_VBATCOND_2V7 = 0x00,
148396 + PCF50633_MBCC2_VBATCOND_2V85 = 0x01,
148397 + PCF50633_MBCC2_VBATCOND_3V0 = 0x02,
148398 + PCF50633_MBCC2_VBATCOND_3V15 = 0x03,
148399 + PCF50633_MBCC2_VMAX_4V = 0x00,
148400 + PCF50633_MBCC2_VMAX_4V20 = 0x28,
148401 + PCF50633_MBCC2_VRESDEBTIME_64S = 0x80, /* debounce time (32/64sec) */
148402 +};
148403 +#define PCF50633_MBCC2_VBATCOND_MASK 0x03
148404 +#define PCF50633_MBCC2_VMAX_MASK 0x3c
148405 +
148406 +enum pcf50633_reg_adcc1 {
148407 + PCF50633_ADCC1_ADCSTART = 0x01,
148408 + PCF50633_ADCC1_RES_10BIT = 0x02,
148409 + PCF50633_ADCC1_AVERAGE_NO = 0x00,
148410 + PCF50633_ADCC1_AVERAGE_4 = 0x04,
148411 + PCF50633_ADCC1_AVERAGE_8 = 0x08,
148412 + PCF50633_ADCC1_AVERAGE_16 = 0x0c,
148413 +
148414 + PCF50633_ADCC1_MUX_BATSNS_RES = 0x00,
148415 + PCF50633_ADCC1_MUX_BATSNS_SUBTR = 0x10,
148416 + PCF50633_ADCC1_MUX_ADCIN2_RES = 0x20,
148417 + PCF50633_ADCC1_MUX_ADCIN2_SUBTR = 0x30,
148418 + PCF50633_ADCC1_MUX_BATTEMP = 0x60,
148419 + PCF50633_ADCC1_MUX_ADCIN1 = 0x70,
148420 +};
148421 +#define PCF50633_ADCC1_AVERAGE_MASK 0x0c
148422 +#define PCF50633_ADCC1_ADCMUX_MASK 0xf0
148423 +
148424 +enum pcf50633_reg_adcc2 {
148425 + PCF50633_ADCC2_RATIO_NONE = 0x00,
148426 + PCF50633_ADCC2_RATIO_BATTEMP = 0x01,
148427 + PCF50633_ADCC2_RATIO_ADCIN1 = 0x02,
148428 + PCF50633_ADCC2_RATIO_BOTH = 0x03,
148429 + PCF50633_ADCC2_RATIOSETTL_100US = 0x04,
148430 +};
148431 +#define PCF50633_ADCC2_RATIO_MASK 0x03
148432 +
148433 +enum pcf50633_reg_adcc3 {
148434 + PCF50633_ADCC3_ACCSW_EN = 0x01,
148435 + PCF50633_ADCC3_NTCSW_EN = 0x04,
148436 + PCF50633_ADCC3_RES_DIV_TWO = 0x10,
148437 + PCF50633_ADCC3_RES_DIV_THREE = 0x00,
148438 +};
148439 +
148440 +enum pcf50633_reg_adcs3 {
148441 + PCF50633_ADCS3_REF_NTCSW = 0x00,
148442 + PCF50633_ADCS3_REF_ACCSW = 0x10,
148443 + PCF50633_ADCS3_REF_2V0 = 0x20,
148444 + PCF50633_ADCS3_REF_VISA = 0x30,
148445 + PCF50633_ADCS3_REF_2V0_2 = 0x70,
148446 + PCF50633_ADCS3_ADCRDY = 0x80,
148447 +};
148448 +#define PCF50633_ADCS3_ADCDAT1L_MASK 0x03
148449 +#define PCF50633_ADCS3_ADCDAT2L_MASK 0x0c
148450 +#define PCF50633_ADCS3_ADCDAT2L_SHIFT 2
148451 +#define PCF50633_ASCS3_REF_MASK 0x70
148452 +
148453 +enum pcf50633_regulator_enable {
148454 + PCF50633_REGULATOR_ON = 0x01,
148455 + PCF50633_REGULATOR_ON_GPIO1 = 0x02,
148456 + PCF50633_REGULATOR_ON_GPIO2 = 0x04,
148457 + PCF50633_REGULATOR_ON_GPIO3 = 0x08,
148458 +};
148459 +#define PCF50633_REGULATOR_ON_MASK 0x0f
148460 +
148461 +enum pcf50633_regulator_phase {
148462 + PCF50633_REGULATOR_ACTPH1 = 0x00,
148463 + PCF50633_REGULATOR_ACTPH2 = 0x10,
148464 + PCF50633_REGULATOR_ACTPH3 = 0x20,
148465 + PCF50633_REGULATOR_ACTPH4 = 0x30,
148466 +};
148467 +#define PCF50633_REGULATOR_ACTPH_MASK 0x30
148468 +
148469 +enum pcf50633_reg_gpocfg {
148470 + PCF50633_GPOCFG_GPOSEL_0 = 0x00,
148471 + PCF50633_GPOCFG_GPOSEL_LED_NFET = 0x01,
148472 + PCF50633_GPOCFG_GPOSEL_SYSxOK = 0x02,
148473 + PCF50633_GPOCFG_GPOSEL_CLK32K = 0x03,
148474 + PCF50633_GPOCFG_GPOSEL_ADAPUSB = 0x04,
148475 + PCF50633_GPOCFG_GPOSEL_USBxOK = 0x05,
148476 + PCF50633_GPOCFG_GPOSEL_ACTPH4 = 0x06,
148477 + PCF50633_GPOCFG_GPOSEL_1 = 0x07,
148478 + PCF50633_GPOCFG_GPOSEL_INVERSE = 0x08,
148479 +};
148480 +#define PCF50633_GPOCFG_GPOSEL_MASK 0x07
148481 +
148482 +#if 0
148483 +enum pcf50633_reg_mbcc1 {
148484 + PCF50633_MBCC1_CHGENA = 0x01,
148485 + PCF50633_MBCC1_AUTOSTOP = 0x02,
148486 + PCF50633_MBCC1_AUTORES = 0x04,
148487 + PCF50633_MBCC1_RESUME = 0x08,
148488 + PCF50633_MBCC1_RESTART = 0x10,
148489 + PCF50633_MBCC1_PREWDTIME_30MIN = 0x00,
148490 + PCF50633_MBCC1_PREWDTIME_60MIN = 0x20,
148491 + PCF50633_MBCC1_WDTIME_2HRS = 0x40,
148492 + PCF50633_MBCC1_WDTIME_4HRS = 0x80,
148493 + PCF50633_MBCC1_WDTIME_6HRS = 0xc0,
148494 +};
148495 +
148496 +enum pcf50633_reg_mbcc2 {
148497 + PCF50633_MBCC2_VBATCOND_2V7 = 0x00,
148498 + PCF50633_MBCC2_VBATCOND_2V85 = 0x01,
148499 + PCF50633_MBCC2_VBATCOND_3V0 = 0x02,
148500 + PCF50633_MBCC2_VBATCOND_3V15 = 0x03,
148501 + PCF50633_MBCC2_VRESDEBTIME_64S = 0x80,
148502 +};
148503 +#define PCF50633_MBCC2_VMAX_MASK 0x3c
148504 +#endif
148505 +
148506 +enum pcf50633_reg_mbcc7 {
148507 + PCF50633_MBCC7_USB_100mA = 0x00,
148508 + PCF50633_MBCC7_USB_500mA = 0x01,
148509 + PCF50633_MBCC7_USB_1000mA = 0x02,
148510 + PCF50633_MBCC7_USB_SUSPEND = 0x03,
148511 + PCF50633_MBCC7_BATTEMP_EN = 0x04,
148512 + PCF50633_MBCC7_BATSYSIMAX_1A6 = 0x00,
148513 + PCF50633_MBCC7_BATSYSIMAX_1A8 = 0x40,
148514 + PCF50633_MBCC7_BATSYSIMAX_2A0 = 0x80,
148515 + PCF50633_MBCC7_BATSYSIMAX_2A2 = 0xc0,
148516 +};
148517 +#define PCF56033_MBCC7_USB_MASK 0x03
148518 +
148519 +enum pcf50633_reg_mbcc8 {
148520 + PCF50633_MBCC8_USBENASUS = 0x10,
148521 +};
148522 +
148523 +enum pcf50633_reg_mbcs1 {
148524 + PCF50633_MBCS1_USBPRES = 0x01,
148525 + PCF50633_MBCS1_USBOK = 0x02,
148526 + PCF50633_MBCS1_ADAPTPRES = 0x04,
148527 + PCF50633_MBCS1_ADAPTOK = 0x08,
148528 + PCF50633_MBCS1_TBAT_OK = 0x00,
148529 + PCF50633_MBCS1_TBAT_ABOVE = 0x10,
148530 + PCF50633_MBCS1_TBAT_BELOW = 0x20,
148531 + PCF50633_MBCS1_TBAT_UNDEF = 0x30,
148532 + PCF50633_MBCS1_PREWDTEXP = 0x40,
148533 + PCF50633_MBCS1_WDTEXP = 0x80,
148534 +};
148535 +
148536 +enum pcf50633_reg_mbcs2_mbcmod {
148537 + PCF50633_MBCS2_MBC_PLAY = 0x00,
148538 + PCF50633_MBCS2_MBC_USB_PRE = 0x01,
148539 + PCF50633_MBCS2_MBC_USB_PRE_WAIT = 0x02,
148540 + PCF50633_MBCS2_MBC_USB_FAST = 0x03,
148541 + PCF50633_MBCS2_MBC_USB_FAST_WAIT= 0x04,
148542 + PCF50633_MBCS2_MBC_USB_SUSPEND = 0x05,
148543 + PCF50633_MBCS2_MBC_ADP_PRE = 0x06,
148544 + PCF50633_MBCS2_MBC_ADP_PRE_WAIT = 0x07,
148545 + PCF50633_MBCS2_MBC_ADP_FAST = 0x08,
148546 + PCF50633_MBCS2_MBC_ADP_FAST_WAIT= 0x09,
148547 + PCF50633_MBCS2_MBC_BAT_FULL = 0x0a,
148548 + PCF50633_MBCS2_MBC_HALT = 0x0b,
148549 +};
148550 +#define PCF50633_MBCS2_MBC_MASK 0x0f
148551 +enum pcf50633_reg_mbcs2_chgstat {
148552 + PCF50633_MBCS2_CHGS_NONE = 0x00,
148553 + PCF50633_MBCS2_CHGS_ADAPTER = 0x10,
148554 + PCF50633_MBCS2_CHGS_USB = 0x20,
148555 + PCF50633_MBCS2_CHGS_BOTH = 0x30,
148556 +};
148557 +#define PCF50633_MBCS2_RESSTAT_AUTO 0x40
148558 +
148559 +enum pcf50633_reg_mbcs3 {
148560 + PCF50633_MBCS3_USBLIM_PLAY = 0x01,
148561 + PCF50633_MBCS3_USBLIM_CGH = 0x02,
148562 + PCF50633_MBCS3_TLIM_PLAY = 0x04,
148563 + PCF50633_MBCS3_TLIM_CHG = 0x08,
148564 + PCF50633_MBCS3_ILIM = 0x10, /* 1: Ibat > Icutoff */
148565 + PCF50633_MBCS3_VLIM = 0x20, /* 1: Vbat == Vmax */
148566 + PCF50633_MBCS3_VBATSTAT = 0x40, /* 1: Vbat > Vbatcond */
148567 + PCF50633_MBCS3_VRES = 0x80, /* 1: Vbat > Vth(RES) */
148568 +};
148569 +
148570 +struct adc_request {
148571 + int mux;
148572 + int avg;
148573 + int result;
148574 + void (*callback)(struct pcf50633_data *, void *, int);
148575 + void *callback_param;
148576 +
148577 + /* Used in case of sync requests */
148578 + struct completion completion;
148579 +};
148580 +
148581 +struct pcf50633_data {
148582 + struct i2c_client *client;
148583 + struct pcf50633_platform_data *pdata;
148584 + struct backlight_device *backlight;
148585 + struct mutex lock;
148586 + unsigned int flags;
148587 + unsigned int working;
148588 + struct mutex working_lock;
148589 + struct work_struct work;
148590 + struct rtc_device *rtc;
148591 + struct input_dev *input_dev;
148592 + int allow_close;
148593 + int onkey_seconds;
148594 + int irq;
148595 + enum pcf50633_suspend_states suspend_state;
148596 + int usb_removal_count;
148597 + u8 pcfirq_resume[5];
148598 + int probe_completed;
148599 + int suppress_onkey_events;
148600 +
148601 + /* if he pulls battery while charging, we notice that and correctly
148602 + * report that the charger is idle. But there is no interrupt that
148603 + * fires if he puts a battery back in and charging resumes. So when
148604 + * the battery is pulled, we run this work function looking for
148605 + * either charger resumption or USB cable pull
148606 + */
148607 + struct mutex working_lock_nobat;
148608 + struct work_struct work_nobat;
148609 + int working_nobat;
148610 + int usb_removal_count_nobat;
148611 + int jiffies_last_bat_ins;
148612 +
148613 + /* current limit notification handler stuff */
148614 + struct mutex working_lock_usb_curlimit;
148615 + struct work_struct work_usb_curlimit;
148616 + int pending_curlimit;
148617 + int usb_removal_count_usb_curlimit;
148618 +
148619 + int last_curlim_set;
148620 +
148621 + int coldplug_done; /* cleared by probe, set by first work service */
148622 + int flag_bat_voltage_read; /* ipc to /sys batt voltage read func */
148623 +
148624 + /* we have a FIFO of ADC measurement requests that are used only by
148625 + * the workqueue service code after the ADC completion interrupt
148626 + */
148627 + struct adc_request *adc_queue[MAX_ADC_FIFO_DEPTH]; /* amount of averaging */
148628 + int adc_queue_head; /* head owned by foreground code */
148629 + int adc_queue_tail; /* tail owned by service code */
148630 +
148631 + struct platform_device *regulator_pdev[__NUM_PCF50633_REGULATORS];
148632 +};
148633 +
148634 +/* this is to be provided by the board implementation */
148635 +extern const u_int8_t pcf50633_initial_regs[__NUM_PCF50633_REGS];
148636 +
148637 +int pcf50633_read(struct pcf50633_data *pcf, u_int8_t reg,
148638 + int nr_regs, u_int8_t *data);
148639 +
148640 +int pcf50633_write(struct pcf50633_data *pcf, u_int8_t reg,
148641 + int nr_regs, u_int8_t *data);
148642 +
148643 +int pcf50633_reg_write(struct pcf50633_data *pcf, u_int8_t reg, u_int8_t val);
148644 +
148645 +u_int8_t pcf50633_reg_read(struct pcf50633_data *pcf, u_int8_t reg);
148646 +
148647 +int pcf50633_reg_set_bit_mask(struct pcf50633_data *pcf, u_int8_t reg, u_int8_t mask, u_int8_t val);
148648 +int pcf50633_reg_clear_bits(struct pcf50633_data *pcf, u_int8_t reg, u_int8_t bits);
148649 +
148650 +void pcf50633_charge_autofast(int on);
148651 +#endif /* _PCF50633_H */
148652 +
148653 Index: linux-2.6.28/include/linux/pcf506xx.h
148654 ===================================================================
148655 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
148656 +++ linux-2.6.28/include/linux/pcf506xx.h 2009-01-02 00:01:57.000000000 +0100
148657 @@ -0,0 +1,34 @@
148658 +#ifndef _LINUX_PCF506XX_H
148659 +#define _LINUX_PCF506XX_H
148660 +
148661 +
148662 +#define PMU_VRAIL_F_SUSPEND_ON 0x00000001 /* Remains on during suspend */
148663 +#define PMU_VRAIL_F_UNUSED 0x00000002 /* This rail is not used */
148664 +struct pmu_voltage_rail {
148665 + char *name;
148666 + unsigned int flags;
148667 + struct {
148668 + unsigned int init;
148669 + unsigned int max;
148670 + } voltage;
148671 +};
148672 +
148673 +enum pmu_event {
148674 + PMU_EVT_NONE,
148675 + PMU_EVT_INSERT,
148676 + PMU_EVT_REMOVE,
148677 +#ifdef CONFIG_SENSORS_PCF50633
148678 + PMU_EVT_USB_INSERT,
148679 + PMU_EVT_USB_REMOVE,
148680 +#endif
148681 + PMU_EVT_CHARGER_ACTIVE,
148682 + PMU_EVT_CHARGER_IDLE,
148683 + PMU_EVT_CHARGER_CHANGE,
148684 + __NUM_PMU_EVTS
148685 +};
148686 +
148687 +typedef int (*pmu_cb)(struct device *dev, unsigned int feature,
148688 + enum pmu_event event);
148689 +
148690 +
148691 +#endif /* !_LINUX_PCF506XX_H */
148692 Index: linux-2.6.28/include/linux/regulator/pcf50633.h
148693 ===================================================================
148694 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
148695 +++ linux-2.6.28/include/linux/regulator/pcf50633.h 2009-01-02 00:01:57.000000000 +0100
148696 @@ -0,0 +1,3 @@
148697 +#include <linux/pcf50633.h>
148698 +
148699 +int pcf50633_regulator_init(struct pcf50633_data *, int);
148700 Index: linux-2.6.28/include/linux/resume-dependency.h
148701 ===================================================================
148702 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
148703 +++ linux-2.6.28/include/linux/resume-dependency.h 2009-01-02 00:01:57.000000000 +0100
148704 @@ -0,0 +1,114 @@
148705 +#ifndef __RESUME_DEPENDENCY_H__
148706 +#define __RESUME_DEPENDENCY_H__
148707 +
148708 +/* Resume dependency framework
148709 + *
148710 + * (C) 2008 Openmoko, Inc.
148711 + * Author: Andy Green <andy@openmoko.com>
148712 + *
148713 + * This program is free software; you can redistribute it and/or
148714 + * modify it under the terms of the GNU General Public License as
148715 + * published by the Free Software Foundation; version 2.1.
148716 + *
148717 + * This program is distributed in the hope that it will be useful,
148718 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
148719 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
148720 + * GNU General Public License for more details.
148721 + *
148722 + * You should have received a copy of the GNU General Public License
148723 + * along with this program; if not, write to the Free Software
148724 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
148725 + * MA 02111-1307 USA
148726 + *
148727 + */
148728 +
148729 +#include <linux/list.h>
148730 +
148731 +struct resume_dependency {
148732 + struct list_head list;
148733 +
148734 + void (*callback)(void *); /* called with context as arg */
148735 + void * context;
148736 + int called_flag; /* set to 1 after called, use for multi dep */
148737 +};
148738 +
148739 +/* if you are a driver accept to have other drivers as dependencies, you need to
148740 + * instantiate a struct resume_dependency above, then initialize it by invoking
148741 + * init_resume_dependency_list() on it
148742 + */
148743 +
148744 +#define init_resume_dependency_list(_head) \
148745 + printk(KERN_INFO "##### init_resume_dependency_list(head=%p)\n", (_head)); \
148746 + INIT_LIST_HEAD(&(_head)->list);
148747 +
148748 +
148749 +/* if your resume function depends on something else being resumed first, you
148750 + * can register the dependency by calling this in your suspend function with
148751 + * head being the list held by the thing you are dependent on, and dep being
148752 + * your struct resume_dependency
148753 + */
148754 +
148755 +#define register_resume_dependency(_head, _dep) { \
148756 + struct list_head *_pos, *_q; \
148757 + struct resume_dependency *_d; \
148758 +\
148759 + printk(KERN_ERR "##### register_resume_dependency(head=%p, dep=%p)\n", (_head), (_dep)); \
148760 + (_dep)->called_flag = 1; \
148761 + list_for_each_safe(_pos, _q, &((_head)->list)) { \
148762 + _d = list_entry(_pos, struct resume_dependency, list); \
148763 + if (_d == (_dep)) { \
148764 + list_del(_pos); \
148765 + printk(KERN_ERR "##### duplicate dependency removed first\n"); \
148766 + } \
148767 + } \
148768 + list_add(&(_dep)->list, &(_head)->list); \
148769 +}
148770 +
148771 +/* In the resume function that things can be dependent on, at the end you
148772 + * invoke this macro. This calls back the dependent resumes now it is safe to
148773 + * use the resumed thing they were dependent on.
148774 + */
148775 +
148776 +#define callback_all_resume_dependencies(_head) { \
148777 + struct list_head *_pos, *_q; \
148778 + struct resume_dependency *_dep; \
148779 +\
148780 + printk(KERN_ERR "##### callback_all_resume_dependencies(head=%p)\n", (_head)); \
148781 + list_for_each_safe(_pos, _q, &((_head)->list)) { \
148782 + _dep = list_entry(_pos, struct resume_dependency, list); \
148783 + printk(KERN_ERR "##### callback list entry (head=%p, dep=%p)\n", (_head), (_dep)); \
148784 + _dep->called_flag = 1; \
148785 + printk(KERN_ERR "##### callback=%p(context=%p))\n", (_dep->callback),(_dep->context)); \
148786 + (_dep->callback)(_dep->context); \
148787 + list_del(_pos); \
148788 + } \
148789 +}
148790 +
148791 +/* When a dependency is added, it is not actually active; the dependent resume
148792 + * handler will function as normal. The dependency is activated by the suspend
148793 + * handler for the driver that will be doing the callbacks. This ensures that
148794 + * if the suspend is aborted for any reason (error, driver busy, etc), that all
148795 + * suspended drivers will resume, even if the driver upon which they are dependent
148796 + * did not suspend, and hence will not resume, and thus would be unable to perform
148797 + * the callbacks.
148798 + */
148799 +
148800 +#define activate_all_resume_dependencies(_head) { \
148801 + struct list_head *_pos, *_q; \
148802 + struct resume_dependency *_dep; \
148803 +\
148804 + printk(KERN_ERR "##### activate_all_resume_dependencies(head=%p)\n", (_head)); \
148805 + list_for_each_safe(_pos, _q, &((_head)->list)) { \
148806 + _dep = list_entry(_pos, struct resume_dependency, list); \
148807 + printk(KERN_ERR "##### activating callback list entry (head=%p, dep=%p)\n", (_head), (_dep)); \
148808 + _dep->called_flag = 0; \
148809 + } \
148810 +}
148811 +
148812 +/* if your resume action is dependent on multiple drivers being resumed already,
148813 + * register the same callback with each driver you are dependent on, and check
148814 + * .called_flag for all of the struct resume_dependency. When they are all 1
148815 + * you know it is the last callback and you can resume, otherwise just return
148816 + */
148817 +
148818 +#endif
148819 Index: linux-2.6.28/include/linux/rtc/pcf50633.h
148820 ===================================================================
148821 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
148822 +++ linux-2.6.28/include/linux/rtc/pcf50633.h 2009-01-02 00:01:57.000000000 +0100
148823 @@ -0,0 +1,9 @@
148824 +enum pcf50633_rtc_event {
148825 + PCF50633_RTC_EVENT_ALARM,
148826 + PCF50633_RTC_EVENT_SECOND,
148827 +};
148828 +
148829 +extern void pcf50633_rtc_handle_event(struct pcf50633_data *pcf,
148830 + enum pcf50633_rtc_event evt);
148831 +
148832 +
148833 Index: linux-2.6.28/include/linux/serial_core.h
148834 ===================================================================
148835 --- linux-2.6.28.orig/include/linux/serial_core.h 2008-12-25 00:26:37.000000000 +0100
148836 +++ linux-2.6.28/include/linux/serial_core.h 2009-01-02 00:01:57.000000000 +0100
148837 @@ -158,6 +158,8 @@
148838 /* SH-SCI */
148839 #define PORT_SCIFA 83
148840
148841 +#define PORT_S3C6400 83
148842 +
148843 #ifdef __KERNEL__
148844
148845 #include <linux/compiler.h>
148846 Index: linux-2.6.28/include/linux/spi/glamo.h
148847 ===================================================================
148848 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
148849 +++ linux-2.6.28/include/linux/spi/glamo.h 2009-01-02 00:01:57.000000000 +0100
148850 @@ -0,0 +1,28 @@
148851 +#ifndef __GLAMO_SPI_H
148852 +#define __GLAMO_SPI_H
148853 +
148854 +#include <linux/glamo-gpio.h>
148855 +
148856 +struct spi_board_info;
148857 +struct glamofb_handle;
148858 +struct glamo_core;
148859 +
148860 +struct glamo_spi_info {
148861 + unsigned long board_size;
148862 + struct spi_board_info *board_info;
148863 + struct glamofb_handle *glamofb_handle;
148864 +};
148865 +
148866 +struct glamo_spigpio_info {
148867 + unsigned int pin_clk;
148868 + unsigned int pin_mosi;
148869 + unsigned int pin_miso;
148870 + unsigned int pin_cs;
148871 +
148872 + unsigned int board_size;
148873 + struct spi_board_info *board_info;
148874 + struct glamo_core *glamo;
148875 +};
148876 +
148877 +
148878 +#endif
148879 Index: linux-2.6.28/include/linux/suspend.h
148880 ===================================================================
148881 --- linux-2.6.28.orig/include/linux/suspend.h 2008-12-25 00:26:37.000000000 +0100
148882 +++ linux-2.6.28/include/linux/suspend.h 2009-01-02 00:01:57.000000000 +0100
148883 @@ -146,6 +146,12 @@ struct pbe {
148884 struct pbe *next;
148885 };
148886
148887 +/**
148888 + * global indication we are somewhere between start of suspend and end of
148889 + * resume, nonzero is true
148890 + */
148891 +extern int global_inside_suspend;
148892 +
148893 /* mm/page_alloc.c */
148894 extern void mark_free_pages(struct zone *zone);
148895
148896 Index: linux-2.6.28/include/linux/ts_filter_group.h
148897 ===================================================================
148898 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
148899 +++ linux-2.6.28/include/linux/ts_filter_group.h 2009-01-02 00:01:57.000000000 +0100
148900 @@ -0,0 +1,39 @@
148901 +#ifndef __TS_FILTER_GROUP_H__
148902 +#define __TS_FILTER_GROUP_H__
148903 +
148904 +#include <linux/ts_filter.h>
148905 +
148906 +/*
148907 + * Touchscreen group filter.
148908 + *
148909 + * Copyright (C) 2008 by Openmoko, Inc.
148910 + * Author: Nelson Castillo <arhuaco@freaks-unidos.net>
148911 + *
148912 + */
148913 +
148914 +struct ts_filter_group_configuration {
148915 + int extent;
148916 + int close_enough;
148917 + int threshold;
148918 + int attempts;
148919 +};
148920 +
148921 +struct ts_filter_group {
148922 + struct ts_filter tsf;
148923 + struct ts_filter_group_configuration *config;
148924 +
148925 + int N; /* How many samples we have */
148926 + int *samples[MAX_TS_FILTER_COORDS]; /* the samples, our input */
148927 +
148928 + int *group_size; /* used for temporal computations */
148929 + int *sorted_samples; /* used for temporal computations */
148930 +
148931 + int range_max[MAX_TS_FILTER_COORDS]; /* max computed ranges */
148932 + int range_min[MAX_TS_FILTER_COORDS]; /* min computed ranges */
148933 +
148934 + int tries_left; /* We finish if we don't get enough samples */
148935 +};
148936 +
148937 +extern struct ts_filter_api ts_filter_group_api;
148938 +
148939 +#endif
148940 Index: linux-2.6.28/include/linux/ts_filter.h
148941 ===================================================================
148942 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
148943 +++ linux-2.6.28/include/linux/ts_filter.h 2009-01-02 00:01:57.000000000 +0100
148944 @@ -0,0 +1,56 @@
148945 +#ifndef __TS_FILTER_H__
148946 +#define __TS_FILTER_H__
148947 +
148948 +/*
148949 + * touchscreen filter
148950 + *
148951 + * (c) 2008 Andy Green <andy@openmoko.com>
148952 + */
148953 +
148954 +#include <linux/platform_device.h>
148955 +
148956 +#define MAX_TS_FILTER_CHAIN 4 /* max filters you can chain up */
148957 +#define MAX_TS_FILTER_COORDS 3 /* X, Y and Z (pressure) */
148958 +
148959 +struct ts_filter;
148960 +
148961 +/* operations that a filter can perform
148962 + */
148963 +struct ts_filter_api {
148964 + struct ts_filter * (*create)(struct platform_device *pdev, void *config,
148965 + int count_coords);
148966 + void (*destroy)(struct platform_device *pdev, struct ts_filter *filter);
148967 + void (*clear)(struct ts_filter *filter);
148968 + int (*process)(struct ts_filter *filter, int *coords);
148969 + void (*scale)(struct ts_filter *filter, int *coords);
148970 +};
148971 +
148972 +/* this is the common part of all filters, the result
148973 + * we use this type as an otherwise opaque handle on to
148974 + * the actual filter. Therefore you need one of these
148975 + * at the start of your actual filter struct
148976 + */
148977 +
148978 +struct ts_filter {
148979 + struct ts_filter *next; /* next in chain */
148980 + struct ts_filter_api *api; /* operations to use for this object */
148981 + int count_coords;
148982 + int coords[MAX_TS_FILTER_COORDS];
148983 +};
148984 +
148985 +/*
148986 + * helper to create a filter chain from array of API pointers and
148987 + * array of config ints... leaves pointers to created filters in list
148988 + * array and fills in ->next pointers to create the chain
148989 + */
148990 +
148991 +extern int ts_filter_create_chain(struct platform_device *pdev,
148992 + struct ts_filter_api **api, void **config,
148993 + struct ts_filter **list, int count_coords);
148994 +
148995 +/* helper to destroy a whole chain from the list of filter pointers */
148996 +
148997 +extern void ts_filter_destroy_chain(struct platform_device *pdev,
148998 + struct ts_filter **list);
148999 +
149000 +#endif
149001 Index: linux-2.6.28/include/linux/ts_filter_linear.h
149002 ===================================================================
149003 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
149004 +++ linux-2.6.28/include/linux/ts_filter_linear.h 2009-01-02 00:01:57.000000000 +0100
149005 @@ -0,0 +1,64 @@
149006 +#ifndef __TS_FILTER_LINEAR_H__
149007 +#define __TS_FILTER_LINEAR_H__
149008 +
149009 +#include <linux/ts_filter.h>
149010 +#include <linux/kobject.h>
149011 +
149012 +/*
149013 + * touchscreen linear filter.
149014 + *
149015 + * Copyright (C) 2008 by Openmoko, Inc.
149016 + * Author: Nelson Castillo <arhuaco@freaks-unidos.net>
149017 + *
149018 + */
149019 +
149020 +#define TS_FILTER_LINEAR_NCONSTANTS 7
149021 +
149022 +/* sysfs */
149023 +
149024 +struct ts_filter_linear;
149025 +
149026 +struct const_obj {
149027 + struct ts_filter_linear *tsfl;
149028 + struct kobject kobj;
149029 +};
149030 +
149031 +#define to_const_obj(x) container_of(x, struct const_obj, kobj)
149032 +
149033 +struct const_attribute {
149034 + struct attribute attr;
149035 + ssize_t (*show)(struct const_obj *const, struct const_attribute *attr,
149036 + char *buf);
149037 + ssize_t (*store)(struct const_obj *const, struct const_attribute *attr,
149038 + const char *buf, size_t count);
149039 +};
149040 +
149041 +#define to_const_attr(x) container_of(x, struct const_attribute, attr)
149042 +
149043 +/* filter configuration */
149044 +
149045 +struct ts_filter_linear_configuration {
149046 + int constants[TS_FILTER_LINEAR_NCONSTANTS];
149047 + int coord0;
149048 + int coord1;
149049 +};
149050 +
149051 +/* the filter */
149052 +
149053 +struct ts_filter_linear {
149054 + struct ts_filter tsf;
149055 + struct ts_filter_linear_configuration *config;
149056 +
149057 + int constants[TS_FILTER_LINEAR_NCONSTANTS];
149058 +
149059 + /* sysfs */
149060 + struct const_obj c_obj;
149061 + struct kobj_type const_ktype;
149062 + struct const_attribute kattrs[TS_FILTER_LINEAR_NCONSTANTS];
149063 + struct attribute *attrs[TS_FILTER_LINEAR_NCONSTANTS + 1];
149064 + char attr_names[TS_FILTER_LINEAR_NCONSTANTS][2];
149065 +};
149066 +
149067 +extern struct ts_filter_api ts_filter_linear_api;
149068 +
149069 +#endif
149070 Index: linux-2.6.28/include/linux/ts_filter_mean.h
149071 ===================================================================
149072 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
149073 +++ linux-2.6.28/include/linux/ts_filter_mean.h 2009-01-02 00:01:57.000000000 +0100
149074 @@ -0,0 +1,34 @@
149075 +#ifndef __TS_FILTER_MEAN_H__
149076 +#define __TS_FILTER_MEAN_H__
149077 +
149078 +#include <linux/ts_filter.h>
149079 +
149080 +/*
149081 + * touchscreen filter
149082 + *
149083 + * mean
149084 + *
149085 + * (c) 2008 Andy Green <andy@openmoko.com>
149086 + */
149087 +
149088 +struct ts_filter_mean_configuration {
149089 + int bits_filter_length;
149090 + int averaging_threshold;
149091 +
149092 + int extent;
149093 +};
149094 +
149095 +struct ts_filter_mean {
149096 + struct ts_filter tsf;
149097 + struct ts_filter_mean_configuration *config;
149098 +
149099 + int reported[MAX_TS_FILTER_COORDS];
149100 + int lowpass[MAX_TS_FILTER_COORDS];
149101 + int *fifo[MAX_TS_FILTER_COORDS];
149102 + int fhead[MAX_TS_FILTER_COORDS];
149103 + int ftail[MAX_TS_FILTER_COORDS];
149104 +};
149105 +
149106 +extern struct ts_filter_api ts_filter_mean_api;
149107 +
149108 +#endif
149109 Index: linux-2.6.28/include/linux/ts_filter_median.h
149110 ===================================================================
149111 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
149112 +++ linux-2.6.28/include/linux/ts_filter_median.h 2009-01-02 00:01:57.000000000 +0100
149113 @@ -0,0 +1,36 @@
149114 +#ifndef __TS_FILTER_MEDIAN_H__
149115 +#define __TS_FILTER_MEDIAN_H__
149116 +
149117 +#include <linux/ts_filter.h>
149118 +
149119 +/*
149120 + * touchscreen filter
149121 + *
149122 + * median
149123 + *
149124 + * (c) 2008 Andy Green <andy@openmoko.com>
149125 + */
149126 +
149127 +struct ts_filter_median_configuration {
149128 + int extent;
149129 + int midpoint;
149130 + int decimation_threshold;
149131 + int decimation_above;
149132 + int decimation_below;
149133 +};
149134 +
149135 +struct ts_filter_median {
149136 + struct ts_filter tsf;
149137 + struct ts_filter_median_configuration *config;
149138 +
149139 + int decimation_count;
149140 + int last_issued[MAX_TS_FILTER_COORDS];
149141 + int valid; /* how many samples in the sort buffer are valid */
149142 + int *sort[MAX_TS_FILTER_COORDS]; /* samples taken for median */
149143 + int *fifo[MAX_TS_FILTER_COORDS]; /* samples taken for median */
149144 + int pos; /* where we are in the fifo sample memory */
149145 +};
149146 +
149147 +extern struct ts_filter_api ts_filter_median_api;
149148 +
149149 +#endif
149150 Index: linux-2.6.28/include/linux/vt.h
149151 ===================================================================
149152 --- linux-2.6.28.orig/include/linux/vt.h 2008-12-25 00:26:37.000000000 +0100
149153 +++ linux-2.6.28/include/linux/vt.h 2009-01-02 00:01:57.000000000 +0100
149154 @@ -18,8 +18,19 @@ extern int unregister_vt_notifier(struct
149155 * resizing).
149156 */
149157 #define MIN_NR_CONSOLES 1 /* must be at least 1 */
149158 +#if (CONFIG_NR_TTY_DEVICES < 4)
149159 +/* Lower Limit */
149160 +#define MAX_NR_CONSOLES 4 /* serial lines start at 64 */
149161 +#define MAX_NR_USER_CONSOLES 4 /* must be root to allocate above this */
149162 +#elif (CONFIG_NR_TTY_DEVICES > 63)
149163 +/* Upper Limit */
149164 #define MAX_NR_CONSOLES 63 /* serial lines start at 64 */
149165 #define MAX_NR_USER_CONSOLES 63 /* must be root to allocate above this */
149166 +#else
149167 +/* They chose a sensible number */
149168 +#define MAX_NR_CONSOLES CONFIG_NR_TTY_DEVICES
149169 +#define MAX_NR_USER_CONSOLES CONFIG_NR_TTY_DEVICES
149170 +#endif
149171 /* Note: the ioctl VT_GETSTATE does not work for
149172 consoles 16 and higher (since it returns a short) */
149173
149174 Index: linux-2.6.28/include/sound/soc-dapm.h
149175 ===================================================================
149176 --- linux-2.6.28.orig/include/sound/soc-dapm.h 2008-12-25 00:26:37.000000000 +0100
149177 +++ linux-2.6.28/include/sound/soc-dapm.h 2009-01-02 00:01:57.000000000 +0100
149178 @@ -244,6 +244,13 @@ int snd_soc_dapm_nc_pin(struct snd_soc_c
149179 int snd_soc_dapm_get_pin_status(struct snd_soc_codec *codec, char *pin);
149180 int snd_soc_dapm_sync(struct snd_soc_codec *codec);
149181
149182 +/* dapm audio endpoint control */
149183 +int snd_soc_dapm_set_endpoint(struct snd_soc_codec *codec,
149184 + char *pin, int status);
149185 +int snd_soc_dapm_get_endpoint(struct snd_soc_codec *codec,
149186 + char *pin);
149187 +int snd_soc_dapm_sync_endpoints(struct snd_soc_codec *codec);
149188 +
149189 /* dapm widget types */
149190 enum snd_soc_dapm_type {
149191 snd_soc_dapm_input = 0, /* input pin */
149192 Index: linux-2.6.28/init/Kconfig
149193 ===================================================================
149194 --- linux-2.6.28.orig/init/Kconfig 2008-12-25 00:26:37.000000000 +0100
149195 +++ linux-2.6.28/init/Kconfig 2009-01-02 00:01:57.000000000 +0100
149196 @@ -732,6 +732,15 @@ config AIO
149197 by some high performance threaded applications. Disabling
149198 this option saves about 7k.
149199
149200 +config ASHMEM
149201 + bool "Enable Android's Shared Memory Subsystem"
149202 + default n
149203 + depends on SHMEM || TINY_SHMEM
149204 + help
149205 + The ashmem subsystem is a new shared memory allocator, similar to
149206 + POSIX SHM but with different behavior and sporting a simpler
149207 + file-based API.
149208 +
149209 config VM_EVENT_COUNTERS
149210 default y
149211 bool "Enable VM event counters for /proc/vmstat" if EMBEDDED
149212 Index: linux-2.6.28/kernel/irq/chip.c
149213 ===================================================================
149214 --- linux-2.6.28.orig/kernel/irq/chip.c 2008-12-25 00:26:37.000000000 +0100
149215 +++ linux-2.6.28/kernel/irq/chip.c 2009-01-02 00:01:57.000000000 +0100
149216 @@ -380,6 +380,7 @@ handle_level_irq(unsigned int irq, struc
149217 out_unlock:
149218 spin_unlock(&desc->lock);
149219 }
149220 +EXPORT_SYMBOL(handle_level_irq);
149221
149222 /**
149223 * handle_fasteoi_irq - irq handler for transparent controllers
149224 @@ -583,6 +584,7 @@ __set_irq_handler(unsigned int irq, irq_
149225 }
149226 spin_unlock_irqrestore(&desc->lock, flags);
149227 }
149228 +EXPORT_SYMBOL(__set_irq_handler);
149229
149230 void
149231 set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
149232 Index: linux-2.6.28/kernel/power/main.c
149233 ===================================================================
149234 --- linux-2.6.28.orig/kernel/power/main.c 2008-12-25 00:26:37.000000000 +0100
149235 +++ linux-2.6.28/kernel/power/main.c 2009-01-02 00:01:57.000000000 +0100
149236 @@ -132,6 +132,9 @@ static inline int suspend_test(int level
149237
149238 #endif /* CONFIG_PM_SLEEP */
149239
149240 +int global_inside_suspend;
149241 +EXPORT_SYMBOL(global_inside_suspend);
149242 +
149243 #ifdef CONFIG_SUSPEND
149244
149245 #ifdef CONFIG_PM_TEST_SUSPEND
149246 @@ -322,6 +325,8 @@ int suspend_devices_and_enter(suspend_st
149247 if (!suspend_ops)
149248 return -ENOSYS;
149249
149250 + global_inside_suspend = 1;
149251 +
149252 if (suspend_ops->begin) {
149253 error = suspend_ops->begin(state);
149254 if (error)
149255 @@ -365,6 +370,8 @@ int suspend_devices_and_enter(suspend_st
149256 Close:
149257 if (suspend_ops->end)
149258 suspend_ops->end();
149259 + global_inside_suspend = 0;
149260 +
149261 return error;
149262
149263 Recover_platform:
149264 @@ -427,6 +434,8 @@ static int enter_state(suspend_state_t s
149265 return -EBUSY;
149266
149267 printk(KERN_INFO "PM: Syncing filesystems ... ");
149268 + global_inside_suspend = 1;
149269 +
149270 sys_sync();
149271 printk("done.\n");
149272
149273 Index: linux-2.6.28/kernel/printk.c
149274 ===================================================================
149275 --- linux-2.6.28.orig/kernel/printk.c 2008-12-25 00:26:37.000000000 +0100
149276 +++ linux-2.6.28/kernel/printk.c 2009-01-02 00:01:57.000000000 +0100
149277 @@ -32,8 +32,11 @@
149278 #include <linux/security.h>
149279 #include <linux/bootmem.h>
149280 #include <linux/syscalls.h>
149281 +#include <linux/jiffies.h>
149282 +#include <linux/suspend.h>
149283
149284 #include <asm/uaccess.h>
149285 +#include <asm/plat-s3c24xx/neo1973.h>
149286
149287 /*
149288 * Architectures can override it:
149289 @@ -67,6 +70,12 @@ int console_printk[4] = {
149290 int oops_in_progress;
149291 EXPORT_SYMBOL(oops_in_progress);
149292
149293 +void (*printk_emergency_debug_spew_init)(void) = NULL;
149294 +EXPORT_SYMBOL(printk_emergency_debug_spew_init);
149295 +
149296 +void (*printk_emergency_debug_spew_send_string)(const char *) = NULL;
149297 +EXPORT_SYMBOL(printk_emergency_debug_spew_send_string);
149298 +
149299 /*
149300 * console_sem protects the console_drivers list, and also
149301 * provides serialisation for access to the entire console
149302 @@ -667,8 +676,39 @@ asmlinkage int vprintk(const char *fmt,
149303 /* Emit the output into the temporary buffer */
149304 printed_len += vscnprintf(printk_buf + printed_len,
149305 sizeof(printk_buf) - printed_len, fmt, args);
149306 -
149307 -
149308 +#ifdef CONFIG_MACH_NEO1973_GTA02
149309 + /* if you're debugging resume, the normal methods can change resume
149310 + * ordering behaviours because their debugging output is synchronous
149311 + * (ie, CONFIG_DEBUG_LL). If your problem is an OOPS, this code
149312 + * will not affect the speed and duration and ordering of resume
149313 + * actions, but will give you a chance to read the full undumped
149314 + * syslog AND the OOPS data when it happens
149315 + *
149316 + * if you support it, your debug device init can override the exported
149317 + * emergency_debug_spew_init and emergency_debug_spew_send_string to
149318 + * usually force polling or bitbanging on your debug console device
149319 + */
149320 + if (oops_in_progress && global_inside_suspend &&
149321 + printk_emergency_debug_spew_init &&
149322 + printk_emergency_debug_spew_send_string) {
149323 + unsigned long cur_index;
149324 + char ch[2];
149325 +
149326 + if (global_inside_suspend == 1) {
149327 + (printk_emergency_debug_spew_init)();
149328 +
149329 + ch[1] = '\0';
149330 + cur_index = con_start;
149331 + while (cur_index != log_end) {
149332 + ch[0] = LOG_BUF(cur_index);
149333 + (printk_emergency_debug_spew_send_string)(ch);
149334 + cur_index++;
149335 + }
149336 + global_inside_suspend++; /* only once */
149337 + }
149338 + (printk_emergency_debug_spew_send_string)(printk_buf);
149339 + }
149340 +#endif
149341 /*
149342 * Copy the output into log_buf. If the caller didn't provide
149343 * appropriate log level tags, we insert them here
149344 Index: linux-2.6.28/kernel/timer.c
149345 ===================================================================
149346 --- linux-2.6.28.orig/kernel/timer.c 2008-12-25 00:26:37.000000000 +0100
149347 +++ linux-2.6.28/kernel/timer.c 2009-01-02 00:01:57.000000000 +0100
149348 @@ -813,7 +813,11 @@ static int cascade(struct tvec_base *bas
149349 * don't have to detach them individually.
149350 */
149351 list_for_each_entry_safe(timer, tmp, &tv_list, entry) {
149352 - BUG_ON(tbase_get_base(timer->base) != base);
149353 + if (tbase_get_base(timer->base) != base) {
149354 + printk(KERN_ERR "cascade: timer %p: tbase_get_base(timer->base) 0x%x "
149355 + "!= base 0x%x\n", timer, tbase_get_base(timer->base), base);
149356 + BUG_ON(1);
149357 + }
149358 internal_add_timer(base, timer);
149359 }
149360
149361 Index: linux-2.6.28/MAINTAINERS
149362 ===================================================================
149363 --- linux-2.6.28.orig/MAINTAINERS 2009-01-02 00:00:02.000000000 +0100
149364 +++ linux-2.6.28/MAINTAINERS 2009-01-02 00:01:57.000000000 +0100
149365 @@ -1705,6 +1705,20 @@ FILE LOCKING (flock() and fcntl()/lockf(
149366 P: Matthew Wilcox
149367 M: matthew@wil.cx
149368 L: linux-fsdevel@vger.kernel.org
149369 +
149370 +FIC/OPENMOKO NEO1973 GSM PHONE
149371 +P: Harald Welte
149372 +M: laforge@openmoko.org
149373 +L: openmoko-kernel@lists.openmoko.org
149374 +W: http://wiki.openmoko.org/wiki/Kernel
149375 +W: http://wiki.openmoko.org/wiki/Neo1973
149376 +S: Maintained
149377 +
149378 +FRAMEBUFFER LAYER
149379 +P: Antonino Daplas
149380 +M: adaplas@gmail.com
149381 +L: linux-fbdev-devel@lists.sourceforge.net (moderated for non-subscribers)
149382 +W: http://linux-fbdev.sourceforge.net/
149383 S: Maintained
149384
149385 FILESYSTEMS (VFS and infrastructure)
149386 Index: linux-2.6.28/makerecovery
149387 ===================================================================
149388 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
149389 +++ linux-2.6.28/makerecovery 2009-01-02 00:01:57.000000000 +0100
149390 @@ -0,0 +1,17 @@
149391 +#!/bin/sh
149392 +#
149393 +# make 6MB recovery image from two moredrivers type kernels
149394 +# placed at start and at +4MBytes
149395 +
149396 +if [ -z "$1" ] ; then
149397 + echo "Usage: $0 uImage-moredrivers-..."
149398 + exit 1
149399 +fi
149400 +cat $1 > recovery-$1
149401 +SIZE=`ls -l $1 | tr -s ' ' ' ' | cut -d' ' -f5`
149402 +SPACE=$(( 4 * 1024 * 1024 - $SIZE ))
149403 +dd if=/dev/zero of=_spacer bs=1 count=$SPACE
149404 +cat _spacer >> recovery-$1
149405 +rm -f _spacer
149406 +cat $1 >> recovery-$1
149407 +
149408 Index: linux-2.6.28/mm/ashmem.c
149409 ===================================================================
149410 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
149411 +++ linux-2.6.28/mm/ashmem.c 2009-01-02 00:01:57.000000000 +0100
149412 @@ -0,0 +1,657 @@
149413 +/* drivers/android/ashmem.c
149414 +**
149415 +** Android / Anonymous Shared Memory Subsystem, ashmem
149416 +**
149417 +** Copyright (C) 2008 Google, Inc.
149418 +**
149419 +** Robert Love <rlove@google.com>
149420 +**
149421 +** This software is licensed under the terms of the GNU General Public
149422 +** License version 2, as published by the Free Software Foundation, and
149423 +** may be copied, distributed, and modified under those terms.
149424 +**
149425 +** This program is distributed in the hope that it will be useful,
149426 +** but WITHOUT ANY WARRANTY; without even the implied warranty of
149427 +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
149428 +** GNU General Public License for more details.
149429 +*/
149430 +
149431 +#include <linux/module.h>
149432 +#include <linux/file.h>
149433 +#include <linux/fs.h>
149434 +#include <linux/miscdevice.h>
149435 +#include <linux/security.h>
149436 +#include <linux/mm.h>
149437 +#include <linux/mman.h>
149438 +#include <linux/uaccess.h>
149439 +#include <linux/personality.h>
149440 +#include <linux/bitops.h>
149441 +#include <linux/mutex.h>
149442 +#include <linux/shmem_fs.h>
149443 +#include <linux/ashmem.h>
149444 +
149445 +/*
149446 + * ashmem_area - android shared memory area
149447 + * Lifecycle: From our parent file's open() until its release()
149448 + * Locking: Protected by `ashmem_mutex'
149449 + * Big Note: Mappings do NOT pin this structure; it dies on close()
149450 + */
149451 +struct ashmem_area {
149452 + char name[ASHMEM_NAME_LEN]; /* optional name for /proc/pid/maps */
149453 + struct list_head unpinned_list; /* list of all ashmem areas */
149454 + struct file *file; /* the shmem-based backing file */
149455 + size_t size; /* size of the mapping, in bytes */
149456 + unsigned long prot_mask; /* allowed prot bits, as vm_flags */
149457 +};
149458 +
149459 +/*
149460 + * ashmem_range - represents an interval of unpinned (evictable) pages
149461 + * Lifecycle: From unpin to pin
149462 + * Locking: Protected by `ashmem_mutex'
149463 + */
149464 +struct ashmem_range {
149465 + struct list_head lru; /* entry in LRU list */
149466 + struct list_head unpinned; /* entry in its area's unpinned list */
149467 + struct ashmem_area *asma; /* associated area */
149468 + size_t pgstart; /* starting page, inclusive */
149469 + size_t pgend; /* ending page, inclusive */
149470 + unsigned int purged; /* ASHMEM_NOT or ASHMEM_WAS_PURGED */
149471 +};
149472 +
149473 +/* LRU list of unpinned pages, protected by ashmem_mutex */
149474 +static LIST_HEAD(ashmem_lru_list);
149475 +
149476 +/* Count of pages on our LRU list, protected by ashmem_mutex */
149477 +static unsigned long lru_count;
149478 +
149479 +/*
149480 + * ashmem_mutex - protects the list of and each individual ashmem_area
149481 + *
149482 + * Lock Ordering: ashmex_mutex -> i_mutex -> i_alloc_sem
149483 + */
149484 +static DEFINE_MUTEX(ashmem_mutex);
149485 +
149486 +static struct kmem_cache *ashmem_area_cachep __read_mostly;
149487 +static struct kmem_cache *ashmem_range_cachep __read_mostly;
149488 +
149489 +#define range_size(range) \
149490 + ((range)->pgend - (range)->pgstart + 1)
149491 +
149492 +#define range_on_lru(range) \
149493 + ((range)->purged == ASHMEM_NOT_PURGED)
149494 +
149495 +#define page_range_subsumes_range(range, start, end) \
149496 + (((range)->pgstart >= (start)) && ((range)->pgend <= (end)))
149497 +
149498 +#define page_range_subsumed_by_range(range, start, end) \
149499 + (((range)->pgstart <= (start)) && ((range)->pgend >= (end)))
149500 +
149501 +#define page_in_range(range, page) \
149502 + (((range)->pgstart <= (page)) && ((range)->pgend >= (page)))
149503 +
149504 +#define page_range_in_range(range, start, end) \
149505 + (page_in_range(range, start) || page_in_range(range, end) || \
149506 + page_range_subsumes_range(range, start, end))
149507 +
149508 +#define range_before_page(range, page) \
149509 + ((range)->pgend < (page))
149510 +
149511 +#define PROT_MASK (PROT_EXEC | PROT_READ | PROT_WRITE)
149512 +
149513 +static inline void lru_add(struct ashmem_range *range)
149514 +{
149515 + list_add_tail(&range->lru, &ashmem_lru_list);
149516 + lru_count += range_size(range);
149517 +}
149518 +
149519 +static inline void lru_del(struct ashmem_range *range)
149520 +{
149521 + list_del(&range->lru);
149522 + lru_count -= range_size(range);
149523 +}
149524 +
149525 +/*
149526 + * range_alloc - allocate and initialize a new ashmem_range structure
149527 + *
149528 + * 'asma' - associated ashmem_area
149529 + * 'prev_range' - the previous ashmem_range in the sorted asma->unpinned list
149530 + * 'purged' - initial purge value (ASMEM_NOT_PURGED or ASHMEM_WAS_PURGED)
149531 + * 'start' - starting page, inclusive
149532 + * 'end' - ending page, inclusive
149533 + *
149534 + * Caller must hold ashmem_mutex.
149535 + */
149536 +static int range_alloc(struct ashmem_area *asma,
149537 + struct ashmem_range *prev_range, unsigned int purged,
149538 + size_t start, size_t end)
149539 +{
149540 + struct ashmem_range *range;
149541 +
149542 + range = kmem_cache_zalloc(ashmem_range_cachep, GFP_KERNEL);
149543 + if (unlikely(!range))
149544 + return -ENOMEM;
149545 +
149546 + range->asma = asma;
149547 + range->pgstart = start;
149548 + range->pgend = end;
149549 + range->purged = purged;
149550 +
149551 + list_add_tail(&range->unpinned, &prev_range->unpinned);
149552 +
149553 + if (range_on_lru(range))
149554 + lru_add(range);
149555 +
149556 + return 0;
149557 +}
149558 +
149559 +static void range_del(struct ashmem_range *range)
149560 +{
149561 + list_del(&range->unpinned);
149562 + if (range_on_lru(range))
149563 + lru_del(range);
149564 + kmem_cache_free(ashmem_range_cachep, range);
149565 +}
149566 +
149567 +/*
149568 + * range_shrink - shrinks a range
149569 + *
149570 + * Caller must hold ashmem_mutex.
149571 + */
149572 +static inline void range_shrink(struct ashmem_range *range,
149573 + size_t start, size_t end)
149574 +{
149575 + size_t pre = range_size(range);
149576 +
149577 + range->pgstart = start;
149578 + range->pgend = end;
149579 +
149580 + if (range_on_lru(range))
149581 + lru_count -= pre - range_size(range);
149582 +}
149583 +
149584 +static int ashmem_open(struct inode *inode, struct file *file)
149585 +{
149586 + struct ashmem_area *asma;
149587 + int ret;
149588 +
149589 + ret = nonseekable_open(inode, file);
149590 + if (unlikely(ret))
149591 + return ret;
149592 +
149593 + asma = kmem_cache_zalloc(ashmem_area_cachep, GFP_KERNEL);
149594 + if (unlikely(!asma))
149595 + return -ENOMEM;
149596 +
149597 + INIT_LIST_HEAD(&asma->unpinned_list);
149598 + asma->prot_mask = PROT_MASK;
149599 + file->private_data = asma;
149600 +
149601 + return 0;
149602 +}
149603 +
149604 +static int ashmem_release(struct inode *ignored, struct file *file)
149605 +{
149606 + struct ashmem_area *asma = file->private_data;
149607 + struct ashmem_range *range, *next;
149608 +
149609 + mutex_lock(&ashmem_mutex);
149610 + list_for_each_entry_safe(range, next, &asma->unpinned_list, unpinned)
149611 + range_del(range);
149612 + mutex_unlock(&ashmem_mutex);
149613 +
149614 + if (asma->file)
149615 + fput(asma->file);
149616 + kmem_cache_free(ashmem_area_cachep, asma);
149617 +
149618 + return 0;
149619 +}
149620 +
149621 +static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
149622 +{
149623 + struct ashmem_area *asma = file->private_data;
149624 + int ret = 0;
149625 +
149626 + mutex_lock(&ashmem_mutex);
149627 +
149628 + /* user needs to SET_SIZE before mapping */
149629 + if (unlikely(!asma->size)) {
149630 + ret = -EINVAL;
149631 + goto out;
149632 + }
149633 +
149634 + /* requested protection bits must match our allowed protection mask */
149635 + if (unlikely((vma->vm_flags & ~asma->prot_mask) & PROT_MASK)) {
149636 + ret = -EPERM;
149637 + goto out;
149638 + }
149639 +
149640 + if (!asma->file) {
149641 + char *name = ASHMEM_NAME_DEF;
149642 + struct file *vmfile;
149643 +
149644 + if (asma->name[0] != '\0')
149645 + name = asma->name;
149646 +
149647 + /* ... and allocate the backing shmem file */
149648 + vmfile = shmem_file_setup(name, asma->size, vma->vm_flags);
149649 + if (unlikely(IS_ERR(vmfile))) {
149650 + ret = PTR_ERR(vmfile);
149651 + goto out;
149652 + }
149653 + asma->file = vmfile;
149654 + }
149655 + get_file(asma->file);
149656 +
149657 + shmem_set_file(vma, asma->file);
149658 + vma->vm_flags |= VM_CAN_NONLINEAR;
149659 +
149660 +out:
149661 + mutex_unlock(&ashmem_mutex);
149662 + return ret;
149663 +}
149664 +
149665 +/*
149666 + * ashmem_shrink - our cache shrinker, called from mm/vmscan.c :: shrink_slab
149667 + *
149668 + * 'nr_to_scan' is the number of objects (pages) to prune, or 0 to query how
149669 + * many objects (pages) we have in total.
149670 + *
149671 + * 'gfp_mask' is the mask of the allocation that got us into this mess.
149672 + *
149673 + * Return value is the number of objects (pages) remaining, or -1 if we cannot
149674 + * proceed without risk of deadlock (due to gfp_mask).
149675 + *
149676 + * We approximate LRU via least-recently-unpinned, jettisoning unpinned partial
149677 + * chunks of ashmem regions LRU-wise one-at-a-time until we hit 'nr_to_scan'
149678 + * pages freed.
149679 + */
149680 +static int ashmem_shrink(int nr_to_scan, gfp_t gfp_mask)
149681 +{
149682 + struct ashmem_range *range, *next;
149683 +
149684 + /* We might recurse into filesystem code, so bail out if necessary */
149685 + if (nr_to_scan && !(gfp_mask & __GFP_FS))
149686 + return -1;
149687 + if (!nr_to_scan)
149688 + return lru_count;
149689 +
149690 + mutex_lock(&ashmem_mutex);
149691 + list_for_each_entry_safe(range, next, &ashmem_lru_list, lru) {
149692 + struct inode *inode = range->asma->file->f_dentry->d_inode;
149693 + loff_t start = range->pgstart * PAGE_SIZE;
149694 + loff_t end = (range->pgend + 1) * PAGE_SIZE - 1;
149695 +
149696 + vmtruncate_range(inode, start, end);
149697 + range->purged = ASHMEM_WAS_PURGED;
149698 + lru_del(range);
149699 +
149700 + nr_to_scan -= range_size(range);
149701 + if (nr_to_scan <= 0)
149702 + break;
149703 + }
149704 + mutex_unlock(&ashmem_mutex);
149705 +
149706 + return lru_count;
149707 +}
149708 +
149709 +static struct shrinker ashmem_shrinker = {
149710 + .shrink = ashmem_shrink,
149711 + .seeks = DEFAULT_SEEKS * 4,
149712 +};
149713 +
149714 +static int set_prot_mask(struct ashmem_area *asma, unsigned long prot)
149715 +{
149716 + int ret = 0;
149717 +
149718 + mutex_lock(&ashmem_mutex);
149719 +
149720 + /* the user can only remove, not add, protection bits */
149721 + if (unlikely((asma->prot_mask & prot) != prot)) {
149722 + ret = -EINVAL;
149723 + goto out;
149724 + }
149725 +
149726 + /* does the application expect PROT_READ to imply PROT_EXEC? */
149727 + if ((prot & PROT_READ) && (current->personality & READ_IMPLIES_EXEC))
149728 + prot |= PROT_EXEC;
149729 +
149730 + asma->prot_mask = prot;
149731 +
149732 +out:
149733 + mutex_unlock(&ashmem_mutex);
149734 + return ret;
149735 +}
149736 +
149737 +static int set_name(struct ashmem_area *asma, void __user *name)
149738 +{
149739 + int ret = 0;
149740 +
149741 + mutex_lock(&ashmem_mutex);
149742 +
149743 + /* cannot change an existing mapping's name */
149744 + if (unlikely(asma->file)) {
149745 + ret = -EINVAL;
149746 + goto out;
149747 + }
149748 +
149749 + if (unlikely(copy_from_user(asma->name, name, ASHMEM_NAME_LEN)))
149750 + ret = -EFAULT;
149751 + asma->name[ASHMEM_NAME_LEN-1] = '\0';
149752 +
149753 +out:
149754 + mutex_unlock(&ashmem_mutex);
149755 +
149756 + return ret;
149757 +}
149758 +
149759 +static int get_name(struct ashmem_area *asma, void __user *name)
149760 +{
149761 + int ret = 0;
149762 +
149763 + mutex_lock(&ashmem_mutex);
149764 + if (asma->name[0] != '\0') {
149765 + size_t len;
149766 +
149767 + /*
149768 + * Copying only `len', instead of ASHMEM_NAME_LEN, bytes
149769 + * prevents us from revealing one user's stack to another.
149770 + */
149771 + len = strlen(asma->name) + 1;
149772 + if (unlikely(copy_to_user(name, asma->name, len)))
149773 + ret = -EFAULT;
149774 + } else {
149775 + if (unlikely(copy_to_user(name, ASHMEM_NAME_DEF,
149776 + sizeof(ASHMEM_NAME_DEF))))
149777 + ret = -EFAULT;
149778 + }
149779 + mutex_unlock(&ashmem_mutex);
149780 +
149781 + return ret;
149782 +}
149783 +
149784 +/*
149785 + * ashmem_pin - pin the given ashmem region, returning whether it was
149786 + * previously purged (ASHMEM_WAS_PURGED) or not (ASHMEM_NOT_PURGED).
149787 + *
149788 + * Caller must hold ashmem_mutex.
149789 + */
149790 +static int ashmem_pin(struct ashmem_area *asma, size_t pgstart, size_t pgend)
149791 +{
149792 + struct ashmem_range *range, *next;
149793 + int ret = ASHMEM_NOT_PURGED;
149794 +
149795 + list_for_each_entry_safe(range, next, &asma->unpinned_list, unpinned) {
149796 + /* moved past last applicable page; we can short circuit */
149797 + if (range_before_page(range, pgstart))
149798 + break;
149799 +
149800 + /*
149801 + * The user can ask us to pin pages that span multiple ranges,
149802 + * or to pin pages that aren't even unpinned, so this is messy.
149803 + *
149804 + * Four cases:
149805 + * 1. The requested range subsumes an existing range, so we
149806 + * just remove the entire matching range.
149807 + * 2. The requested range overlaps the start of an existing
149808 + * range, so we just update that range.
149809 + * 3. The requested range overlaps the end of an existing
149810 + * range, so we just update that range.
149811 + * 4. The requested range punches a hole in an existing range,
149812 + * so we have to update one side of the range and then
149813 + * create a new range for the other side.
149814 + */
149815 + if (page_range_in_range(range, pgstart, pgend)) {
149816 + ret |= range->purged;
149817 +
149818 + /* Case #1: Easy. Just nuke the whole thing. */
149819 + if (page_range_subsumes_range(range, pgstart, pgend)) {
149820 + range_del(range);
149821 + continue;
149822 + }
149823 +
149824 + /* Case #2: We overlap from the start, so adjust it */
149825 + if (range->pgstart >= pgstart) {
149826 + range_shrink(range, pgend + 1, range->pgend);
149827 + continue;
149828 + }
149829 +
149830 + /* Case #3: We overlap from the rear, so adjust it */
149831 + if (range->pgend <= pgend) {
149832 + range_shrink(range, range->pgstart, pgstart-1);
149833 + continue;
149834 + }
149835 +
149836 + /*
149837 + * Case #4: We eat a chunk out of the middle. A bit
149838 + * more complicated, we allocate a new range for the
149839 + * second half and adjust the first chunk's endpoint.
149840 + */
149841 + range_alloc(asma, range, range->purged,
149842 + pgend + 1, range->pgend);
149843 + range_shrink(range, range->pgstart, pgstart - 1);
149844 + break;
149845 + }
149846 + }
149847 +
149848 + return ret;
149849 +}
149850 +
149851 +/*
149852 + * ashmem_unpin - unpin the given range of pages. Returns zero on success.
149853 + *
149854 + * Caller must hold ashmem_mutex.
149855 + */
149856 +static int ashmem_unpin(struct ashmem_area *asma, size_t pgstart, size_t pgend)
149857 +{
149858 + struct ashmem_range *range, *next;
149859 + unsigned int purged = ASHMEM_NOT_PURGED;
149860 +
149861 +restart:
149862 + list_for_each_entry_safe(range, next, &asma->unpinned_list, unpinned) {
149863 + /* short circuit: this is our insertion point */
149864 + if (range_before_page(range, pgstart))
149865 + break;
149866 +
149867 + /*
149868 + * The user can ask us to unpin pages that are already entirely
149869 + * or partially pinned. We handle those two cases here.
149870 + */
149871 + if (page_range_subsumed_by_range(range, pgstart, pgend))
149872 + return 0;
149873 + if (page_range_in_range(range, pgstart, pgend)) {
149874 + pgstart = min_t(size_t, range->pgstart, pgstart),
149875 + pgend = max_t(size_t, range->pgend, pgend);
149876 + purged |= range->purged;
149877 + range_del(range);
149878 + goto restart;
149879 + }
149880 + }
149881 +
149882 + return range_alloc(asma, range, purged, pgstart, pgend);
149883 +}
149884 +
149885 +/*
149886 + * ashmem_get_pin_status - Returns ASHMEM_IS_UNPINNED if _any_ pages in the
149887 + * given interval are unpinned and ASHMEM_IS_PINNED otherwise.
149888 + *
149889 + * Caller must hold ashmem_mutex.
149890 + */
149891 +static int ashmem_get_pin_status(struct ashmem_area *asma, size_t pgstart,
149892 + size_t pgend)
149893 +{
149894 + struct ashmem_range *range;
149895 + int ret = ASHMEM_IS_PINNED;
149896 +
149897 + list_for_each_entry(range, &asma->unpinned_list, unpinned) {
149898 + if (range_before_page(range, pgstart))
149899 + break;
149900 + if (page_range_in_range(range, pgstart, pgend)) {
149901 + ret = ASHMEM_IS_UNPINNED;
149902 + break;
149903 + }
149904 + }
149905 +
149906 + return ret;
149907 +}
149908 +
149909 +static int ashmem_pin_unpin(struct ashmem_area *asma, unsigned long cmd,
149910 + void __user *p)
149911 +{
149912 + struct ashmem_pin pin;
149913 + size_t pgstart, pgend;
149914 + int ret = -EINVAL;
149915 +
149916 + if (unlikely(!asma->file))
149917 + return -EINVAL;
149918 +
149919 + if (unlikely(copy_from_user(&pin, p, sizeof(pin))))
149920 + return -EFAULT;
149921 +
149922 + /* per custom, you can pass zero for len to mean "everything onward" */
149923 + if (!pin.len)
149924 + pin.len = asma->size - pin.offset;
149925 +
149926 + if (unlikely((pin.offset | pin.len) & ~PAGE_MASK))
149927 + return -EINVAL;
149928 +
149929 + if (unlikely(((__u32) -1) - pin.offset < pin.len))
149930 + return -EINVAL;
149931 +
149932 + if (unlikely(asma->size < pin.offset + pin.len))
149933 + return -EINVAL;
149934 +
149935 + pgstart = pin.offset / PAGE_SIZE;
149936 + pgend = pgstart + (pin.len / PAGE_SIZE) - 1;
149937 +
149938 + mutex_lock(&ashmem_mutex);
149939 +
149940 + switch (cmd) {
149941 + case ASHMEM_PIN:
149942 + ret = ashmem_pin(asma, pgstart, pgend);
149943 + break;
149944 + case ASHMEM_UNPIN:
149945 + ret = ashmem_unpin(asma, pgstart, pgend);
149946 + break;
149947 + case ASHMEM_GET_PIN_STATUS:
149948 + ret = ashmem_get_pin_status(asma, pgstart, pgend);
149949 + break;
149950 + }
149951 +
149952 + mutex_unlock(&ashmem_mutex);
149953 +
149954 + return ret;
149955 +}
149956 +
149957 +static long ashmem_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
149958 +{
149959 + struct ashmem_area *asma = file->private_data;
149960 + long ret = -ENOTTY;
149961 +
149962 + switch (cmd) {
149963 + case ASHMEM_SET_NAME:
149964 + ret = set_name(asma, (void __user *) arg);
149965 + break;
149966 + case ASHMEM_GET_NAME:
149967 + ret = get_name(asma, (void __user *) arg);
149968 + break;
149969 + case ASHMEM_SET_SIZE:
149970 + ret = -EINVAL;
149971 + if (!asma->file && !(arg & ~PAGE_MASK)) {
149972 + ret = 0;
149973 + asma->size = (size_t) arg;
149974 + }
149975 + break;
149976 + case ASHMEM_GET_SIZE:
149977 + ret = asma->size;
149978 + break;
149979 + case ASHMEM_SET_PROT_MASK:
149980 + ret = set_prot_mask(asma, arg);
149981 + break;
149982 + case ASHMEM_GET_PROT_MASK:
149983 + ret = asma->prot_mask;
149984 + break;
149985 + case ASHMEM_PIN:
149986 + case ASHMEM_UNPIN:
149987 + case ASHMEM_GET_PIN_STATUS:
149988 + ret = ashmem_pin_unpin(asma, cmd, (void __user *) arg);
149989 + break;
149990 + case ASHMEM_PURGE_ALL_CACHES:
149991 + ret = -EPERM;
149992 + if (capable(CAP_SYS_ADMIN)) {
149993 + ret = ashmem_shrink(0, GFP_KERNEL);
149994 + ashmem_shrink(ret, GFP_KERNEL);
149995 + }
149996 + break;
149997 + }
149998 +
149999 + return ret;
150000 +}
150001 +
150002 +static struct file_operations ashmem_fops = {
150003 + .owner = THIS_MODULE,
150004 + .open = ashmem_open,
150005 + .release = ashmem_release,
150006 + .mmap = ashmem_mmap,
150007 + .unlocked_ioctl = ashmem_ioctl,
150008 + .compat_ioctl = ashmem_ioctl,
150009 +};
150010 +
150011 +static struct miscdevice ashmem_misc = {
150012 + .minor = MISC_DYNAMIC_MINOR,
150013 + .name = "ashmem",
150014 + .fops = &ashmem_fops,
150015 +};
150016 +
150017 +static int __init ashmem_init(void)
150018 +{
150019 + int ret;
150020 +
150021 + ashmem_area_cachep = kmem_cache_create("ashmem_area_cache",
150022 + sizeof(struct ashmem_area),
150023 + 0, 0, NULL);
150024 + if (unlikely(!ashmem_area_cachep)) {
150025 + printk(KERN_ERR "ashmem: failed to create slab cache\n");
150026 + return -ENOMEM;
150027 + }
150028 +
150029 + ashmem_range_cachep = kmem_cache_create("ashmem_range_cache",
150030 + sizeof(struct ashmem_range),
150031 + 0, 0, NULL);
150032 + if (unlikely(!ashmem_range_cachep)) {
150033 + printk(KERN_ERR "ashmem: failed to create slab cache\n");
150034 + return -ENOMEM;
150035 + }
150036 +
150037 + ret = misc_register(&ashmem_misc);
150038 + if (unlikely(ret)) {
150039 + printk(KERN_ERR "ashmem: failed to register misc device!\n");
150040 + return ret;
150041 + }
150042 +
150043 + register_shrinker(&ashmem_shrinker);
150044 +
150045 + printk(KERN_INFO "ashmem: initialized\n");
150046 +
150047 + return 0;
150048 +}
150049 +
150050 +static void __exit ashmem_exit(void)
150051 +{
150052 + int ret;
150053 +
150054 + unregister_shrinker(&ashmem_shrinker);
150055 +
150056 + ret = misc_deregister(&ashmem_misc);
150057 + if (unlikely(ret))
150058 + printk(KERN_ERR "ashmem: failed to unregister misc device!\n");
150059 +
150060 + kmem_cache_destroy(ashmem_range_cachep);
150061 + kmem_cache_destroy(ashmem_area_cachep);
150062 +
150063 + printk(KERN_INFO "ashmem: unloaded\n");
150064 +}
150065 +
150066 +module_init(ashmem_init);
150067 +module_exit(ashmem_exit);
150068 +
150069 +MODULE_LICENSE("GPL");
150070 Index: linux-2.6.28/mm/Makefile
150071 ===================================================================
150072 --- linux-2.6.28.orig/mm/Makefile 2008-12-25 00:26:37.000000000 +0100
150073 +++ linux-2.6.28/mm/Makefile 2009-01-02 00:01:57.000000000 +0100
150074 @@ -22,6 +22,7 @@ obj-$(CONFIG_NUMA) += mempolicy.o
150075 obj-$(CONFIG_SPARSEMEM) += sparse.o
150076 obj-$(CONFIG_SPARSEMEM_VMEMMAP) += sparse-vmemmap.o
150077 obj-$(CONFIG_SHMEM) += shmem.o
150078 +obj-$(CONFIG_ASHMEM) += ashmem.o
150079 obj-$(CONFIG_TMPFS_POSIX_ACL) += shmem_acl.o
150080 obj-$(CONFIG_TINY_SHMEM) += tiny-shmem.o
150081 obj-$(CONFIG_SLOB) += slob.o
150082 Index: linux-2.6.28/mm/shmem.c
150083 ===================================================================
150084 --- linux-2.6.28.orig/mm/shmem.c 2008-12-25 00:26:37.000000000 +0100
150085 +++ linux-2.6.28/mm/shmem.c 2009-01-02 00:01:57.000000000 +0100
150086 @@ -2587,6 +2587,14 @@ put_memory:
150087 }
150088 EXPORT_SYMBOL_GPL(shmem_file_setup);
150089
150090 +void shmem_set_file(struct vm_area_struct *vma, struct file *file)
150091 +{
150092 + if (vma->vm_file)
150093 + fput(vma->vm_file);
150094 + vma->vm_file = file;
150095 + vma->vm_ops = &shmem_vm_ops;
150096 +}
150097 +
150098 /**
150099 * shmem_zero_setup - setup a shared anonymous mapping
150100 * @vma: the vma to be mmapped is prepared by do_mmap_pgoff
150101 @@ -2600,9 +2608,7 @@ int shmem_zero_setup(struct vm_area_stru
150102 if (IS_ERR(file))
150103 return PTR_ERR(file);
150104
150105 - if (vma->vm_file)
150106 - fput(vma->vm_file);
150107 - vma->vm_file = file;
150108 - vma->vm_ops = &shmem_vm_ops;
150109 + shmem_set_file(vma, file);
150110 +
150111 return 0;
150112 }
150113 Index: linux-2.6.28/mm/tiny-shmem.c
150114 ===================================================================
150115 --- linux-2.6.28.orig/mm/tiny-shmem.c 2008-12-25 00:26:37.000000000 +0100
150116 +++ linux-2.6.28/mm/tiny-shmem.c 2009-01-02 00:01:57.000000000 +0100
150117 @@ -97,6 +97,22 @@ put_memory:
150118 }
150119 EXPORT_SYMBOL_GPL(shmem_file_setup);
150120
150121 +void shmem_set_file(struct vm_area_struct *vma, struct file *file)
150122 +{
150123 + if (vma->vm_file)
150124 + fput(vma->vm_file);
150125 + vma->vm_file = file;
150126 + vma->vm_ops = &generic_file_vm_ops;
150127 +}
150128 +
150129 +void shmem_set_file(struct vm_area_struct *vma, struct file *file)
150130 +{
150131 + if (vma->vm_file)
150132 + fput(vma->vm_file);
150133 + vma->vm_file = file;
150134 + vma->vm_ops = &generic_file_vm_ops;
150135 +}
150136 +
150137 /**
150138 * shmem_zero_setup - setup a shared anonymous mapping
150139 * @vma: the vma to be mmapped is prepared by do_mmap_pgoff
150140 @@ -110,10 +126,8 @@ int shmem_zero_setup(struct vm_area_stru
150141 if (IS_ERR(file))
150142 return PTR_ERR(file);
150143
150144 - if (vma->vm_file)
150145 - fput(vma->vm_file);
150146 - vma->vm_file = file;
150147 - vma->vm_ops = &generic_file_vm_ops;
150148 + shmem_set_file(vma, file);
150149 +
150150 return 0;
150151 }
150152
150153 Index: linux-2.6.28/remote_install_sdcard
150154 ===================================================================
150155 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
150156 +++ linux-2.6.28/remote_install_sdcard 2009-01-02 00:01:58.000000000 +0100
150157 @@ -0,0 +1,18 @@
150158 +#!/bin/sh
150159 +
150160 +# automatic kernel updater and reboot - Andy Green <andy@openmoko.com>
150161 +
150162 +GTA_DEVICE_IP=192.168.0.202
150163 +
150164 +# you should set up key-based auth on dropbear if you want
150165 +# to play this game.
150166 +#
150167 +# 1) mkdir /home/root/.ssh
150168 +# 2) chown root:root / /home /home/root
150169 +# 3) chmod 700 /home/root /home/root/.ssh
150170 +# 4) copy your id_*.pub into /home/root/.ssh/authorized_keys
150171 +# 5) chmod 600 /home/root/.ssh/*
150172 +
150173 +scp uImage.bin root@$GTA_DEVICE_IP:/boot
150174 +ssh root@$GTA_DEVICE_IP "mount /dev/mmcblk0p1 / -oremount,ro ; reboot -if &"
150175 +
150176 Index: linux-2.6.28/scripts/mkuboot.sh
150177 ===================================================================
150178 --- linux-2.6.28.orig/scripts/mkuboot.sh 2008-12-25 00:26:37.000000000 +0100
150179 +++ linux-2.6.28/scripts/mkuboot.sh 2009-01-02 00:01:58.000000000 +0100
150180 @@ -11,7 +11,7 @@ if [ -z "${MKIMAGE}" ]; then
150181 if [ -z "${MKIMAGE}" ]; then
150182 # Doesn't exist
150183 echo '"mkimage" command not found - U-Boot images will not be built' >&2
150184 - exit 0;
150185 + exit 1;
150186 fi
150187 fi
150188
150189 Index: linux-2.6.28/sound/soc/codecs/wm8753.c
150190 ===================================================================
150191 --- linux-2.6.28.orig/sound/soc/codecs/wm8753.c 2008-12-25 00:26:37.000000000 +0100
150192 +++ linux-2.6.28/sound/soc/codecs/wm8753.c 2009-01-02 00:01:58.000000000 +0100
150193 @@ -1584,6 +1584,9 @@ static int wm8753_init(struct snd_soc_de
150194 schedule_delayed_work(&codec->delayed_work,
150195 msecs_to_jiffies(caps_charge));
150196
150197 + /* Fix reg WM8753_ADCTL2 */
150198 + wm8753_write(codec, WM8753_ADCTL2, 0x0000);
150199 +
150200 /* set the update bits */
150201 reg = wm8753_read_reg_cache(codec, WM8753_LDAC);
150202 wm8753_write(codec, WM8753_LDAC, reg | 0x0100);
150203 @@ -1644,17 +1647,20 @@ static int wm8753_i2c_probe(struct i2c_c
150204 struct snd_soc_codec *codec = socdev->codec;
150205 int ret;
150206
150207 + /* codec->control_data must be set before call to wm8753_init */
150208 i2c_set_clientdata(i2c, codec);
150209 codec->control_data = i2c;
150210
150211 ret = wm8753_init(socdev);
150212 - if (ret < 0)
150213 + if (ret < 0) {
150214 pr_err("failed to initialise WM8753\n");
150215 + codec->control_data = NULL;
150216 + }
150217
150218 return ret;
150219 }
150220
150221 -static int wm8753_i2c_remove(struct i2c_client *client)
150222 +static int __devexit wm8753_i2c_remove(struct i2c_client *client)
150223 {
150224 struct snd_soc_codec *codec = i2c_get_clientdata(client);
150225 kfree(codec->reg_cache);
150226 @@ -1675,6 +1681,7 @@ static struct i2c_driver wm8753_i2c_driv
150227 .probe = wm8753_i2c_probe,
150228 .remove = wm8753_i2c_remove,
150229 .id_table = wm8753_i2c_id,
150230 + .class = I2C_CLASS_SOUND
150231 };
150232
150233 static int wm8753_add_i2c_device(struct platform_device *pdev,
150234 @@ -1716,6 +1723,8 @@ err_driver:
150235 i2c_del_driver(&wm8753_i2c_driver);
150236 return -ENODEV;
150237 }
150238 +
150239 +
150240 #endif
150241
150242 #if defined(CONFIG_SPI_MASTER)
150243 @@ -1783,7 +1792,7 @@ static int wm8753_probe(struct platform_
150244 struct wm8753_priv *wm8753;
150245 int ret = 0;
150246
150247 - pr_info("WM8753 Audio Codec %s", WM8753_VERSION);
150248 + pr_info("WM8753 Audio Codec %s\n", WM8753_VERSION);
150249
150250 setup = socdev->codec_data;
150251 codec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL);
150252 @@ -1820,6 +1829,7 @@ static int wm8753_probe(struct platform_
150253 #endif
150254
150255 if (ret != 0) {
150256 + printk(KERN_ERR "can't add codec bus driver\n");
150257 kfree(codec->private_data);
150258 kfree(codec);
150259 }
150260 @@ -1857,7 +1867,6 @@ static int wm8753_remove(struct platform
150261 snd_soc_free_pcms(socdev);
150262 snd_soc_dapm_free(socdev);
150263 #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
150264 - i2c_unregister_device(codec->control_data);
150265 i2c_del_driver(&wm8753_i2c_driver);
150266 #endif
150267 #if defined(CONFIG_SPI_MASTER)
150268 Index: linux-2.6.28/sound/soc/s3c24xx/Kconfig
150269 ===================================================================
150270 --- linux-2.6.28.orig/sound/soc/s3c24xx/Kconfig 2008-12-25 00:26:37.000000000 +0100
150271 +++ linux-2.6.28/sound/soc/s3c24xx/Kconfig 2009-01-02 00:01:58.000000000 +0100
150272 @@ -26,6 +26,15 @@ config SND_S3C24XX_SOC_NEO1973_WM8753
150273 Say Y if you want to add support for SoC audio on smdk2440
150274 with the WM8753.
150275
150276 +config SND_S3C24XX_SOC_NEO1973_GTA02_WM8753
150277 + tristate "SoC I2S Audio support for NEO1973 GTA02 - WM8753"
150278 + depends on SND_S3C24XX_SOC && MACH_NEO1973_GTA02
150279 + select SND_S3C24XX_SOC_I2S
150280 + select SND_SOC_WM8753
150281 + help
150282 + Say Y if you want to add support for SoC audio on neo1973 gta02
150283 + with the WM8753 codec
150284 +
150285 config SND_S3C24XX_SOC_SMDK2443_WM9710
150286 tristate "SoC AC97 Audio support for SMDK2443 - WM9710"
150287 depends on SND_S3C24XX_SOC && MACH_SMDK2443
150288 Index: linux-2.6.28/sound/soc/s3c24xx/Makefile
150289 ===================================================================
150290 --- linux-2.6.28.orig/sound/soc/s3c24xx/Makefile 2008-12-25 00:26:37.000000000 +0100
150291 +++ linux-2.6.28/sound/soc/s3c24xx/Makefile 2009-01-02 00:01:58.000000000 +0100
150292 @@ -13,7 +13,10 @@ obj-$(CONFIG_SND_S3C2412_SOC_I2S) += snd
150293 snd-soc-neo1973-wm8753-objs := neo1973_wm8753.o
150294 snd-soc-smdk2443-wm9710-objs := smdk2443_wm9710.o
150295 snd-soc-ln2440sbc-alc650-objs := ln2440sbc_alc650.o
150296 +snd-soc-neo1973-gta02-wm8753-objs := neo1973_gta02_wm8753.o
150297
150298 obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o
150299 obj-$(CONFIG_SND_S3C24XX_SOC_SMDK2443_WM9710) += snd-soc-smdk2443-wm9710.o
150300 obj-$(CONFIG_SND_S3C24XX_SOC_LN2440SBC_ALC650) += snd-soc-ln2440sbc-alc650.o
150301 +obj-$(CONFIG_SND_S3C24XX_SOC_NEO1973_GTA02_WM8753) += snd-soc-neo1973-gta02-wm8753.o
150302 +
150303 Index: linux-2.6.28/sound/soc/s3c24xx/neo1973_gta02_wm8753.c
150304 ===================================================================
150305 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
150306 +++ linux-2.6.28/sound/soc/s3c24xx/neo1973_gta02_wm8753.c 2009-01-02 00:01:58.000000000 +0100
150307 @@ -0,0 +1,673 @@
150308 +/*
150309 + * neo1973_gta02_wm8753.c -- SoC audio for Neo1973
150310 + *
150311 + * Copyright 2007 Openmoko Inc
150312 + * Author: Graeme Gregory <graeme@openmoko.org>
150313 + * Copyright 2007 Wolfson Microelectronics PLC.
150314 + * Author: Graeme Gregory <linux@wolfsonmicro.com>
150315 + *
150316 + * This program is free software; you can redistribute it and/or modify it
150317 + * under the terms of the GNU General Public License as published by the
150318 + * Free Software Foundation; either version 2 of the License, or (at your
150319 + * option) any later version.
150320 + *
150321 + * Revision history
150322 + * 06th Nov 2007 Changed from GTA01 to GTA02
150323 + * 20th Jan 2007 Initial version.
150324 + * 05th Feb 2007 Rename all to Neo1973
150325 + *
150326 + */
150327 +
150328 +#include <linux/module.h>
150329 +#include <linux/moduleparam.h>
150330 +#include <linux/timer.h>
150331 +#include <linux/interrupt.h>
150332 +#include <linux/platform_device.h>
150333 +#include <linux/i2c.h>
150334 +#include <sound/core.h>
150335 +#include <sound/pcm.h>
150336 +#include <sound/soc.h>
150337 +#include <sound/soc-dapm.h>
150338 +
150339 +#include <asm/mach-types.h>
150340 +#include <asm/hardware/scoop.h>
150341 +#include <asm/plat-s3c24xx/regs-iis.h>
150342 +#include <mach/regs-clock.h>
150343 +#include <mach/regs-gpio.h>
150344 +#include <mach/hardware.h>
150345 +#include <mach/audio.h>
150346 +#include <asm/io.h>
150347 +#include <mach/spi-gpio.h>
150348 +#include <mach/regs-gpioj.h>
150349 +#include <mach/gta02.h>
150350 +#include "../codecs/wm8753.h"
150351 +#include "s3c24xx-pcm.h"
150352 +#include "s3c24xx-i2s.h"
150353 +
150354 +/* define the scenarios */
150355 +#define NEO_AUDIO_OFF 0
150356 +#define NEO_GSM_CALL_AUDIO_HANDSET 1
150357 +#define NEO_GSM_CALL_AUDIO_HEADSET 2
150358 +#define NEO_GSM_CALL_AUDIO_BLUETOOTH 3
150359 +#define NEO_STEREO_TO_SPEAKERS 4
150360 +#define NEO_STEREO_TO_HEADPHONES 5
150361 +#define NEO_CAPTURE_HANDSET 6
150362 +#define NEO_CAPTURE_HEADSET 7
150363 +#define NEO_CAPTURE_BLUETOOTH 8
150364 +#define NEO_STEREO_TO_HANDSET_SPK 9
150365 +
150366 +static struct snd_soc_machine neo1973_gta02;
150367 +
150368 +static int neo1973_gta02_hifi_hw_params(struct snd_pcm_substream *substream,
150369 + struct snd_pcm_hw_params *params)
150370 +{
150371 + struct snd_soc_pcm_runtime *rtd = substream->private_data;
150372 + struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
150373 + struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
150374 + unsigned int pll_out = 0, bclk = 0;
150375 + int ret = 0;
150376 + unsigned long iis_clkrate;
150377 +
150378 + iis_clkrate = s3c24xx_i2s_get_clockrate();
150379 +
150380 + switch (params_rate(params)) {
150381 + case 8000:
150382 + case 16000:
150383 + pll_out = 12288000;
150384 + break;
150385 + case 48000:
150386 + bclk = WM8753_BCLK_DIV_4;
150387 + pll_out = 12288000;
150388 + break;
150389 + case 96000:
150390 + bclk = WM8753_BCLK_DIV_2;
150391 + pll_out = 12288000;
150392 + break;
150393 + case 11025:
150394 + bclk = WM8753_BCLK_DIV_16;
150395 + pll_out = 11289600;
150396 + break;
150397 + case 22050:
150398 + bclk = WM8753_BCLK_DIV_8;
150399 + pll_out = 11289600;
150400 + break;
150401 + case 44100:
150402 + bclk = WM8753_BCLK_DIV_4;
150403 + pll_out = 11289600;
150404 + break;
150405 + case 88200:
150406 + bclk = WM8753_BCLK_DIV_2;
150407 + pll_out = 11289600;
150408 + break;
150409 + }
150410 +
150411 + /* set codec DAI configuration */
150412 + ret = codec_dai->dai_ops.set_fmt(codec_dai,
150413 + SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
150414 + SND_SOC_DAIFMT_CBM_CFM);
150415 + if (ret < 0)
150416 + return ret;
150417 +
150418 + /* set cpu DAI configuration */
150419 + ret = cpu_dai->dai_ops.set_fmt(cpu_dai,
150420 + SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
150421 + SND_SOC_DAIFMT_CBM_CFM);
150422 + if (ret < 0)
150423 + return ret;
150424 +
150425 + /* set the codec system clock for DAC and ADC */
150426 + ret = codec_dai->dai_ops.set_sysclk(codec_dai, WM8753_MCLK, pll_out,
150427 + SND_SOC_CLOCK_IN);
150428 + if (ret < 0)
150429 + return ret;
150430 +
150431 + /* set MCLK division for sample rate */
150432 + ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_MCLK,
150433 + S3C2410_IISMOD_32FS );
150434 + if (ret < 0)
150435 + return ret;
150436 +
150437 + /* set codec BCLK division for sample rate */
150438 + ret = codec_dai->dai_ops.set_clkdiv(codec_dai,
150439 + WM8753_BCLKDIV, bclk);
150440 + if (ret < 0)
150441 + return ret;
150442 +
150443 + /* set prescaler division for sample rate */
150444 + ret = cpu_dai->dai_ops.set_clkdiv(cpu_dai, S3C24XX_DIV_PRESCALER,
150445 + S3C24XX_PRESCALE(4,4));
150446 + if (ret < 0)
150447 + return ret;
150448 +
150449 + /* codec PLL input is PCLK/4 */
150450 + ret = codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL1,
150451 + iis_clkrate / 4, pll_out);
150452 + if (ret < 0)
150453 + return ret;
150454 +
150455 + return 0;
150456 +}
150457 +
150458 +static int neo1973_gta02_hifi_hw_free(struct snd_pcm_substream *substream)
150459 +{
150460 + struct snd_soc_pcm_runtime *rtd = substream->private_data;
150461 + struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
150462 +
150463 + /* disable the PLL */
150464 + return codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL1, 0, 0);
150465 +}
150466 +
150467 +/*
150468 + * Neo1973 WM8753 HiFi DAI opserations.
150469 + */
150470 +static struct snd_soc_ops neo1973_gta02_hifi_ops = {
150471 + .hw_params = neo1973_gta02_hifi_hw_params,
150472 + .hw_free = neo1973_gta02_hifi_hw_free,
150473 +};
150474 +
150475 +static int neo1973_gta02_voice_hw_params(
150476 + struct snd_pcm_substream *substream,
150477 + struct snd_pcm_hw_params *params)
150478 +{
150479 + struct snd_soc_pcm_runtime *rtd = substream->private_data;
150480 + struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
150481 + unsigned int pcmdiv = 0;
150482 + int ret = 0;
150483 + unsigned long iis_clkrate;
150484 +
150485 + iis_clkrate = s3c24xx_i2s_get_clockrate();
150486 +
150487 + if (params_rate(params) != 8000)
150488 + return -EINVAL;
150489 + if (params_channels(params) != 1)
150490 + return -EINVAL;
150491 +
150492 + pcmdiv = WM8753_PCM_DIV_6; /* 2.048 MHz */
150493 +
150494 + /* todo: gg check mode (DSP_B) against CSR datasheet */
150495 + /* set codec DAI configuration */
150496 + ret = codec_dai->dai_ops.set_fmt(codec_dai, SND_SOC_DAIFMT_DSP_B |
150497 + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS);
150498 + if (ret < 0)
150499 + return ret;
150500 +
150501 + /* set the codec system clock for DAC and ADC */
150502 + ret = codec_dai->dai_ops.set_sysclk(codec_dai, WM8753_PCMCLK,
150503 + 12288000, SND_SOC_CLOCK_IN);
150504 + if (ret < 0)
150505 + return ret;
150506 +
150507 + /* set codec PCM division for sample rate */
150508 + ret = codec_dai->dai_ops.set_clkdiv(codec_dai, WM8753_PCMDIV,
150509 + pcmdiv);
150510 + if (ret < 0)
150511 + return ret;
150512 +
150513 + /* configue and enable PLL for 12.288MHz output */
150514 + ret = codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL2,
150515 + iis_clkrate / 4, 12288000);
150516 + if (ret < 0)
150517 + return ret;
150518 +
150519 + return 0;
150520 +}
150521 +
150522 +static int neo1973_gta02_voice_hw_free(struct snd_pcm_substream *substream)
150523 +{
150524 + struct snd_soc_pcm_runtime *rtd = substream->private_data;
150525 + struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
150526 +
150527 + /* disable the PLL */
150528 + return codec_dai->dai_ops.set_pll(codec_dai, WM8753_PLL2, 0, 0);
150529 +}
150530 +
150531 +static struct snd_soc_ops neo1973_gta02_voice_ops = {
150532 + .hw_params = neo1973_gta02_voice_hw_params,
150533 + .hw_free = neo1973_gta02_voice_hw_free,
150534 +};
150535 +
150536 +#define LM4853_AMP 1
150537 +#define LM4853_SPK 2
150538 +
150539 +static u8 lm4853_state=0;
150540 +
150541 +static int lm4853_set_state(struct snd_kcontrol *kcontrol,
150542 + struct snd_ctl_elem_value *ucontrol)
150543 +{
150544 + int val = ucontrol->value.integer.value[0];
150545 +
150546 + if(val) {
150547 + lm4853_state |= LM4853_AMP;
150548 + s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT,0);
150549 + } else {
150550 + lm4853_state &= ~LM4853_AMP;
150551 + s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT,1);
150552 + }
150553 +
150554 + return 0;
150555 +}
150556 +
150557 +static int lm4853_get_state(struct snd_kcontrol *kcontrol,
150558 + struct snd_ctl_elem_value *ucontrol)
150559 +{
150560 + ucontrol->value.integer.value[0] = lm4853_state & LM4853_AMP;
150561 +
150562 + return 0;
150563 +}
150564 +
150565 +static int lm4853_set_spk(struct snd_kcontrol *kcontrol,
150566 + struct snd_ctl_elem_value *ucontrol)
150567 +{
150568 + int val = ucontrol->value.integer.value[0];
150569 +
150570 + if(val) {
150571 + lm4853_state |= LM4853_SPK;
150572 + s3c2410_gpio_setpin(GTA02_GPIO_HP_IN,0);
150573 + } else {
150574 + lm4853_state &= ~LM4853_SPK;
150575 + s3c2410_gpio_setpin(GTA02_GPIO_HP_IN,1);
150576 + }
150577 +
150578 + return 0;
150579 +}
150580 +
150581 +static int lm4853_get_spk(struct snd_kcontrol *kcontrol,
150582 + struct snd_ctl_elem_value *ucontrol)
150583 +{
150584 + ucontrol->value.integer.value[0] = (lm4853_state & LM4853_SPK) >> 1;
150585 +
150586 + return 0;
150587 +}
150588 +
150589 +static int neo1973_gta02_set_stereo_out(struct snd_kcontrol *kcontrol,
150590 + struct snd_ctl_elem_value *ucontrol)
150591 +{
150592 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150593 + int val = ucontrol->value.integer.value[0];
150594 +
150595 + snd_soc_dapm_set_endpoint(codec, "Stereo Out", val);
150596 +
150597 + snd_soc_dapm_sync(codec);
150598 +
150599 + return 0;
150600 +}
150601 +
150602 +static int neo1973_gta02_get_stereo_out(struct snd_kcontrol *kcontrol,
150603 + struct snd_ctl_elem_value *ucontrol)
150604 +{
150605 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150606 +
150607 + ucontrol->value.integer.value[0] =
150608 + snd_soc_dapm_get_endpoint(codec, "Stereo Out");
150609 +
150610 + return 0;
150611 +}
150612 +
150613 +
150614 +static int neo1973_gta02_set_gsm_out(struct snd_kcontrol *kcontrol,
150615 + struct snd_ctl_elem_value *ucontrol)
150616 +{
150617 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150618 + int val = ucontrol->value.integer.value[0];
150619 +
150620 + snd_soc_dapm_set_endpoint(codec, "GSM Line Out", val);
150621 +
150622 + snd_soc_dapm_sync(codec);
150623 +
150624 + return 0;
150625 +}
150626 +
150627 +static int neo1973_gta02_get_gsm_out(struct snd_kcontrol *kcontrol,
150628 + struct snd_ctl_elem_value *ucontrol)
150629 +{
150630 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150631 +
150632 + ucontrol->value.integer.value[0] =
150633 + snd_soc_dapm_get_endpoint(codec, "GSM Line Out");
150634 +
150635 + return 0;
150636 +}
150637 +
150638 +static int neo1973_gta02_set_gsm_in(struct snd_kcontrol *kcontrol,
150639 + struct snd_ctl_elem_value *ucontrol)
150640 +{
150641 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150642 + int val = ucontrol->value.integer.value[0];
150643 +
150644 + snd_soc_dapm_set_endpoint(codec, "GSM Line In", val);
150645 +
150646 + snd_soc_dapm_sync(codec);
150647 +
150648 + return 0;
150649 +}
150650 +
150651 +static int neo1973_gta02_get_gsm_in(struct snd_kcontrol *kcontrol,
150652 + struct snd_ctl_elem_value *ucontrol)
150653 +{
150654 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150655 +
150656 + ucontrol->value.integer.value[0] =
150657 + snd_soc_dapm_get_endpoint(codec, "GSM Line In");
150658 +
150659 + return 0;
150660 +}
150661 +
150662 +static int neo1973_gta02_set_headset_mic(struct snd_kcontrol *kcontrol,
150663 + struct snd_ctl_elem_value *ucontrol)
150664 +{
150665 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150666 + int val = ucontrol->value.integer.value[0];
150667 +
150668 + snd_soc_dapm_set_endpoint(codec, "Headset Mic", val);
150669 +
150670 + snd_soc_dapm_sync(codec);
150671 +
150672 + return 0;
150673 +}
150674 +
150675 +static int neo1973_gta02_get_headset_mic(struct snd_kcontrol *kcontrol,
150676 + struct snd_ctl_elem_value *ucontrol)
150677 +{
150678 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150679 +
150680 + ucontrol->value.integer.value[0] =
150681 + snd_soc_dapm_get_endpoint(codec, "Headset Mic");
150682 +
150683 + return 0;
150684 +}
150685 +
150686 +static int neo1973_gta02_set_handset_mic(struct snd_kcontrol *kcontrol,
150687 + struct snd_ctl_elem_value *ucontrol)
150688 +{
150689 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150690 + int val = ucontrol->value.integer.value[0];
150691 +
150692 + snd_soc_dapm_set_endpoint(codec, "Handset Mic", val);
150693 +
150694 + snd_soc_dapm_sync(codec);
150695 +
150696 + return 0;
150697 +}
150698 +
150699 +static int neo1973_gta02_get_handset_mic(struct snd_kcontrol *kcontrol,
150700 + struct snd_ctl_elem_value *ucontrol)
150701 +{
150702 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150703 +
150704 + ucontrol->value.integer.value[0] =
150705 + snd_soc_dapm_get_endpoint(codec, "Handset Mic");
150706 +
150707 + return 0;
150708 +}
150709 +
150710 +static int neo1973_gta02_set_handset_spk(struct snd_kcontrol *kcontrol,
150711 + struct snd_ctl_elem_value *ucontrol)
150712 +{
150713 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150714 + int val = ucontrol->value.integer.value[0];
150715 +
150716 + snd_soc_dapm_set_endpoint(codec, "Handset Spk", val);
150717 +
150718 + snd_soc_dapm_sync(codec);
150719 +
150720 + return 0;
150721 +}
150722 +
150723 +static int neo1973_gta02_get_handset_spk(struct snd_kcontrol *kcontrol,
150724 + struct snd_ctl_elem_value *ucontrol)
150725 +{
150726 + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
150727 +
150728 + ucontrol->value.integer.value[0] =
150729 + snd_soc_dapm_get_endpoint(codec, "Handset Spk");
150730 +
150731 + return 0;
150732 +}
150733 +
150734 +static const struct snd_soc_dapm_widget wm8753_dapm_widgets[] = {
150735 + SND_SOC_DAPM_LINE("Stereo Out", NULL),
150736 + SND_SOC_DAPM_LINE("GSM Line Out", NULL),
150737 + SND_SOC_DAPM_LINE("GSM Line In", NULL),
150738 + SND_SOC_DAPM_MIC("Headset Mic", NULL),
150739 + SND_SOC_DAPM_MIC("Handset Mic", NULL),
150740 + SND_SOC_DAPM_SPK("Handset Spk", NULL),
150741 +};
150742 +
150743 +
150744 +/* example machine audio_mapnections */
150745 +static const char* audio_map[][3] = {
150746 +
150747 + /* Connections to the lm4853 amp */
150748 + {"Stereo Out", NULL, "LOUT1"},
150749 + {"Stereo Out", NULL, "ROUT1"},
150750 +
150751 + /* Connections to the GSM Module */
150752 + {"GSM Line Out", NULL, "MONO1"},
150753 + {"GSM Line Out", NULL, "MONO2"},
150754 + {"RXP", NULL, "GSM Line In"},
150755 + {"RXN", NULL, "GSM Line In"},
150756 +
150757 + /* Connections to Headset */
150758 + {"MIC1", NULL, "Mic Bias"},
150759 + {"Mic Bias", NULL, "Headset Mic"},
150760 +
150761 + /* Call Mic */
150762 + {"MIC2", NULL, "Mic Bias"},
150763 + {"MIC2N", NULL, "Mic Bias"},
150764 + {"Mic Bias", NULL, "Handset Mic"},
150765 +
150766 + /* Call Speaker */
150767 + {"Handset Spk", NULL, "LOUT2"},
150768 + {"Handset Spk", NULL, "ROUT2"},
150769 +
150770 + /* Connect the ALC pins */
150771 + {"ACIN", NULL, "ACOP"},
150772 +
150773 + {NULL, NULL, NULL},
150774 +};
150775 +
150776 +static const struct snd_kcontrol_new wm8753_neo1973_gta02_controls[] = {
150777 + SOC_SINGLE_EXT("DAPM Stereo Out Switch", 0, 0, 1, 0,
150778 + neo1973_gta02_get_stereo_out,
150779 + neo1973_gta02_set_stereo_out),
150780 + SOC_SINGLE_EXT("DAPM GSM Line Out Switch", 1, 0, 1, 0,
150781 + neo1973_gta02_get_gsm_out,
150782 + neo1973_gta02_set_gsm_out),
150783 + SOC_SINGLE_EXT("DAPM GSM Line In Switch", 2, 0, 1, 0,
150784 + neo1973_gta02_get_gsm_in,
150785 + neo1973_gta02_set_gsm_in),
150786 + SOC_SINGLE_EXT("DAPM Headset Mic Switch", 3, 0, 1, 0,
150787 + neo1973_gta02_get_headset_mic,
150788 + neo1973_gta02_set_headset_mic),
150789 + SOC_SINGLE_EXT("DAPM Handset Mic Switch", 4, 0, 1, 0,
150790 + neo1973_gta02_get_handset_mic,
150791 + neo1973_gta02_set_handset_mic),
150792 + SOC_SINGLE_EXT("DAPM Handset Spk Switch", 5, 0, 1, 0,
150793 + neo1973_gta02_get_handset_spk,
150794 + neo1973_gta02_set_handset_spk),
150795 + SOC_SINGLE_EXT("Amp State Switch", 6, 0, 1, 0,
150796 + lm4853_get_state,
150797 + lm4853_set_state),
150798 + SOC_SINGLE_EXT("Amp Spk Switch", 7, 0, 1, 0,
150799 + lm4853_get_spk,
150800 + lm4853_set_spk),
150801 +};
150802 +
150803 +/*
150804 + * This is an example machine initialisation for a wm8753 connected to a
150805 + * neo1973 GTA02.
150806 + */
150807 +static int neo1973_gta02_wm8753_init(struct snd_soc_codec *codec)
150808 +{
150809 + int i, err;
150810 +
150811 + /* set up NC codec pins */
150812 + snd_soc_dapm_set_endpoint(codec, "OUT3", 0);
150813 + snd_soc_dapm_set_endpoint(codec, "OUT4", 0);
150814 + snd_soc_dapm_set_endpoint(codec, "LINE1", 0);
150815 + snd_soc_dapm_set_endpoint(codec, "LINE2", 0);
150816 +
150817 + /* Add neo1973 gta02 specific widgets */
150818 + for (i = 0; i < ARRAY_SIZE(wm8753_dapm_widgets); i++)
150819 + snd_soc_dapm_new_control(codec, &wm8753_dapm_widgets[i]);
150820 +
150821 + /* add neo1973 gta02 specific controls */
150822 + for (i = 0; i < ARRAY_SIZE(wm8753_neo1973_gta02_controls); i++) {
150823 + err = snd_ctl_add(codec->card,
150824 + snd_soc_cnew(&wm8753_neo1973_gta02_controls[i],
150825 + codec, NULL));
150826 + if (err < 0)
150827 + return err;
150828 + }
150829 +
150830 + /* set up neo1973 gta02 specific audio path audio_mapnects */
150831 + for (i = 0; audio_map[i][0] != NULL; i++) {
150832 + snd_soc_dapm_connect_input(codec, audio_map[i][0],
150833 + audio_map[i][1], audio_map[i][2]);
150834 + }
150835 +
150836 + /* set endpoints to default off mode */
150837 + snd_soc_dapm_set_endpoint(codec, "Stereo Out", 0);
150838 + snd_soc_dapm_set_endpoint(codec, "GSM Line Out",0);
150839 + snd_soc_dapm_set_endpoint(codec, "GSM Line In", 0);
150840 + snd_soc_dapm_set_endpoint(codec, "Headset Mic", 0);
150841 + snd_soc_dapm_set_endpoint(codec, "Handset Mic", 0);
150842 + snd_soc_dapm_set_endpoint(codec, "Handset Spk", 0);
150843 +
150844 + snd_soc_dapm_sync(codec);
150845 +
150846 + return 0;
150847 +}
150848 +
150849 +/*
150850 + * BT Codec DAI
150851 + */
150852 +static struct snd_soc_dai bt_dai =
150853 +{ .name = "Bluetooth",
150854 + .id = 0,
150855 + .type = SND_SOC_DAI_PCM,
150856 + .playback = {
150857 + .channels_min = 1,
150858 + .channels_max = 1,
150859 + .rates = SNDRV_PCM_RATE_8000,
150860 + .formats = SNDRV_PCM_FMTBIT_S16_LE,},
150861 + .capture = {
150862 + .channels_min = 1,
150863 + .channels_max = 1,
150864 + .rates = SNDRV_PCM_RATE_8000,
150865 + .formats = SNDRV_PCM_FMTBIT_S16_LE,},
150866 +};
150867 +
150868 +static struct snd_soc_dai_link neo1973_gta02_dai[] = {
150869 +{ /* Hifi Playback - for similatious use with voice below */
150870 + .name = "WM8753",
150871 + .stream_name = "WM8753 HiFi",
150872 + .cpu_dai = &s3c24xx_i2s_dai,
150873 + .codec_dai = &wm8753_dai[WM8753_DAI_HIFI],
150874 + .init = neo1973_gta02_wm8753_init,
150875 + .ops = &neo1973_gta02_hifi_ops,
150876 +},
150877 +{ /* Voice via BT */
150878 + .name = "Bluetooth",
150879 + .stream_name = "Voice",
150880 + .cpu_dai = &bt_dai,
150881 + .codec_dai = &wm8753_dai[WM8753_DAI_VOICE],
150882 + .ops = &neo1973_gta02_voice_ops,
150883 +},
150884 +};
150885 +
150886 +#ifdef CONFIG_PM
150887 +int neo1973_gta02_suspend(struct platform_device *pdev, pm_message_t state)
150888 +{
150889 + s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 1);
150890 +
150891 + return 0;
150892 +}
150893 +
150894 +int neo1973_gta02_resume(struct platform_device *pdev)
150895 +{
150896 + if(lm4853_state & LM4853_AMP)
150897 + s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 0);
150898 +
150899 + return 0;
150900 +}
150901 +#else
150902 +#define neo1973_gta02_suspend NULL
150903 +#define neo1973_gta02_resume NULL
150904 +#endif
150905 +
150906 +static struct snd_soc_machine neo1973_gta02 = {
150907 + .name = "neo1973-gta02",
150908 + .suspend_pre = neo1973_gta02_suspend,
150909 + .resume_post = neo1973_gta02_resume,
150910 + .dai_link = neo1973_gta02_dai,
150911 + .num_links = ARRAY_SIZE(neo1973_gta02_dai),
150912 +};
150913 +
150914 +/* Audio private data */
150915 +static struct wm8753_setup_data soc_codec_data_wm8753_gta02 = {
150916 + .i2c_bus = 0,
150917 + .i2c_address = 0x1a,
150918 +// .gpio_func[0] = AIC3X_GPIO1_FUNC_DISABLED,
150919 +// .gpio_func[1] = AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT,
150920 +};
150921 +
150922 +static struct snd_soc_device neo1973_gta02_snd_devdata = {
150923 + .machine = &neo1973_gta02,
150924 + .platform = &s3c24xx_soc_platform,
150925 + .codec_dev = &soc_codec_dev_wm8753,
150926 + .codec_data = &soc_codec_data_wm8753_gta02,
150927 +};
150928 +
150929 +
150930 +
150931 +static struct platform_device *neo1973_gta02_snd_device;
150932 +
150933 +static int __init neo1973_gta02_init(void)
150934 +{
150935 + int ret;
150936 +
150937 + if (!machine_is_neo1973_gta02()) {
150938 + printk(KERN_INFO
150939 + "Only GTA02 hardware supported by ASoc driver\n");
150940 + return -ENODEV;
150941 + }
150942 +
150943 + neo1973_gta02_snd_device = platform_device_alloc("soc-audio", -1);
150944 + if (!neo1973_gta02_snd_device)
150945 + return -ENOMEM;
150946 +
150947 + platform_set_drvdata(neo1973_gta02_snd_device,
150948 + &neo1973_gta02_snd_devdata);
150949 + neo1973_gta02_snd_devdata.dev = &neo1973_gta02_snd_device->dev;
150950 + ret = platform_device_add(neo1973_gta02_snd_device);
150951 +
150952 + if (ret)
150953 + platform_device_put(neo1973_gta02_snd_device);
150954 +
150955 + /* Initialise GPIOs used by amp */
150956 + s3c2410_gpio_cfgpin(GTA02_GPIO_HP_IN, S3C2410_GPIO_OUTPUT);
150957 + s3c2410_gpio_cfgpin(GTA02_GPIO_AMP_SHUT, S3C2410_GPIO_OUTPUT);
150958 +
150959 + /* Amp off by default */
150960 + s3c2410_gpio_setpin(GTA02_GPIO_AMP_SHUT, 1);
150961 +
150962 + /* Speaker off by default */
150963 + s3c2410_gpio_setpin(GTA02_GPIO_HP_IN, 1);
150964 +
150965 + return ret;
150966 +}
150967 +
150968 +static void __exit neo1973_gta02_exit(void)
150969 +{
150970 + platform_device_unregister(neo1973_gta02_snd_device);
150971 +}
150972 +
150973 +module_init(neo1973_gta02_init);
150974 +module_exit(neo1973_gta02_exit);
150975 +
150976 +/* Module information */
150977 +MODULE_AUTHOR("Graeme Gregory, graeme@openmoko.org");
150978 +MODULE_DESCRIPTION("ALSA SoC WM8753 Neo1973 GTA02");
150979 +MODULE_LICENSE("GPL");
150980 +
150981 Index: linux-2.6.28/sound/soc/s3c24xx/neo1973_wm8753.c
150982 ===================================================================
150983 --- linux-2.6.28.orig/sound/soc/s3c24xx/neo1973_wm8753.c 2008-12-25 00:26:37.000000000 +0100
150984 +++ linux-2.6.28/sound/soc/s3c24xx/neo1973_wm8753.c 2009-01-02 00:01:58.000000000 +0100
150985 @@ -32,7 +32,7 @@
150986 #include <mach/audio.h>
150987 #include <linux/io.h>
150988 #include <mach/spi-gpio.h>
150989 -
150990 +#include <asm/mach-types.h>
150991 #include <asm/plat-s3c24xx/regs-iis.h>
150992
150993 #include "../codecs/wm8753.h"
150994 @@ -585,7 +585,7 @@ static struct snd_soc_machine neo1973 =
150995 .num_links = ARRAY_SIZE(neo1973_dai),
150996 };
150997
150998 -static struct wm8753_setup_data neo1973_wm8753_setup = {
150999 +static struct wm8753_setup_data soc_codec_data_wm8753_gta01 = {
151000 .i2c_bus = 0,
151001 .i2c_address = 0x1a,
151002 };
151003 @@ -594,7 +594,7 @@ static struct snd_soc_device neo1973_snd
151004 .machine = &neo1973,
151005 .platform = &s3c24xx_soc_platform,
151006 .codec_dev = &soc_codec_dev_wm8753,
151007 - .codec_data = &neo1973_wm8753_setup,
151008 + .codec_data = &soc_codec_data_wm8753_gta01
151009 };
151010
151011 static int lm4857_i2c_probe(struct i2c_client *client,
151012 @@ -676,7 +676,7 @@ static int __init neo1973_init(void)
151013 {
151014 int ret;
151015
151016 - DBG("Entered %s\n", __func__);
151017 + printk(KERN_DEBUG "Entered %s\n", __func__);
151018
151019 if (!machine_is_neo1973_gta01()) {
151020 printk(KERN_INFO
151021 Index: linux-2.6.28/sound/soc/s3c24xx/s3c2443-ac97.c
151022 ===================================================================
151023 --- linux-2.6.28.orig/sound/soc/s3c24xx/s3c2443-ac97.c 2008-12-25 00:26:37.000000000 +0100
151024 +++ linux-2.6.28/sound/soc/s3c24xx/s3c2443-ac97.c 2009-01-02 00:01:58.000000000 +0100
151025 @@ -28,7 +28,7 @@
151026 #include <sound/soc.h>
151027
151028 #include <mach/hardware.h>
151029 -#include <asm/plat-s3c/regs-ac97.h>
151030 +#include <plat/regs-ac97.h>
151031 #include <mach/regs-gpio.h>
151032 #include <mach/regs-clock.h>
151033 #include <mach/audio.h>
151034 Index: linux-2.6.28/sound/soc/s3c24xx/s3c24xx-i2s.c
151035 ===================================================================
151036 --- linux-2.6.28.orig/sound/soc/s3c24xx/s3c24xx-i2s.c 2008-12-25 00:26:37.000000000 +0100
151037 +++ linux-2.6.28/sound/soc/s3c24xx/s3c24xx-i2s.c 2009-01-02 00:01:58.000000000 +0100
151038 @@ -175,7 +175,7 @@ static void s3c24xx_snd_rxctrl(int on)
151039 static int s3c24xx_snd_lrsync(void)
151040 {
151041 u32 iiscon;
151042 - int timeout = 50; /* 5ms */
151043 + int timeout = 5; /* 500us, 125 should be enough at 8kHz */
151044
151045 DBG("Entered %s\n", __func__);
151046
151047 @@ -282,11 +282,14 @@ static int s3c24xx_i2s_trigger(struct sn
151048 case SNDRV_PCM_TRIGGER_START:
151049 case SNDRV_PCM_TRIGGER_RESUME:
151050 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
151051 - if (!s3c24xx_snd_is_clkmaster()) {
151052 - ret = s3c24xx_snd_lrsync();
151053 - if (ret)
151054 - goto exit_err;
151055 - }
151056 + if (!s3c24xx_snd_is_clkmaster())
151057 + /* we ignore the return code, if it sync'd then fine,
151058 + * if it didn't sync, which happens after resume the
151059 + * first time when there was a live stream at suspend,
151060 + * just let it timeout, the stream picks up OK after
151061 + * that and LRCK is evidently working again.
151062 + */
151063 + s3c24xx_snd_lrsync();
151064
151065 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
151066 s3c24xx_snd_rxctrl(1);
151067 @@ -306,7 +309,6 @@ static int s3c24xx_i2s_trigger(struct sn
151068 break;
151069 }
151070
151071 -exit_err:
151072 return ret;
151073 }
151074
151075 Index: linux-2.6.28/sound/soc/s3c24xx/s3c24xx-pcm.c
151076 ===================================================================
151077 --- linux-2.6.28.orig/sound/soc/s3c24xx/s3c24xx-pcm.c 2008-12-25 00:26:37.000000000 +0100
151078 +++ linux-2.6.28/sound/soc/s3c24xx/s3c24xx-pcm.c 2009-01-02 00:01:58.000000000 +0100
151079 @@ -168,7 +168,7 @@ static int s3c24xx_pcm_hw_params(struct
151080 prtd->params->client, NULL);
151081
151082 if (ret < 0) {
151083 - DBG(KERN_ERR "failed to get dma channel\n");
151084 + DBG(KERN_ERR "failed to get dma channel: %d\n", ret);
151085 return ret;
151086 }
151087 }
151088 Index: linux-2.6.28/sound/soc/soc-core.c
151089 ===================================================================
151090 --- linux-2.6.28.orig/sound/soc/soc-core.c 2008-12-25 00:26:37.000000000 +0100
151091 +++ linux-2.6.28/sound/soc/soc-core.c 2009-01-02 00:01:58.000000000 +0100
151092 @@ -1003,6 +1003,38 @@ static ssize_t codec_reg_show(struct dev
151093 }
151094 static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL);
151095
151096 +
151097 +static ssize_t codec_reg_write(struct device *dev,
151098 + struct device_attribute *attr,
151099 + const char *buf, size_t count)
151100 +{
151101 + u32 address;
151102 + u32 data;
151103 + char * end;
151104 + size_t left = count;
151105 + struct snd_soc_device *devdata = dev_get_drvdata(dev);
151106 + struct snd_soc_codec *codec = devdata->codec;
151107 +
151108 + address = simple_strtoul(buf, &end, 16);
151109 + left -= (int)(end - buf);
151110 + while ((*end == ' ') && (left)) {
151111 + end++;
151112 + left--;
151113 + }
151114 + if (!left)
151115 + return count;
151116 + data = simple_strtoul(end, &end, 16);
151117 +
151118 + printk(KERN_INFO"user writes Codec reg 0x%02X with Data 0x%04X\n",
151119 + address, data);
151120 +
151121 + codec->write(codec, address, data);
151122 +
151123 + return count;
151124 +}
151125 +
151126 +static DEVICE_ATTR(codec_reg_write, 0644, NULL, codec_reg_write);
151127 +
151128 /**
151129 * snd_soc_new_ac97_codec - initailise AC97 device
151130 * @codec: audio codec
151131 @@ -1218,6 +1250,9 @@ int snd_soc_register_card(struct snd_soc
151132
151133 mutex_unlock(&codec->mutex);
151134
151135 + err = device_create_file(socdev->dev, &dev_attr_codec_reg_write);
151136 + if (err < 0)
151137 + printk(KERN_WARNING "asoc: failed to add codec sysfs entries\n");
151138 out:
151139 return ret;
151140 }
151141 Index: linux-2.6.28/sound/soc/soc-dapm.c
151142 ===================================================================
151143 --- linux-2.6.28.orig/sound/soc/soc-dapm.c 2008-12-25 00:26:37.000000000 +0100
151144 +++ linux-2.6.28/sound/soc/soc-dapm.c 2009-01-02 00:01:58.000000000 +0100
151145 @@ -1525,6 +1525,56 @@ int snd_soc_dapm_get_pin_status(struct s
151146 EXPORT_SYMBOL_GPL(snd_soc_dapm_get_pin_status);
151147
151148 /**
151149 + * snd_soc_dapm_get_endpoint - get audio endpoint status
151150 + * @codec: audio codec
151151 + * @endpoint: audio signal endpoint (or start point)
151152 + *
151153 + * Get audio endpoint status - connected or disconnected.
151154 + *
151155 + * Returns status
151156 + */
151157 +int snd_soc_dapm_get_endpoint(struct snd_soc_codec *codec,
151158 + char *endpoint)
151159 +{
151160 + struct snd_soc_dapm_widget *w;
151161 +
151162 + list_for_each_entry(w, &codec->dapm_widgets, list) {
151163 + if (!strcmp(w->name, endpoint)) {
151164 + return w->connected;
151165 + }
151166 + }
151167 +
151168 + return 0;
151169 +}
151170 +EXPORT_SYMBOL_GPL(snd_soc_dapm_get_endpoint);
151171 +
151172 +/**
151173 + * snd_soc_dapm_set_endpoint - set audio endpoint status
151174 + * @codec: audio codec
151175 + * @endpoint: audio signal endpoint (or start point)
151176 + * @status: point status
151177 + *
151178 + * Set audio endpoint status - connected or disconnected.
151179 + *
151180 + * Returns 0 for success else error.
151181 + */
151182 +int snd_soc_dapm_set_endpoint(struct snd_soc_codec *codec,
151183 + char *endpoint, int status)
151184 +{
151185 + struct snd_soc_dapm_widget *w;
151186 +
151187 + list_for_each_entry(w, &codec->dapm_widgets, list) {
151188 + if (!strcmp(w->name, endpoint)) {
151189 + w->connected = status;
151190 + return 0;
151191 + }
151192 + }
151193 +
151194 + return -ENODEV;
151195 +}
151196 +EXPORT_SYMBOL_GPL(snd_soc_dapm_set_endpoint);
151197 +
151198 +/**
151199 * snd_soc_dapm_free - free dapm resources
151200 * @socdev: SoC device
151201 *